Что можно достать из приложения, имея jailbreak девайс (на примере Monobank)
Я, Яков Школьников, iOS разработчик в ITOMYCH STUDIO c
Речь пойдет о том, какую информацию можно узнать о приложении, имея jailbreak девайс, на примере Monobank.
Jailbreak
Джейлбрейк (iOS jailbreaking) дает доступ к файловой системе, где есть возможность получить .app файл, сендбокс и записи из кейчейна. Также, на джейлбрейкнутый девайс можно ставить deb пакеты, что понадобится для того, чтобы обойти ssl pinning.
Установка джейлбрейка
Утилит, которые джейлбрейкают девайс, много, и они зависят от модели и версии оси. Я использовал iPhone 5s с версией iOS 12.4.9. Для такой версии есть всего две утилиты: unc0ver и checkra1n. Я выбрал checkra (версия 0.12.2 beta). У него есть один недостаток — при перезапуске девайса джейл слетает, и нужно его устанавливать опять, но т.к. я использую этот девайс в тестовых целях, меня это устраивало.
Установка вспомогательных тулов
После джейла нужно поставить вспомогательные программы. Для этого можно использовать магазин (он ставится по дефолту после джейла для большинства утилит).
Нужно установить следующие тулы:
- OpenSSH (нужен для подключения к телефону по ssh).
- MTerminal (нужен для установки deb пакетов).
- Debian Packager (нужен для установки deb пакетов).
- Cydia Substrate (нужен для установки deb пакетов).
- PreferenceLoader (ssl kill switch использует его чтобы добавить в приложение Settings возможность включать / отключать ssl валидацию).
После этих шагов можно приступить к получению и анализу данных.
В дальнейшем нам нужно будет подключаться через компьютер к айфону, для этого нужно чтобы оба были подключены к одной сети, и нужно знать ip айфона, который можно посмотреть в настройках вайфая (в примерах используется 192.168.0.0)
Network sniffing
[iOS Application Security] Jailbreak 12.4
- Скачиваем последний deb package.
- Открываем терминал на маке и копируем пакет на телефон:
scp com.nablac0d3.sslkillswitch2_0.14.deb [email protected]:/var/mobile
при подключении запросит пароль, если его не меняли, то по дефолту будет alpine - Открываем терминал на телефоне
- Устанавливаем пакет:
su alpine dpkg -i com.nablac0d3.sslkillswitch2_0.14.deb
- Отключаем ssl pinning в настройках
Для сниферинга данных использовался Charles.
Самое интересное, что можно достать из апилки — это ключи, которые не должны храниться на клиенте. Такого найдено не было. В некоторых запросах в открытом виде отправляются ИНН, ФИО, e-mail, IBAN, номер карточки, дата экспирации и CVV:
Также можно посмотреть какие есть feature flags и подменить запрос, чтобы посмотреть как будет вести себя приложение.
Для fintech приложений важно не допустить утечки данных, поэтому иметь, как минимум ssl pinning очень важно.
Bundle приложения
Все, что мы кладем в бандл, можно достать из app файла. Чтобы достать сам app файл нужно:
- Подключиться с компьютера к девайсу по ssh, для этого в терминале нужно выполнить
ssh [email protected]
- Все приложения лежат в папке /var/containers/Bundle/Application/, переходим в нее.
- Все приложения имеют UUID, и по названию папки непонятно какое там приложение, поэтому чтобы найти нужное нам выполняем команду:
ls * | grep -B 2 -i 'app_name'
.
- Теперь можно перенести содержимое на компьютер, для этого в новом окне терминала выполняем команду:
scp -r [email protected]:/var/containers/Bundle/Application/F1AD67B9-AFEB-4D7F-B956-CFBEFE42655A some_folder_on_mac some_folder_on_mac
Можно открыть app файл:
В файле _CodeSignature/CodeResources находятся имена сторибордов, ксибов и вью контроллеров. Если какой-то функционал спрятан в приложении, то можно понять о его существовании. Также лежат ассеты (картинки в формате png и json), серты (пару заэкспайренных). В папке Frameworks находится очень много фреймворков, и видно, что используется микросервисная архитектура.
Теперь конкретно по фреймворкам. Некоторые написаны на флаттере (например, App.framework)
В Core.framework лежит Configurations.json
MonoStatement.framework содержит моки выписок:
В процессе изучения этих моков было найдено 3 человека, и 2 фотографии, которые вывели на страницы этих людей в линкедин.
Также есть файл RemoteConfigDefaults.plist в котором тоже есть некоторые флаги:
Всегда нужно быть очень внимательным с тем, что кладется в бандл приложения. Иметь замоканную апилку очень удобно, и для тестов, и для работы без реального бека, но лучше это все убирать при архиве приложения. И желательно в моках не хранить реальных данных.
Сендбокс
В целом, выглядит все почти так же, как и для бандла, за исключением локации сендбокса:
- Подключиться с компьютера к девайсу по ssh, для этого в терминале нужно выполнить
ssh [email protected]
- Сендбоксы приложений лежат в папке /var/mobile/Containers/Data/Application/, переходим в нее.
- Тут такая же история с UDID, только они не такие же, как для бандлов, поэтому опять ищем в подпапках наше приложение:
ls -R | grep -B 2 -i 'app_name'
- Как и в прошлый раз, копируем содержимое на комп:
scp -r [email protected]:/var/mobile/Containers/Data/Application/F1AD67B9-AFEB-4D7F-B956-CFBEFE42655A some_folder_on_mac
В папке Documents лежит база данных (реалм)
Также есть файл с логами, который находится в папке Caches/Logs. Там также видно все запросы, переходы по экранам, и т.п. Некоторые суммы (тоже было видно и при снифе нетворка) в строках, при этом с большим количеством цифр после запятой.
Все что будет закешированно, базы данных — будет видно в сендбоксе. В случае с реалмом можно заэнкриптить базу, и тогда ее не получится открыть, дампнув сэндбокс (по крайней мере так должно работать). У меня на одном компе не открылась база (запросило ключ), на другом открылась. Если логи пишутся в файл нужно быть предельно аккуратным что туда попадает, но лучше конечно пользоваться креш репортами и аналитикой.
Кейчейн
Для дампа кейчейна есть утилитка: ptoomey3/Keychain-Dumper
- Скачиваем или билдим локально.
- Копируем утилиту на девайс:
scp keychain_dumper [email protected]:/var/KeychainDumper
. - Подключаемся к девайсу по ssh.
- Проверяем что
keychain_dumper
исполняемый файл, аkeychain-2.db
доступен на чтение всем.
- Переходим в папку с утилитой и выполняем команду: .
/keychain_dumper
Все, что мы храним в кейчене, можно достать и посмотреть. В случае с паролями и любыми приватными ключами, перед тем как положить их в кейчен, их обычно шифруют. Можно использовать touch id для этих целей.
На все указанные моменты стоит обращать внимание при разработке.
И напоследок, какие могут быть проблемы, если работать не с Decimal (или Int, если такого типа данных нет):
Справедливости ради, скажу, что сейчас эта проблема не воспроизводится, но подобное случалось в 2019 году.
На основе полученных данных, можно увидеть, что API особо никак не скроешь. Достать ipa и сендбокс приложения, а также записи из кейчейна, не составляет особого труда. Поэтому, при разработке приложений, нужно уделять отдельное внимание тому, куда и какие данные мы складываем.
56 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів