Пентестинг Android-додатків

Reading time: 33 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Основи Android-додатків

Рекомендується почати читати цю сторінку, щоб дізнатися про найважливіші частини, пов'язані з безпекою Android та найнебезпечніші компоненти в Android-додатку:

Android Applications Basics

ADB (Android Debug Bridge)

Це основний інструмент, який вам потрібен для підключення до android-пристрою (емульованого або фізичного).
ADB дозволяє контролювати пристрої як через USB, так і через мережу з комп'ютера. Ця утиліта дозволяє копіювати файли в обох напрямках, встановлювати та видаляти додатки, виконувати команди оболонки, робити резервні копії даних, читати журнали та інші функції.

Ознайомтеся з наступним списком команд ADB, щоб дізнатися, як використовувати adb.

Smali

Іноді цікаво модифікувати код додатку, щоб отримати доступ до прихованої інформації (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.
У цьому посібнику ви можете дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK з новою функціональністю. Це може бути дуже корисно як альтернатива для кількох тестів під час динамічного аналізу, які будуть представлені. Тому завжди тримайте цю можливість в умі.

Інші цікаві трюки

bash
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Об'єднайте всі спліти та базові APK за допомогою APKEditor:
bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
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

Статичний аналіз

По-перше, для аналізу APK вам слід ознайомитися з Java кодом за допомогою декомпілера.
Будь ласка, читайте тут, щоб знайти інформацію про різні доступні декомпілери.

Пошук цікавої інформації

Просто ознайомившись з рядками APK, ви можете шукати паролі, URL-адреси (https://github.com/ndelphit/apkurlgrep), api ключі, шифрування, bluetooth uuids, токени та будь-яку цікаву інформацію... шукайте навіть код виконання бекдорів або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).

Firebase

Зверніть особливу увагу на firebase URL-адреси та перевірте, чи вони неправильно налаштовані. Більше інформації про те, що таке Firebase і як його експлуатувати тут.

Основи розуміння програми - Manifest.xml, strings.xml

Огляд файлів _Manifest.xml** та **strings.xml_** може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.

Вразливості, виявлені з Manifest.xml, включають:

  • Дебаговані програми: Програми, які встановлені як дебаговані (debuggable="true") у файлі Manifest.xml, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
  • Налаштування резервного копіювання: Атрибут android:allowBackup="false" повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
  • Безпека мережі: Налаштування безпеки мережі (android:networkSecurityConfig="@xml/network_security_config") у res/xml/ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Прикладом є дозволення HTTP-трафіку для певних доменів.
  • Експортовані активності та сервіси: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
  • Постачальники контенту та FileProviders: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
  • Отримувачі широкомовлення та URL-схеми: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
  • Версії SDK: Атрибути minSdkVersion, targetSDKVersion та maxSdkVersion вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.

З файлу strings.xml можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.

Tapjacking

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

Знайдіть більше інформації в:

Tapjacking

Викрадення завдань

Активність з launchMode, встановленим на singleTask без визначеного taskAffinity, вразлива до викрадення завдань. Це означає, що програму можна встановити, і якщо її запустити перед реальною програмою, вона може викрасти завдання реальної програми (так що користувач буде взаємодіяти з зловмисною програмою, вважаючи, що використовує реальну).

Більше інформації в:

Android Task Hijacking

Небезпечне зберігання даних

Внутрішнє зберігання

В Android файли, збережені у внутрішньому зберіганні, призначені для доступу виключно програмою, яка їх створила. Ця міра безпеки забезпечується операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як MODE_WORLD_READABLE і MODE_WORLD_WRITABLE, щоб дозволити файлам ділитися між різними програмами. Проте ці режими не обмежують доступ до цих файлів з інших програм, включаючи потенційно зловмисні.

  1. Статичний аналіз:
  • Переконайтеся, що використання MODE_WORLD_READABLE і MODE_WORLD_WRITABLE ретельно перевіряється. Ці режими можуть потенційно відкрити файли для небажаного або несанкціонованого доступу.
  1. Динамічний аналіз:
  • Перевірте дозволи, встановлені на файли, створені програмою. Зокрема, перевірте, чи є файли встановленими на читання або запис по всьому світу. Це може становити значний ризик для безпеки, оскільки це дозволить будь-якій програмі, встановленій на пристрої, незалежно від її походження чи наміру, читати або змінювати ці файли.

Зовнішнє зберігання

При роботі з файлами на зовнішньому зберіганні, наприклад, на SD-картах, слід вжити певних запобіжних заходів:

  1. Доступність:
  • Файли на зовнішньому зберіганні є глобально читабельними та записуваними. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
  1. Проблеми безпеки:
  • З огляду на легкість доступу, рекомендується не зберігати чутливу інформацію на зовнішньому зберіганні.
  • Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
  1. Обробка даних з зовнішнього зберігання:
  • Завжди виконуйте перевірку введення на дані, отримані з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
  • Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
  • Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли підписані та криптографічно перевірені перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.

Зовнішнє зберігання може бути доступним у /storage/emulated/0, /sdcard, /mnt/sdcard

note

Починаючи з Android 4.4 (API 17), SD-карта має структуру каталогів, яка обмежує доступ програми до каталогу, який спеціально призначений для цієї програми. Це запобігає зловмисним програмам отримувати доступ на читання або запис до файлів іншої програми.

Чутливі дані, збережені у відкритому тексті

  • Спільні налаштування: Android дозволяє кожній програмі легко зберігати xml-файли за адресою /data/data/<packagename>/shared_prefs/, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
  • Бази даних: Android дозволяє кожній програмі легко зберігати sqlite бази даних за адресою /data/data/<packagename>/databases/, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.

Пошкоджений TLS

Прийняття всіх сертифікатів

З якоїсь причини іноді розробники приймають всі сертифікати, навіть якщо, наприклад, ім'я хоста не збігається з рядками коду, такими як наступний:

java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Добрий спосіб протестувати це - спробувати захопити трафік, використовуючи проксі, наприклад, Burp, без авторизації CA Burp на пристрої. Також ви можете згенерувати з Burp сертифікат для іншого імені хоста та використовувати його.

Ламана криптографія

Слабкі процеси управління ключами

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

Використання ненадійних та/або застарілих алгоритмів

Розробники не повинні використовувати застарілі алгоритми для виконання перевірок авторизації, зберігання або відправки даних. Деякі з цих алгоритмів: RC4, MD4, MD5, SHA1... Якщо хеші використовуються для зберігання паролів, наприклад, слід використовувати хеші, стійкі до брутфорсу, з сіллю.

Інші перевірки

  • Рекомендується обфускувати APK, щоб ускладнити реверс-інженерні роботи для зловмисників.
  • Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати власні перевірки, щоб дізнатися, чи мобільний пристрій є рутованим, і діяти відповідно.
  • Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується емулятор.
  • Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти свою цілісність перед виконанням, щоб перевірити, чи був він змінений.
  • Використовуйте APKiD, щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK

React Native Application

Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду javascript додатків React:

React Native Application

Xamarin Applications

Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду C# додатків Xamarin:

Xamarin Apps

Суперупаковані додатки

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

Автоматизований статичний аналіз коду

Інструмент mariana-trench здатний знаходити вразливості шляхом сканування коду додатка. Цей інструмент містить серію відомих джерел (які вказують інструменту місця, де вхід контролюється користувачем), синків (які вказують інструменту небезпечні місця, де зловмисний вхід користувача може завдати шкоди) та правил. Ці правила вказують на комбінацію джерел-синків, яка вказує на вразливість.

З цими знаннями mariana-trench перегляне код і знайде можливі вразливості в ньому.

Витік секретів

Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині нього, які ви можете виявити. Ви можете використовувати інструмент, такий як https://github.com/dwisiswant0/apkleaks

Обхід біометричної аутентифікації

Bypass Biometric Authentication (Android)

Інші цікаві функції

Інші трюки

content:// protocol



Динамічний аналіз

По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат Burp CA, Drozer і Frida в основному). Тому рутований пристрій (емулятор чи ні) є надзвичайно рекомендованим.

Онлайн динамічний аналіз

Ви можете створити безкоштовний обліковий запис на: https://appetize.io/. Ця платформа дозволяє вам завантажувати та виконувати APK, тому вона корисна для того, щоб побачити, як веде себе apk.

Ви навіть можете бачити журнали вашого додатка в вебі та підключатися через adb.

Завдяки з'єднанню ADB ви можете використовувати Drozer та Frida всередині емуляторів.

Локальний динамічний аналіз

Використання емулятора

  • Android Studio (Ви можете створювати x86 та arm пристрої, і відповідно до цьогоостанніх версій x86 підтримують ARM бібліотеки без необхідності в повільному емуляторі arm).
  • Дізнайтеся, як налаштувати його на цій сторінці:

AVD - Android Virtual Device

  • Genymotion (Безкоштовна версія: Особисте видання, вам потрібно створити обліковий запис. _Рекомендується завантажити версію З VirtualBox, щоб уникнути потенційних помилок.)
  • Nox (Безкоштовно, але не підтримує Frida або Drozer).

note

При створенні нового емулятора на будь-якій платформі пам'ятайте, що чим більший екран, тим повільніше працюватиме емулятор. Тому вибирайте маленькі екрани, якщо це можливо.

Щоб встановити сервіси Google (як AppStore) в Genymotion, вам потрібно натиснути на червону кнопку, позначену на наступному зображенні:

Також зверніть увагу, що в конфігурації Android VM в Genymotion ви можете вибрати Bridge Network mode (це буде корисно, якщо ви будете підключатися до Android VM з іншої VM з інструментами).

Використання фізичного пристрою

Вам потрібно активувати опції налагодження, і було б добре, якщо ви зможете рутнути його:

  1. Налаштування.
  2. (З Android 8.0) Виберіть Систему.
  3. Виберіть Про телефон.
  4. Натисніть Номер збірки 7 разів.
  5. Поверніться назад, і ви знайдете Опції розробника.

Після того, як ви встановили додаток, перше, що вам слід зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.
Я рекомендую виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat, щоб ми могли дізнатися, як працює додаток, поки MobSF збирає багато цікавих даних, які ви зможете переглянути пізніше.

Ненавмисний витік даних

Логування

Розробники повинні бути обережними, щоб не розкривати інформацію для налагодження публічно, оскільки це може призвести до витоку чутливих даних. Рекомендуються інструменти pidcat та adb logcat для моніторингу журналів додатка, щоб виявити та захистити чутливу інформацію. Pidcat віддається перевага за його простоту використання та читабельність.

warning

Зверніть увагу, що з пізніми версіями Android 4.0 додатки можуть отримувати доступ лише до своїх власних журналів. Тому додатки не можуть отримувати доступ до журналів інших додатків.
Тим не менш, все ще рекомендується не записувати чутливу інформацію.

Кешування буфера копіювання/вставки

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

Журнали аварій

Якщо додаток виникає аварія і зберігає журнали, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.

Як пентестер, слідкуйте за цими журналами.

Дані аналітики, надіслані третім особам

Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно викривати чутливі дані через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується перехопити трафік додатка та перевірити, чи надсилається якась чутлива інформація третім особам.

SQLite БД

Більшість додатків використовуватимуть внутрішні SQLite бази даних для збереження інформації. Під час пентесту зверніть увагу на бази даних, які були створені, назви таблиць та стовпців і всі дані, які зберігаються, оскільки ви можете знайти чутливу інформацію (що буде вразливістю).
Бази даних повинні розташовуватися в /data/data/the.package.name/databases, наприклад, /data/data/com.mwr.example.sieve/databases

Якщо база даних зберігає конфіденційну інформацію і зашифрована, але ви можете знайти пароль всередині додатка, це все ще є вразливістю.

Перерахуйте таблиці, використовуючи .tables, і перераховуйте стовпці таблиць, виконуючи .schema <table_name>

Drozer (Експлуатація активностей, постачальників контенту та сервісів)

З Drozer Docs: Drozer дозволяє вам приймати роль Android-додатка та взаємодіяти з іншими додатками. Він може робити все, що може зробити встановлений додаток, наприклад, використовувати механізм міжпроцесного зв'язку (IPC) Android і взаємодіяти з основною операційною системою.
Drozer є корисним інструментом для експлуатації експортованих активностей, експортованих сервісів та постачальників контенту, як ви дізнаєтеся в наступних розділах.

Експлуатація експортованих активностей

Прочитайте це, якщо хочете освіжити, що таке Android Activity.
Також пам'ятайте, що код активності починається в методі onCreate.

Обхід авторизації

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

Дізнайтеся, як експлуатувати експортовані активності за допомогою Drozer.

Ви також можете запустити експортовану активність з adb:

  • Ім'я пакета - 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 в активності як шкідливе, але через це, очевидно, що це небезпечно лише на старих версіях (версії API < 21).

note

Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.

Витік чутливої інформації

Активності також можуть повертати результати. Якщо вам вдасться знайти експортовану та незахищену активність, яка викликає метод setResult і повертає чутливу інформацію, це є витоком чутливої інформації.

Tapjacking

Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити користувача виконувати неочікувані дії. Для отримання додаткової інформації про що таке Tapjacking, перейдіть за посиланням.

Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція

Прочитайте це, якщо хочете освіжити знання про постачальника контенту.
Постачальники контенту в основному використовуються для обміну даними. Якщо у програми є доступні постачальники контенту, ви можете витягнути чутливі дані з них. Також цікаво протестувати можливі SQL-ін'єкції та перетворення шляхів, оскільки вони можуть бути вразливими.

Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.

Експлуатація сервісів

Прочитайте це, якщо хочете освіжити знання про сервіс.
Пам'ятайте, що дії сервісу починаються в методі onStartCommand.

Сервіс в основному є чимось, що може отримувати дані, обробляти їх і повертати (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід перевірити код, щоб зрозуміти, що він робить, і тестувати його динамічно для витягування конфіденційної інформації, обходу заходів аутентифікації...
Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.

Експлуатація приймачів трансляцій

Прочитайте це, якщо хочете освіжити знання про приймач трансляцій.
Пам'ятайте, що дії приймача трансляцій починаються в методі onReceive.

Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.
Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.

Експлуатація схем / глибоких посилань

Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, такі як цей.
Ви можете відкрити оголошену схему за допомогою adb або браузера:

bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Зверніть увагу, що ви можете пропустити ім'я пакета, і мобільний пристрій автоматично викличе додаток, який повинен відкрити це посилання.

html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- 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.

Чутлива інформація

Кожного разу, коли ви знаходите глибоке посилання, перевірте, що воно не отримує чутливі дані (як-от паролі) через параметри URL, оскільки будь-який інший додаток може видавати себе за глибоке посилання і вкрасти ці дані!

Параметри в шляху

Ви також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху URL, наприклад: https://api.example.com/v1/users/{username}, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: example://app/users?username=../../unwanted-endpoint%3fparam=value.
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати Open Redirect (якщо частина шляху використовується як доменне ім'я), захоплення облікового запису (якщо ви можете змінити деталі користувачів без токена CSRF, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше інформації про це тут.

Більше прикладів

Цей цікавий звіт про баг-баунті про посилання (/.well-known/assetlinks.json).

Перевірка та верифікація транспортного шару

  • Сертифікати не завжди належним чином перевіряються Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
  • Переговори під час SSL/TLS рукопожаття іноді слабкі, використовуючи ненадійні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
  • Витік приватної інформації є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або деталі користувачів, від перехоплення зловмисними особами.

Перевірка сертифікатів

Ми зосередимося на перевірці сертифікатів. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки ненадійні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, цей ресурс надає всебічні рекомендації.

SSL Pinning

SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.

Інспекція трафіку

Щоб перевірити HTTP-трафік, необхідно встановити сертифікат проксі-інструменту (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим через проксі. Для посібника з установки власного сертифіката CA, натисніть тут.

Додатки, які націлені на API Level 24 і вище, вимагають модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, зверніться до цього посібника.

Обхід SSL Pinning

Коли впроваджено SSL Pinning, обхід його стає необхідним для перевірки HTTPS-трафіку. Для цього доступні різні методи:

  • Автоматично модифікуйте apk, щоб обійти SSLPinning за допомогою apk-mitm. Найкраща перевага цього варіанту полягає в тому, що вам не знадобиться root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацьовує.
  • Ви можете використовувати Frida (обговорюється нижче), щоб обійти цю захист. Ось посібник з використання Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Ви також можете спробувати автоматично обійти SSL Pinning, використовуючи objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Ви також можете спробувати автоматично обійти SSL Pinning, використовуючи MobSF динамічний аналіз (пояснюється нижче)
  • Якщо ви все ще вважаєте, що є якийсь трафік, який ви не захоплюєте, ви можете спробувати переслати трафік до burp, використовуючи iptables. Прочитайте цей блог: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Пошук загальних веб-вразливостей

Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.

Frida

Frida - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.
Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.

Скидання пам'яті - Fridump

Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки.

Використовуючи Fridump3, ви можете скинути пам'ять додатку за допомогою:

bash
# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт:

bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Чутливі дані в Keystore

В Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще можливо отримати доступ до нього. Оскільки додатки, як правило, зберігають тут чутливі дані у відкритому тексті, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.

Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.

Щоб отримати доступ до даних всередині keystore, ви можете використовувати цей скрипт Frida: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Обхід відбитків пальців/біометрії

Використовуючи наступний скрипт Frida, можливо обійти аутентифікацію за відбитком пальця, яку можуть виконувати Android-додатки для захисту певних чутливих областей:

bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Фонові зображення

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

Однак, якщо цей знімок містить чутливу інформацію, хтось, хто має доступ до знімка, може викрасти цю інформацію (зверніть увагу, що вам потрібен root для доступу до неї).

Знімки зазвичай зберігаються за адресою: /data/system_ce/0/snapshots

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

bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Аналізатор Android-додатків

Цей інструмент може допомогти вам керувати різними інструментами під час динамічного аналізу: https://github.com/NotSoSecure/android_application_analyzer

Ін'єкція намірів

Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі широкомовлення, які обробляють ці Намір і передають їх методам, таким як startActivity(...) або sendBroadcast(...), що може бути ризиковано.

Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент WebView, який перетворює URL-адреси на об'єкти Intent за допомогою Intent.parseUri(...), а потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.

Основні висновки

  • Ін'єкція намірів подібна до проблеми відкритого перенаправлення в вебі.
  • Експлойти включають передачу об'єктів Intent як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
  • Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
  • Перетворення URL-адреси WebView на Intent може сприяти ненавмисним діям.

Ін'єкції на стороні клієнта Android та інші

Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:

  • SQL-ін'єкція: При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
  • Ін'єкція JavaScript (XSS): Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). Більше інформації тут.
  • Включення локальних файлів: WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - (webview.getSettings().setAllowFileAccess(false);). Більше інформації тут.
  • Вічні куки: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
  • Безпечний прапорець у куках

Автоматичний аналіз

MobSF

Статичний аналіз

Оцінка вразливостей додатка за допомогою зручного веб-інтерфейсу. Ви також можете виконати динамічний аналіз (але вам потрібно підготувати середовище).

bash
docker pull opensecurity/mobile-security-framework-mobsf
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

MobSF також може бути дуже корисним для динамічного аналізу в Android, але в цьому випадку вам потрібно буде встановити MobSF і genymotion на вашому хості (VM або Docker не працюватимуть). Примітка: Вам потрібно спочатку запустити VM в genymotion і потім MobSF.
MobSF динамічний аналізатор може:

  • Вивантажити дані програми (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "Exported Activity Tester", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "Exported Activity Tester", щоб отримати скріншоти всіх експортованих активностей.
  • Захоплювати HTTPS трафік
  • Використовувати Frida для отримання інформації під час виконання

З версій Android > 5, він автоматично запустить Frida і встановить глобальні налаштування проксі для захоплення трафіку. Він буде захоплювати трафік лише з тестованої програми.

Frida

За замовчуванням, він також використовуватиме деякі скрипти Frida для обходу SSL pinning, виявлення root і виявлення налагоджувача, а також для моніторингу цікавих API.
MobSF також може викликати експортовані активності, захоплювати скріншоти з них і зберігати їх для звіту.

Щоб почати динамічне тестування, натисніть зелену кнопку: "Start Instrumentation". Натисніть "Frida Live Logs", щоб побачити журнали, згенеровані скриптами Frida, і "Live API Monitor", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").
MobSF також дозволяє вам завантажувати власні Frida скрипти (щоб надіслати результати ваших скриптів Frida до MobSF, використовуйте функцію send()). Він також має кілька попередньо написаних скриптів, які ви можете завантажити (ви можете додати більше в MobSF/DynamicAnalyzer/tools/frida_scripts/others/), просто виберіть їх, натисніть "Load" і натисніть "Start Instrumentation" (ви зможете бачити журнали цих скриптів у "Frida Live Logs").

Більше того, у вас є деякі допоміжні функції Frida:

  • Перерахувати завантажені класи: Він виведе всі завантажені класи
  • Захопити рядки: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
  • Захопити порівняння рядків: Може бути дуже корисно. Він показуватиме 2 рядки, які порівнюються і чи був результат True або False.
  • Перерахувати методи класу: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу.
  • Шукати шаблон класу: Шукати класи за шаблоном
  • Трасувати методи класу: Трасувати весь клас (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.

Якщо ви вибрали допоміжний модуль, який хочете використовувати, вам потрібно натиснути "Start Intrumentation" і ви побачите всі виходи в "Frida Live Logs".

Shell

Mobsf також надає вам оболонку з деякими adb командами, MobSF командами та загальними shell командами внизу сторінки динамічного аналізу. Деякі цікаві команди:

bash
help
shell ls
activities
exported_activities
services
receivers

HTTP інструменти

Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "HTTP(S) Traffic" внизу або більш привабливий вигляд у "Start HTTPTools" зеленій кнопці. З другого варіанту ви можете відправити захоплені запити до проксі таких як Burp або Owasp ZAP.
Для цього, включіть Burp --> вимкніть Intercept --> у MobSB HTTPTools виберіть запит --> натисніть "Send to Fuzzer" --> виберіть адресу проксі (http://127.0.0.1:8080\).

Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "Start Web API Fuzzer", щоб фузити http запити та шукати вразливості.

note

Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно сконфігуровані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:

adb shell settings put global http_proxy :0

Допоміжний динамічний аналіз з Inspeckage

Ви можете отримати інструмент з Inspeckage.
Цей інструмент використовує деякі Hooks, щоб дати вам знати що відбувається в додатку під час виконання динамічного аналізу.

Yaazhini

Це чудовий інструмент для виконання статичного аналізу з GUI

Qark

Цей інструмент призначений для пошуку кількох вразливостей 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
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Відображає всі витягнуті файли для зручного посилання
  • Автоматично декомпілює APK файли в Java та Smali формат
  • Аналізує AndroidManifest.xml на наявність поширених вразливостей та поведінки
  • Статичний аналіз вихідного коду на наявність поширених вразливостей та поведінки
  • Інформація про пристрій
  • та інше
bash
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER - це програма командного рядка, яка може використовуватися в Windows, MacOS X та Linux, що аналізує .apk файли в пошуках вразливостей. Це робиться шляхом розпакування APK і застосування ряду правил для виявлення цих вразливостей.

Усі правила зосереджені в файлі rules.json, і кожна компанія або тестувальник можуть створити свої власні правила для аналізу того, що їм потрібно.

Завантажте останні бінарні файли на сторінці завантаження

super-analyzer {apk_file}

StaCoAn

StaCoAn - це кросплатформений інструмент, який допомагає розробникам, шукачам вразливостей та етичним хакерам виконувати статичний аналіз коду мобільних додатків.

Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.

Завантажити остання версію:

./stacoan

AndroBugs

AndroBugs Framework - це система аналізу вразливостей Android, яка допомагає розробникам або хакерам знаходити потенційні вразливості безпеки в Android-додатках.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.

Виявлення здійснюється за допомогою статичного аналізу байт-коду Dalvik додатка, представленого як Smali, з використанням бібліотеки androguard.

Цей інструмент шукає поширену поведінку "поганих" додатків, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA - це Mобільний Aплікаційний Rеверс-інжиніринг та Aналіз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти для реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків та фахівців з безпеки.

Він здатний:

  • Витягувати Java та Smali код, використовуючи різні інструменти
  • Аналізувати APK, використовуючи: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • Витягувати приватну інформацію з APK, використовуючи regexps.
  • Аналізувати Manifest.
  • Аналізувати знайдені домени, використовуючи: pyssltest, testssl та whatweb
  • Деобфускувати APK через apk-deguard.com

Koodous

Корисно для виявлення шкідливого ПЗ: https://koodous.com/

Обфускація/Деобфускація коду

Зверніть увагу, що в залежності від сервісу та конфігурації, яку ви використовуєте для обфускації коду, секрети можуть бути або не бути обфускованими.

ProGuard

З Wikipedia: ProGuard - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard є безкоштовним програмним забезпеченням і розповсюджується під ліцензією GNU General Public License, версія 2.

ProGuard розповсюджується як частина Android SDK і запускається під час створення програми в режимі випуску.

DexGuard

Знайдіть покрокову інструкцію для деобфускації apk на https://blog.lexfo.fr/dexguard.html

(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:

  • завантажити ресурс як InputStream;
  • передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
  • виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
  • передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
  • нарешті, завантажити отриманий DEX як ресурс, використовуючи метод loadDex.

DeGuard

DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи перевірку коду та прогнозування бібліотек.

Ви можете завантажити обфускований APK на їх платформу.

Deobfuscate android App

Це інструмент LLM для виявлення потенційних вразливостей безпеки в android додатках та деобфускації коду android додатків. Використовує публічний API Google Gemini.

Simplify

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

APKiD

APKiD надає вам інформацію про те, як був створений APK. Він ідентифікує багато компіляторів, упаковщиків, обфускаторів та інші дивні речі. Це PEiD для Android.

Manual

Прочитайте цей посібник, щоб дізнатися деякі хитрощі про те, як реверсувати власну обфускацію

Labs

Androl4b

AndroL4b - це віртуальна машина безпеки Android на базі ubuntu-mate, яка включає колекцію останніх фреймворків, навчальних посібників та лабораторій від різних фахівців з безпеки та дослідників для реверс-інжинірингу та аналізу шкідливого ПЗ.

References

Yet to try

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks