
Целостность операционной системы
В основу операционных систем Apple заложены функции обеспечения безопасности. Например, аппаратный корень доверия обеспечивает безопасную загрузку, а процесс обновления ПО позволяет быстро и надежно обновлять систему безопасности. Операционные системы Apple также используют специальные аппаратные возможности чипа, чтобы предотвращать использование уязвимостей во время работы операционной системы. Эти функции среды выполнения защищают целостность доверенного кода во время его выполнения. Операционная система Apple помогает смягчить последствия атак и использования уязвимостей независимо от того, исходят ли они от вредоносного приложения, из интернета или из любого другого источника. Перечисленные здесь средства защиты доступны на устройствах, поддерживающих системы на кристалле Apple, в том числе iOS, iPadOS, macOS на Mac с чипом Apple, tvOS, visionOS и watchOS.
Функция | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Обеспечение целостности памяти с помощью расширения улучшенной маркировки памяти |
|
|
|
|
|
|
|
1. Монитор защиты таблицы страниц (SPTM) поддерживается в системах на кристалле A15 и новее, а также M2 и новее. Он заменяет уровень защиты страниц на поддерживаемых платформах.
2. Уровень защиты страниц (PPL) и монитор защиты таблицы страниц (SPTM) требуют выполнения только подписанного и надежного кода на всех платформах, кроме macOS (система macOS разработана для выполнения любого кода). Все остальные инструменты безопасности, в том числе защита таблиц страниц, применяются на всех поддерживаемых платформах.
Защита целостности ядра
После завершения инициализации ядра операционной системы включается функция защиты целостности ядра (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 | Адрес хранилища |
Указатель дескриптора блока | DA | Адрес хранилища + 0xC0BB |
Кэш метода Objective-C | IB | Адрес хранилища + класс + вариант |
Isa‑указатель Objective‑C | DA | Адрес хранилища + 0x6AE1 |
Суперуказатель Objective‑C | DA | Адрес хранилища + 0xB5AB |
ivars Objective‑C типа селектора | DB | Адрес хранилища + 0x57C2 |
Указатель данных класса Objective‑C, доступный только для чтения | DA | Адрес хранилища + 0x61F8 |
Записи таблицы виртуальных методов C++ | IA | Адрес хранилища + хеш (искаженное имя метода) |
Указатели таблицы виртуальных методов C++ | DA | Адрес хранилища + хеш (искаженное базовое имя V‑table) |
Вычисленная метка перехода | IA | Хеш (имя функции) |
Состояние потока ядра | GA | • |
Регистры состояния пользовательского потока | IA | Адрес хранилища |
Значение подписи хранится в неиспользуемых битах дополнения в верхних разрядах 64-битного указателя. Перед использованием указателя выполняется проверка подписи и восстановление битов дополнения. Это помогает убедиться, что указатель указывает на действительный адрес. В случае неудачной проверки действие прерывается. Такая проверка увеличивает сложность проведения многих атак, например, атаки методом возвратно-ориентированного программирования (ROP), при которой злоумышленник пытается обманным образом вынудить устройство выполнить существующий вредоносный код, манипулируя адресами возвратов функций в стеке.
Уровень защиты страниц
Уровень защиты страниц (PPL) в iOS, iPadOS, visionOS и watchOS предотвращает изменение кода в пользовательском пространстве после завершения проверки подписи кода. Уровень защиты страниц (PPL), основанный на KIP и быстром ограничении разрешений, управляет переопределениями разрешений таблицы страниц, гарантируя, что только PPL может изменять защищенные страницы, содержащие код пользователя и таблицы страниц. Система значительно сокращает уязвимую область, помогая обеспечить целостность кода в масштабе всей системы даже в условиях взлома ядра. Этого средства защиты нет в macOS, поскольку PPL применим только в системах, требующих подписания абсолютно всего исполняемого кода.
Монитор защиты таблицы страниц и Монитор доверенного выполнения
Монитор защиты таблицы страниц (SPTM) и Монитор доверенного выполнения (TXM) в iOS, iPadOS, macOS и visionOS, работая совместно, помогают защищать от изменений таблицы страниц пользовательских процессов и процессов ядра. Это работает, даже если взломщик имеет возможность записи в ядро и может обойти защиту потока управления Для этого SPTM задействует более высокий уровень полномочий, чем у ядра, а TXM с более низкими полномочиями обеспечивает соблюдение политик, управляющих выполнением кода. Эта система разработана таким образом, что взлом TXM не приводит к автоматическому обходу SPTM благодаря разделению полномочий и управлению доверием между двумя компонентами. В системах на кристалле A15 и новее, а также M2 и новее функция SPTM (в сочетании с TXM) заменяет собой PPL: она уменьшает поверхность атаки, не зависящую от доверия ядра даже на ранних этапах загрузки системы. SPTM задействует новые примитивы для микрочипа — они стали результатом развития Быстрых ограничений разрешений, используемых PPL, и доступны только в процессорах, перечисленных в таблице выше.
Обеспечение целостности памяти
Обеспечение целостности памяти (MIE) — это комплексная защита памяти на платформах Apple, доступная в процессорах A19, M5 и новее. Технология MIE построена на надежной базе безопасных распределителей памяти Apple в сочетании с расширением улучшенной маркировки памяти (EMTE) в синхронном режиме и поддерживается обширными политиками обеспечения конфиденциальности меток. Технология MIE встроена в чип Apple и предлагает не имеющую аналогов, всегда включенную защиту ключевых атакуемых областей, в том числе ядра, без ущерба для производительности и удобства работы пользователей. Подробная информация приведена в статье Обеспечение целостности памяти: комплексный подход к безопасности памяти на устройствах Apple (на английском языке) в блоге Apple об исследованиях в сфере безопасности.
Расширение маркировки памяти
В 2019 году компания ARM опубликовала спецификацию для расширения маркировки памяти (MTE) — инструмента, который помогает оборудованию находить повреждения памяти. MTE — это система маркировки памяти и ее проверки, в которой каждое выделение памяти помечается криптографическим ключом. Оборудование гарантирует, что последующие запросы на доступ к памяти будут выполнены, только если в запросе содержится правильный криптографический ключ. Если криптографические ключи не совпадают, происходит сбой приложения, и это событие регистрируется. Это позволяет разработчикам идентифицировать повреждения памяти сразу при их возникновении.
Расширение улучшенной маркировки памяти
EMTE закрывает пробелы, не позволяющие MTE стать активной защитой, в том числе обеспечивает поддержку только более безопасного синхронного режима. Кроме того, для доступа к немаркированной памяти из маркированного региона памяти требуется информация о маркировке этого региона. Поэтому злоумышленникам значительно труднее превратить ошибки выхода за пределы диапазона в динамически маркированной памяти в способ обойти EMTE, напрямую изменяя выделение немаркированной памяти.
Обеспечение конфиденциальности меток
Обеспечение конфиденциальности меток защищает работу безопасных распределителей памяти от технических угроз и гарантирует конфиденциальность меток EMTE, в том числе от атак по сторонним каналам и атак путем спекулятивных вычислений. Монитор защиты таблицы страниц защищает вспомогательное хранилище распределителя ядер и хранилище меток. Система также гарантирует, что при доступе ядра к памяти от имени приложения применяются те же правила проверки меток, что и для пользовательского пространства. Обеспечение конфиденциальности меток также помогает избежать утечки меток из‑за атак временным анализом и спекулятивных атак, а также включает защиту против Spectre V1.