- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •4. Оценка сети
- •Переход в сеть IoT
- •VLAN и сетевые коммутаторы
- •Спуфинг коммутатора
- •Двойное тегирование
- •Имитация устройств VoIP
- •Идентификация устройств IoT в сети
- •Обнаружение паролей службами снятия отпечатков
- •Атаки MQTT
- •Настройка тестовой среды
- •Написание модуля MQTT Authentication-Cracking в Ncrack
- •Тестирование модуля Ncrack на соответствие MQTT
- •Заключение
- •5. Анализ сетевых протоколов
- •Проверка сетевых протоколов
- •Сбор информации
- •Анализ
- •Создание прототипов и разработка инструментов
- •Работа с Lua
- •Общие сведения о протоколе DICOM
- •Генерация трафика DICOM
- •Включение Lua в Wireshark
- •Определение диссектора
- •Определение основной функции диссектора
- •Завершение диссектора
- •Создание диссектора C-ECHO
- •Начальная загрузка данных функции диссектора
- •Анализ полей переменной длины
- •Тестирование диссектора
- •Разработка сканера служб DICOM для механизма сценариев Nmap
- •Написание библиотеки сценариев Nmap для DICOM
- •Коды и константы DICOM
- •Написание функций создания и уничтожения сокетов
- •Создание заголовков пакетов DICOM
- •Написание запросов контекстов сообщений A-ASSOCIATE
- •Чтение аргументов скрипта в движке сценариев Nmap
- •Определение структуры запроса A-ASSOCIATE
- •Анализ ответов A-ASSOCIATE
- •Создание окончательного сценария
- •Заключение
- •6. Использование сети с нулевой конфигурацией
- •Использование UPnP
- •Стек UPnP
- •Распространенные уязвимости UPnP
- •Злоупотребление UPnP через интерфейсы WAN
- •Другие атаки UPnP
- •Использование mDNS и DNS-SD
- •Как работает mDNS
- •Как работает DNS-SD
- •Проведение разведки с помощью mDNS и DNS-SD
- •Злоупотребление на этапе проверки mDNS
- •Атаки «человек посередине» на mDNS и DNS-SD
- •Использование WS-Discovery
- •Как работает WS-Discovery
- •Подделка камер в вашей сети
- •Создание атак WS-Discovery
- •Заключение
- •UART
- •Аппаратные средства для связи с UART
- •Как найти порты UART
- •Определение скорости передачи UART
- •JTAG и SWD
- •JTAG
- •Как работает SWD
- •Аппаратные средства для взаимодействия с JTAG и SWD
- •Идентификация контактов JTAG
- •Взлом устройства с помощью UART и SWD
- •Целевое устройство STM32F103C8T6 (Black Pill)
- •Настройка среды отладки
- •Кодирование целевой программы на Arduino
- •Отладка целевого устройства
- •Заключение
- •Как работает SPI
- •Как работает I2C
- •Настройка архитектуры шины I2C типа «контроллер–периферия»
- •Заключение
- •9. Взлом прошивки
- •Прошивка и операционные системы
- •Получение доступа к микропрограмме
- •Взлом маршрутизатора Wi-Fi
- •Извлечение файловой системы
- •Статический анализ содержимого файловой системы
- •Эмуляция прошивки
- •Динамический анализ
- •Внедрение бэкдора в прошивку
- •Нацеливание на механизмы обновления микропрограмм
- •Компиляция и установка
- •Код клиента
- •Запуск службы обновления
- •Уязвимости служб обновления микропрограмм
- •Заключение
- •10. Радио ближнего действия: взлом rFID
- •Радиочастотные диапазоны
- •Пассивные и активные технологии RFID
- •Структура меток RFID
- •Низкочастотные метки RFID
- •Высокочастотные RFID-метки
- •Настройка Proxmark3
- •Обновление Proxmark3
- •Клонирование низкочастотных меток
- •Клонирование высокочастотных меток
- •Имитация RFID-метки
- •Изменение содержимого RFID-меток
- •Команды RAW для небрендированных или некоммерческих RFID-тегов
- •Подслушивание обмена данными между меткой и считывателем
- •Извлечение ключа сектора из перехваченного трафика
- •Атака путем подделки RFID
- •Автоматизация RFID-атак с помощью механизма скриптов Proxmark3
- •Пользовательские сценарии использования RFID-фаззинга
- •Заключение
- •11. Bluetooth Low Energy (BLE)
- •Как работает BLE
- •Необходимое оборудование BLE
- •BlueZ
- •Настройка интерфейсов BLE
- •Обнаружение устройств и перечисление характеристик
- •GATTTool
- •Bettercap
- •Взлом BLE
- •Настройка BLE CTF Infinity
- •Приступаем к работе
- •Заключение
- •12. Радиоканалы средней дальности: взлом Wi-Fi
- •Как работает Wi-Fi
- •Атаки Wi-Fi на беспроводные клиенты
- •Деаутентификация и атаки «отказ в обслуживании»
- •Атаки на Wi-Fi путем подключения
- •Wi-Fi Direct
- •Атаки на точки доступа Wi-Fi
- •Взлом WPA/WPA2
- •Взлом WPA/WPA2 Enterprise для сбора учетных данных
- •Методология тестирования
- •Заключение
- •13. Радио дальнего действия: LPWAN
- •Захват трафика LoRa
- •Настройка платы разработки Heltec LoRa 32
- •Настройка LoStik
- •Превращаем USB-устройство CatWAN в сниффер LoRa
- •Декодирование протокола LoRaWAN
- •Формат пакета LoRaWAN
- •Присоединение к сетям LoRaWAN
- •Атаки на LoRaWAN
- •Атаки с заменой битов
- •Генерация ключей и управление ими
- •Атаки воспроизведения
- •Подслушивание
- •Подмена ACK
- •Атаки, специфичные для приложений
- •Заключение
- •14. Взлом мобильных приложений
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Защита данных и зашифрованная файловая система
- •Подписи приложений
- •Аутентификация пользователя
- •Управление изолированными аппаратными компонентами и ключами
- •Проверенная и безопасная загрузка
- •Анализ приложений iOS
- •Подготовка среды тестирования
- •Статический анализ
- •Динамический анализ
- •Атаки путем инъекции
- •Хранилище связки ключей
- •Реверс-инжиниринг двоичного кода
- •Перехват и изучение сетевого трафика
- •Анализ приложений Android
- •Подготовка тестовой среды
- •Извлечение файла APK
- •Статический анализ
- •Обратная конвертация двоичных исполняемых файлов
- •Динамический анализ
- •Перехват и анализ сетевого трафика
- •Утечки по побочным каналам
- •Заключение
- •15. Взлом умного дома
- •Физический доступ в здание
- •Клонирование RFID-метки умного дверного замка
- •Глушение беспроводной сигнализации
- •Воспроизведение потока с IP-камеры
- •Общие сведения о протоколах потоковой передачи
- •Анализ сетевого трафика IP-камеры
- •Извлечение видеопотока
- •Атака на умную беговую дорожку
- •Перехват управления интеллектуальной беговой дорожкой на базе Android
- •Заключение
- •Инструменты для взлома интернета вещей
- •Предметный указатель
|
|
|
|
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