Перевод: Тестирование Android 101 - часть 1
@Ent_TranslateIBДобро пожаловать в новую серию статей о тестировании Android. Эта серия о том, как можно взломать Android и найти в нем уязвимости, используя различные методы. В этой серии мы стремимся охватить все уязвимости, которые вы можете найти, вместе с методологией. В первой части мы стремимся охватить базовое описание того, как проводится тестирование Android, и все инструменты, необходимые для его выполнения. Итак, вооружитесь и зарядите свои арсеналы!!!
Если перейти к самым основам, то мобильные приложения обычно бывают трех типов:
- Нативные приложения: Это мобильные приложения, разработанные для конкретной операционной системы (ОС) или платформы. Они обычно нуждаются в эмуляторе, и веб-атаки (такие как XSS) невозможны для такого типа приложений.
- Веб-приложения: Это приложения на основе браузера и обычно используют WebView (системный компонент в Android) для отображения веб-страниц на операционной системе Android. Им не требуется эмулятор, и веб-атаки (такие как XSS) возможны.
- Гибридные приложения: Как следует из названия, они представляют собой комбинацию двух вышеперечисленных приложений и обычно требуют эмулятора для тестирования. Это те приложения, которые можно встретить в реальном мире.
Теперь, прежде чем мы узнаем о тестировании android, очень важно знать, как работает его архитектура. Я дам краткое описание каждого компонента, но если вы хотите узнать больше, вы можете прочитать об этом здесь.

- Applications: Самый верхний слой архитектуры, где устанавливаются все сторонние приложения. Примеры: Camera, WhatsApp, Google и т.д.
- Application Framework: Это слой, который предоставляет различные классы для создания приложения Android. Примеры Activity Manager, Content Provider и т.д.
- Android Runtime: Самый важный слой состоит из виртуальной машины Dalvik. Виртуальная машина Dalvik Virtual Machine (DVM) похожа на JVM, которая позволяет запускать приложения и предоставляет различные библиотеки платформы, такие как SSL, SQLite, Media и т.д.
- Linux Kernel: Это сердце архитектуры android, которое обеспечивает такие функции, как безопасность, управление памятью, управление процессами и т.д.
Теперь давайте быстро посмотрим на различные компоненты Android.
- Activity: Это java-классы, имеющие некоторые предопределенные функции, которые запускаются в различных состояниях приложения. Всего существует четыре состояния приложения: Active, Pause, Stop и Destroy. Различные методы, которые могут быть вызваны: onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(). Подумайте о ситуации, когда передаются конфиденциальные данные, появляется метод onPause() и через n секунд вызывается метод onResume(), как тогда приложение будет обрабатывать конфиденциальные данные? Это может быть хорошим примером для проверки.
- Services: Это операции, которые происходят в фоновом режиме и не имеют пользовательского интерфейса. Службы являются критически важными и должны всегда проверяться, поскольку злоумышленники обычно устанавливают вредоносное ПО именно здесь. В качестве примера можно привести приложение-калькулятор, запрашивающее разрешение на ведение журнала звонков.
- Intents: Они привязаны к различным компонентам приложения и используются для выполнения различных действий и вызова активности в различных приложениях. Фильтры Intents используются для защиты действий.
- Content Providers: Действуют как промежуточный слой для доступа к данным из различных источников.
- Broadcast Receivers: Они получают широковещательные сообщения от различных событий, которые могут исходить от одного или многих приложений. Например, когда приложение получает SMS, оно отправляет широковещательное сообщение всем остальным приложениям.
Теперь поговорим о файловой системе Android. Ниже перечислены папки, находящиеся в файловой иерархии:
- /boot: Загрузочные файлы, состоящие из ядра Android и ramdisk
- /system: В этой папке хранится вся ОС Android. Она также состоит из предустановленных системных приложений, которые хранятся в папке /system/app
- /recovery: Эта папка предназначена для резервного копирования и рассматривается как альтернативный вариант загрузки.
- /cache: В этой папке хранятся данные и компоненты часто используемых приложений.
- /misc: Содержит различные системные настройки
- /sdcard: Эта папка представляет собой пространство, которое доступно пользователям для хранения их файлов и данных.
- /data: В этой папке хранятся все данные пользователя.
- /data/data: Содержит данные всех приложений, установленных пользователем.
- /data/app: Состоит из всех APK приложений, установленных пользователем
- /data/system: Содержит такие файлы, как gesture.key, password.key.
- /data/local/tmp: Временная, доступная для записи
Некоторые важные файлы и папки обычно создаются во время создания приложения. В нашем тестировании android очень важно просмотреть эти файлы и папки. Ниже перечислены различные важные файлы и папки:
- AndroidManifest.xml: содержит структуру и метаданные приложения. Обычно все разрешения, ключи API и т.д. хранятся в этом файле.
- Java: В этой конкретной папке содержатся файлы исходного кода Java.
- drawable: Все изображения, видео, gif-файлы и т.д. хранятся в этой папке.
- layout: Макет определяет визуальную структуру пользовательского интерфейса, например, пользовательского интерфейса приложения Android.
- mipmap: Папка Image Asset, в которой обычно хранятся различные иконки.
- colors.xml: Файл цветовых ресурсов приложения Android.
- strings.xml: Файл ресурсов строк приложения Android.
- styles.xml: Файл ресурсов стилей приложения Android.
- build.gradle: Этот файл используется для добавления различных зависимостей. Этот файл также содержит номер версии SDKVersion и другие важные детали.
Итак, теперь давайте поговорим о последней теме архитектуры Android - модели хранения данных Android. Android хранит данные 5 способами:
- Общие предпочтения (Shared Preferences): Хранение приватных данных в парах ключ-значение на устройстве.
- Внутреннее хранилище: Хранение приватных данных в памяти устройства.
- Внешнее хранилище: Хранение открытых данных на общем внешнем хранилище.
- Базы данных SQLite: Хранение структурированных данных в частных базах данных.
- Сетевое подключение: Хранение данных в Интернете с помощью сетевого сервера.
Все мы знаем, что после создания приложения Android создается файл .apk. Вы когда-нибудь задавались вопросом, что именно представляет собой этот .apk-файл? Ну, файл .apk - это не что иное, как zip-файл исходного кода, который содержит все ресурсы, dex-коды, активы, файлы манифеста и т.д. На следующей схеме показано, как исходный код Java преобразуется в файл APK.

