iOS Basics

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Розділення привілеїв та пісочниця

У iOS існує розрізнення в привілеях між додатками, доступними користувачеві, та основними процесами системи. Додатки працюють під ідентифікатором користувача mobile, тоді як важливі системні процеси працюють як root. Це розділення підсилюється механізмом пісочниці, який накладає строгі обмеження на те, які дії можуть виконувати додатки. Наприклад, навіть якщо додатки мають однаковий ідентифікатор користувача, вони заборонені від доступу або зміни даних один одного.

Додатки встановлюються в конкретний каталог (private/var/mobile/Applications/{випадковий ID}) та мають обмежений доступ на читання до певних системних областей та функцій, таких як SMS та телефонні дзвінки. Доступ до захищених областей спричиняє вибух запиту на отримання дозволу користувача.

Захист даних

iOS пропонує розробникам API захисту даних, побудовані на процесорі Secure Enclave Processor (SEP) — спеціалізованому копроцесорі для криптографічних операцій та керування ключами. SEP забезпечує цілісність захисту даних за допомогою унікального ключа, специфічного для пристрою, UID пристрою, вбудованого в нього.

При створенні файлу генерується унікальний ключ шифрування AES 256 бітів, який шифрує вміст файлу. Цей ключ шифрування, разом з ідентифікатором класу, потім шифрується за допомогою ключа класу та зберігається в метаданих файлу. Для розшифрування файлу використовується ключ системи для доступу до метаданих, отримання ключа класу з ідентифікатором класу, а потім розшифрування унікального ключа шифрування файлу.

iOS визначає чотири класи захисту для захисту даних, які визначають, коли і як дані можуть бути доступні:

  • Повний захист (NSFileProtectionComplete): Дані недоступні до розблокування пристрою за допомогою коду доступу користувача.

  • Захищено, якщо відкрито (NSFileProtectionCompleteUnlessOpen): Дозволяє доступ до файлу навіть після блокування пристрою, за умови, що файл був відкритий, коли пристрій був розблокований.

  • Захищено до першої аутентифікації користувача (NSFileProtectionCompleteUntilFirstUserAuthentication): Дані доступні після першого розблокування користувачем після завантаження, залишаються доступними навіть якщо пристрій знову заблоковано.

  • Без захисту (NSFileProtectionNone): Дані захищені лише UID пристрою, що сприяє швидкому видаленню даних віддалено.

Шифрування всіх класів, крім NSFileProtectionNone, включає ключ, похідний від UID пристрою та коду доступу користувача, що забезпечує можливість розшифрування лише на пристрої з правильним кодом доступу. Починаючи з iOS 7, клас захисту за замовчуванням — "Захищено до першої аутентифікації користувача".

Розробники можуть використовувати FileDP, інструмент для перевірки класу захисту даних файлів на iPhone.

```python # Example code to use FileDP for checking file protection class # Note: Ensure your device is jailbroken and has Python installed to use FileDP. # Installation and usage of FileDP: git clone https://github.com/abjurato/FileDp-Source cd FileDp-Source python filedp.py /path/to/check ``` ## **Ключовий ланцюжок**

У iOS Ключовий ланцюжок служить як безпечний зашифрований контейнер для зберігання чутливої інформації, доступ до якої має лише додаток, який її зберіг або особи, які мають відповідні дозволи. Це шифрування посилене унікальним паролем, створеним iOS, який сам зашифрований за допомогою AES. Цей процес шифрування використовує функцію PBKDF2, яка поєднує пароль користувача з сіллю, отриманою з UID пристрою, компонентом, до якого може отримати доступ лише чіп безпекового підсилювача. Внаслідок цього, навіть якщо пароль користувача відомий, вміст Ключового ланцюжка залишається недоступним на будь-якому пристрої, крім того, де він був початково зашифрований.

Управління та доступ до даних Ключового ланцюжка обробляється демоном securityd, на основі конкретних дозволів додатків, таких як Keychain-access-groups та application-identifier.

Операції API Ключового ланцюжка

API Ключового ланцюжка, детально описаний у документації служб Ключового ланцюжка Apple, надає основні функції для управління безпечним зберіганням:

  • SecItemAdd: Додає новий елемент до Ключового ланцюжка.

  • SecItemUpdate: Оновлює існуючий елемент у Ключовому ланцюжку.

  • SecItemCopyMatching: Отримує елемент з Ключового ланцюжка.

  • SecItemDelete: Видаляє елемент з Ключового ланцюжка.

Підбір пароля Ключового ланцюжка включає в себе або напад на зашифрований ключ безпосередньо, або спробу вгадати пароль на самому пристрої, значно ускладнену використанням чіпа безпекового підсилювача, який встановлює затримку між невдалими спробами.

Налаштування Захисту Даних Ключового ланцюжка

Рівні захисту даних для елементів Ключового ланцюжка встановлюються за допомогою атрибуту kSecAttrAccessible під час створення або оновлення елемента. Ці рівні, як вказано Apple, визначають, коли і як елементи Ключового ланцюжка доступні:

  • kSecAttrAccessibleAlways: Доступний у будь-який час, незалежно від статусу блокування пристрою.

  • kSecAttrAccessibleAlwaysThisDeviceOnly: Завжди доступний, але не включений у резервні копії.

  • kSecAttrAccessibleAfterFirstUnlock: Доступний після першого розблокування після перезапуску.

  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: Те ж саме, що і вище, але не може бути переданий на нові пристрої.

  • kSecAttrAccessibleWhenUnlocked: Доступний лише при розблокованому пристрої.

  • kSecAttrAccessibleWhenUnlockedThisDeviceOnly: Доступний при розблокованому, не включений у резервні копії.

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: Потрібен пароль пристрою, не включений у резервні копії.

AccessControlFlags додатково уточнюють методи доступу, дозволяючи використовувати біометричну аутентифікацію або використання пароля.

Попередження про Прошиті Пристрої

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

Постійність Даних Ключового ланцюжка

На відміну від даних, специфічних для додатків, які видаляються при видаленні додатку, дані Ключового ланцюжка залишаються на пристрої. Ця характеристика може дозволити новим власникам вторинного пристрою отримати доступ до даних попереднього власника додатків, просто перевстановивши додатки. Розробникам рекомендується активно очищати дані Ключового ланцюжка при встановленні додатку або під час виходу з системи, щоб пом'якшити цей ризик. Ось приклад коду на Swift, який демонструє, як очистити дані Ключового ланцюжка при першому запуску додатку:

let userDefaults = UserDefaults.standard

if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here

// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}

Можливості додатків

У сфері розробки додатків пісочниця відіграє важливу роль у підвищенні безпеки. Цей процес забезпечує, що кожен додаток працює в межах власного унікального домашнього каталогу, тим самим запобігаючи доступу до системних файлів або даних, що належать іншим додаткам. Застосування цих обмежень здійснюється через політики пісочниці, які є частиною Trusted BSD (MAC) Mandatory Access Control Framework.

Розробники мають можливість налаштовувати певні можливості або дозволи для своїх додатків, такі як Захист даних або Спільний доступ до ключів. Ці дозволи застосовуються безпосередньо після встановлення додатка. Тим не менш, для доступу до певних захищених ресурсів додаток повинен отримати явну згоду користувача під час першої спроби. Це досягається за допомогою рядків призначення або рядків опису використання, які представляються користувачам у вікні запиту дозволу.

Для тих, хто має доступ до вихідного коду, перевірка дозволів, включених у файл Info.plist, може бути виконана так:

  1. Відкрити проект у Xcode.

  2. Знайти та відкрити файл Info.plist.

  3. Пошук ключів, які починаються з "Privacy -", з можливістю перегляду сирцевих ключів/значень для ясності.

При роботі з файлом IPA можна дотримуватися наступних кроків:

  1. Розпакувати IPA.

  2. Знайти файл Info.plist у Payload/<ім'ядодатка>.app/.

  3. При необхідності конвертувати файл у формат XML для полегшення інспекції.

Наприклад, рядки призначення в файлі Info.plist можуть виглядати наступним чином:

<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>

Можливості пристрою

Файл Info.plist додатка вказує можливості пристрою, які допомагають App Store фільтрувати додатки за сумісністю пристрою. Ці можливості визначаються під ключем UIRequiredDeviceCapabilities. Наприклад:

<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>

Права доступу

Права доступу є ще одним важливим аспектом розробки додатків для iOS, що служать як пари ключ-значення, які надають додаткам дозвіл на виконання певних операцій поза перевірками часу виконання. Наприклад, увімкнення Захисту даних в додатку передбачає додавання конкретного права доступу в проект Xcode, яке потім відображається в файлі прав доступу додатка або вбудованому файлі мобільного надання для IPAs.

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated