Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
23
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

светкой строк. Если предоставить уже декомпилированный APK, он

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

пропустит задачу декомпиляции.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

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

Рис.14.12.Содержимое CryptoClass,отображающее значение ключа переменной

В CryptoClass мы уже обнаружили проблему: жестко запрограмми- рованный ключ. Этот ключ, по-видимому, предназначен для некото- рых криптографических функций.

Исследователи обнаружили аналогичную уязвимость в приложе-

нии EPSON iPrint версии 6.6.3 (https://www.cvedetails.com/cve/CVE-2018- 14901/),котороедавало возможностьудаленно управлятьустройства- ми печати. Приложение содержало жестко запрограммированные секретные ключи для API и служб Dropbox, Box, Evernote и OneDrive.

Динамический анализ

Теперь перейдем к динамическому анализу. Мы будем использовать Drozer – инструмент, который помогает тестировать разрешения An- droid и экспортируемые компоненты (https://github.com/FSecureLABS/ drozer/). Учтите, что Drozer уже не обновляется, но он по-прежнему полезен для моделирования мошеннических приложений. Давайте найдем дополнительную информацию о нашем приложении, введя следующую команду:

dz> run app.package.info -a com.android.insecurebankv2

Package: com.android.insecurebankv2 Process Name: com.android.insecurebankv

Data Directory: /data/data/com.android.insecurebankv2 APK Path: /data/app/com.android.insecurebankv2-1.apk UID: 10052

GID: [3003, 1028, 1015] Uses Permissions:

-android.permission.INTERNET

-android.permission.WRITE_EXTERNAL_STORAGE

-android.permission.SEND_SMS

...

Взгляните на этот общий обзор.Отсюда мы можем копнуть немно- го глубже, определив поверхность атаки приложения. Мы получим

418  Глава 14

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

достаточно информации для обнаружения экспортированных актив-

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

ностей (Exported Activities), приемников широковещательных сообd-f-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

щений системы, поставщиков контента и услуг. Все эти компоненты могут быть неправильно настроены и, следовательно, уязвимы:

dz> run app.package.attacksurface com.android.insecurebankv2

Attack Surface:

5 activities exported

1 broadcast receivers exported

1 content providers exported

0 services exported

Несмотря на то что это небольшое приложение, похоже, что оно экспортирует различные компоненты, большинство из которых яв- ляются активностями .

Сброс паролей пользователей

Давайте подробнее рассмотрим экспортированные компоненты – возможно,для этих активностей нетребуются специальные разреше- ния на просмотр:

dz> run app.activity.info -a com.android.insecurebankv2

Package: com.android.insecurebankv2 com.android.insecurebankv2.LoginActivity

Permission: null

com.android.insecurebankv2.PostLogin Permission: null

com.android.insecurebankv2.DoTransfer Permission: null

com.android.insecurebankv2.ViewStatement Permission: null

com.android.insecurebankv2.ChangePassword Permission: null

Похоже, активности не нуждаются в разрешениях, и сторонние приложения могут их запускать. Получив доступ к активности PostLogin , мы можем обойти экран входа в систему. Похоже на победу!

Получите доступ к этому конкретному действию с помощью­ ин- струмента Adb, как показано здесь, или Drozer:

$ adb shell am start -n com.android.insecurebankv2/com.android.insecurebankv2.PostLogin

Starting: Intent { cmp=com.android.insecurebankv2/.PostLogin

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

Взлом мобильных приложений  419

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Transfer и ChangePassword – активности изменения состояния,

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

которые, вероятно, должны взаимодействовать с серверным компо-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

нентом. Попробуем изменить пароль пользователя:

$ adb shell am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword

Starting: Intent { cmp=com.android.insecurebankv2/.ChangePassword }

Мы запускаем действие ChangePassword, устанавливаем новый па- роль и нажимаем Enter. К сожалению, атака не сработает. Как вы мо- жете видеть в эмуляторе,поле имени пользователя пусто (рис.14.13). Но мы были очень близки к успеху. Невозможно редактировать поле имени пользователя через пользовательский интерфейс, поскольку ввод пуст и отключен.

Рис.14.13.Интерфейс действия ChangePassword с пустым и отключенным полем имени пользователя

Скорее всего,другое действие заполняет поле,вызывая данную ак- тивность. Выполнив быстрый поиск, вы сможете найти точку, в кото- рой вызывается активность. Посмотрите на следующий код. Намере- ние, ответственное за заполнение поля имени пользователя, создает новое действие и затем передает дополнительный параметр с име- нем uname. Это должно быть имя пользователя.

protected void changePasswd() {

Intent cP = new Intent(getApplicationContext(), ChangePassword.class); cP.putExtra("uname", uname);

startActivity(cP);

}

Выполнив следующую команду, запустим действие ChangePassword и опять же выведем имя пользователя:

$ adb shell am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword

--es "uname" "dinesh"

Starting: Intent { cmp=com.android.insecurebankv2/.ChangePassword (has extras) }

Имя пользователя появляется в окне ввода логина/пароля

(рис. 14.14).

Теперь, когда мы заполнили поле имени пользователя, можно успешно изменить пароль. Причиной уязвимости можно считать экспортированную активность, но в основном виноват серверный

420  Глава 14

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

компонент.Если бы функция сброса паролятребовала,чтобы пользо-

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

ватель сначала ввел свой текущий пароль, а лишь затем новый, этойdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

проблемы можно было бы избежать.

Рис.14.14.Интерфейс действия

ChangePassword с заполненным полем логина

Запуск SMS-сообщений

Давайте продолжим изучать приложение InsecureBankV2. Возможно, нам удастся обнаружить более интересное поведение.

<receiver android:name="com.android.insecurebankv2. MyBroadCastReceiver" android:exported="true">

<intent-filter><action android:name="theBroadcast"/></intent-filter> </receiver>

При просмотре файла AndroidManifest.xml мы видим, что прило- жение экспортирует один приемник . В зависимости от его функ- циональности его, возможно, стоит использовать. Посмотрев со- ответствующий файл, мы увидим, что этот приемник ожидает два аргумента, phn и newpass. Теперь у нас есть вся необходимая инфор- мация, которая нужна для его запуска:

$ adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/com.android. insecurebankv2.MyBroadCastReceiver --es phonenumber 0 --es newpass test

Broadcasting: Intent { act=theBroadcast flg=0x400000 cmp=com.android.insecurebankv2/. MyBroadCastReceiver (has extras) }

В случае успеха вы должны получить SMS-сообщение с новым па- ролем. В качестве атаки можно использовать эту функцию для от- правки сообщений провайдерам платных услуг–в результате ничего не подозревающая жертва потеряет кругленькую сумму.

Поиск секретов в каталоге приложений

В Android есть много способов хранить секретные данные; одни вполне безопасны, другие… не очень. Например, приложения до- вольно часто хранятсекретную информацию в своих каталогах при- ложений. Несмотря на то что доступ к этому каталогу предостав- лен только приложению-владельцу, на взломанном устройстве или устройстве с root-доступом все приложения могут получить доступ к частным каталогам друг друга. Давайте посмотрим на каталог на- шего приложения:

Взлом мобильных приложений  421

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

$ cat shared_prefs/mySharedPreferences.xml

<map>

<string name="superSecurePassword">DTrW2VXjSoFdg0e61fHxJg== </string> <string name="EncryptedUsername">ZGluZXNo </string>

</map>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

(расположенный в файле com.android.insecurebankv2.CryptoClass),

используется для шифрования данных. Воспользуйтесь найденным ключом и попробуйте расшифровать данные, находящиеся в этом файле.

Подобная проблема существовала в популярном приложении для интернета вещей TP-Link Kasa, и была обнаружена М. Джуниором

(М. Junior) и др. (https://arxiv.org/pdf/1901.10062.pdf). В приложении ис-

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

Philips HealthSuite HealthдляAndroid,которое предназначенодля по-

лучения ряда медицинских параметров с устройств Philips.Проблема позволилазлоумышленникусфизическимдоступомкустройствупо- влиять на конфиденциальность и целостность продукта (https://www. cvedetails.com/cve/CVE-2018-19001/).

Поиск секретов в базах данных

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

generic_x86:/data/data/com.android.insecurebankv2 #$ ls databases/ mydb mydb-journal

Также всегда ищите файлы, хранящиеся вне личного каталога приложения.Приложения нередко хранятданные на SD-карте,пред- ставляющей собой пространство, к которому все приложения имеют доступ для чтения и записи.Вы можете легко обнаружитьтакие фай-

лы, выполнив поиск по функции getExtrenalStorageDirectory(), –

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

422  Глава 14