Перевод: Тестирование Android 101 - часть 1

Перевод: Тестирование Android 101 - часть 1

@Ent_TranslateIB

Добро пожаловать в новую серию статей о тестировании Android. Эта серия о том, как можно взломать Android и найти в нем уязвимости, используя различные методы. В этой серии мы стремимся охватить все уязвимости, которые вы можете найти, вместе с методологией. В первой части мы стремимся охватить базовое описание того, как проводится тестирование Android, и все инструменты, необходимые для его выполнения. Итак, вооружитесь и зарядите свои арсеналы!!!

Если перейти к самым основам, то мобильные приложения обычно бывают трех типов:

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

Теперь, прежде чем мы узнаем о тестировании android, очень важно знать, как работает его архитектура. Я дам краткое описание каждого компонента, но если вы хотите узнать больше, вы можете прочитать об этом здесь.

  1. Applications: Самый верхний слой архитектуры, где устанавливаются все сторонние приложения. Примеры: Camera, WhatsApp, Google и т.д.
  2. Application Framework: Это слой, который предоставляет различные классы для создания приложения Android. Примеры Activity Manager, Content Provider и т.д.
  3. Android Runtime: Самый важный слой состоит из виртуальной машины Dalvik. Виртуальная машина Dalvik Virtual Machine (DVM) похожа на JVM, которая позволяет запускать приложения и предоставляет различные библиотеки платформы, такие как SSL, SQLite, Media и т.д.
  4. Linux Kernel: Это сердце архитектуры android, которое обеспечивает такие функции, как безопасность, управление памятью, управление процессами и т.д.

Теперь давайте быстро посмотрим на различные компоненты Android.

  1. Activity: Это java-классы, имеющие некоторые предопределенные функции, которые запускаются в различных состояниях приложения. Всего существует четыре состояния приложения: Active, Pause, Stop и Destroy. Различные методы, которые могут быть вызваны: onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(). Подумайте о ситуации, когда передаются конфиденциальные данные, появляется метод onPause() и через n секунд вызывается метод onResume(), как тогда приложение будет обрабатывать конфиденциальные данные? Это может быть хорошим примером для проверки.
  2. Services: Это операции, которые происходят в фоновом режиме и не имеют пользовательского интерфейса. Службы являются критически важными и должны всегда проверяться, поскольку злоумышленники обычно устанавливают вредоносное ПО именно здесь. В качестве примера можно привести приложение-калькулятор, запрашивающее разрешение на ведение журнала звонков.
  3. Intents: Они привязаны к различным компонентам приложения и используются для выполнения различных действий и вызова активности в различных приложениях. Фильтры Intents используются для защиты действий.
  4. Content Providers: Действуют как промежуточный слой для доступа к данным из различных источников.
  5. Broadcast Receivers: Они получают широковещательные сообщения от различных событий, которые могут исходить от одного или многих приложений. Например, когда приложение получает SMS, оно отправляет широковещательное сообщение всем остальным приложениям.

Теперь поговорим о файловой системе Android. Ниже перечислены папки, находящиеся в файловой иерархии:

  1. /boot: Загрузочные файлы, состоящие из ядра Android и ramdisk
  2. /system: В этой папке хранится вся ОС Android. Она также состоит из предустановленных системных приложений, которые хранятся в папке /system/app
  3. /recovery: Эта папка предназначена для резервного копирования и рассматривается как альтернативный вариант загрузки.
  4. /cache: В этой папке хранятся данные и компоненты часто используемых приложений.
  5. /misc: Содержит различные системные настройки
  6. /sdcard: Эта папка представляет собой пространство, которое доступно пользователям для хранения их файлов и данных.
  7. /data: В этой папке хранятся все данные пользователя.
  • /data/data: Содержит данные всех приложений, установленных пользователем.
  • /data/app: Состоит из всех APK приложений, установленных пользователем
  • /data/system: Содержит такие файлы, как gesture.key, password.key.
  • /data/local/tmp: Временная, доступная для записи

Некоторые важные файлы и папки обычно создаются во время создания приложения. В нашем тестировании android очень важно просмотреть эти файлы и папки. Ниже перечислены различные важные файлы и папки:

  1. AndroidManifest.xml: содержит структуру и метаданные приложения. Обычно все разрешения, ключи API и т.д. хранятся в этом файле.
  2. Java: В этой конкретной папке содержатся файлы исходного кода Java.
  3. drawable: Все изображения, видео, gif-файлы и т.д. хранятся в этой папке.
  4. layout: Макет определяет визуальную структуру пользовательского интерфейса, например, пользовательского интерфейса приложения Android.
  5. mipmap: Папка Image Asset, в которой обычно хранятся различные иконки.
  6. colors.xml: Файл цветовых ресурсов приложения Android.
  7. strings.xml: Файл ресурсов строк приложения Android.
  8. styles.xml: Файл ресурсов стилей приложения Android.
  9. build.gradle: Этот файл используется для добавления различных зависимостей. Этот файл также содержит номер версии SDKVersion и другие важные детали.

Итак, теперь давайте поговорим о последней теме архитектуры Android - модели хранения данных Android. Android хранит данные 5 способами:

  1. Общие предпочтения (Shared Preferences): Хранение приватных данных в парах ключ-значение на устройстве.
  2. Внутреннее хранилище: Хранение приватных данных в памяти устройства.
  3. Внешнее хранилище: Хранение открытых данных на общем внешнем хранилище.
  4. Базы данных SQLite: Хранение структурированных данных в частных базах данных.
  5. Сетевое подключение: Хранение данных в Интернете с помощью сетевого сервера.

Все мы знаем, что после создания приложения Android создается файл .apk. Вы когда-нибудь задавались вопросом, что именно представляет собой этот .apk-файл? Ну, файл .apk - это не что иное, как zip-файл исходного кода, который содержит все ресурсы, dex-коды, активы, файлы манифеста и т.д. На следующей схеме показано, как исходный код Java преобразуется в файл APK.

Отлично! Теперь, когда мы изучили всю архитектуру Android, давайте узнаем, как работает методология тестирования!!! Существует два типа анализа, которые обычно выполняются при проведении тестирования Android.

  1. Статический анализ: Это означает просмотр исходного кода APK и поиск уязвимостей путем просмотра APK. Это похоже на анализ исходного кода. Мы обычно обращаем внимание на различные функции Intent, Sources и Sinks, опасные разрешения, закодированные API-ключи и т.д. Именно по этой причине мы углубились в детали архитектуры Android. (Я знаю, что это длинно и скучно, но очень нужно :P)
  2. Динамический анализ: Динамический анализ - это игра с запросами и ответами. Но вот в чем загвоздка: как и в обычном веб-тестировании, в Android (как и в iOS) запросы и ответы не ловятся напрямую. Сначала нам нужно обойти Root Detection, а затем обойти SSL Pinning. Подробнее об этом мы узнаем в следующих статьях.

А теперь пришло время взять в руки оружие ;) Ниже приведен список всех инструментов, необходимых для выполнения как статического, так и динамического анализа.

  1. Устройство Android: Очевидно, что для проведения тестирования вам потребуется устройство Android. Это может быть реальное устройство Android или эмулятор. Если это реальное устройство Android, убедитесь, что оно рутировано. Рутирование можно легко выполнить с помощью инструмента под названием Magisk. Для эмулятора можно использовать Genymotion. Иногда эмуляторы работают с задержками, и наличие настоящего устройства Android гораздо удобнее.
  2. Android Debug Bridge (ADB): Используется для связи с устройством и выполнения на нем отладочных операций.
  3. Dex2jar: Dex2jar - это замечательный инструмент, который поможет вам преобразовать dex-код в формат jar, чтобы облегчить чтение исходного кода.
  4. JD-GUI: JD-GUI - это инструмент, который позволяет просматривать исходный код java APK-файла напрямую.
  5. MobSF: MobSF - это универсальный инструмент безопасности, который поможет вам выполнить автоматический статический анализ и значительно упростит вашу работу.
  6. drozer: Фреймворк Metasploit Framework(MSF) для безопасности Android, который позволяет находить уязвимости и эксплуатировать их.
  7. Frida: Инструмент, который поможет обойти многие вещи ;)
  8. Objection: Еще один инструмент, который поможет обойти многие вещи ;)
  9. apksigner: Используется для подписи модифицированных APK.
  10. 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 - Инстаграм проекта

Report Page