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

от автора

Мы в 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-кодов.


ссылка на оригинал статьи https://habr.com/ru/articles/685410/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *