Статья Начало работы в Android приложениях по пентестингу (Часть 1)

Статья является переводом. Оригинал вот тут

1588937136773.png


Стремительное развитие и рост мобильных приложений несут в себе кучу уязвимостей, которые злоумышленники готовы эксплуатировать. Если вы разрабатываете приложения для Android и iOS-устройств и не успеваете за стратегиями пентеста, тогда вы должны быстро в них разобраться.

В этой статье я расскажу не только о пентесте приложений для Android, но и о том, как настроить LAB/ENVIRONMENT для тестирования Android, включая различные инструменты и скрипты с открытым исходным кодом.

Приложения для пентеста Android нуждаются в иных методиках, чем пентест веб-приложений. И эта разница заключается в том, что вы должны найти другой метод с помощью приложений для реверс-инженеринга. Кроме того, необходимо настроить эмулятор или реальное устройство в соответствии с типом приложений, которые вы хотите протестировать.


Введение
Архитектура Android:


Android - это система с открытым исходным кодом на базе Linux, созданная для широкого спектра устройств. На диаграмме ниже показаны основные компоненты платформы Android.

1588937524273.png



Системные приложения:

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:

1588938236516.png

  • 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.

1588938505882.png



Настройка среды тестирования Android:

Пентестинг Android можно выполнить, как на реальных устройствах, так и на эмуляторах.


Мобильные устройства:

Если вы хотите протестировать приложения, которые включают в себя любое взаимодействие с камерой или отпечатком пальцев компонентов, включая то, как устройство ведет себя, то я бы предложил сделать это на реальных мобильных устройствах. Убедитесь, что у вас установлены драйверы USB на мобильном устройстве и USB-кабель в хорошем состоянии, в противном случае вы можете столкнуться со многими проблемами.


Выбор правильной операционной системы:

Android пентестинг на операционной системе Windows будет немного сложно выполнить из-за отсутствия инструментов для Windows OS. Однако, дистрибутив Оpen-Source Android приложения для пентестинга под названием "Santoku ISO", специально создан для решения подобной ситуации.

Я бы порекомендовал использовать этот дистрибутив, если вы работаете под управлением Windows. Вы также можете использовать его в Linux или MacOS, но я бы не рекомендовал, так как это может замедлить работу вашей системы. Вы можете установить те же самые инструменты в Linux или MacOS.


Установка Android эмулятора:

Доступно много эмуляторов Android в Интернете, но какой из них хорош для пентестинга?

На мой взгляд, Genymotion является лучшим эмулятором Android, потому что его легко настроить и использовать, а также удобен для работы.

Вы можете скачать Genymotion Android эмулятор здесь: Download Genymotion Desktop – Android Emulator


Обратите внимание, что для работы с программой Genymotion необходимо установить VirtualBox. Эмулятор Genymotion не работает без этого, поэтому Вы можете скачать Genymotion одним пакетом с официального сайта Genymotion.

1588939031143.png


Теперь выберите тип эмулятора и установите его. Я установил слудющее три эмулятора:
  • 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)
Вы можете установить устройства в соответствии с вашими требованиями.

1588939036504.png


Настройка эмулятора Android:

После установки эмулятора выберите любое устройство и установите его, затем запустите его из GUI.

Установите Open GApps из опции, расположенной в правом верхнем углу.

1588939047693.png



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.


1588939063165.png


Эта ошибка не позволит вам установить множество приложений, которые вам нужно будет установить для баг баунта.

Решением этой ошибки является установка ARM-Translation-Tool, которую можно скачать здесь: m9rco/Genymotion_ARM_Translation.

После загрузки ARM-Translation-Tools просто перетащите его в Genymotion и перезапустите эмулятор, и он будет установлен.

1588939202732.png


Примечание: Пожалуйста, загрузите инструмент перевода в соответствии с вашей версией 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

В случае, если вышеуказанные команды не работают, вы можете скачать их здесь: SDK Platform Tools release notes | Android Developers.


Подключение Adb к мобильному устройству по TCP и USB кабелю:

Если вы хотите протестировать приложения Android на вашем мобильном устройстве, то вы должны подключить Adb с мобильными устройствами с помощью кабеля передачи данных или TCP (через сеть).

Возьмите кабель для передачи данных и подсоедините мобильное устройство к ПК/ноутбуку. Теперь перейдите к настройкам мобильного телефона и включите USB отладку (необходимый шаг). Теперь следуйте командам, приведенным ниже.

adb devices

1588939420954.png


Эта команда отобразит список устройств, подключенных к ADB.


Подключение по TCP:

Подключите телефон с помощью USB-кабеля к ПК/ноутбуку. Теперь введите следующую команду:

adb tcpip 5555

1588939448301.png


Вы увидите, что порт перезагружен, теперь отсоедините мобильный телефон (отсоедините USB кабель) и подключите телефон по TCP с помощью команд, приведенных ниже:

