hacktricks/mobile-pentesting/android-app-pentesting
2024-10-05 13:17:24 +00:00
..
drozer-tutorial Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
frida-tutorial Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
adb-commands.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
android-applications-basics.md Translated ['mobile-pentesting/android-app-pentesting/android-applicatio 2024-10-05 13:17:24 +00:00
android-task-hijacking.md Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-09-04 13:38:57 +00:00
apk-decompilers.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
avd-android-virtual-device.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
bypass-biometric-authentication-android.md Translated ['crypto-and-stego/cryptographic-algorithms/unpacking-binarie 2024-07-19 04:58:21 +00:00
content-protocol.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
exploiting-a-debuggeable-applciation.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
google-ctf-2018-shall-we-play-a-game.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
install-burp-certificate.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
intent-injection.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
make-apk-accept-ca-certificate.md Translated ['mobile-pentesting/android-app-pentesting/make-apk-accept-ca 2024-09-25 15:13:07 +00:00
manual-deobfuscation.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
react-native-application.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
README.md Translated ['mobile-pentesting/android-app-pentesting/README.md'] to ua 2024-09-06 12:56:42 +00:00
reversing-native-libraries.md Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-09-04 13:38:57 +00:00
smali-changes.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
spoofing-your-location-in-play-store.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 05:29:57 +00:00
tapjacking.md Translated ['mobile-pentesting/android-app-pentesting/tapjacking.md'] to 2024-09-25 15:53:38 +00:00
webview-attacks.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00

Android Applications Pentesting

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Android Applications Basics

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

{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}

ADB (Android Debug Bridge)

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

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

Smali

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

Other interesting tricks

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

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

{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}

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

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

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

{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}

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

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

У 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

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

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

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

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

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

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

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

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Broken Cryptography

Poor Key Management Processes

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

Use of Insecure and/or Deprecated Algorithms

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

Other checks

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

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}

Superpacked Applications

According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to execute the application and gather the decompressed files from the filesystem.

Automated Static Code Analysis

The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.

With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.

Secrets leaked

An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}

Other interesting functions

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions

Other tricks

{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}


Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!


Dynamic Analysis

First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.

Online Dynamic analysis

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Local Dynamic Analysis

Using an emulator

  • Android Studio (You can create x86 and arm devices, and according to this latest x86 versions support ARM libraries without needing an slow arm emulator).
  • Learn to set it up in this page:

{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}

  • Genymotion (Free version: Personal Edition, you need to create an account. It's recommend to download the version WITH VirtualBox to avoid potential errors.)
  • Nox (Free, but it doesn't support Frida or Drozer).

{% hint style="info" %} When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. {% endhint %}

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Use a physical device

You need to activate the debugging options and it will be cool if you can root it:

  1. Settings.
  2. (FromAndroid 8.0) Select System.
  3. Select About phone.
  4. Press Build number 7 times.
  5. Go back and you will find the Developer options.

Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.
I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.

Unintended Data Leakage

Logging

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

{% hint style="warning" %} Зверніть увагу, що з пізніми версіями Android 4.0, додатки можуть отримувати доступ лише до своїх власних журналів. Тому додатки не можуть отримувати доступ до журналів інших додатків.
У будь-якому випадку, все ще рекомендується не записувати чутливу інформацію. {% endhint %}

Copy/Paste Buffer Caching

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

Crash Logs

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

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

Analytics Data Sent To 3rd Parties

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

SQLite DBs

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

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

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

Drozer (Exploit Activities, Content Providers and Services)

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

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
Також пам'ятайте, що код активності починається в методі onCreate.

Authorisation bypass

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

Learn how to exploit exported activities with Drozer.

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

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF виявить використання singleTask/singleInstance як android:launchMode в активності як шкідливе, але через це це, очевидно, небезпечно лише на старих версіях (версії API < 21).

{% hint style="info" %} Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю. {% endhint %}

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

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

Tapjacking

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

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

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

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

Використання служб

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

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

Використання приймачів широкомовлення

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

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

Використання схем / глибоких посилань

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

{% code overflow="wrap" %}

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

{% endcode %}

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

{% code overflow="wrap" %}

<!-- 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>

{% endcode %}

Код, що виконується

Щоб знайти код, який буде виконано в додатку, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію 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 рукостискання іноді є слабкими, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу "людина посередині" (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, ви можете скинути пам'ять додатку з:

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

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

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

{% code overflow="wrap" %}

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]+$"

{% endcode %}

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

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

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

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

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

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

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

{% code overflow="wrap" %}

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

{% endcode %}

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

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

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

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

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

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

Android Application Analyzer

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

Intent Injection

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

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

Essential Takeaways

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

Android Client Side Injections and others

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

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

Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!

Hacking Insights
Залучайтеся до контенту, який занурюється в захоплення та виклики хакерства.

Real-Time Hack News
Слідкуйте за швидкоплинним світом хакерства через новини та інсайти в реальному часі.

Latest Announcements
Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ.

Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!

Automatic Analysis

MobSF

Static analysis

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

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 командами внизу сторінки динамічного аналізу. Деякі цікаві команди:

help
shell ls
activities
exported_activities
services
receivers

HTTP tools

Коли 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 запити та шукати вразливості.

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

adb shell settings put global http_proxy :0

{% endhint %}

Assisted Dynamic Analysis with Inspeckage

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

Yaazhini

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

Qark

Цей інструмент призначений для пошуку кількох вразливостей Android-додатків, пов'язаних із безпекою, як у джерельному коді, так і в упакованих APK. Інструмент також може створювати "Proof-of-Concept" розгортаємий APK та команди ADB, щоб експлуатувати деякі з виявлених вразливостей (відкриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.

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 на наявність загальних вразливостей та поведінки
  • Статичний аналіз вихідного коду на наявність загальних вразливостей та поведінки
  • Інформація про пристрій
  • та інше
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 - це кросплатформений інструмент, який допомагає розробникам, дослідникам у сфері bugbounty та етичним хакерам виконувати статичний аналіз коду мобільних додатків.

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

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

./stacoan

AndroBugs

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

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 на їх платформу.

Simplify

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

APKiD

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

Manual

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

Labs

Androl4b

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

References

Yet to try

Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!

Hacking Insights
Залучайтеся до контенту, який занурюється в захоплення та виклики хакерства

Real-Time Hack News
Слідкуйте за швидкоплинним світом хакерства через новини та інсайти в реальному часі

Latest Announcements
Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ

Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}