Мы в 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. Окей, соберем всё сами :) Для этого нам понадобятся только WSL с любым рабочим Линуксом и Windows 11. В интернете можно найти готовые сборки (например, тут), но мне кажется плохой практикой из статьи отправлять качать какой-то ZIP-архив из Telegram-канала. Ну и мы же всё-таки хакеры, которые умеют использовать командную строку. Убедитесь, что у вас включена Virtual Machine Platform и WSL. Это можно сделать в приложении "Компоненты Windows" или "Windows Features" — зависит от вашей локали. Далее необходимо использовать линукс для запуска скрипта, который скачивает требуемые артефакты и делает для нас сборку WSA. Я использую версию Ubuntu для WSL. Прокликиваем необходимые параметры. Я выбрал GApps Pico и Magisk. Скрипт будет качать дистрибутив WSA размером 1.5гб, Magisk и OpenGApps, так что нужно подождать. В результате у нас должна быть папка со следующим содержимым: Открываем PowerShell с администраторскими привилегиями в данном каталоге и выполняем следующую команду: Если команда выполнилась успешно, то вы только что установили WSA 👏 Теперь в системе у вас должна появиться программа под названием "Параметры подсистемы Windows для Android" Запустите её и включите режим разработчика. Теперь мы можем подключиться по adb. Для начала нам необходимо установить приложение Magisk, взять его можно в официальном репозитории https://github.com/topjohnwu/Magisk/releases . Тут надо сделать отступление, что приложения, которые вы устанавливаете в 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. Теперь идём в Magisk -> Модули -> Установить из хранилища и выбираем riru.zip. Также устанавливаем и lsposed.zip. На следующем шаге нам необходимо еще установить приложение LSposed для менеджмента модулей. APK располагается по пути /data/adb/lspd/. Готово :) Теперь можно ставить модули и работать. Нашим каждодневным инструментом является BurpSuite —  использовать будем именно его. Вы же можете использовать любой другой инструмент, например Owasp ZAP или MitmProxy. Экспортируем CA-сертификат, используемый BurpSuite. При экспорте выбираем DER format. Находим наш сертификат в проводнике и жмем на него два раза. Переходим на вкладку состав.  Копируем в файл в кодировке Base-64. Я его сохранил под именем outfile.cer. Снова открываем WSl и используем openssl для высчитывания хеша сертификата. Он будет использоваться в дальнейшем как имя файла, иначе Android будет его игнорировать. Следующим шагом необходимо его поместить на устройство, сделать это можно следующей командой: Устанавливаем Magisk-модуль, который добавит наш пользовательский сертификат в каталог к системным. Будем использовать модуль MagiskTrustUserCerts. И устанавливаем его через Magisk, как было ранее с LSposed и RiRu. Теперь самое интересное — нужно добавить свой сертификат на устройство, но в настройках WSA (можно открыть командой adb shell am start com.android.settings ) отсутствует пункт с добавлением пользовательского CA-сертификата. Следующие команды выполняются через adb shell. После перезагрузки модуль MagiskTrustUserCerts переместит наш пользовательский сертификат в системное хранилище. Направим трафик приложения в BurpSuite. Я буду использовать проброс портов через ADB, так как это проще всего. Почему-то многие забывают, что adb умеет многое, помимо запуска шелла и установки apk :) Другой вариант — посмотреть наш ip на интерфейсе vEthernet (WSL) и указать его как адрес HTTP proxy. Теперь мы можем изучать трафик большинства приложений прямо из интерфейса Windows. Данный инструмент уже давно используется людьми, которые интересуются мобильной безопасностью и существует множество полезных тулзовин, которые используют Frida. Скачаем frida server и перенесем на устройство. Подключиться можно следующим образом, используя форвардинг через adb.  Таким образом, наше виртуальное устройство будет определяться как USB-девайс, что весьма удобно. Как я сказал ранее, Windows Subsystem for Android интегрируется в систему. Приложения вместе с иконками интегрируются в хостовую систему. Таким образом, все приложения, которые установлены в подсистемы, будут видны на хосте. Уведомления WSA показываются в общем фиде Windows. Если кто-то вызывет интент для написания письма, то приложения на хосте это подхватят, и наоборот. Deeplink, который вы обьявили в интент-фильтре мобильного приложения, известен хосту, и вы можете из хоста провалиться в приложение на подсистеме. Первые две особенности не так интересны, как другие. Давайте сделаем приложение со следующим intent-фильтром и установим его на WSA. Теперь запустим довольно старую программу URLProtocolView, которая показывает зарегистрированные URL-схемы в виндовс. Если отсортировать по URL name, то мы увидим зарегистрированную схему dsec. Сделаем простую страничку со следующим контентом: Если перейти по ней и кликнуть из браузера на хосте, то произойдет следующее: Что в этот момент происходит на устройстве? У нас есть XPosed-модуль, который вешает хуки на некоторые функции и показывает их в удобном виде. Вы же можете использовать Xintent (https://github.com/2Y2s1mple/xintent) Получается, в WSA есть приложение агент, который выступает как прокси и запускает диплинки, приходящие из хостовой системы :) Это же приложение объявляет, что оно слушает mailto-, sip- и tel-схемы. WSA абсолютно точно подходит, чтобы сидеть в обычных пользовательских приложениях и даже играть в некоторые мобильные игрушки. Но что с точки зрения пентестера и анализа мобильных приложений? WSA, на мой взгляд, гораздо проще и легче, чем аналоги. Например, Android Studio AVD или Genymotion. И по большей части ничем им не уступает. Однако есть один существенный недостаток — WSA не умеет в биометрическую аутентификацию, что при полноценном аудите приложения заставит искать реальный телефон или всё-таки работать через тот же Android Studio AVD. Также не получилось использовать камеру, она не прокидывается с хоста, и это может вызвать проблемы при тестировании приложений с распознаванием данных и QR-кодов.