# Module #1
## История платформы
Мобильная операционная система, выпущена в 2007 году. Распространяется только для устройств, которые были произведены Apple.
Использует ядро XNU. Имеет общую кодовую базу с ОС macOS. Обе ОСи разработаны из OS X. В своей работе использует компоненты Darwin.

На 2021 год версия ядра Darwin 21.0.0.
Крайняя версия iOS 15 на 2021 год.
## Модель безопасности
Безопасность iOS основана на том простом факте, что Apple контролирует как создание устройства, так и создание ОС. Для обеспечения полного цикла защиты данных и ОС от эксплуатации уязвимостей используется большое количество технологий. Технологии делятся на следующие группы:
- Hardware Security
- Secure Boot
- Code Signing
- Sandbox
- Encryption and Data Protection
- General Exploit Mitigations
Графически можно изобразить так:

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

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

Процесс запуска ОС защищен от компрометации. Сделано это для того чтобы исключить подмену системного ПО и компроментацию системы. Внутри частей процесса запуска, а именно в BootROM содержится Apple Root CA. Сертификат добавен в чип на этапе проектирования устройства. Его нельзя вытащить ни одним интерфейсом, ни отладкой, ни функционально.
Каждый отдельный модуль убеждается в целостности соседа и предоставляет свой функционал. Если на каком-то из этапов происходит ошибка или не совпадает подпись - устройство уходит в режим DFU.
### Аппаратное хранилище ключей
Каждое устройство на уровне чиап содержит 2 AES 256 битных ключа. Ключи представляют собой уникальный идентификатор устройства (UIDs) и групповой идентификатор устройства (GIDs). Ключи хранятся в Application Processor (AP) или Secure Enclave Processor (SEP). Доступ к ключам есть только у чипа, который занимается процедурами щифрования.
GID используется для процедур проверки прошивки устройства.
UID формируется пользователем при включении устройства и попадает в хранилище с первым запуском. Поэтому шифрование, которое будет работать на устройстве не может вскрыть и сама Apple.
В отличии от других ОС, есть функции по полностью безопасному удалению данных. Данные нельзя восстановить.
### Песочница приложений
Песочница приложений это система разграничения доступа. Применены разграничения на уровне ядра. Задача песочницы - сократить поверхность атаки на приложения.
Технология защиты является ядром всей безопасности приложений. Все установленые пользователем приложения запускаются внутри нее. В системе есть приложения, которые предустановлены, могут иметь больше привелегий и не находиться в песочнице.
Приложение, которое запускается в ОС, имеет ограничения на использование механизмов и ресурсов.
К ресурсам можно отнести:
- файлы
- сетевые интерфейсы
- IPC
- общая память

Обычно ограничения работают так:
* приложение может получать доступ толко в своей рабочей директории:
- /var/mobile/Containers/Bundle/Application/ или /var/containers/Bundle/Application/
- функции работы с памятьюперехватываются при вызове ядром и проходят процедуру верификации на доступ
* запущенные процессы не могут получать доступ к другим приложениям, даже если имеют один и тот же PID
* получение доступа к железу возможно только с использованием официальных фреймворков
### Защита данных и шифрование
ОС использует несколько подходов к шифрованию:
- FairPlay Code Encryption - применение шифрования ко всем приложениям, которые скачиваются пользователем из AppStore. Из-за этого критично использование реального устройства для тестирования приложений. Проще всего сдампить приложение уже в расшифрованной виде.
Шифрование было включено на постоянной основе в ОС только с iPhone 3GS. Шифрованием занимается отдельный чип. Алгоритмы щифрования не имеют ключа по-умолчанию для шифрования пользовательских данных. Ключ заполняется с установкой пин кода на устройство.
Шифрование к пользовательским данным применяется в несколько этапов. На уровне файловой системы, и на уровне самих файлов.
Для каждого файла существует свой собственный ключ шифрования. Так же шифруется сам ключ и фрагменты файлов по отдельности.

### Средства для защиты от экспллуатации
Операционная система включает следующие технологии по противодействию использования уязвимостей:
- 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