Тестирование на проникновение приложений для Android - часть 4

Joined
Aug 17, 2016
Messages
1,788
Reaction score
826
98277dd1ea70c153bb7c8.png

В моих предыдущих статьях мы рассматривали основную структуру и инструменты пентестирования и ADB. Теперь давайте рассмотрим некоторые точки входа для тестирования приложений Android.



С точки зрения безопасности файл манифеста, как правило, является первым, что проверяет пентестер на взаимодействие.



Файл манифеста Android

  • Он предоставляет детальную информацию о приложении android
  • Он называет java пакеты для приложения
  • Он заявляет о полномочиях
  • Он описывает компоненты приложения android
  • Он содержит декларацию минимального уровня API, какое требует приложение
  • Минимальная версия Android, необходимая для запуска программы


Службы

Для демонстрации мы можем использовать приложение insecurebank.apk

3139b912300942a6c96dc.png

Разрешить отладку: «true»
Если приложение помечается как отлаживаемое, то любой злоумышленник может получить доступ к данным приложения, присваивая привилегии этого приложения, или он может запускать произвольный код, пользуясь полномочиями этого разрешения. В случае неотлаживаемого приложения злоумышленнику сначала необходимо использовать root для устройства, чтобы извлечь любые данные.



Java Debug Wire Protocol - это центральная связь между отладчиком и экземпляром JVМ.



Не используя root для устройства, невозможно извлечь данные или запускать произвольный код с использованием полномочий приложения.



Перед запуском приложения

88dbcc0b8eee62618bf73.png

После запуска приложения

5bc16cc4a2e4a599ad5f1.png

f13114d132a4e6f180a1e.png

6a8eb92b58ef428285583.png

На вышеприведенном рисунке изображен доступ шел моего персонального телефона, к которому не применялся root.



Разрешить резервное копирование: «true»

Этот параметр определяет, возможно ли резервное копирование и восстановление данных приложения пользователем, который включил отладку usb. Поэтому приложения, которые обрабатывают и хранят конфиденциальную информацию, такую как данные карты, пароли и т. д., должны иметь этот параметр ложным, чтобы предотвратить такие риски.



Откройте терминал



Code:
– Adb backup –apk –shared (apk name)

8ee4fe0dbce0f61a20669.png


Code:
Cat backup.ab zlib-flate -uncompress > backup_compressed.tar

a39c1b12a6fa4a935facf.png

Права доступа

Право доступа – это ограничение, которое лимитирует доступ к части кода или данным на устройстве.

72113e2646ae655ef6036.png

Приложения, у которых есть полномочия копировать данные на внешнее хранилище, должны быть пересмотрены, чтобы гарантировать, что на них не хранится особо важная информация.



Все полномочия, запрашиваемые приложением, должны быть пересмотрены, чтобы гарантировать, что они не несут угрозу безопасности.



Существует четыре значения, которые можно использовать с этим атрибутом:

  • Normal (нормальный)
  • Dangerous (опасный)
  • Signature (сигнатура)
  • Signature Or System (сигнатура или система)


Пример -



Code:
<Permission>

Android: protectionLevel=”signature”

</permission>

3d444fbcc1a0926edfc5f.png

Значения (Intents)
Это компоненты, которые используются для объединения двух или более различных компонентов Android вместе. Значения могут использоваться для выполнения множества задач, таких как начало действия, действия переключения и запуск служб.



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

Code:
<Intent-filter>

<action android: name=”string” />

<category android: name=”string” />

</intent-filter>

7cb11a095576f80b6b239.png

Явные значения подключают одно действие к другому в одном приложении. Эти значения определяют целевой компонент по его имени, и они обычно используются для внутренних сообщений приложения, таких как действие, запускающее сестринскую активность (sister activity), когда пользователь нажимает кнопку.



Скрытые значения не называют цель, а поле для названия компонента остается пустым. Скрытые значения часто используются для активации компонентов в других приложениях. Например, если мы хотим показать пользователю местоположение на карте, мы можем использовать скрытое значение, чтобы запросить другое способное на это приложение отображать указанное местоположение на карте.
 
Top