Security for all - #12 - 21 июня 2018

Сертификаты - Инфраструктура публичных ключей

Сегодня

Уязвимость в Cortana позволяет сменить пароль на заблокированной системе, Microsoft исправила 50 уязвимостей в рамках вторника патчей, некоторые продукты и сервисы неправильно проверяют подписи приложений для macOS.

В качестве основной темы я решил рассказать о сертификатах.

Вспомогательные темы

API - application programming interface - дословно программный интерфейс приложения. Набор классов, функций, констант предоставляемых приложением, для использования во внешних программах. По сути своей - набор соглашений, описывающий возможности взаимодействия приложения с внешними программами.

NTFS - new technology file system. Файловая система, которая используется в операционных системах Windows.

PowerShell - средство автоматизации от компании Microsoft. Состоит из оболочки с интерфейсом командной строки и языка сценариев.

Новости

Уязвимость в Cortana позволяет сменить пароль на заблокированной системе

Компания Microsoft исправила ошибку в голосовом помощнике Cortana. Проблему обнаружил специалист компании Symantec Седрик Кочин (Cedric Cochin). Данная уязвимость с кодом CVE-2018-8140 классифицируется как ошибка повышения привилегий.

Исследователь сообщает, что проблема возникает из-за того, к каким функциям Cortana дает доступ на заблокированной машине. Пример атаки был показан на видео. Голосовой помощник был активирован и ему был задан вопрос. Сразу после этого псевдо атакующий стал набирать на клавиатуре фразу. Вне зависимости от набираемого текста появлялось окно поиска. Из этого окна, например, можно запустить команду. В качестве примера атаки, к устройству подключили USB флешку. Windows показало окно, с информацией о подключенном устройстве, в котором была указана буква диска этого устройства. Располагая данной информацией исследователь смог в уже упомянутой строке поиска набрать команду запуска PowerShell и передал в качестве параметра путь к файлу, который он сам и поместил на флешку. Данный файл выполнился и поменял пароль пользователя. После чего атакующий ввел новый пароль и вошел в систему.

https://www.bleepingcomputer.com/news/security/cortana-hack-lets-you-change-passwords-on-locked-pcs/

MS исправила 50 уязвимостей в рамках вторника патчей

Исправление данной проблемы было выпущено в рамках вторника патчей. Всего было исправлено 50 уязвимостей, 11 из которых считаются критическими. Помимо уже привычных компонентов, таких как сама Windows, браузеры Internet Explorer и Edge, MS Office и скриптовый движок, в списке присутствует и компонент, отвечающий за файловую систему NTFS. Из-за ошибки в нем, локальный атакующий мог обойти ограничения привилегий.

Если вы еще не обновили свои устройства, самое время это сделать.

https://www.bleepingcomputer.com/news/microsoft/microsoft-june-2018-patch-tuesday-fixes-50-security-issues/

Неправильная проверка подписи в некоторых продуктах под macOS

Исследователь Джош Питтс (Josh Pitts) из компании Okta обнаружил, что некоторые сторонние продукты для macOS неправильно проверяют цифровую подпись. Среди уязвимых продуктов присутствуют сниффер Little Snitch, VirusTotal, и некоторые утилиты от Патрика Вардла (Patrick Wardle) - известного исследователя безопасности, специализирующегося на системах Apple. Одна из утилит Патрика TaskExplorer, позволяет видеть все запущенные процессы и валидность подписи исполняемых файлов, относящихся к этим процессам.

Как обнаружил Джош Питтс, используемую некоторыми приложениями технику проверки цифровой подписи можно обойти. Для этого атакующему нужно использовать специальный формат файлов, который называется Universal (универсальный) или Fat (дословно жирный). В таких файлах может содержаться несколько исполняемых файлов, созданных под разные процессорные архитектуры, например, i386, x86_64 или PPC.

Проблема возникает из-за различий в том, как система загружает исполняемый код из таких файлов и как проверяется их подпись.

Для осуществления атаки нужно сформировать файл так, чтобы первый исполняемый файл был подписан Apple. Его архитектура может быть любой; второй, вредоносный файл, должен быть самоподписан и иметь архитектуру i386, если атакуемая система x86_64; в заголовке Fat для первого файла тип процессора должен иметь некорректное значение или не нативное для атакуемой системы, например PPC для цели x86_64 Если не передать правильные параметры в функции проверки, то API проверит корректность цифровой подписи первого файла, после этого будут проверены идентификаторы команды (Team identifier) во всех файлах, но корневой сертификат проверяться при этом не будет.

Исследователь сделал несколько специально сформированных файлов, чтобы разработчики могли проверить наличие проблемы в своем продукте.

Рекомендации по правильной проверке ищите в блоге компании Okta: https://www.okta.com/security-blog/2018/06/issues-around-third-party-apple-code-signing-checks/

https://thehackernews.com/2018/06/apple-mac-code-signing.html

Public Key Infrastructure

Для того, чтобы проще было понимать, что такое цифровые подписи и как они проверяются, я решил, что полезно будет рассказать про сертификаты и инфраструктуру публичных ключей (PKI - public key infrastructure).

Сертификаты используются для двух основных целей. установление защищенного канала передачи данных; подтверждение источника данных.

Грубо говоря, сертификат - это просто набор данных, соответствующих определенному формату. Самая близкая аналогия из реального мира, которую я смог подобрать,, - доверенность. В доверенности указано кто ее выдает, для кого, на какой срок, что владелец доверенности может делать (или чего он делать не может). Также на доверенности должна присутствовать подпись или печать лица, выдавшего доверенность.

В случае с веб сервером, его сертификат может быть использован для шифрования данных между этим сервером и клиентом. Владелец такого сертификата не может выписывать другие сертификаты. Ограничения в сертификате не дают ему на это права. Можно сказать, что у сервера есть доверенность на осуществление шифрования. Бывают также сертификаты, которые дают, например, право выписывать другие сертификаты, подписывать приложения, сообщения электронной почты.

Когда браузер подключается к серверу, сервер представляет ему свой сертификат. Также как и с доверенностью, в сертификате прописано, какой сайт может использовать этот сертификат. Если адрес сайта не совпадает с тем, что прописано в сертификате, браузер выдает об этом предупреждение. Вы же тоже не будете доверять человеку, который показывает вам доверенность, выписанную на кого-то другого?

Доверие

Но допустим я вам показываю доверенность, которая выписана на мое имя, в ней говорится, что я могу делать то, это, пятое, десятое. Достаточно ли это для доверия? Определенно нет. Ведь я мог сам себе выписать такую доверенность. Значит должен быть кто-то, кто гарантирует подлинность.

Удостоверяющие центры

Также и в случае с сертификатами. Для обеспечения работоспособности этой схемы выбрали удостоверяющие центры. Их сертификаты присутствуют в системе или приложении и используются как источник или корень доверия. Поэтому сертификаты удостоверяющих центров еще называют корневыми.

Чаще всего удостоверяющий центр не выписывает сертификаты конечным пользователям сам. Вместо этого, он подписывает сертификат промежуточного центра, который будет принимать запросы от конечных пользователей и выписывать им сертификаты. В результате получается цепочка: корневой сертификат, промежуточный и конечный. Иногда промежуточных сертификатов бывает несколько.

Проверка сертификатов

Получив сертификат от сервера браузер должен проверить всю цепочку. Сначала он проверяет адрес сайта, указанный в сертификате, срок действия и некоторые другие параметры. Далее он проверяет промежуточный сертификат, и в конце корневой. Если корневой сертификат отсутствует в списке доверенных, например, если появился новый удостоверяющий центр, о котором приложение или система не знает, то ко всей цепочки доверия не будет, и браузер предупредит пользователя.

Публичные ключи

Механизм проверки целостности данных и способы установления зашифрованных соединений основываются на асимметричном шифровании. В нем используются приватные (или закрытые) и публичные (или открытые) ключи. В сертификатах всегда содержатся публичные ключи. Поэтому схема доверия, основанная на центрах сертификации и называется - инфраструктура публичных ключей.


Как видите, в основе механизмов обеспечения безопасности обычно лежат достаточно простые принципы. Поэтому старайтесь сначала смотреть на картину в целом, разберитесь с общей концепцией. Когда общие принципы понятны, можно переходить к мелким деталям и нюансам, без которых сложно обойтись в любой системе.

На сегодня у меня все. Не бойтесь изучать что-то новое. До следующей недели.