Конкурс MITD атака на Андроид приложения

Статья для участия в конкурсе Тестирование Веб-Приложений на проникновение

Недавно был обнаружен новый вид атаки, а именно: Man-In-The-Disk, с помощью которого можно скомпрометировать любые Android приложения. В данной статье, будет рассказано, как с помощью простого приложения можно атаковать другие приложения через Внешнее Хранилище. Для того что бы начать, нужно повторить основы безопасности.

ОСНОВЫ БЕЗОПАСНОСТИ АНДРОИД ПРИЛОЖЕНИЯ

Главная концепция — изолирование одного приложения от другого:

1.png


Фреймворк Андроида имеет сотни разрешений для разных приложений. И конечно же, самые большие привилегии доступны уже предустановленным приложениям, таким как Радио или Медиа:

2.png




Но для чего Андроиду нужно Внешние Хранилище?
  • Совместное использование медиафайлов между приложениями
  • Передача файлов между смартфоном и ПК
  • Совместимость с ограниченными внутренними запоминающими устройствами
  • Скрыть текущий размер приложения
Так же, для проведения MITD атаки, мы должны знать саму защиту Внешнего Хранилища. Она делится на 2 типа:

* Глобальный доступ к хранилищу:
  1. Разрешение READ_EXTERNAL_STORAGE
  2. Разрешение WRITE_EXTERNAL_STORAGE
*«Частная» директория для каждого приложения:
  1. Файлы недоступны для провайдера информации MediaStore
  2. Наблюдение предупреждении
СЦЕНАРИИ ИСПОЛЬЗОВАНИЯ ВНЕШНЕГО ХРАНИЛИЩА

Есть 2 типа использования Внешнего Хранилища: при первом используется дополнительный сервер для загрузки данных, при втором - передача данных через загрузчики.

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

4.png


Самым тяжелым, при первом сценарии, является поймать тот момент, когда скачанный файл должен быть переписан. Что бы решить эту проблему, нам нужно наблюдать за файлом. Большинство Андроид приложений, как вы знаете, написаны на Java, но бывает и на машинном коде («native library»).

Рассмотрим вариант с Java кодом:

Фреймворк Java предоставляет компонент FileObserver для наблюдения за файлами:

29.png

Но все же атака MITD основывается не только на FileObserver, но и на Timer:

28.png



Классические по безопасности для андроид-разработчиков, не всегда могут спасти от атак, в нашем случае MITD.

Вы должны выполнить проверку ввода при обработке данных из внешнего хранилища, как это было бы с данными из любого ненадежного источника
Вроде бы все просто, но допустим Google Translate (com.google.android.apps.translate) содержит автономные режимы перевода на Внешнем Хранилище:

5.png



Поэтому мы можем переписать файл который читает Google Translate, и попытаться его крашнуть.

1. Столько занимает файл который будет переписан:

6.png


2. Открываем приложение, которое переписывает определенный файл, и переписываем его:

7.png


3. Файлы изменились:

8.png


4. Теперь пробуем что-то перевести:

9.png


5. И Google Translate крашнулся

10.png



Все тоже самое можно проделать и с Yandex Translate (ru.yandex.translate). Там разве что другая библиотека.

11.png




Так же можно атаковать Google Voice Typing (com.google.android.googlequicksearchbox) ну или же «Окей Гугл». Программа скачивает файлы для распознавания речи через Внешние Хранилище без верификации!:

12.png


Можно воспользоваться тем же приложением, которые было использовано для Google Translator, изменив директорию, крашнуть Google Voice Typing.

Еще один пункт гласит:
Вы не должны хранить исполняемые файлы или файлы классов (классы в языке Java) на внешнем хранилище до динамической загрузки

LG видимо не хотят следовать этим правилам:

13.png


Дело в том, что LG Application Manager (com.lge.appbox.client) устанавливает или обновляет приложения, связанные с LG, через Внешнее Хранилище, а именно через папку /.dwnld/

И как же это можно использовать?
1. Запускаем уже знакомую нам программу, и перезаписываем файл в самом LG Application Manager:

14.png


2. Заходим в LG Application Manager, и выбираем обновить Радио:

15.png


3. И «Радио» "обновилось":

16.png


Так хакер может использовать MITD и установить любое приложение в любое время на телефоны LG

Такая же проблема и с LG World (com.lge.lgworld):

17.png




Следующий пункт для андроид-разработчиков:
Внешние файлы хранения должны быть подписаны и проверяется до динамической загрузки
Вроде все просто и понятно. Все телефоны с ОС Андроид имеют Google Text-to-speech (com.google.android.tts). Чтобы скачать определенные файлы для работы, он, после их загрузки, проверят подпись, и распаковывает во Внешние Хранилище. Звучит безопасно, ведь скачанные файлы проверяются, но между 2 и 3 пунктом нету проверки файлов:

18.png


Что дает хакеру возможность без всяких усилий переписать файлы после верификации пакетов.
К сожалению, у Xiaomi Browser (com.android.browser package) такая же проблема:

19.png


Но вроде кажется, что успеть перезаписать файл после проверки и установки невозможно. Но на самом деле это не так:
1. Запускаем наше приложение, которое перезапишет нужный нам файл:

20.png


2. Заходим в Настройки --> Информация о версии --> Обновить:

21.png


3. Происходит загрузка и проверка:

22.png


4. Нам предлагают установить уже перезаписанное приложение, мы соглашаемся:

23.png


5. И приложение установлено:

24.png


25.png


ПОДВОДЯ ИТОГИ
  • Android не обеспечивает соответствующую защиту данных во Внешнем Хранилище, и ничего не может предложить.
  • Многие предустановленные и популярные приложения ROM содержат конфиденциальные данные во Внешнем Хранилище.
  • Атака Man-In-The-Disk, основанная на хранении, может блокировать защиту «песочницы» защищенного приложения Android.
  • Внешнее Хранилище устройства является общедоступной областью, которую можно наблюдать / изменять сторонним приложением, а также пользователем устройства.
ЗАЩИТА ЛИБО ОХОТА НА MITD

Главной целью для атаки MITD является машинный код (native library), с форматом .so. Этот самый файл можно переписать на С, и если файл бегает из директории в директорию, то это приложение под угрозой. Также перед атакой проводится глобальный поиск библиотек, которые имеют формат .so и так сказать «путешествуют».

Вот как это примерно происходит:

26.png

Тут мы нашли нужную нам файл с названием "libhwrword.so"


27.png


Ну а тут - "liboffline_search-data_reader.so"

На этом все. Спасибо за внимание!
 
Л

Литиум

Поздно , раньше нужно постить про эту тему. Статья хорошая.
 
  • Нравится
Реакции: g00db0y
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!