.. | ||
drozer-tutorial | ||
frida-tutorial | ||
adb-commands.md | ||
android-applications-basics.md | ||
android-task-hijacking.md | ||
apk-decompilers.md | ||
avd-android-virtual-device.md | ||
bypass-biometric-authentication-android.md | ||
content-protocol.md | ||
exploiting-a-debuggeable-applciation.md | ||
google-ctf-2018-shall-we-play-a-game.md | ||
install-burp-certificate.md | ||
intent-injection.md | ||
make-apk-accept-ca-certificate.md | ||
manual-deobfuscation.md | ||
react-native-application.md | ||
README.md | ||
reversing-native-libraries.md | ||
smali-changes.md | ||
spoofing-your-location-in-play-store.md | ||
tapjacking.md | ||
webview-attacks.md |
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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-додатків
Рекомендується почати читати цю сторінку, щоб дізнатися про найважливіші частини, пов'язані з безпекою Android та найнебезпечніші компоненти в Android-додатку:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
ADB (Android Debug Bridge)
Це основний інструмент, який вам потрібен для підключення до android-пристрою (емульованого або фізичного).
ADB дозволяє контролювати пристрої як через USB, так і через мережу з комп'ютера. Ця утиліта дозволяє копіювати файли в обох напрямках, встановлювати та видаляти додатки, виконувати команди оболонки, робити резервні копії даних, читати журнали та інші функції.
Ознайомтеся з наступним списком команд ADB, щоб дізнатися, як використовувати adb.
Smali
Іноді цікаво модифікувати код додатку, щоб отримати доступ до прихованої інформації (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.
У цьому посібнику ви можете дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK з новою функціональністю. Це може бути дуже корисно як альтернатива для кількох тестів під час динамічного аналізу, які будуть представлені. Тому завжди тримайте цю можливість в умі.
Інші цікаві трюки
- Спуфінг вашого місцезнаходження в Play Store
- Завантажити APK: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
- Витягти APK з пристрою:
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 1 | 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
, щоб дозволити файлам ділитися між різними програмами. Проте ці режими не обмежують доступ до цих файлів з інших програм, включаючи потенційно зловмисні.
- Статичний аналіз:
- Переконайтеся, що використання
MODE_WORLD_READABLE
іMODE_WORLD_WRITABLE
ретельно перевіряється. Ці режими можуть потенційно відкрити файли для небажаного або несанкціонованого доступу.
- Динамічний аналіз:
- Перевірте дозволи, встановлені на файлах, створених програмою. Зокрема, перевірте, чи є файли встановленими на читання або запис по всьому світу. Це може становити значний ризик для безпеки, оскільки це дозволить будь-якій програмі, встановленій на пристрої, незалежно від її походження чи наміру, читати або змінювати ці файли.
Зовнішнє зберігання
При роботі з файлами на зовнішньому зберіганні, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
- Доступність:
- Файли на зовнішньому зберіганні є глобально читабельними та записуваними. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
- Проблеми безпеки:
- Враховуючи легкість доступу, рекомендується не зберігати чутливу інформацію на зовнішньому зберіганні.
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
- Обробка даних з зовнішнього зберігання:
- Завжди виконуйте перевірку введення на дані, отримані з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли підписані та криптографічно перевірені перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
Зовнішнє зберігання може бути доступним у /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, щоб ускладнити реверс-інженерні роботи для зловмисників.
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати власні перевірки, щоб дізнатися, чи є мобільний пристрій з root-доступом, і діяти відповідно.
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується емулятор.
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти свою цілісність перед виконанням, щоб перевірити, чи був він змінений.
- Використовуйте 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:
- Settings.
- (FromAndroid 8.0) Select System.
- Select About phone.
- Press Build number 7 times.
- 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.
- Дізнайтеся, як використовувати Frida: Посібник з Frida
- Деякі "GUI" для дій з Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- Ojection чудово підходить для автоматизації використання Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Ви можете знайти деякі чудові скрипти Frida тут: https://codeshare.frida.re/
- Спробуйте обійти механізми анти-налагодження / анти-Frida, завантажуючи Frida, як вказано в https://erfur.github.io/blog/dev/code-injection-without-ptrace (інструмент linjector)
Скидання пам'яті - 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-додатків
Цей інструмент може допомогти вам керувати різними інструментами під час динамічного аналізу: https://github.com/NotSoSecure/android_application_analyzer
Ін'єкція намірів
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як startActivity(...)
або sendBroadcast(...)
, що може бути ризиковано.
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент WebView
, який перетворює URL-адреси на об'єкти Intent
за допомогою Intent.parseUri(...)
, а потім виконує їх, що може призвести до шкідливих ін'єкцій Намір.
Основні висновки
- Ін'єкція намірів подібна до проблеми відкритого перенаправлення в вебі.
- Використання експлойтів передбачає передачу об'єктів
Intent
як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій. - Це може піддати неекспортовані компоненти та постачальників контенту атакам.
- Перетворення URL в
Intent
уWebView
може сприяти ненавмисним діям.
Ін'єкції на стороні клієнта Android та інші
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
- SQL-ін'єкція: При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
- Ін'єкція JavaScript (XSS): Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). Більше інформації тут.
- Включення локальних файлів: WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) -
(webview.getSettings().setAllowFileAccess(false);)
. Більше інформації тут. - Вічні куки: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
- Безпечний прапорець у куках
Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
Інсайти з хакінгу
Залучайтеся до контенту, який занурюється в захоплення та виклики хакінгу.
Новини про хакінг у реальному часі
Слідкуйте за швидкоплинним світом хакінгу через новини та інсайти в реальному часі.
Останні оголошення
Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ.
Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!
Автоматичний аналіз
MobSF
Статичний аналіз
Оцінка вразливостей додатка за допомогою зручного веб-інтерфейсу. Ви також можете виконати динамічний аналіз (але вам потрібно підготувати середовище).
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 - це кросплатформений інструмент, який допомагає розробникам, дослідникам у сфері безпеки та етичним хакерам виконувати статичний аналіз коду мобільних додатків.
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .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
З Вікіпедії: 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
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ Це чудовий список ресурсів
- https://maddiestone.github.io/AndroidAppRE/ Швидкий курс Android
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
Yet to try
Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
Hacking Insights
Залучайтеся до контенту, який занурюється в захоплення та виклики хакерства
Real-Time Hack News
Слідкуйте за швидкоплинним світом хакерства через новини та інсайти в реальному часі
Latest Announcements
Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ
Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!
{% hint style="success" %}
Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.