Notarization (нотаризация) - процедура автоматической проверки программы серверами Apple перед её распространением. Введена в macOS Catalina (2019) как дополнительный уровень защиты к Gatekeeper.
Как работает
Когда разработчик создаёт новую версию своей программы:
- Подписывает её своим Developer ID (платный аккаунт Apple Developer Program)
- Загружает на серверы Apple через
xcrun notarytoolили Xcode - Apple автоматически сканирует код на:
- Если всё чисто - Apple возвращает notary ticket (нотариальный билет)
- Разработчик «прицепляет» этот билет к программе через
xcrun stapler - Готовый файл с билетом распространяется пользователям
Зачем нужна
- Дополнительная защита: даже если разработчик-злоумышленник зарегистрировал Developer ID, Apple успеет обнаружить вредоносное ПО до распространения
- Быстрый отзыв: если позже обнаружится проблема, Apple отзывает notary ticket - пользователи получат предупреждение
- Доверие пользователей: нотаризованная программа запускается без предупреждений Gatekeeper
- Антивирус как сервис: разработчик получает анализ Apple как часть workflow
Что проверяет автоматически
- Известные сигнатуры вирусов из базы Apple
- Использование Hardened Runtime (защита от инъекций кода)
- Отсутствие Get-Task-Allow entitlement (запрет debug в production)
- Корректность подписи всех бинарников в .app
- Целостность Info.plist и других манифестов
НЕ проверяет:
- Реальное поведение программы во время выполнения
- Содержание данных (если программа что-то скачает после установки)
- Логику работы (это не code review)
Что видит пользователь
Программа нотаризована:
- Запускается без предупреждений (если скачана не из интернета)
- При запуске из интернета - быстрое уведомление «Apple подтвердила, что этот код не содержит известных вредоносных программ»
Программа подписана но не нотаризована:
- На macOS Catalina и новее - предупреждение Gatekeeper
- Можно разрешить через Системные настройки → Конфиденциальность и безопасность
Программа без подписи и без notary:
- Жёсткая блокировка
- Нужно либо разрешать через настройки, либо открывать через правый клик → Открыть
Как проверить, нотаризована ли программа
Терминал:
spctl -a -v /Applications/Имя.app
Вывод:
- accepted + source=Notarized Developer ID - нотаризована
- accepted + source=Developer ID - подписана, но не нотаризована
- rejected - подпись отозвана или отсутствует
Также можно посмотреть в Finder: правый клик по .app → «Свойства» → раздел «Где» показывает источник.
Если разработчик не нотаризует
Иногда это случается с:
- Очень старыми программами (до 2019)
- Open-source без активного автора
- Разработчиками без денег на Apple Developer Program ($99/год + время на нотаризацию)
- Программами от российских разработчиков, у которых заблокирован доступ к Apple Developer Program после 2022
В этом случае можно запустить через Open Anyway в Системных настройках, но проявите осторожность.
Связь с другими защитами
1. Скачали программу → стоит флаг com.apple.quarantine
2. Запустили → Gatekeeper проверяет:
├── Подпись → проверка
├── Notarization → проверка
└── XProtect (антивирус Apple) → сканирование
3. Если всё ОК → запуск
4. Дальше работает SIP, App Sandbox, Hardened Runtime
Нотаризация - средний слой в этой цепочке. Без него и Gatekeeper'а защита была бы только на основе подписи - менее надёжно.