Отлично! Теперь, когда мы изучили всю архитектуру Android, давайте узнаем, как работает методология тестирования!!! Существует два типа анализа, которые обычно выполняются при проведении тестирования Android.
- Статический анализ: Это означает просмотр исходного кода APK и поиск уязвимостей путем просмотра APK. Это похоже на анализ исходного кода. Мы обычно обращаем внимание на различные функции Intent, Sources и Sinks, опасные разрешения, закодированные API-ключи и т.д. Именно по этой причине мы углубились в детали архитектуры Android. (Я знаю, что это длинно и скучно, но очень нужно :P)
- Динамический анализ: Динамический анализ - это игра с запросами и ответами. Но вот в чем загвоздка: как и в обычном веб-тестировании, в Android (как и в iOS) запросы и ответы не ловятся напрямую. Сначала нам нужно обойти Root Detection, а затем обойти SSL Pinning. Подробнее об этом мы узнаем в следующих статьях.
А теперь пришло время взять в руки оружие ;) Ниже приведен список всех инструментов, необходимых для выполнения как статического, так и динамического анализа.
- Устройство Android: Очевидно, что для проведения тестирования вам потребуется устройство Android. Это может быть реальное устройство Android или эмулятор. Если это реальное устройство Android, убедитесь, что оно рутировано. Рутирование можно легко выполнить с помощью инструмента под названием Magisk. Для эмулятора можно использовать Genymotion. Иногда эмуляторы работают с задержками, и наличие настоящего устройства Android гораздо удобнее.
- Android Debug Bridge (ADB): Используется для связи с устройством и выполнения на нем отладочных операций.
- Dex2jar: Dex2jar - это замечательный инструмент, который поможет вам преобразовать dex-код в формат jar, чтобы облегчить чтение исходного кода.
- JD-GUI: JD-GUI - это инструмент, который позволяет просматривать исходный код java APK-файла напрямую.
- MobSF: MobSF - это универсальный инструмент безопасности, который поможет вам выполнить автоматический статический анализ и значительно упростит вашу работу.
- drozer: Фреймворк Metasploit Framework(MSF) для безопасности Android, который позволяет находить уязвимости и эксплуатировать их.
- Frida: Инструмент, который поможет обойти многие вещи ;)
- Objection: Еще один инструмент, который поможет обойти многие вещи ;)
- apksigner: Используется для подписи модифицированных APK.
- Burp Suite: О! Не забудьте про БОГА!!!
Вот и все, друзья, первая часть! Мы надеемся, что вам понравилась эта статья! Скоро мы вернемся с другой частью, где мы покажем вам методологию статического анализа при проведении тестирования Android.
Счастливой охоты!
Авторы:
Vaibhav Lakhani: https://www.linkedin.com/in/vaibhav-lakhani
Dhir Parmar: https://www.linkedin.com/in/dhir-parmar-925b171a4
От Infosec Writeups: Каждый день в Infosec происходит много событий, за которыми трудно уследить. Присоединяйтесь к нашей еженедельной рассылке, чтобы получать все последние тенденции Infosec в виде 5 статей, 4 тем, 3 видео, 2 репозиториев и инструментов GitHub и 1 оповещения о вакансиях БЕСПЛАТНО!
Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.
Перевод статьи был выполнен проектом перевод энтузиаста:
- 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
- 🔥 @Ent_Translate - Инстаграм проекта