Drozer — мас­тхев в арсе­нале любого пен­тесте­ра. Это армей­ский швей­цар­ский нож для выпол­нения типич­ных задач тес­тирова­ния на про­ник­новение. Drozer поз­воля­ет получить информа­цию о при­ложе­нии, запус­тить его активнос­ти, под­клю­чить­ся к ContentProvider’у, отпра­вить сооб­щения сер­вису — в общем, все, что­бы вытащить из при­ложе­ния информа­цию или зас­тавить его сде­лать то, что нам нуж­но, через стан­дар­тные API и каналы ком­муника­ции.

Се­год­ня Drozer счи­тает­ся уста­рев­шим инс­тру­мен­том, но он до сих пор отлично помога­ет быс­тро получить информа­цию о при­ложе­нии и его сла­бых мес­тах. Рекомен­дуемый спо­соб запус­кать drozer — исполь­зуя Docker:

$ sudo docker run -it kengannonmwr/drozer_docker

Drozer работа­ет в связ­ке с аген­том, уста­нов­ленным на устрой­стве или эму­лято­ре, ска­чать его мож­но здесь. Его сле­дует уста­новить на устрой­ство:

$ adb install drozer-agent-2.3.4.apk

Да­лее запус­каем агент и нажима­ем кноп­ку Embedded Server вни­зу экра­на. Пос­ле это­го к сер­веру мож­но под­клю­чить­ся, перей­дя в кон­соль Drozer:

$ drozer console connect --server IP-адрес-телефона
Консоль Drozer
Кон­соль Drozer

В качес­тве подопыт­ного при­ложе­ния будем исполь­зовать DIVA (Damn Insecure and Vulnerable App). APK не име­ет циф­ровой под­писи, поэто­му перед уста­нов­кой его необ­ходимо под­писать, нап­ример c помощью uber-apk-signer.

 

Активности

Ти­пич­ный ворк­флоу Drozer выг­лядит так. Сна­чала получа­ем информа­цию об уста­нов­ленных при­ложе­ниях:

dz> run app.package.list

На­ходим в спис­ке подопыт­ное при­ложе­ние и получа­ем информа­цию о нем:

dz> run app.package.info -a jakhar.aseem.diva

Package: jakhar.aseem.diva
Application Label: Diva
Process Name: jakhar.aseem.diva
Version: 1.0
Data Directory: /data/user/0/jakhar.aseem.diva
APK Path: /data/app/~~f-ZUZleCLc6Lvv3kYkaeww==/jakhar.aseem.diva-GXTPCSZPceqRHtEWH73f1g==/base.apk
UID: 10423
GID: [3003]
Shared Libraries: [/system/framework/android.test.base.jar, /system/framework/org.apache.http.legacy.jar]
Shared User ID: null
Uses Permissions:
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.INTERNET
- android.permission.ACCESS_MEDIA_LOCATION
Defines Permissions:
- None

За­тем выяс­няем, какие ком­понен­ты мож­но попытать­ся исполь­зовать для экс­плу­ата­ции:

dz> run app.package.attacksurface jakhar.aseem.diva

Attack Surface:
3 activities exported
0 broadcast receivers exported
1 content providers exported
0 services exported
is debuggable

Об­раща­ем вни­мание, что в при­ложе­нии вклю­чен флаг отладки. Далее получа­ем спи­сок активнос­тей:

dz> run app.activity.info -a jakhar.aseem.diva

Package: jakhar.aseem.diva
jakhar.aseem.diva.MainActivity
Permission: null
jakhar.aseem.diva.APICredsActivity
Permission: null
jakhar.aseem.diva.APICreds2Activity
Permission: null

Про­буем их запус­тить:

dz> run app.activity.start --component jakhar.aseem.diva <имя_активнос­ти>

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

Про­веря­ем:

dz> run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICredsActivity

Дей­стви­тель­но, активность APICredsActivity содер­жит некий ключ API, имя поль­зовате­ля и пароль. Активность APICreds2Activity содер­жит окно с полем для вво­да ПИН‑кода.

Две активности DIVA
Две активности DIVA
Две активнос­ти DIVA

Обе эти активнос­ти явно дол­жны исполь­зовать­ся толь­ко внут­ри при­ложе­ния, но по «нев­ниматель­нос­ти» раз­работ­чик забыл сде­лать их неэк­спор­тиру­емы­ми (android:exported="false").

Если активности не запускаются

На­чиная с Android 9 запуск активнос­тей в фоне зап­рещен. Поэто­му, что­бы Drozer работал кор­рек­тно, сле­ди за тем, что­бы он всег­да был на экра­не, а экран смар­тфо­на — вклю­чен.

 

Перехват интентов

Еще инте­рес­нее, ког­да прог­раммист не толь­ко забыва­ет сде­лать внут­реннюю активность при­ложе­ния неэк­спор­тиру­емой, но и работа­ет с ней не нап­рямую, а исполь­зуя широко­веща­тель­ные интенты. Допус­тим, в при­ложе­нии есть такой код, который исполь­зует широко­веща­тель­ный интент "com.example.ACTION", что­бы запус­тить активность (передав ей при этом кон­фиден­циаль­ные дан­ные):

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Оставить мнение