Как стать автором
Обновить
97.75
Рейтинг
Digital Security
Безопасность как искусство

Готовим Android к пентесту — WSA edition

Блог компании Digital Security Информационная безопасность *Разработка под Android *Тестирование мобильных приложений *
Tutorial

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

Существует множество вариантов для настройки пентестерского окружения, в котором можно выделить две группы устройств — виртуальные девайсы и физические.

У нас есть некоторое количество рутованных девайсов с одним и тем же окружением, однако иногда приходится использовать виртуальные. В основном, это Android Studio AVD.

Не так давно компания Microsoft зарелизила Windows Subsystem for Android (TM). Меня настолько заинтересовал данный инструмент, что я бросил своё рабочее окружение на Fedora Linux и поставил Windows 11.

Можно было бы писать эту статью в контексте реального устройства или виртуального девайса Android Studio, но мне кажется интереснее будет разобрать Windows Subsystem For Android 😄

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

Как этот инструмент описывает сама Microsoft:

Подсистема Windows для Android позволяет устройству Windows 11 запускать приложения для Android, доступные в Amazon Appstore. Android является товарным знаком Google LLC. Это руководство поможет разработчикам, которые заинтересованы в создании приложений для настольных устройств Windows и оптимизации работы с операционной системой Windows.

Чтобы приложение Android было доступно на устройствах Windows 11, вам нужно сделать следующее: - Установите Amazon AppStore

На самом деле пункт про Amazon AppStore не совсем правда. Уже существует сборка WSA, которая идет в комплекте с Magisk, GApps и, естественно, root-доступом.

https://github.com/LSPosed/MagiskOnWSALocal

Данная сборка распространяется в репозитории, которым владеют разработчики LSPosed — активного форка XPosed. Репозиторий был заблокирован за нарушение правил использования Github Actions, и на данный момент он не предоставляет готовую сборку средствами GitHub.

Окей, соберем всё сами :)

Установка WSA

Для этого нам понадобятся только WSL с любым рабочим Линуксом и Windows 11. В интернете можно найти готовые сборки (например, тут), но мне кажется плохой практикой из статьи отправлять качать какой-то ZIP-архив из Telegram-канала. Ну и мы же всё-таки хакеры, которые умеют использовать командную строку.

Убедитесь, что у вас включена Virtual Machine Platform и WSL. Это можно сделать в приложении "Компоненты Windows" или "Windows Features" — зависит от вашей локали.

Активация компонентов Windows
Активация компонентов Windows

Далее необходимо использовать линукс для запуска скрипта, который скачивает требуемые артефакты и делает для нас сборку WSA. Я использую версию Ubuntu для WSL.

git clone https://github.com/LSPosed/MagiskOnWSALocal.git
cd MagiskOnWSALocal
cd scripts
sudo ./run.sh # На данном этапе установятся необходимые вещи для скрипта и будет создана сборка WSA.

Прокликиваем необходимые параметры. Я выбрал GApps Pico и Magisk.

Скрипт будет качать дистрибутив WSA размером 1.5гб, Magisk и OpenGApps, так что нужно подождать.

Исполнение скрипта для сборки WSA
Исполнение скрипта для сборки WSA

В результате у нас должна быть папка со следующим содержимым:

Собранная сборка WSA в каталоге Windows
Собранная сборка WSA в каталоге Windows

Открываем PowerShell с администраторскими привилегиями в данном каталоге и выполняем следующую команду:

Add-AppxPackage -Register .\AppxManifest.xml

Если команда выполнилась успешно, то вы только что установили WSA 👏

Теперь в системе у вас должна появиться программа под названием "Параметры подсистемы Windows для Android"

Настройка девайса

Запустите её и включите режим разработчика.

Теперь мы можем подключиться по adb.

adb connect 127.0.0.1:58256

Для начала нам необходимо установить приложение Magisk, взять его можно в официальном репозитории https://github.com/topjohnwu/Magisk/releases .

adb install .\Magisk-v25.2.apk