Код:
adb connect <ip address of device>:<port>
adb devices

После подключения мобильного устройства, вы можете использовать нижеприведенную команду для получения шела в Аndroid.

adb shell

1588939508305.png


соединение будет успешным.


Настройка Genymotion с BurpSuit:

Прежде всего, вам нужно, чтобы BurpSuit перехватывал трафик. Скачать BurpSuit можно отсюда: Burp Suite - Cybersecurity Software from PortSwigger

Теперь давайте настроим прокси. Откройте burp и перейдите к "Proxy Tab", а затем "Options Tab", отсюда снимите флажок с выбранного прокси, т.е. (127.0.0.1). Теперь откройте терминал и введите команду "ifconfig" и выполните поиск по "VBOX interface ", скопируйте этот IP и вставьте его в Burp new proxy-listener, как показано на нижеприведенных рисунках:

1588939763734.png


1588939768927.png


1588939773355.png


Откройте мобильный Wi-Fi и измените Wifi сеть с помощью того же прокси, который используется в BurpSuit.

1588939813789.png


Теперь откройте любой интернет-браузер и просмотрите "http://burp". В правом верхнем углу будет расположена опция для загрузки прокси-сертификата.

1588939879674.png


Следующим шагом является открытие любого файлового менеджера, переход в папку загрузки и переименование "cacert.der" в "cacert.crt", а затем переход в Mobile settings > Security > User Credentials > Install from SD Card, выбор сертификата и его установка.

1588939885962.png


1588939889980.png


Настройка Frida:

FRIDA - это динамический инструментарий для разработчиков, реверс-инженеров и исследователей в области безопасности. Он поможет вам внедрить JS-фрагменты в стандартные приложения Android, iOS, Linux, Mac и Windows. Другими словами, вы можете внедрять свои собственные скрипты в black-box процессы.

Вы можете установить Frida и Frida-Tools на ваш компьютер с помощью команд, приведенных ниже:

Код:
pip install frida-tools
pip install frida


1588940391345.png


Теперь следующая часть - установка сервера Frida в Android эмулятор. Для установки Frida в ваш Android необходимо определить, какая архитектура у вас запущена. Выполните следующие шаги, чтобы определить вашу архитектуру.
  • Запустите Android эмулятор и используйте ADB, чтобы получить оболочку. Теперь введите "uname -a" в оболочку ADB и проверьте, какая архитектура запущена.
1588940607100.png

  • Как вы можете заметить, это 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.
1588940688807.png

  • Измените файловые разрешения Frida-сервера с помощью команды "chmod 755 frida-server" и запустите сервер Frida.
1588940693364.png

  • Теперь откройте терминал в вашей системе и введите "frida-ps -U", после чего вы увидите, что появился список процессов.
1588940708546.png


Итак, это все для Части (1). В части (2) я напишу о различных атаках и других инструментах, необходимых для пентеста.

Спасибо за внимание

Также, взгляните на эту статью по возможности: Hacking SMS API Service Provider of a Company |Android App Static Security Analysis | Bug Bounty POC
 
Последнее редактирование:

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 996
Бро,очень крутой перевод.Благодарю и не останавливайся.
Многие вопросы сами собой отпадают.
 
  • Нравится
Реакции: zppr и g00db0y

Salivan

Green Team
24.06.2019
44
14
ТС, не понял зачем нам эмулятор андроида, если есть живой свой тел на андроиде к примеру как жертва, есть инструменты для пентеста андроида, каким здесь боком эмулятор (если посыл типа на разные модели пентестить, да вначале это вообще лишнее запутывать разными моделями еще, народ концепцию пытается вкурить, а ему разные модели телефонов), здесь техники и инструменты для пентеста интересно покрутить.
Тема пентеста андроида интересна.
 
Последнее редактирование:

g00db0y

Red Team
11.06.2018
139
654
ТС, не понял зачем нам эмулятор андроида, если есть живой свой тел на андроиде к примеру как жертва, есть инструменты для пентеста андроида, каким здесь боком эмулятор (если посыл типа на разные модели пентестить, да вначале это вообще лишнее запутывать разными моделями еще, народ концепцию пытается вкурить, а ему разные модели телефонов), здесь техники и инструменты для пентеста интересно покрутить.
Тема пентеста андроида интересна.
Не всегда под рукой есть живой телефон. Также, если пентест происходит в ознакомительных целях, то,на мой взгляд, эмуляторы - незаменимая вещь.
 
  • Нравится
Реакции: Niki65, Vertigo и ОдИн

mura003

One Level
25.10.2019
2
2
Классный перевод, бро!
Жду с нетерпением продолжения!
 
  • Нравится
Реакции: g00db0y

never

Green Team
24.01.2019
16
4
хорошая статья ,хотелось бы добавить что чем ставить берб и фриду уже есть аналог BRIDA который два в одном и может сильно облегчить процесс, ну вообшем на любителя, спс за перевод
 
Мы в соцсетях: