[Перевод] Зачем нужна нотаризация приложений Apple?

Подписание и «нотариальное заверение» (в дальнейшем мы используем устоявшийся в сообществе термин нотаризация — прим. ред.) приложений и другого исполняемого кода — тема довольно спорная. За последние годы Apple постепенно вводила всё более строгие правила и теперь требует, чтобы разработчики заверяли свои приложения и код, распространяемые даже вне App Store. В этой статье мы попытаемся объяснить, почему это необходимо и как это усиливает безопасность Mac.

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

CDHash: как Mac отслеживает изменения в коде

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

Когда приложение подписывается, вычисляются хэши для различных частей его содержимого, которые затем собираются в «директорию кода». Эта структура данных тоже хэшируется, формируя cdhash, или CDHash. Поскольку это хэш хэшей, он уникально идентифицирует приложение, пакет или другой исполняемый код. CDHash являются частью процесса подписания, и подпись содержит эти CDHash. Они также являются частью процесса нотаризации, в ходе которого автоматизированный сервис компании Apple подписывает CDHash для кода. Так формируется «нотариальный билет», который, как правило, прикрепляется к приложению.

Таким образом, подпись кода и нотаризация обеспечивают два уровня проверки: подпись, прикрепленную к самому коду, и запись, хранящуюся в базе данных Apple.

Неподписанные приложения: почему они небезопасны?

Неподписанные приложения не содержат CDHash, что делает невозможной их проверку: такие приложения могут изменять свое содержимое, маскироваться под другие программы или выполнять вредоносный код. Даже если macOS могла бы создать хэш для такого приложения, нет надёжного способа его проверить, так как его подлинность никак не подтверждается.

Apple Silicon Mac, например, просто не запустят такие неподписанные приложения в отличие от macOS на Intel.

Ad-hoc подпись: полумера без гарантий

С переходом на Apple Silicon разработчики стали по умолчанию подписывать код, даже если у них нет сертифицированной подписи Apple. Они используют так называемые «ad-hoc» сертификаты, которые создаются локально и не привязаны к надежным корневым сертификатам.

Это лучше, чем полностью не подписанный код, так как такой код получает CDHash. Но поскольку любой может создать такие сертификаты, они не обеспечивают надежной проверки изменений. Если вредоносный код меняется и подписывается ad-hoc сертификатом, macOS не сможет его блокировать.

Сертифицированные подписи: не идеальное, но полезное решение

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

Сертификаты позволяют проверять код, но в пределах, заданных его пользователем. CDHashes, собранные с кода, могут быть сохранены, но их происхождение зависит от пользователя сертификата. Ранее сертификаты часто использовались распространителями вредоносного ПО. Скомпрометированные сертификаты отзывались Apple. Но чтобы заблокировать вредоносное ПО, его нужно было обнаружить и идентифицировать. А все это время оно продолжало работать у многих пользователей.

Кроме того, процесс проверки подлинности сертифицированных приложений был не идеальным: накладно проверять каждый сертификат при каждом запуске, поэтому использовался локальный кэш. Это создавало задержки между обнаружением вредоносного кода и его блокировкой.

4ccb8790db69292e6d300f465aeffa0c.jpg

Нотаризация: усиление безопасности

Для решения этих проблем Apple добавила нотаризацию. Нотаризованные приложения имеют следующие преимущества:

  • Apple сохраняет их CDHash в своей базе данных, что позволяет быстрее выполнять проверку и отзывать.

  • Все приложения, прошедшие нотаризацию, проверяются на наличие вредоносного кода, и Apple сохраняет у себя их копии.

  • Если CDHash приложения неизвестен Apple, такой код блокируется macOS при попытке запуска (если пользователь не отключил проверки).

Это обеспечивает более строгий контроль и доказало свою эффективность в борьбе с вредоносным кодом.

Основные достоинства нотаризации для Mac:

  1. Подтверждение, что приложение не менялось с момента сборки.

  2. Проверка в базе данных Apple.

  3. Быстрая блокировка, если выяснится, что приложение вредоносное.

  4. Сохраненная Apple копия кода для более подробного анализа.

  5. Автоматическая проверка всех приложений на признаки вредоносного кода перед выпуском.

Нотаризация Apple на сегодня —  одна из самых надежных систем защиты от вредоносного кода на Mac, и пока её сложно заменить другим, столь же эффективным решением.

© Habrahabr.ru