Тут надо сделать отступление, что приложения, которые вы устанавливаете в WSA интегрируются в хостовую систему. Таким образом, через меню "Пуск" запускаем Magisk.

Теперь протестируем то, ради чего всё это делалось. Открываем adb shell и пробуем выполнить команду su для повышения привилегий.

Если всё сделано правильно, то появится следующее окно с запросом предоставления прав суперпользователя.

Как итог:

Отлично. У нас есть Magisk и root-доступ. Следующим шагом установим LSPosed, чтобы можно было использовать модули XPosed. Сам XPosed не поддерживает свежие выпуски Android, а LSposed активный форк.

Скачаем следующие вещи:

  • Riru v25+

  • LSPosed module

К сожалению, у разработчика Magisk кончились силы на поддержку репозитория (пруф - https://topjohnwu.medium.com/state-of-magisk-2021-fe29fdaee458), поэтому придется немного поработать руками через Powershell.

Invoke-WebRequest "https://github.com/RikkaApps/Riru/releases/download/v25.4.4/riru-v25.4.4-release.zip" -OutFile "riru.zip"
adb push .\riru.zip /storage/emulated/0/

Invoke-WebRequest "https://github.com/LSPosed/LSPosed/releases/download/v1.8.3/LSPosed-v1.8.3-6552-riru-release.zip" -OutFile "lsposed.zip"
adb push .\lsposed.zip /storage/emulated/0/

Теперь идём в Magisk -> Модули -> Установить из хранилища и выбираем riru.zip. Также устанавливаем и lsposed.zip.

На следующем шаге нам необходимо еще установить приложение LSposed для менеджмента модулей. APK располагается по пути /data/adb/lspd/.

su
cd /data/adb/lspd
cp manager.apk /data/local/tmp
pm install /data/local/tmp/manager.apk
# Необходим перезагрузить устройство, чтобы изменения вступили в силу.
reboot

Готово :) Теперь можно ставить модули и работать.

Заворачиваем трафик в прокси

Нашим каждодневным инструментом является BurpSuite — использовать будем именно его. Вы же можете использовать любой другой инструмент, например Owasp ZAP или MitmProxy.

Экспортируем CA-сертификат, используемый BurpSuite. При экспорте выбираем DER format.

Находим наш сертификат в проводнике и жмем на него два раза. Переходим на вкладку состав.

Копируем в файл в кодировке Base-64. Я его сохранил под именем outfile.cer.

Снова открываем WSl и используем openssl для высчитывания хеша сертификата. Он будет использоваться в дальнейшем как имя файла, иначе Android будет его игнорировать.

openssl x509 -inform PEM -subject_hash_old -in outfile.cer

Следующим шагом необходимо его поместить на устройство, сделать это можно следующей командой:

adb push .\outfile.cer /storage/emulated/0/9a5ba575.0 # где 9a5ba575 это хеш сертификата

Устанавливаем Magisk-модуль, который добавит наш пользовательский сертификат в каталог к системным. Будем использовать модуль MagiskTrustUserCerts.

Invoke-WebRequest "https://github.com/NVISOsecurity/MagiskTrustUserCerts/releases/download/v0.4.1/AlwaysTrustUserCerts.zip" -OutFile "trustcerts.zip"
adb push .\trustcerts.zip /storage/emulated/0/

И устанавливаем его через Magisk, как было ранее с LSposed и RiRu.

Теперь самое интересное — нужно добавить свой сертификат на устройство, но в настройках WSA (можно открыть командой
adb shell am start com.android.settings ) отсутствует пункт с добавлением пользовательского CA-сертификата. Следующие команды выполняются через adb shell.

su # переходим в рута
cd /data/misc/user/0
mkdir cacerts-added
cp /storage/emulated/0/9a5ba575.0 cacerts-added/
chown -R system:system cacerts-added/
reboot

После перезагрузки модуль MagiskTrustUserCerts переместит наш пользовательский сертификат в системное хранилище.

Направим трафик приложения в BurpSuite. Я буду использовать проброс портов через ADB, так как это проще всего. Почему-то многие забывают, что adb умеет многое, помимо запуска шелла и установки apk :) Другой вариант — посмотреть наш ip на интерфейсе vEthernet (WSL) и указать его как адрес HTTP proxy.

adb reverse tcp:7777 tcp:8080 
adb shell settings put global http_proxy 127.0.0.1:7777

Теперь мы можем изучать трафик большинства приложений прямо из интерфейса Windows.

Frida

Данный инструмент уже давно используется людьми, которые интересуются мобильной безопасностью и существует множество полезных тулзовин, которые используют Frida.

Скачаем frida server и перенесем на устройство.

Invoke-WebRequest "https://github.com/frida/frida/releases/download/15.2.2/frida-server-15.2.2-android-x86_64.xz" -OutFile "fridaserver.xz"
7z e fridaserver.xz 
adb push .\fridaserver /data/local/tmp
# переходим в шелл девайса
adb shell
su
chmod +x /data/local/tmp/fridaserver
/data/local/tmp/fridaserver # запускаем frida server

Подключиться можно следующим образом, используя форвардинг через adb.

adb forward tcp:27042 tcp:27042

Таким образом, наше виртуальное устройство будет определяться как USB-девайс, что весьма удобно.

Интересная особенность

Как я сказал ранее, Windows Subsystem for Android интегрируется в систему.

  • Приложения вместе с иконками интегрируются в хостовую систему. Таким образом, все приложения, которые установлены в подсистемы, будут видны на хосте.

  • Уведомления WSA показываются в общем фиде Windows.

  • Если кто-то вызывет интент для написания письма, то приложения на хосте это подхватят, и наоборот.

  • Deeplink, который вы обьявили в интент-фильтре мобильного приложения, известен хосту, и вы можете из хоста провалиться в приложение на подсистеме.

Первые две особенности не так интересны, как другие.

Давайте сделаем приложение со следующим intent-фильтром и установим его на WSA.

<activity  
    android:name=".DeeplinkActivity"  
    android:exported="true">  
    <intent-filter>        
	    <action android:name="android.intent.action.VIEW" />  
        <category android:name="android.intent.category.DEFAULT" />  
        <category android:name="android.intent.category.BROWSABLE" />  
  
        <data android:scheme="dsec" />  
        <data android:host="open" />  
    </intent-filter>
</activity>

Теперь запустим довольно старую программу URLProtocolView, которая показывает зарегистрированные URL-схемы в виндовс. Если отсортировать по URL name, то мы увидим зарегистрированную схему dsec.

Сделаем простую страничку со следующим контентом:

<a href="dsec://open">Click</a>

Если перейти по ней и кликнуть из браузера на хосте, то произойдет следующее:

Что в этот момент происходит на устройстве? У нас есть XPosed-модуль, который вешает хуки на некоторые функции и показывает их в удобном виде. Вы же можете использовать Xintent (https://github.com/2Y2s1mple/xintent)

Получается, в WSA есть приложение агент, который выступает как прокси и запускает диплинки, приходящие из хостовой системы :) Это же приложение объявляет, что оно слушает mailto-, sip- и tel-схемы.

Подводим итоги

WSA абсолютно точно подходит, чтобы сидеть в обычных пользовательских приложениях и даже играть в некоторые мобильные игрушки. Но что с точки зрения пентестера и анализа мобильных приложений? WSA, на мой взгляд, гораздо проще и легче, чем аналоги. Например, Android Studio AVD или Genymotion. И по большей части ничем им не уступает.

Однако есть один существенный недостаток — WSA не умеет в биометрическую аутентификацию, что при полноценном аудите приложения заставит искать реальный телефон или всё-таки работать через тот же Android Studio AVD. Также не получилось использовать камеру, она не прокидывается с хоста, и это может вызвать проблемы при тестировании приложений с распознаванием данных и QR-кодов.

Теги:
Хабы:
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 3.8K
Комментарии 3
Комментарии Комментарии 3

Публикации

Информация

Сайт
dsec.ru
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия