---
# System prepended metadata

title: 'Module #1'

---

# Module #1

## История платформы

Мобильная операционная система, выпущена в 2007 году. Распространяется только для устройств, которые были произведены Apple.

Использует ядро XNU. Имеет общую кодовую базу с ОС macOS. Обе ОСи разработаны из OS X. В своей работе использует компоненты Darwin.

![DarwinArch](https://i.imgur.com/pzsGsb2.png)

На 2021 год версия ядра Darwin 21.0.0.

Крайняя версия iOS 15 на 2021 год.


## Модель безопасности
Безопасность iOS основана на том простом факте, что Apple контролирует как создание устройства, так и создание ОС. Для обеспечения полного цикла защиты данных и ОС от эксплуатации уязвимостей используется большое количество технологий. Технологии делятся на следующие группы:

- Hardware Security
- Secure Boot
- Code Signing
- Sandbox
- Encryption and Data Protection
- General Exploit Mitigations

Графически можно изобразить так:

![iOS_Security_Architecture](https://i.imgur.com/06BFQn9.png)

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

![](https://i.imgur.com/RXJ6Btl.png)


### Защищенный запуск

![SecBoot](https://i.imgur.com/wEHy5wM.jpg)

Процесс запуска ОС защищен от компрометации. Сделано это для того чтобы исключить подмену системного ПО и компроментацию системы. Внутри частей процесса запуска, а именно в BootROM содержится Apple Root CA. Сертификат добавен в чип на этапе проектирования устройства. Его нельзя вытащить ни одним интерфейсом, ни отладкой, ни функционально.

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

### Аппаратное хранилище ключей

Каждое устройство на уровне чиап содержит 2 AES 256 битных ключа. Ключи представляют собой уникальный идентификатор устройства (UIDs) и групповой идентификатор устройства (GIDs). Ключи хранятся в Application Processor (AP) или Secure Enclave Processor (SEP). Доступ к ключам есть только у чипа, который занимается процедурами щифрования.

GID используется для процедур проверки прошивки устройства.
UID формируется пользователем при включении устройства и попадает в хранилище с первым запуском. Поэтому шифрование, которое будет работать на устройстве не может вскрыть и сама Apple.

В отличии от других ОС, есть функции по полностью безопасному удалению данных. Данные нельзя восстановить.

### Песочница приложений

Песочница приложений это система разграничения доступа. Применены разграничения на уровне ядра. Задача песочницы - сократить поверхность атаки на приложения.

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

Приложение, которое запускается в ОС, имеет ограничения на использование механизмов и ресурсов.
К ресурсам можно отнести:
    - файлы
    - сетевые интерфейсы
    - IPC
    - общая память
![](https://i.imgur.com/rkDzC1l.png)

Обычно ограничения работают так:
* приложение может получать доступ толко в своей рабочей директории:
    - /var/mobile/Containers/Bundle/Application/ или /var/containers/Bundle/Application/
    - функции работы с памятьюперехватываются при вызове ядром и проходят процедуру верификации на доступ
* запущенные процессы не могут получать доступ к другим приложениям, даже если имеют один и тот же PID
* получение доступа к железу возможно только с использованием официальных фреймворков

### Защита данных и шифрование

ОС использует несколько подходов к шифрованию:

- FairPlay Code Encryption - применение шифрования ко всем приложениям, которые скачиваются пользователем из AppStore. Из-за этого критично использование реального устройства для тестирования приложений. Проще всего сдампить приложение уже в расшифрованной виде.

Шифрование было включено на постоянной основе в ОС только с iPhone 3GS. Шифрованием занимается отдельный чип. Алгоритмы щифрования не имеют ключа по-умолчанию для шифрования пользовательских данных. Ключ заполняется с установкой пин кода на устройство.

Шифрование к пользовательским данным применяется в несколько этапов. На уровне файловой системы, и на уровне самих файлов.

Для каждого файла существует свой собственный ключ шифрования. Так же шифруется сам ключ и фрагменты файлов по отдельности.

![](https://i.imgur.com/WcoYUlz.png)


### Средства для защиты от экспллуатации

Операционная система включает следующие технологии по противодействию использования уязвимостей:

- ASLR
- NX Bit

Так же есть имплементации различных защит в зависимости от используемого процессора. Каждая из них обходится исследователями по ИБ в течении 1-2 лет. 

Сама платформа интересна с точки зрения поиска уязвимостей. Поэтому список защит постоянно пополняется.

## Что остается уязвимым в приложениях

Атакимогут быть произведены на все компоненты приложения, включая материалы, которые используются для его работы. Приложение считается уязвимым если:

- приложение не валидирует данные для IPC взаимодействия или URL схемы
- приложение не валидирует все данные, которые передает пользователь
- приложение не валидирует данные, которые загружаются в WebView
- приложение позволяет произвести атаку типа MitM
- приложение не хранит безопасно данные пользователя и не проверяет данные, которые используются для работы приложения
- приложение не проверяет окружение на эмуляцию и использование jailbreak устройств
- приложение не применяет антиотладочных методов

# Настройка тестовой среды

## Основное устройство

Для проведения тестирования приложений можно использовать любую ОС. В каждом отдельном случае будет отличаться настройка. Предпочтительнее использовать - macOS.

## Инструменты, которые важно поставить на устройство и ОС

- Cydia
- openSSH server
- terminal
- PassionFruite
- frida server
- objection
- IDA Pro
- class-dump
- Xcode+tools

Наличие инструментов очень упростит процедуру проведения тестирования, так как используемые приложения в ОС имеют нетривиальный формат.

## Поставить jailbreak и вспомогательные приложения

1. Ставим [checkrain]https://checkra.in
2. Запускаем Loader на домашнем экране
3. Запускаем установку Cydia

### Установка приложений

Все приложения можно найти в Cydia

1. openSSH
2. terminal
3. Frida
    1. Запустить Cydia
    2. Добавить репозиторий Frida (Manage -> Sources -> Edit -> Add  https://build.frida.re)
    3. Обновить репозитории, установить Frida


## Как установить тестовое приложение на устройство

Существует несколько методов. Мы будем использовать 2:

- uicache
    * Копировать ipa файл на устройство
    * Распаковать файл
    * Скопировать содержимое директории Payload в /Applications
    * запустить команду uicache

- Fliza
    * Копировать ipa файл на устройство
    * Выбрать файл в интерфейсе приложения, подтвердить установку


## Какие приложения для тестов будем использовать?

https://github.com/OWASP/iGoat-Swift
https://github.com/prateek147/DVIA-v2
https://github.com/WaTF-Team/WaTF-Bank
https://github.com/lucideus-repo/UnSAFE_Bank


Так же будут задействованы простые crackme ipa файлы которых будут выданы на занятии.
https://github.com/OWASP/owasp-mstg/tree/master/Crackmes

## Тест на проверку работоспособности стенда

Установить приложения на устройство и запустить. 

## Справочная информация

- https://developer.apple.com/documentation/ios-ipados-release-notes
- https://github.com/apple-oss-distributions/xnu/tree/rel/xnu-8020
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/TypesSecVuln.html
