Android Applications Pentesting
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 Applications BasicsЦе основний інструмент, який вам потрібен для підключення до Android-пристрою (емульованого або фізичного). ADB дозволяє контролювати пристрої через USB або мережу з комп'ютера. Цей утиліта дозволяє копіювати файли в обох напрямках, встановлювати та видаляти додатки, виконувати команди оболонки, робити резервні копії даних, читати журнали та інші функції.
Ознайомтеся з наступним списком команд ADB, щоб дізнатися, як використовувати adb.
Іноді цікаво модифікувати код додатку, щоб отримати доступ до прихованої інформації (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його. У цьому посібнику ви можете дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK з новою функціональністю. Це може бути дуже корисно як альтернатива для кількох тестів під час динамічного аналізу, які будуть представлені. Тому завжди тримайте цю можливість на увазі.
Витягти APK з пристрою:
Об'єднайте всі спліти та базові APK за допомогою APKEditor:
Перш за все, для аналізу APK вам слід ознайомитися з Java-кодом за допомогою декомпілера. Будь ласка, читайте тут, щоб знайти інформацію про різні доступні декомпілери.
Просто переглядаючи рядки APK, ви можете шукати паролі, URL-адреси (https://github.com/ndelphit/apkurlgrep), api ключі, шифрування, bluetooth uuids, токени та будь-яку цікаву інформацію... шукайте навіть код виконання бекдорів або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).
Firebase
Зверніть особливу увагу на firebase URL-адреси та перевірте, чи вони неправильно налаштовані. Більше інформації про те, що таке Firebase і як його експлуатувати тут.
Дослідження файлів _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Активність з launchMode
, встановленим на singleTask
без жодного taskAffinity
, вразлива до викрадення завдань. Це означає, що програму можна встановити, і якщо її запустити перед реальною програмою, вона може викрасти завдання реальної програми (так що користувач буде взаємодіяти з зловмисною програмою, вважаючи, що використовує реальну).
Більше інформації в:
Android Task HijackingВнутрішнє зберігання
У Android файли, збережені у внутрішньому зберіганні, призначені для доступу виключно програмою, яка їх створила. Ця міра безпеки забезпечується операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як MODE_WORLD_READABLE
і MODE_WORLD_WRITABLE
, щоб дозволити файлам ділитися між різними програмами. Проте ці режими не обмежують доступ до цих файлів з інших програм, включаючи потенційно зловмисні.
Статичний аналіз:
Переконайтеся, що використання MODE_WORLD_READABLE
і MODE_WORLD_WRITABLE
ретельно перевіряється. Ці режими можуть потенційно відкрити файли для небажаного або несанкціонованого доступу.
Динамічний аналіз:
Перевірте дозволи, встановлені на файли, створені програмою. Зокрема, перевірте, чи є файли встановленими на читання або запис по всьому світу. Це може становити значний ризик для безпеки, оскільки це дозволить будь-якій програмі, встановленій на пристрої, незалежно від її походження чи наміру, читати або змінювати ці файли.
Зовнішнє зберігання
При роботі з файлами на зовнішньому зберіганні, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
Доступність:
Файли на зовнішньому зберіганні є глобально читабельними та записуваними. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
Проблеми безпеки:
З огляду на легкість доступу, рекомендується не зберігати чутливу інформацію на зовнішньому зберіганні.
Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
Обробка даних з зовнішнього зберігання:
Завжди виконуйте перевірку введення на дані, отримані з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли підписані та криптографічно перевірені перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
Зовнішнє зберігання може бути доступним у /storage/emulated/0
, /sdcard
, /mnt/sdcard
Починаючи з Android 4.4 (API 17), SD-карта має структуру каталогів, яка обмежує доступ програми до каталогу, який спеціально призначений для цієї програми. Це запобігає зловмисним програмам отримувати доступ на читання або запис до файлів іншої програми.
Чутливі дані, збережені у відкритому тексті
Спільні налаштування: Android дозволяє кожній програмі легко зберігати xml-файли за адресою /data/data/<packagename>/shared_prefs/
, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
Бази даних: Android дозволяє кожній програмі легко зберігати sqlite бази даних за адресою /data/data/<packagename>/databases/
, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
Прийняття всіх сертифікатів
З якоїсь причини іноді розробники приймають всі сертифікати, навіть якщо, наприклад, ім'я хоста не збігається з рядками коду, такими як наступний:
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.
Погані процеси управління ключами
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
Використання ненадійних та/або застарілих алгоритмів
Розробники не повинні використовувати застарілі алгоритми для виконання перевірок авторизації, зберігання або відправки даних. Деякі з цих алгоритмів: RC4, MD4, MD5, SHA1... Якщо хеші використовуються для зберігання паролів, наприклад, слід використовувати хеші, стійкі до брутфорсу, з сіллю.
Рекомендується обфускувати APK, щоб ускладнити реверс-інженерні роботи для зловмисників.
Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати власні перевірки, щоб дізнатися, чи є мобільний пристрій зламаним, і діяти відповідно.
Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується емулятор.
Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти свою цілісність перед виконанням, щоб перевірити, чи був він змінений.
Використовуйте APKiD, щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
Read the following page to learn how to easily access javascript code of React applications:
React Native ApplicationRead the following page to learn how to easily access C# code of a xamarin applications:
Xamarin AppsAccording 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.
The tool mariana-trench is capable of finding вразливості by скануванням the коду of the application. This tool contains a series of відомих джерел (that indicates to the tool the місця, where the вхід is контрольований користувачем), синки (which indicates to the tool небезпечні місця, where malicious user input could cause damages) and правила. These rules indicates the комбінацію of джерел-синків, that indicates a vulnerability.
With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.
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
Виконання коду: Runtime.exec(), ProcessBuilder(), native code:system()
Відправка SMS: sendTextMessage, sendMultipartTestMessage
Нативні функції, оголошені як native
: public native, System.loadLibrary, System.load
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!
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.
You can create a безкоштовний акаунт 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.
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:
Genymotion (Безкоштовна версія: Personal Edition, you need to create an account. It's recommend to download the version WITH VirtualBox to avoid potential errors.)
Nox (Безкоштовно, але не підтримує Frida або Drozer).
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.
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).
You need to activate the debugging options and it will be cool if you can root it:
Налаштування.
(З Android 8.0) Виберіть Система.
Виберіть Про телефон.
Натисніть Номер збірки 7 разів.
Поверніться назад, і ви знайдете Параметри розробника.
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.
Логування
Розробники повинні бути обережними, щоб не оприлюднювати інформацію для налагодження, оскільки це може призвести до витоку чутливих даних. Рекомендуються інструменти pidcat та adb logcat
для моніторингу журналів додатків, щоб виявити та захистити чутливу інформацію. Pidcat віддається перевага за його простоту використання та читабельність.
Note that from later newer than Android 4.0, applications are only able to access their own logs. So applications cannot access other apps logs. Anyway, it's still recommended to not log sensitive information.
Кешування буфера копіювання/вставки
Android's clipboard-based framework enables copy-paste functionality in apps, yet poses a risk as other applications can access the clipboard, potentially exposing sensitive data. It's crucial to disable copy/paste functions for sensitive sections of an application, like credit card details, to prevent data leaks.
Журнали аварій
If an application crashes and saves logs, these logs can assist attackers, particularly when the application cannot be reverse-engineered. To mitigate this risk, avoid logging on crashes, and if logs must be transmitted over the network, ensure they are sent via an SSL channel for security.
As pentester, try to take a look to these logs.
Дані аналітики, надіслані третім особам
Applications often integrate services like Google Adsense, which can inadvertently leak sensitive data due to improper implementation by developers. To identify potential data leaks, it's advisable to intercept the application's traffic and check for any sensitive information being sent to third-party services.
Most of the applications will use internal SQLite databases to save information. During the pentest take a look to the databases created, the names of tables and columns and all the data saved because you could find sensitive information (which would be a vulnerability).
Databases should be located in /data/data/the.package.name/databases
like /data/data/com.mwr.example.sieve/databases
If the database is saving confidential information and is encrypted but you can find the password inside the application it's still a vulnerability.
Enumerate the tables using .tables
and enumerate the columns of the tables doing .schema <table_name>
From Drozer Docs: Drozer allows you to assume the role of an Android app and interact with other apps. It can do anything that an installed application can do, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. . Drozer is s useful tool to exploit exported activities, exported services and Content Providers as you will learn in the following sections.
Read this if you want to refresh what is an Android Activity.
Also remember that the code of an activity starts in the onCreate
method.
Обхід авторизації
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with sensitive information is exported you could bypass the authentication mechanisms to access it.
Learn how to exploit exported activities with Drozer.
You can also start an exported activity from adb:
PackageName is com.example.demo
Exported ActivityName is com.example.test.MainActivity
NOTE: MobSF виявить використання singleTask/singleInstance як android:launchMode
в активності як шкідливе, але через це, очевидно, це небезпечно лише на старих версіях (версії API < 21).
Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
Витік чутливої інформації
Активності також можуть повертати результати. Якщо вам вдасться знайти експортовану та незахищену активність, яка викликає метод setResult
і повертає чутливу інформацію, це є витоком чутливої інформації.
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити користувача виконувати несподівані дії. Для отримання додаткової інформації про що таке Tapjacking, перейдіть за посиланням.
Прочитайте це, якщо хочете освіжити знання про постачальника контенту. Постачальники контенту в основному використовуються для обміну даними. Якщо у програми є доступні постачальники контенту, ви можете витягнути чутливі дані з них. Також цікаво протестувати можливі SQL-ін'єкції та перетворення шляхів, оскільки вони можуть бути вразливими.
Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.
Прочитайте це, якщо хочете освіжити знання про сервіс.
Пам'ятайте, що дії сервісу починаються в методі onStartCommand
.
Сервіс в основному є чимось, що може отримувати дані, обробляти їх і повертати (або не повертати) відповідь. Тому, якщо програма експортує деякі сервіси, вам слід перевірити код, щоб зрозуміти, що він робить, і тестувати його динамічно для витягування конфіденційної інформації, обходу заходів аутентифікації... Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.
Прочитайте це, якщо хочете освіжити знання про приймач широкомовлення.
Пам'ятайте, що дії приймача широкомовлення починаються в методі onReceive
.
Приймач широкомовлення буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим. Дізнайтеся, як експлуатувати приймачі широкомовлення за допомогою Drozer.
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, такі як цей. Ви можете відкрити оголошену схему за допомогою adb або браузера:
Зверніть увагу, що ви можете пропустити ім'я пакета, і мобільний пристрій автоматично викличе додаток, який повинен відкрити це посилання.
Код, що виконується
Щоб знайти код, який буде виконуватися в додатку, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію 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 - це захід безпеки, коли додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
Щоб перевірити HTTP-трафік, необхідно встановити сертифікат проксі-інструменту (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим через проксі. Для посібника з установки власного сертифіката CA, натисніть тут.
Додатки, які націлені на API Level 24 і вище, вимагають модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, зверніться до цього посібника.
Коли впроваджено 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 - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки. Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код... Якщо ви хочете провести тестування безпеки 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)
Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки.
Використовуючи Fridump3, ви можете скинути пам'ять додатку з:
Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт:
В Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще можливо отримати до них доступ. Оскільки додатки, як правило, зберігають тут чутливі дані у відкритому тексті, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
Щоб отримати доступ до даних всередині keystore, ви можете використовувати цей скрипт Frida: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js
Використовуючи наступний скрипт Frida, можливо обійти аутентифікацію відбитків пальців, яку можуть виконувати Android-додатки для захисту певних чутливих областей:
Коли ви поміщаєте додаток у фоновий режим, Android зберігає знімок додатка, тому, коли він відновлюється на передній план, починає завантажувати зображення перед додатком, щоб здавалося, що додаток завантажився швидше.
Однак, якщо цей знімок містить чутливу інформацію, хтось, хто має доступ до знімка, може викрасти цю інформацію (зверніть увагу, що вам потрібен root для доступу до нього).
Знімки зазвичай зберігаються за адресою: /data/system_ce/0/snapshots
Android надає спосіб запобігти захопленню знімків екрану, встановивши параметр макета FLAG_SECURE. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на знімках екрану або перегляду на небезпечних дисплеях.
Цей інструмент може допомогти вам керувати різними інструментами під час динамічного аналізу: https://github.com/NotSoSecure/android_application_analyzer
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Intents і передають їх методам, таким як startActivity(...)
або sendBroadcast(...)
, що може бути ризиковано.
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно направляючи ці Intents. Яскравим прикладом є компонент WebView
, який перетворює URL-адреси на об'єкти Intent
через Intent.parseUri(...)
і потім виконує їх, що може призвести до шкідливих ін'єкцій Intent.
Intent Injection подібний до проблеми Open Redirect в вебі.
Експлойти включають передачу об'єктів Intent
як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
Перетворення URL в Intent
у WebView
може сприяти ненавмисним діям.
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
SQL Injection: При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
JavaScript Injection (XSS): Перевірте, що підтримка JavaScript і плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). Більше інформації тут.
Local File Inclusion: WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - (webview.getSettings().setAllowFileAccess(false);)
. Більше інформації тут.
Eternal cookies: У кількох випадках, коли Android-додаток завершує сесію, cookie не відкликається або може бути навіть збережено на диску.
Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
Hacking Insights Залучайтеся до контенту, який занурюється в захоплення та виклики хакерства.
Real-Time Hack News Слідкуйте за швидкоплинним світом хакерства через новини та інсайти в реальному часі.
Latest Announcements Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ.
Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!
Static analysis
Оцінка вразливостей додатка за допомогою зручного веб-інтерфейсу. Ви також можете виконати динамічний аналіз (але вам потрібно підготувати середовище).
Зверніть увагу, що 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
, тоді хеш буде завантажений замість файлу.
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 пінінгу, виявлення 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 Instrumentation" і ви побачите всі виходи в "Frida Live Logs".
Shell
Mobsf також надає вам оболонку з деякими adb командами, MobSF командами та загальними shell командами внизу сторінки динамічного аналізу. Деякі цікаві команди:
HTTP інструменти
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "HTTP(S) Traffic" внизу або більш привабливий вигляд у "Start HTTPTools" зеленій кнопці. З другого варіанту ви можете відправити захоплені запити до проксі таких як Burp або Owasp ZAP. Для цього, включіть Burp --> вимкніть Intercept --> у MobSB HTTPTools виберіть запит --> натисніть "Send to Fuzzer" --> виберіть адресу проксі (http://127.0.0.1:8080\).
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "Start Web API Fuzzer", щоб фузити http запити та шукати вразливості.
Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно налаштовані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
Ви можете отримати інструмент з Inspeckage. Цей інструмент використовує деякі Hooks, щоб дати вам знати що відбувається в додатку під час виконання динамічного аналізу.
Це чудовий інструмент для виконання статичного аналізу з графічним інтерфейсом
Цей інструмент призначений для пошуку кількох вразливостей Android-додатків, пов'язаних із безпекою, як у джерельному коді, так і в упакованих APK. Інструмент також може створювати "Proof-of-Concept" розгортаємий APK та команди ADB, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
Відображає всі витягнуті файли для зручного посилання
Автоматично декомпілює APK файли в Java та Smali формат
Аналізує AndroidManifest.xml на наявність загальних вразливостей та поведінки
Статичний аналіз вихідного коду на наявність загальних вразливостей та поведінки
Інформація про пристрій
та інше
SUPER - це програма командного рядка, яка може використовуватися в Windows, MacOS X та Linux, що аналізує .apk файли в пошуках вразливостей. Це робиться шляхом декомпресії APK і застосування серії правил для виявлення цих вразливостей.
Усі правила зосереджені в файлі rules.json
, і кожна компанія або тестувальник можуть створити свої власні правила для аналізу того, що їм потрібно.
Завантажте останні бінарні файли на сторінці завантаження
StaCoAn - це кросплатформений інструмент, який допомагає розробникам, шукачам вразливостей та етичним хакерам виконувати статичний аналіз коду мобільних додатків.
Концепція полягає в тому, що ви перетягуєте та скидаєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники, щоб отримати індивідуальний досвід.
Завантажте остання версію:
AndroBugs Framework - це система аналізу вразливостей Android, яка допомагає розробникам або хакерам знаходити потенційні вразливості безпеки в Android-додатках. Випуски для Windows
Androwarn - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
Виявлення здійснюється за допомогою статичного аналізу байт-коду Dalvik додатка, представленого як Smali, з використанням бібліотеки androguard
.
Цей інструмент шукає поширену поведінку "поганих" додатків, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
MARA - це Mобільний Aплікаційний Rеверс-інжиніринг та Aналіз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків і фахівців з безпеки.
Він здатний:
Витягувати Java та Smali код, використовуючи різні інструменти
Аналізувати APK, використовуючи: smalisca, ClassyShark, androbugs, androwarn, APKiD
Витягувати приватну інформацію з APK, використовуючи regexps.
Аналізувати Manifest.
Деобфускувати APK через apk-deguard.com
Корисно для виявлення шкідливого ПЗ: https://koodous.com/
Зверніть увагу, що в залежності від сервісу та конфігурації, яку ви використовуєте для обфускації коду, секрети можуть бути або не бути обфускованими.
З Wikipedia: ProGuard - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard - це безкоштовне програмне забезпечення, яке розповсюджується під ліцензією GNU General Public License, версія 2.
ProGuard розповсюджується як частина Android SDK і запускається під час створення програми в режимі випуску.
Знайдіть покрокову інструкцію для деобфускації apk на https://blog.lexfo.fr/dexguard.html
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
завантажити ресурс як InputStream;
передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
нарешті, завантажити отриманий DEX як ресурс, використовуючи метод loadDex
.
DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи інспекцію коду та прогнозування бібліотек.
Ви можете завантажити обфускований APK на їх платформу.
Це універсальний деобфускатор для Android. Simplify віртуально виконує додаток, щоб зрозуміти його поведінку, а потім намагається оптимізувати код, щоб він поводився ідентично, але був легшим для розуміння людиною. Кожен тип оптимізації є простим і універсальним, тому не має значення, який конкретний тип обфускації використовується.
APKiD надає вам інформацію про те, як був створений APK. Він ідентифікує багато компіляторів, упаковщиків, обфускаторів та інші дивні речі. Це PEiD для Android.
Прочитайте цей посібник, щоб дізнатися деякі хитрощі про те, як реверсувати власну обфускацію
AndroL4b - це віртуальна машина безпеки Android на базі ubuntu-mate, яка включає колекцію останніх фреймворків, навчальних посібників та лабораторій від різних фахівців з безпеки та дослідників для реверс-інжинірингу та аналізу шкідливого ПЗ.
https://appsecwiki.com/#/ Це чудовий список ресурсів
https://maddiestone.github.io/AndroidAppRE/ Швидкий курс Android
Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
Hacking Insights Залучайтеся до контенту, який занурюється в захоплення та виклики хакерства
Real-Time Hack News Слідкуйте за швидкоплинним світом хакерства через новини та інсайти в реальному часі
Latest Announcements Будьте в курсі нових програм винагород за вразливості та важливих оновлень платформ
Приєднуйтесь до нас на Discord і почніть співпрацювати з провідними хакерами вже сьогодні!
Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)