Статья является переводом. Оригинал вотСсылка скрыта от гостей
Стремительное развитие и рост мобильных приложений несут в себе кучу уязвимостей, которые злоумышленники готовы эксплуатировать. Если вы разрабатываете приложения для Android и iOS-устройств и не успеваете за стратегиями пентеста, тогда вы должны быстро в них разобраться.
В этой статье я расскажу не только о пентесте приложений для Android, но и о том, как настроить LAB/ENVIRONMENT для тестирования Android, включая различные инструменты и скрипты с открытым исходным кодом.
Приложения для пентеста Android нуждаются в иных методиках, чем пентест веб-приложений. И эта разница заключается в том, что вы должны найти другой метод с помощью приложений для реверс-инженеринга. Кроме того, необходимо настроить эмулятор или реальное устройство в соответствии с типом приложений, которые вы хотите протестировать.
Введение
Архитектура Android:
Android - это система с открытым исходным кодом на базе Linux, созданная для широкого спектра устройств. На диаграмме ниже показаны основные компоненты платформы Android.
Системные приложения:
Android поставляется с различными наборами приложений для SMS, Email, интернет-браузеров и т.д. Любое стороннее приложение может быть установлено пользователем по умолчанию.
Стандартные библиотеки C/C++:
Некоторые основные компоненты системы Android, такие как ART и HAL, собраны из стандартного кода, который требует использования нативных библиотек, написанных на C и C++.
Java API Framework:
ОС Android доступна через API, написанные на языке Java. Эти API формируют "строительные блоки", необходимые для создания Android-приложений, упрощая повторное использование основных, модульных компонентов системы.
Ядро Linux:
Основой платформы Android является ядро Linux. Например, Android Runtime (ART) использует ядро Linux для базовых функций, таких как многопоточность и низкоуровневое управление памятью.
Модель безопасности Android:
Модель безопасности Android состоит из двух частей:
- Разделение UID
- Песочница
Безопасность между приложением Android и системой обеспечивается на уровне процесса с помощью различных средств Linux, таких как идентификаторы пользователей и групп. Существует еще один механизм, называемый "Разрешение", который обеспечивает соблюдение различных ограничений на конкретные операции, которые может выполнять конкретный процесс.
Я не буду останавливаться на подробностях модели безопасности. Итак, давайте перейдем к главному.
Содержимое файла APK:
- AndroidManifest.xml
- Assets каталог
- META-INF каталог
- Lib каталог
- Res каталог
- Classes.dex
- Resources.arsc
AndroidManifest.xml:
AndroidManifest.xml содержит имя приложения, версию, права доступа, ссылающиеся библиотеки и т.д. Этот файл обычно представлен в виде бинарного Android XML, который может быть преобразован с (Plain-text XML) в понятную форму с помощью различных инструментов.
Assets каталог:
Эта папка содержит активы приложения.
META-INF каталог:
Каталог META-INF содержит следующие файлы:
- MF (the Manifest File (файл манифеста)
- RSA (сертификат приложения)
- SF (содержит ресурсы и SHA1-Digest)
Lib каталог:
Каталог lib содержит скомпилированный код программного уровня процессора, далее этот каталог разбивается на несколько подкаталогов.
- Armeabi (код для всех процессоров на базе ARM)
- arm64-v8a (код для всех ARM64 процессоров )
- x86 (скомпилированный код x86 процессоров )
- MIPS (скомпилированный код для MIPS-процессоров)
Res каталог:
Каталог Res содержит ресурсы, которые не скомпилированы в resources.arsc.
Classes.dex
Classes.dex - это классы, которые скомпилированы в формате .dex файла, понятные виртуальной машине Dalvik. (Dalvik - это прекращающая работу виртуальная машина в операционной системе Google Android, которая выполняет приложения, написанные под Android).
Resources.arsc:
Этот файл содержит предварительно скомпилированные ресурсы.
Surface атака:
На рисунке ниже изображены все возможные аспекты атаки при тестировании приложения Android.
Настройка среды тестирования Android:
Пентестинг Android можно выполнить, как на реальных устройствах, так и на эмуляторах.
Мобильные устройства:
Если вы хотите протестировать приложения, которые включают в себя любое взаимодействие с камерой или отпечатком пальцев компонентов, включая то, как устройство ведет себя, то я бы предложил сделать это на реальных мобильных устройствах. Убедитесь, что у вас установлены драйверы USB на мобильном устройстве и USB-кабель в хорошем состоянии, в противном случае вы можете столкнуться со многими проблемами.
Выбор правильной операционной системы:
Android пентестинг на операционной системе Windows будет немного сложно выполнить из-за отсутствия инструментов для Windows OS. Однако, дистрибутив Оpen-Source Android приложения для пентестинга под названием
Ссылка скрыта от гостей
, специально создан для решения подобной ситуации.Я бы порекомендовал использовать этот дистрибутив, если вы работаете под управлением Windows. Вы также можете использовать его в Linux или MacOS, но я бы не рекомендовал, так как это может замедлить работу вашей системы. Вы можете установить те же самые инструменты в Linux или MacOS.
Установка Android эмулятора:
Доступно много эмуляторов Android в Интернете, но какой из них хорош для пентестинга?
На мой взгляд, Genymotion является лучшим эмулятором Android, потому что его легко настроить и использовать, а также удобен для работы.
Вы можете скачать Genymotion Android эмулятор здесь:
Ссылка скрыта от гостей
Обратите внимание, что для работы с программой Genymotion необходимо установить VirtualBox. Эмулятор Genymotion не работает без этого, поэтому Вы можете скачать Genymotion одним пакетом с официального сайта Genymotion.
Теперь выберите тип эмулятора и установите его. Я установил слудющее три эмулятора:
- Google Nexus 5 (Android 8.0, API-26, Density-420).
- Samsung Galaxy S7 (Android 6.0, API-23, Density-640 XXXHHDPI)
- Samsung Galaxy S8 (Android 7.0, API-24, Density 640 XXXHHDPI)
Настройка эмулятора Android:
После установки эмулятора выберите любое устройство и установите его, затем запустите его из GUI.
Установите Open GApps из опции, расположенной в правом верхнем углу.
Genymotion - это эмулятор на x86 основе, поэтому если вы попытаетесь установить приложение, имеющее ARM-код, Genymotion выдаст ошибку:
an error occured while deploying the file.
This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to x86 or install an ARM translation tool in your device.
Эта ошибка не позволит вам установить множество приложений, которые вам нужно будет установить для баг баунта.
Решением этой ошибки является установка ARM-Translation-Tool, которую можно скачать здесь: m9rco/Genymotion_ARM_Translation.
После загрузки ARM-Translation-Tools просто перетащите его в Genymotion и перезапустите эмулятор, и он будет установлен.
Примечание: Пожалуйста, загрузите инструмент перевода в соответствии с вашей версией Android.
Android Debug Bridge (ADB):
Android Debug Bridge (ADB): это универсальный инструмент командной строки, который позволяет общаться с устройством. Команда ADB облегчает выполнение различных действий на устройстве, таких как установка и отладка приложений, и обеспечивает доступ к оболочке Unix, которую можно использовать для выполнения различных команд на устройстве. Это программа клиент-сервер, которая включает в себя три компонента:
- Клиент, который отправляет команды. Клиент запускается на вашей машине разработки. Вы можете вызвать клиента из терминала командной строки, выполнив команду ADB.
- Daemon (ADB), который выполняет команды на устройстве. Daemon запускается как фоновый процесс на каждом устройстве.
- Сервер, который управляет связью между клиентом и daemon. Сервер запускается как фоновый процесс на машине разработки.
Установка ADB:
macOS:
brew cask install android-platform-tools
Linux/Debian:
sudo apt-get install adb
Fedora/ SUSE:
sudo yum install android-tools
В случае, если вышеуказанные команды не работают, вы можете скачать их здесь:
Ссылка скрыта от гостей
.Подключение Adb к мобильному устройству по TCP и USB кабелю:
Если вы хотите протестировать приложения Android на вашем мобильном устройстве, то вы должны подключить Adb с мобильными устройствами с помощью кабеля передачи данных или TCP (через сеть).
Возьмите кабель для передачи данных и подсоедините мобильное устройство к ПК/ноутбуку. Теперь перейдите к настройкам мобильного телефона и включите USB отладку (необходимый шаг). Теперь следуйте командам, приведенным ниже.
adb devices
Эта команда отобразит список устройств, подключенных к ADB.
Подключение по TCP:
Подключите телефон с помощью USB-кабеля к ПК/ноутбуку. Теперь введите следующую команду:
adb tcpip 5555
Вы увидите, что порт перезагружен, теперь отсоедините мобильный телефон (отсоедините USB кабель) и подключите телефон по TCP с помощью команд, приведенных ниже:
Код:
adb connect <ip address of device>:<port>
adb devices
После подключения мобильного устройства, вы можете использовать нижеприведенную команду для получения шела в Аndroid.
adb shell
соединение будет успешным.
Настройка Genymotion с BurpSuit:
Прежде всего, вам нужно, чтобы BurpSuit перехватывал трафик. Скачать BurpSuit можно отсюда:
Ссылка скрыта от гостей
Теперь давайте настроим прокси. Откройте burp и перейдите к "Proxy Tab", а затем "Options Tab", отсюда снимите флажок с выбранного прокси, т.е. (127.0.0.1). Теперь откройте терминал и введите команду "ifconfig" и выполните поиск по "VBOX interface ", скопируйте этот IP и вставьте его в Burp new proxy-listener, как показано на нижеприведенных рисунках:
Откройте мобильный Wi-Fi и измените Wifi сеть с помощью того же прокси, который используется в BurpSuit.
Теперь откройте любой интернет-браузер и просмотрите "
Ссылка скрыта от гостей
". В правом верхнем углу будет расположена опция для загрузки прокси-сертификата.Следующим шагом является открытие любого файлового менеджера, переход в папку загрузки и переименование "cacert.der" в "cacert.crt", а затем переход в Mobile settings > Security > User Credentials > Install from SD Card, выбор сертификата и его установка.
Настройка Frida:
FRIDA - это динамический инструментарий для разработчиков, реверс-инженеров и исследователей в области безопасности. Он поможет вам внедрить JS-фрагменты в стандартные приложения Android, iOS, Linux, Mac и Windows. Другими словами, вы можете внедрять свои собственные скрипты в black-box процессы.
Вы можете установить Frida и Frida-Tools на ваш компьютер с помощью команд, приведенных ниже:
Код:
pip install frida-tools
pip install frida
Теперь следующая часть - установка сервера Frida в Android эмулятор. Для установки Frida в ваш Android необходимо определить, какая архитектура у вас запущена. Выполните следующие шаги, чтобы определить вашу архитектуру.
- Запустите Android эмулятор и используйте ADB, чтобы получить оболочку. Теперь введите "uname -a" в оболочку ADB и проверьте, какая архитектура запущена.
- Как вы можете заметить, это 32-битная архитектура, поэтому нам нужно найти 32-битную архитектуру Frida-Server.
- Я запустил 12.8.14 версию Frida, поэтому нам нужно установить ту же версию Frida-Server на наш Android эмулятор.
- Вы можете найти сервер Frida в соответствии с вашим эмулятором Android отсюда: frida/frida.
- Теперь я должен найти сервер Frida Аndroid 12.8.14.
- После загрузки сервера Frida Аndroid вы можете распаковать его по команде "unxz {frida-xx-xx-xx-xx-xxx}".
- Теперь переместите распакованный сервер Frida в каталог "/data/local/tmp" в эмуляторе Аndroid.
- Измените файловые разрешения Frida-сервера с помощью команды "chmod 755 frida-server" и запустите сервер Frida.
- Теперь откройте терминал в вашей системе и введите "frida-ps -U", после чего вы увидите, что появился список процессов.
Итак, это все для Части (1). В части (2) я напишу о различных атаках и других инструментах, необходимых для пентеста.
Спасибо за внимание
Также, взгляните на эту статью по возможности:
Ссылка скрыта от гостей
Последнее редактирование: