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

 

 

Также можно использовать команду pdc для генерации псевдокода

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

и декомпиляции конкретной функции. В этом случае Radare2 авто-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

матически разрешает и представляет ссылки на другие функции или строки:

[0x00321b8f]> pdc @method.BrokenCryptographyExerciseViewController.viewDidLoad function sym.func.1001ac808 () {

loc_0x1001ac808:

x8 = x8 + 0xca8 //0x1003c1ca8 ; str.cstr.b_nkP_ssword123 ; (cstr 0x10036a5da) "b@nkP@ssword123"

Мы можем легко извлечь жестко запрограммированное значение b@nkP@ssword123, которое вы можете использовать для аутентифика- циипривыполнениизадачиHardcodedKeys(Жесткозакодированные ключи) категории Key Management (Управление ключами) в функци- ях приложения.

Используя аналогичную тактику, исследователи обнаружили уяз- вимость в более ранних версиях мобильного приложения MyCar Controls (https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9493/).

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

Перехват и изучение сетевого трафика

Другой важной частью оценки приложения для iOS является провер- ка его сетевого протокола и запрошенных вызовов API сервера.Боль- шинство мобильных приложений в основном использует протокол HTTP, поэтому здесь мы остановимся именно на нем. Чтобы пере- хватить трафик, мы будем использовать версию Burp Proxy Suite для организаций, которая запускает прокси-сервер, выполняющий роль посредникамеждумобильнымустройствомицелевымвеб-сервером.

Вы можете найти его по адресу https://portswigger.net/burp/.

Чтобы ретранслировать трафик, вам необходимо выполнить ата- кутипа«человекпосередине».Ееможнопроводитьразнымиспособа- ми.Поскольку мы просто пытаемся проанализироватьприложение, а не воссоздать реалистичную атаку, мы выберем самый простой путь атаки: указать HTTP-прокси в настройках сети устройства. На физическом устройстве Apple можно настроить прокси-сервер HTTP, перейдя к подключенной беспроводной сети. Оказавшись там, измените параметр прокси в системе macOS на внешний IPv4адрес, на котором вы будете запускать Burp Proxy Suite, используя порт 8080. В симуляторе iOS укажите глобальный системный прок- си в сетевых настройках macOS, убедившись, что для веб-прокси (HTTP) и защищенного веб-прокси (HTTPS) установлено одинако- вое значение.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После настройки параметров прокси на устройстве Apple весь тра-

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

фик будет перенаправлен на Burp Proxy Suite. Например, если мы исd-f-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

пользуем задачу аутентификации в приложении iGoat, можем захва- тить следующий HTTP-запрос, который содержит имя пользователя и пароль:

GET /igoat/token?username=donkey&password=hotey HTTP/1.1

Host: localhost:8080

Accept: */*

User-Agent: iGoat/1 CFNetwork/893.14 Darwin/17.2.0

Accept-Language: en-us

Accept-Encoding: gzip, deflate

Connection: close

Если приложение использовало SSL для защиты промежуточного соединения, нам пришлось бы выполнить дополнительный шаг по установке специально созданного сертификата SSL центра сертифи- кации (ЦС) в нашу среду тестирования. Burp Proxy Suite может авто- матически сгенерировать для нас этот ЦС. Вы можете получить его, перейдя к IP-адресу прокси с помощью­ веб-браузера, а затем щел- кнув ссылку Certificate (Сертификат) в правом верхнем углу экрана.

Приложение Akerun Smart Lock Robot для iOS (https://www.cvedetails. com/cve/CVE-2016-1148/) содержало аналогичную проблему. Точнее, исследователи обнаружили, что все версии приложений до 1.2.4 не проверяют SSL-сертификаты, что позволяет при помощи атаки типа «человек посередине» подслушивать обмен зашифрованными сооб- щениями с умным замком.

Обход механизма обнаружения джейлбрейка с помощью­ динамического патча

В этом разделе мы изменим код приложения, когда он выполняет- ся в памяти устройства, и динамически внесем патч (модификацию) в его компонент контроля безопасности­ с целью обхода защиты. Мы выберем компонент приложения, который выполняет проверку це- лостности среды.Для проведения этой атаки будем использовать ин- струментарий Frida (https://frida.re/). Вы можете установить его с по­ мощью диспетчера пакетов pip для Python:

$ pip install frida-tools

Затем найдите функцию или вызов API, который выполняет про- верку целостности среды. Поскольку исходный код доступен, мы мо- жем легко обнаружить вызов функции в классе iGoat/String Analysis/ Method Swizzling/MethodSwizzlingExerciseController.m. Эта проверка безопасности­ работает только на физических устройствах, поэтому вы не увидите никакой разницы, когда она активна в симуляторе:

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

 

 

 

 

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

 

 

 

 

assert((NSStringFromSelector(_cmd) isEqualToString:@"fileExistsAtPath:"]); // Check for if this is a check for standard jailbreak detection files

if ([path

hasSuffix:@"Cydia.app"] ||

[path

hasSuffix:@"bash"]

||

[path

hasSuffix:@"MobileSubstrate.dylib"] ||

[path

hasSuffix:@"sshd"]

||

[path

hasSuffix:@"apt"])_

 

 

 

 

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

 

 

 

 

Динамически изменяя эту функцию, мы можем заставить возвра- щаемый параметр всегда сообщать об успешном выполнении про- верки. Используя фреймворк Frida, создаем файл jailbreak.js с кодом, который обеспечит желаемое:

var hook = ObjC.classes.NSFileManager["- fileExistsAtPath:"]; Interceptor.attach(hook.implementation, {

onLeave: function(retval) { retval.replace(0x01);

},

});

Код начинается с поиска файла функции Objective-C – ExistsAtPath из класса NSFileManager и возвращает указатель на эту функцию . Затем он присоединяет к этой функции перехватчик, который динамически устанавливает обратный вызов с именем onLeave. Этот обратный вызов будет выполняться в конце функции, и он настроен так,чтобы всегда заменять исходное возвращаемое значение на 0x01 (код успешного выполнения) .

Затем применяем патч, подключив инструмент Frida к соответ- ствующему процессу приложения:

$ frida -l jailbreak.js -p 59843

Вы можете найти точный синтаксис фреймворка Frida для приме- ненияпатчейкметодамObjective-Cвонлайн-документациипоадре-

су https://frida.re/docs/javascript-api/#objc/.

Как обойти обнаружение джейлбрейка с помощью­ статического патча

Вы можете обойти обнаружение джейлбрейка с помощью­ стати- ческого патча. Давайте воспользуемся Radare2 для анализа сборки и внесения изменений в двоичный код. Например, мы можем заме- нить результат сравнения fileExists на утверждение, которое всегда истинно. Вы найдете функцию fetchButtonTapped в файле, располо-

женном по адресу iGoat/String Analysis/Method Swizzling/MethodSwiz- zlingExerciseController.m:

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

 

 

 

 

 

-(IBAction)fetchButtonTapped:(id)sender {

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

...

 

 

 

df

-x cha

 

e

 

 

 

 

 

 

 

n

 

 

 

if (fileExists)

[self displayStatusMessage:@"This app is running on ...

else

[self displayStatusMessage:@"This app is not running on ...

Поскольку мы хотим переустановить исправленную версию кода в симуляторе, будем работать с версией приложения Debug-iphonesi- mulator, которая находится в папке данных, полученных из Xcode, о которой уже шла речь в разделе «Извлечение и повторная подпись IPA».Сначалаоткрываемдвоичныйфайлврежимезаписиспомощью­ параметра -w:

$ r2 -Aw ~/Library/Developer/Xcode/DerivedData/iGoat-<id приложения>/Build/

Products/Debug-iphonesimulator/iGoat.app/iGoat [0x003115c0]> fs; f | grep fetchButtonTapped

0x1000a7130 326 sym.public_int_MethodSwizzlingExerciseController::fetchButton Tapped_int

0x1000a7130 1 method.MethodSwizzlingExerciseController.fetchButtonTapped: 0x100364148 19 str.fetchButtonTapped:

На этот раз вместо того, чтобы поручать Radare2 дизассемблиро- вать или декомпилировать приложение с помощью­ команд pdf и pdc, мы перейдем к графическому представлению, используя команду VV, а затем нажав p на клавиатуре. Это представление упрощает поиск ветвлений бизнес-логики приложения:

[0x1000ecf64]> VV @ method.MethodSwizzlingExerciseController.fetchButtonTapped:

Эта команда должна создать графическое представление,показан- ное на рис. 14.11.

Рис.14.11.Графическое представление Radare2,представляющее логический переключатель

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