Целостность операционной системы
В основу операционных систем Apple заложены функции обеспечения безопасности. Аппаратный корень доверия используется для обеспечения безопасной загрузки, а процесс безопасного обновления ПО делает возможным быстрое и безопасное обновление системы безопасности. Операционные системы Apple также используют специальные аппаратные возможности чипа, что способствует предупреждению использования уязвимостей во время работы системы. Эти функции среды выполнения защищают целостность доверенного кода во время его выполнения. Если пояснять вкратце, операционная система Apple помогает смягчить последствия атак и использования уязвимостей независимо от того, исходят ли они от вредоносного приложения, из интернета или любого другого канала. Перечисленные здесь средства защиты доступны на устройствах с поддерживаемыми системами на кристалле, разработанными компанией Apple, включая iOS, iPadOS, tvOS, watchOS, а теперь и macOS на компьютере Mac с чипом Apple.
Функция | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
См. примечание 1 ниже. | |||||
См. примечание 2 ниже. |
Примечание 1. Уровень защиты страниц (PPL) требует, чтобы платформа исполняла только подписанный и надежный код. Эта модель безопасности не применяется в macOS.
Примечание 2. Монитор защиты таблицы страниц (SPTM) поддерживается на A15, A16 и A17 и заменяет уровень защиты страниц на поддерживаемых платформах.
Защита целостности ядра
После завершения инициализации ядра операционной системы включается функция защиты целостности ядра (KIP), которая предотвращает внесение изменений в ядро и код драйвера. Контроллер памяти предоставляет защищенный регион физической памяти, который используется iBoot для загрузки ядра и расширений ядра. После завершения загрузки контроллер памяти отклоняет все запросы записи в защищенный регион физической памяти. Диспетчер памяти (MMU) процессора приложений настроен, чтобы способствовать предотвращению сопоставления привилегированного кода из физической памяти за пределами защищенного региона, а также чтобы способствовать предотвращению доступных для записи сопоставлений физической памяти внутри региона памяти ядра.
Чтобы предотвратить возможность перенастройки, оборудование, используемое для работы KIP, блокируется после завершения процесса загрузки.
Быстрые ограничения разрешений
В системах на кристалле Apple A11 Bionic и S3 был представлен новый аппаратный примитив. Этот примитив — быстрые ограничения разрешений — включает реестр ЦП для быстрого ограничения разрешений на уровне потока. Используя быстрые ограничения разрешений (также известные как регистры APRR), поддерживаемые операционные системы могут удалять из памяти разрешения на выполнение, не тратя время на системный вызов и проход по таблице страниц или ее сброс. Эти регистры обеспечивают дополнительный уровень защиты от сетевых атак, в частности компилируемых во время выполнения (точно в нужный момент), поскольку память не позволяет исполнять код в то время, когда происходит чтение или запись.
Защита целостности системного сопроцессора
Прошивка сопроцессоров, таких как Secure Enclave, процессор датчика изображений и сопроцессор движения, выполняет многие критически важные системные задачи. Поэтому ее безопасность имеет решающее значение для безопасности всей системы. Чтобы предотвратить изменение прошивки сопроцессора, Apple использует механизм, называемый защитой целостности системного сопроцессора (SCIP).
Работа SCIP во многом похожа на работу функции защиты целостности ядра (KIP). Во время загрузки iBoot загружает прошивку каждого сопроцессора в защищенный регион памяти, который зарезервирован для этого сопроцессора и отделен от региона KIP. iBoot настраивает диспетчеры памяти каждого сопроцессора, чтобы помочь предотвращать следующие события:
исполняемые сопоставления за пределами выделенной части защищенного региона памяти;
доступные для записи сопоставления внутри выделенной части защищенного региона памяти.
Кроме того, операционная система Secure Enclave настраивает защиту целостности системного сопроцессора для Secure Enclave во время загрузки. После завершения процесса загрузки оборудование, используемое для работы SCIP, блокируется. Эта мера направлена на то, чтобы предотвратить возможность перенастройки.
Коды аутентификации указателя
Коды аутентификации указателя (PAC) используются для защиты от атак, связанных с использованием повреждения памяти. Системное программное обеспечение и встроенные приложения используют PAC, что помогает предотвращать изменения указателей функций и адресов возвратов (указателей кода). PAC использует пять секретных 128-битных значений для подписания инструкций и данных ядра, а каждый процесс пользовательского пространства имеет свои собственные ключи B. К объектам добавляется случайное значение («соль») и подпись, как указано в таблице ниже.
Элемент | Ключ | Соль |
---|---|---|
Адрес возврата функции | IB | Адрес хранилища |
Указатели функции | IA | 0 |
Функция вызова блока | IA | Адрес хранилища |
Кэш метода Objective-C | IB | Адрес хранилища + класс + вариант |
Записи таблицы виртуальных методов C++ | IA | Адрес хранилища + хеш (искаженное имя метода) |
Вычисленная метка перехода | IA | Хеш (имя функции) |
Состояние потока ядра | GA | • |
Регистры состояния пользовательского потока | IA | Адрес хранилища |
Указатели таблицы виртуальных методов C++ | DA | 0 |
Значение подписи хранится в неиспользуемых битах дополнения в верхних разрядах 64-битного указателя. Перед использованием указателя выполняется проверка подписи и восстановление битов дополнения. Это помогает убедиться, что указатель указывает на действительный адрес. В случае неудачной проверки действие прерывается. Такая проверка увеличивает сложность проведения многих атак, например, атаки методом возвратно-ориентированного программирования (ROP), при которой злоумышленник пытается обманным образом вынудить устройство выполнить существующий вредоносный код, манипулируя адресами возвратов функций в стеке.
Уровень защиты страниц
Уровень защиты страниц (PPL) в iOS, iPadOS и watchOS разработан для того, чтобы предупредить изменение кода в пользовательском пространстве после завершения проверки подписи кода. Уровень защиты страниц (PPL), в основе которого лежит защита целостности ядра и быстрые ограничения разрешений, управляет переопределениями разрешений таблицы страниц, гарантируя, что только PPL может изменять защищенные страницы, содержащие код пользователя и таблицы страниц. Система значительно сокращает уязвимую область, помогая обеспечить целостность кода в масштабе всей системы даже в условиях взлома ядра. Этого средства защиты нет в macOS, поскольку PPL применим только в системах, требующих подписания абсолютно всего исполняемого кода.
Монитор защиты таблицы страниц и Монитор доверенного выполнения
Монитор защиты таблицы страниц (SPTM) и Монитор доверенного выполнения (TXM), работая совместно, помогают защищать от изменений таблицы страниц пользовательских процессов и процессов ядра, даже если взломщик имеет возможность записи в ядро и может обойти защиту потока управления. Для этого SPTM задействует более высокий уровень полномочий, чем у ядра, а TXM с более низкими полномочиями обеспечивает соблюдение политик, управляющих выполнением кода. Эта система разработана таким образом, что взлом TXM не приводит к автоматическому обходу SPTM благодаря разделению полномочий и управлению доверием между двумя компонентами. На устройствах с чипами A15, A16 и A17 функция SPTM (в сочетании с TXM) заменяет собой PPL: она уменьшает поверхность атаки, не зависящую от доверия ядра даже на ранних этапах загрузки системы. SPTM также задействует новые примитивы для микрочипа — они стали результатом развития Быстрых ограничений разрешений, используемых PPL.