Доверенные кэши
Одним из объектов, включенных в последовательность безопасной загрузки, является статический доверенный кэш. Это доверенная запись всех двоичных файлов Mach-O, которые размещены на подписанном системном томе. Каждый файл Mach‑O представлен хешем каталога кода. Перед вставкой в доверенный кэш выполняется сортировка хешей для обеспечения эффективного поиска. Каталог кода является результатом подписания, выполненного codesign(1)
. Для применения доверенного кэша необходимо, чтобы защита целостности системы (SIP) оставалась включена. Для отключения применения доверенного кэша на Mac с чипом Apple требуется настроить безопасную загрузку, установив низкий уровень безопасности.
При исполнении двоичного файла (в ходе создания нового процесса или сопоставления исполняемого кода с существующим процессом) его каталог кода извлекается и хешируется. Если полученный хеш будет найден в доверенном кэше, то исполняемым сопоставлениям, созданным для двоичного файла, будут предоставлены полномочия платформы, то есть они могут обладать любыми правами и выполняться без дальнейшей проверки подлинности подписи. В этом состоит отличие от компьютера Mac с процессором Intel, где полномочия платформы передаются содержимому операционной системы с помощью сертификата Apple, который подписывает двоичные файлы. (Этот сертификат не ограничивает перечень прав, которыми может обладать двоичный файл.)
Для исполнения неплатформенных двоичных файлов (в том числе заверенного стороннего кода) у них должны быть действительные цепочки сертификатов, а права, которыми они могут обладать, ограничены профилем подписи, выданным разработчику в рамках программы Apple Developer Program.
Все двоичные файлы, поставляемые с macOS, подписаны с помощью идентификатора платформы. На Mac с чипом Apple этот идентификатор указывает, что даже в том случае, если двоичный файл подписан Apple, для исполнения такого файла хеш каталога его кода должен находиться в доверенном кэше. На Mac с процессором Intel идентификатор платформы используется для целевого отзыва конкретных двоичных файлов из более старой версии macOS. Этот целевой отзыв помогает предотвратить исполнение этих двоичных файлов в более новых версиях.
Статический доверенный кэш привязывает набор двоичных файлов к заданной версии macOS. Это помогает предотвратить перенос двоичных файлов, имеющих законную подпись Apple, из старых операционных систем в новые, чтобы злоумышленник не мог этим воспользоваться.
Код платформы, поставляемый вне операционной системы
Некоторые двоичные файлы от Apple, такие как для Xcode и стека инструментов разработчика, не подписаны с использованием идентификатора платформы. Несмотря на это, они могут исполняться с полномочиями платформы на Mac с чипом Apple и Mac с чипом Apple T2. Поскольку это программное обеспечение платформы поставляется независимо от macOS, на него не действует процедура отзыва, связанная со статическим доверенным кэшем.
Загружаемые доверенные кэши
Определенные программные пакеты Apple поставляются с загружаемыми доверенными кэшами. У этих кэшей такая же структура данных, как у статического доверенного кэша. При этом есть только один статический доверенный кэш, и после завершения ранней инициализации ядра содержимое этого кэша гарантированно находится в диапазонах памяти, доступных только для чтения, а загружаемые доверенные кэши добавляются в систему во время выполнения.
Эти доверенные кэши проходят аутентификацию либо с помощью того же механизма, который аутентифицирует загрузочную прошивку (персонализация с помощью службы доверенной подписи Apple), либо как объекты с глобальной подписью (такие подписи не привязывают их к конкретному устройству).
Примером персонализированного доверенного кэша может служить кэш, который поставляется с образом диска для выездной диагностики компьютера Mac с чипом Apple. Этот доверенный кэш персонализируется вместе с образом диска и загружается в ядро компьютера Mac, когда тот загружается в режиме диагностики. Благодаря этому доверенному кэшу программное обеспечение из образа диска может запускаться с полномочиями платформы.
Доверенный кэш с глобальной подписью поставляется, например, с обновлениями программного обеспечения macOS. Благодаря этому доверенному кэшу определенный фрагмент кода в обновлении программного обеспечения — управляющий модуль обновления — может запускаться с полномочиями платформы. Управляющий модуль обновления выполняет любые действия по обновления программного обеспечения, которые операционная система не может выполнить согласованно в разных версиях.