Резюме
Виртуальная машина - отличный способ познакомиться с тестированием на проникновение мобильных приложений на базе OS андроид, но для полноценного bug bounty этот способ скорее всего не подойдет. Как бы я ни старался, некоторые apk запускаться отказываются. Так же есть проблемы при взаимодействии с камерой и микрофоном. Плюс довольно большие требования к компьютерному железу.
Этот гайд освещает только клиент-серверное взаимодействие.
Используемый софт:
Установка genymotion
Genymotion - это виртуальная машина, на которой и будет крутиться наш виртуальный android. Устанавливаем virtualbox командой
Без него genymotion не работает. Или инсталлируем из стандартного менеджера программ.
После качаем geanymotion отсюда
Даем права на исполнение:
Устанавливаем:
После этих манипуляций программа должна появится в стандартном
меню приложений. Запускаем.
После необходимо зарегистрировать аккаунт, сделать это можно сделать прям в программе. Выбираем personal use only. Теперь переходим к настройке самого виртуального устройства. Нажимаем на большой плюсик, появляется окно с выбором моделей телефонов.
Я выбираю xiaomi redmi note 7.Вы можете выбрать любую модель из списка в зависимости от потребностей. Здесь можно выбрать необходимое разрешение экрана, установить количество ядер цпу ( я даю 2) и ОЗУ (3072) вполне достаточно. Жмем install.
Ждем пока машина скачается. Запускаем, устанавливаем open gaps(google apps) соответственным нажатием на кнопку справа посередине.
Так как genymotion создан под архитектуру х86, нам нужен arm ретранслятор под приложения, скомпилированые под arm, иначе возможны ошибки при запуске таких apk. Скачать можно здесь GitHub - m9rco/Genymotion_ARM_Translation: Genymotion_ARM_Translation Please enjoy! . Выбираем под версию андроида( последняя версия 8, я ставил восьмую на девятый и десятый андроид и проблем пока не было, в интернете соответствующих версий не было, поэтому если кто-то обладает информацией прошу мне отписать), качаем архив и устанавливаем, перетягивая архив прямо на активное окно виртуальной машины.
Настройка проксирования
Я буду использовать burp suite, установленный на виртуальной машине kali. Вы можете использовать ZAP или любой другой снифер.
Открываем терминал, пишем ifconfig, здесь видим ip нашей машины, запоминаем, он сейчас пригодится.
Заходим в burp, идем во вкладку proxy->options. Снимаем флажок с локального хоста(127.0.0.1), жмём add, в поле bind to port пишем 8080, где bind to adress->
specific address выбираем из списка ip из команды выше. Должно получится как-то так:
Теперь burp suite будет проксировать через себя весь незашифрованный трафик который придет на эту машину. Теперь осталось настроить прокси на андроид машине, переходим к ней, открываем настройки wifi, жмем + Add network, в поле network name пишем AndroidWifi, далее advanced options->proxy->manual,
в поле hostname указываем ip и порт как в настройках burp выше. Сохраняем.
Уже на данном этапе мы можем перехватывать и модифицировать незашифрованный трафик. Но этого явно недостаточно. Что бы смотреть трафик по https нам нужно добавить burp ca certificate в доверенные сертификаты. И вот тут-то и возникают проблемы, так как андроид выше уровня api 24 перестал доверять пользовательским сертификатам. И теперь нам нужно загрузить свой сертификат на системном (туда, где уже хранятся доверенные сертификаты по умолчанию) уровне, что без прав суперпользователя невозможно, благо все машины в genymotion сразу имеют root.
Настройка сертификата
Идем в burp, заходим в proxy->options->import/export CA certificate. Экспортируем сертификат in DER format. Сохраняем в .der формате по типу cacert.der.
Андроид хочет что бы сертификаты были в формате PEM и имя файла было эквивалентно subject_hash_old и с .0 в конце . Для преобразования нам понадобится утилита openssl.
После последней команды получаем хеш, используем его в следующей команде:
Если всё правильно, получится должно примерно следующее:
Далее полученный сертификат в формате PEM нам нужно скопировать в /system/etc/security/cacerts нашей андроид машины.Для этого нам потребуется утилита adb, которая уже есть в genymotion.Переходим в основную машину, дальнейшие действия будут из неё.
adb (android debug bridge) - это утилита командной строки, которая упрощает нам многие действия взаимодействия с телефоном и позволяет получить шелл. Переходим в
cd /opt/genymobile/genymotion/tools
Проверяем что наше устройство определяется
Далее:
(мой сертификат лежал в папке Документы)
Далее нам нужно получить шелл, для этого нужно подконнектится к андроид машине
Где ip это ип нашей виртуальной машины, посмотреть можно по команде ./adb devices как в примере выше а порт будет 5555
Получаем шелл оболочку виртуального смартфона:
Далее нам нужно переместить наш сертфикат в системную папку и дать ему привилегии
Выходим из шелла и ребутим устройство.
После перезагрузки устройства идем в settings->security and location->encryption & credentials->trusted credentials здесь и будет нужный нам сертификат.
Теперь мы можем прослушивать зашифрованный траффик из приложений и браузера и искать уязвимости. Как видим из скриншота ниже, https трафик перехватывается корректно.
Установка APK
Большинство приложений есть в play market, но если какой-то приложухи не оказалось можно установить apk, например отсюда
apk из установленного приложения на вашем физическом смартфоне, например с помощью утилиты apk exprort (есть в плей маркете). Установить можно просто перетянув apk файл на экран с запущенной виртуальной машиной, как мы делали с транслятором arm. Если не хочет устанавливаться идем в settings->developer options и отключаем опцию verify apps over USB. После этого устанавливаться должно без проблем.
Благодарю за прочтение, надеюсь моя статья будет полезной, буду рад критике и комментариям. С уважением, ваш Каджит в белой шляпе.
Виртуальная машина - отличный способ познакомиться с тестированием на проникновение мобильных приложений на базе OS андроид, но для полноценного bug bounty этот способ скорее всего не подойдет. Как бы я ни старался, некоторые apk запускаться отказываются. Так же есть проблемы при взаимодействии с камерой и микрофоном. Плюс довольно большие требования к компьютерному железу.
Этот гайд освещает только клиент-серверное взаимодействие.
Используемый софт:
- linux mint 20.1 lts (основная машина)
- virtualbox
- kali linux(виртуальная машина)
- genymotion
Установка genymotion
Genymotion - это виртуальная машина, на которой и будет крутиться наш виртуальный android. Устанавливаем virtualbox командой
Код:
sudo apt install virtualbox virtualbox-ext-pack
После качаем geanymotion отсюда
Ссылка скрыта от гостей
, открываем терминал, переходим в папку куда скачали, например:
Код:
cd ~/Downloads
Код:
chmod +x genymotion-3.1.2-linux_x64.bin
Код:
./genymotion-3.1.2-linux_x64.bin
меню приложений. Запускаем.
После необходимо зарегистрировать аккаунт, сделать это можно сделать прям в программе. Выбираем personal use only. Теперь переходим к настройке самого виртуального устройства. Нажимаем на большой плюсик, появляется окно с выбором моделей телефонов.
Я выбираю xiaomi redmi note 7.Вы можете выбрать любую модель из списка в зависимости от потребностей. Здесь можно выбрать необходимое разрешение экрана, установить количество ядер цпу ( я даю 2) и ОЗУ (3072) вполне достаточно. Жмем install.
Ждем пока машина скачается. Запускаем, устанавливаем open gaps(google apps) соответственным нажатием на кнопку справа посередине.
Так как genymotion создан под архитектуру х86, нам нужен arm ретранслятор под приложения, скомпилированые под arm, иначе возможны ошибки при запуске таких apk. Скачать можно здесь GitHub - m9rco/Genymotion_ARM_Translation: Genymotion_ARM_Translation Please enjoy! . Выбираем под версию андроида( последняя версия 8, я ставил восьмую на девятый и десятый андроид и проблем пока не было, в интернете соответствующих версий не было, поэтому если кто-то обладает информацией прошу мне отписать), качаем архив и устанавливаем, перетягивая архив прямо на активное окно виртуальной машины.
Настройка проксирования
Я буду использовать burp suite, установленный на виртуальной машине kali. Вы можете использовать ZAP или любой другой снифер.
Открываем терминал, пишем ifconfig, здесь видим ip нашей машины, запоминаем, он сейчас пригодится.
Заходим в burp, идем во вкладку proxy->options. Снимаем флажок с локального хоста(127.0.0.1), жмём add, в поле bind to port пишем 8080, где bind to adress->
specific address выбираем из списка ip из команды выше. Должно получится как-то так:
Теперь burp suite будет проксировать через себя весь незашифрованный трафик который придет на эту машину. Теперь осталось настроить прокси на андроид машине, переходим к ней, открываем настройки wifi, жмем + Add network, в поле network name пишем AndroidWifi, далее advanced options->proxy->manual,
в поле hostname указываем ip и порт как в настройках burp выше. Сохраняем.
Уже на данном этапе мы можем перехватывать и модифицировать незашифрованный трафик. Но этого явно недостаточно. Что бы смотреть трафик по https нам нужно добавить burp ca certificate в доверенные сертификаты. И вот тут-то и возникают проблемы, так как андроид выше уровня api 24 перестал доверять пользовательским сертификатам. И теперь нам нужно загрузить свой сертификат на системном (туда, где уже хранятся доверенные сертификаты по умолчанию) уровне, что без прав суперпользователя невозможно, благо все машины в genymotion сразу имеют root.
Настройка сертификата
Идем в burp, заходим в proxy->options->import/export CA certificate. Экспортируем сертификат in DER format. Сохраняем в .der формате по типу cacert.der.
Андроид хочет что бы сертификаты были в формате PEM и имя файла было эквивалентно subject_hash_old и с .0 в конце . Для преобразования нам понадобится утилита openssl.
Код:
cd path_to_certificate
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
Код:
mv cacert.pem хеш.0
Если всё правильно, получится должно примерно следующее:
Далее полученный сертификат в формате PEM нам нужно скопировать в /system/etc/security/cacerts нашей андроид машины.Для этого нам потребуется утилита adb, которая уже есть в genymotion.Переходим в основную машину, дальнейшие действия будут из неё.
adb (android debug bridge) - это утилита командной строки, которая упрощает нам многие действия взаимодействия с телефоном и позволяет получить шелл. Переходим в
cd /opt/genymobile/genymotion/tools
Проверяем что наше устройство определяется
Код:
./adb devices
Код:
./adb root
./adb remount
./adb push ~/Документы/9a5ba575.0 /sdcard/
(мой сертификат лежал в папке Документы)
Далее нам нужно получить шелл, для этого нужно подконнектится к андроид машине
Код:
./adb connect ip:port
Где ip это ип нашей виртуальной машины, посмотреть можно по команде ./adb devices как в примере выше а порт будет 5555
Получаем шелл оболочку виртуального смартфона:
Код:
./adb shell
Далее нам нужно переместить наш сертфикат в системную папку и дать ему привилегии
Код:
mv /sdcard/certificate_name.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/certificate_name.0
Выходим из шелла и ребутим устройство.
Код:
exit
./adb reboot
После перезагрузки устройства идем в settings->security and location->encryption & credentials->trusted credentials здесь и будет нужный нам сертификат.
Теперь мы можем прослушивать зашифрованный траффик из приложений и браузера и искать уязвимости. Как видим из скриншота ниже, https трафик перехватывается корректно.
Установка APK
Большинство приложений есть в play market, но если какой-то приложухи не оказалось можно установить apk, например отсюда
Ссылка скрыта от гостей
или собрать apk из установленного приложения на вашем физическом смартфоне, например с помощью утилиты apk exprort (есть в плей маркете). Установить можно просто перетянув apk файл на экран с запущенной виртуальной машиной, как мы делали с транслятором arm. Если не хочет устанавливаться идем в settings->developer options и отключаем опцию verify apps over USB. После этого устанавливаться должно без проблем.
Благодарю за прочтение, надеюсь моя статья будет полезной, буду рад критике и комментариям. С уважением, ваш Каджит в белой шляпе.
Последнее редактирование модератором: