Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.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

 

 

Простой способ отключить сравнение – заменить команду je (код

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

операции 0x0F84) на команду jne (код операции 0x0F85),которая воз-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

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

Обратите внимание, что эта версия двоичного файла разработана для симулятора iOS. Бинарный файл для физического устройства iOS будет содержать эквивалентную операцию ARM64 TBZ.

Измените представление, нажав клавишу q, чтобы выйти из пред- ставления графика,а затем p для входа в режим сборки.Это позволя- ет нам получить адрес операции в двоичном файле (вытакже можете использовать непосредственно pd):

[0x003115c0]> q

 

 

 

[0x003115c0]> p

 

 

 

 

 

 

0x1000a7218

f645e701

test byte

[var_19h], 1

< 0x1000a721c

0f8423000000

je 0x1000a7245

...

[0x1000f7100]> wx 0f8523000000 @ 0x1000a721c

Затем можно повторно подписать и переустановить приложение в симуляторе:

$ /usr/bin/codesign --force --sign - --timestamp=none ~/Library/Developer/Xcode/DerivedData/ iGoat-<id приложения>/Build/Products/Debug-iphonesimulator/iGoat.app

replacing existing signature

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

Анализ приложений Android

В этом разделе мы проанализируем приложение InsecureBankV2 для ОС Android.Как и iGoat,это приложение не предназначено специаль- но для интернета вещей, но мы сосредоточимся на уязвимостях, ко- торые применимы и к устройствам интернета вещей.

Подготовка тестовой среды

Android не имеетограничений по выборутестовой среды,и вы може- те успешно оценить, работает ли ваша операционная система в Win- dows, macOS или Linux. Чтобы настроить среду, установите Android Studio IDE (https://developer.android.com/studio/releases/). Кроме того, вы можете установить пакет разработки программного обеспечения

414  Глава 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(SDK) для Android и Android SDK Platform Tools напрямую, загрузив

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

ZIP-файлы с того же веб-сайта.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Запустите службу Android Debug Bridge, представляющую собой двоичный файл, который взаимодействует с устройствами Android и эмуляторами и идентифицирует подключенные устройства с по­ мощью следующей команды:

$ adb start-server

*daemon not running; starting now at tcp:5037

*daemon started successfully

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

спомощью­ диспетчера виртуальных устройств Android (AVD), кото- рый включен в инструменты Android Studio и Android SDK. Получите доступ кAVD,загрузите нужную версиюAndroid,установите ее,дайте имя своему эмулятору, запустите его – и вы готовы к работе.

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

$ adb devices emulator-5554 device

Отлично, эмулятор обнаружен. Теперь мы установим уязвимое приложение для Android в эмулятор. Скачайте приложение Insecure-

BankV2 по адресу https://github.com/dineshshetty/Android-InsecureBankv2/.

Приложения Android используют формат файла, который называет-

ся пакетом Android (APK). Чтобы установить APK InsecureBankV2 на наш эмулятор, перейдите в папку с целевым приложением и затем используйте команду:

$ adb -s emulator-5554 install app.apk

Performing Streamed Install Success

Теперь вы должны увидеть значок приложения в симуляторе, ука- зывающий, что установка прошла успешно. Вам также следует запус­ тить InsecureBankV2 AndroLab – внутренний сервер python2, исполь-

зуя команды, которые можно найти в том же репозитории GitHub.

Извлечение файла APK

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

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

 

 

 

 

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

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

$ adb shell pm list packages com.android.insecurebankv2

Определив путь, извлекаем приложение с по­мощью команды adb pull:

adb shell pm path com.android.insecurebankv2 package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

$ adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

: 1 file pulled. 111.6 MB/s (3462429 bytes in 0.030s)

Эта команда извлекает APK в текущий рабочий каталог вашей хост-системы.

Статический анализ

Начнем со статического анализа, исследуя файл APK, который вам сначала нужно распаковать. Используйте apktool (https://ibotpeaches. github.io/Apktool/), чтобы извлечь всю необходимую информацию из APK без потери данных:

$ apktool d app.apk

I: Using Apktool 2.4.0 on app.apk I: Loading resource table...

….

Один из самых важных файлов в APK–AndroidManifest.xml.Мани- фест Android – это файл с двоичной кодировкой, содержащий такую информацию, как используемые активности (Activities). Активности в приложении для Android – это экраны в пользовательском интер- фейсе приложения. Все приложения Android имеют по крайней мере одну активность,и имя основной из них включено в файл манифеста. Это действие выполняется при запуске приложения.

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

Файл classes.dex содержит исходный код приложения в формате исполняемого файла Dalvik (DEX). В папке META-INF вы найдете раз- личные метаданные из файла APK. В папке res собраны скомпилиро- ванные ресурсы, а в папке assets – ресурсы приложения. Мы же со-

416  Глава 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

средоточимся в основном на изучении AndroidManifest.xml и файлов

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

формата DEX.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Автоматизация статического анализа

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

Используйте Qark (https://github.com/linkedin/qark/), чтобы проскани-

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

$ qark --apk path/to/my.apk

Decompiling sg/vantagepoint/a/a...

...

Running scans...

Finish writing report to /usr/local/lib/python3.7/site-packages/qark/report/

report.html ...

Это займет некоторое время. Помимо Qark, можно использовать инструмент MobSF, упомянутый ранее в этой главе.

Обратная конвертация двоичных исполняемых файлов

ИнструментQark,который вытолько что запустили,выполнил обрат- ную конвертацию двоичного файла, чтобы выполнить его проверку. Попробуемсделатьэтовручную.КогдавыизвлекалифайлыизAPK,то получили множество файлов DEX, содержащих скомпилированный код приложения. Теперь переведем этот байт-код, чтобы сделать его более читабельным.

Для этого воспользуемся инструментом Dex2jar (https://github.com/ pxb1988/dex2jar/), преобразующим байт-код в файл JAR:

$ d2j-dex2jar.sh app.apk

dex2jar app.apk -> ./app-dex2jar.jar

Еще один отличный инструментдля этой цели–Apkx (https://github. com/b-mueller/apkx/), который является оболочкой для различных де- компиляторов. Помните, что, даже если один декомпилятор не сра- ботает,другой может работать успешно.

Теперь мы воспользуемся программой просмотра JAR, чтобы про- смотреть исходный код APK и легко его прочитать. Отличный ин- струмент для этой цели – JADX, запускаемый командой jadx-gui для работы с графическим интерфейсом (https://github.com/skylot/jadx/).

По сути, он пытается декомпилировать APK и позволяет вам пере- мещаться по декомпилированному коду в текстовом формате с под-

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