Статья для участия в конкурсе Тестирование Веб-Приложений на проникновение
Недавно был обнаружен новый вид атаки, а именно: Man-In-The-Disk, с помощью которого можно скомпрометировать любые Android приложения. В данной статье, будет рассказано, как с помощью простого приложения можно атаковать другие приложения через Внешнее Хранилище. Для того что бы начать, нужно повторить основы безопасности.
ОСНОВЫ БЕЗОПАСНОСТИ АНДРОИД ПРИЛОЖЕНИЯ
Главная концепция — изолирование одного приложения от другого:
Фреймворк Андроида имеет сотни разрешений для разных приложений. И конечно же, самые большие привилегии доступны уже предустановленным приложениям, таким как Радио или Медиа:
Но для чего Андроиду нужно Внешние Хранилище?
* Глобальный доступ к хранилищу:
Есть 2 типа использования Внешнего Хранилища: при первом используется дополнительный сервер для загрузки данных, при втором - передача данных через загрузчики.
Что важно: при всех этих сценариях, мы можем внедриться в эти цепочки, и переписать любую информацию:
Самым тяжелым, при первом сценарии, является поймать тот момент, когда скачанный файл должен быть переписан. Что бы решить эту проблему, нам нужно наблюдать за файлом. Большинство Андроид приложений, как вы знаете, написаны на Java, но бывает и на машинном коде («native library»).
Рассмотрим вариант с Java кодом:
Фреймворк Java предоставляет компонент FileObserver для наблюдения за файлами:
Но все же атака MITD основывается не только на FileObserver, но и на Timer:
Классические
Поэтому мы можем переписать файл который читает Google Translate, и попытаться его крашнуть.
1. Столько занимает файл который будет переписан:
2. Открываем приложение, которое переписывает определенный файл, и переписываем его:
3. Файлы изменились:
4. Теперь пробуем что-то перевести:
5. И Google Translate крашнулся
Все тоже самое можно проделать и с Yandex Translate (ru.yandex.translate). Там разве что другая библиотека.
Так же можно атаковать Google Voice Typing (com.google.android.googlequicksearchbox) ну или же «Окей Гугл». Программа скачивает файлы для распознавания речи через Внешние Хранилище без верификации!:
Можно воспользоваться тем же приложением, которые было использовано для Google Translator, изменив директорию, крашнуть Google Voice Typing.
Еще один пункт гласит:
LG видимо не хотят следовать этим правилам:
Дело в том, что LG Application Manager (com.lge.appbox.client) устанавливает или обновляет приложения, связанные с LG, через Внешнее Хранилище, а именно через папку /.dwnld/
И как же это можно использовать?
1. Запускаем уже знакомую нам программу, и перезаписываем файл в самом LG Application Manager:
2. Заходим в LG Application Manager, и выбираем обновить Радио:
3. И «Радио» "обновилось":
Так хакер может использовать MITD и установить любое приложение в любое время на телефоны LG
Такая же проблема и с LG World (com.lge.lgworld):
Следующий пункт для андроид-разработчиков:
Что дает хакеру возможность без всяких усилий переписать файлы после верификации пакетов.
К сожалению, у Xiaomi Browser (com.android.browser package) такая же проблема:
Но вроде кажется, что успеть перезаписать файл после проверки и установки невозможно. Но на самом деле это не так:
1. Запускаем наше приложение, которое перезапишет нужный нам файл:
2. Заходим в Настройки --> Информация о версии --> Обновить:
3. Происходит загрузка и проверка:
4. Нам предлагают установить уже перезаписанное приложение, мы соглашаемся:
5. И приложение установлено:
ПОДВОДЯ ИТОГИ
Главной целью для атаки MITD является машинный код (native library), с форматом .so. Этот самый файл можно переписать на С, и если файл бегает из директории в директорию, то это приложение под угрозой. Также перед атакой проводится глобальный поиск библиотек, которые имеют формат .so и так сказать «путешествуют».
Вот как это примерно происходит:
Тут мы нашли нужную нам файл с названием "libhwrword.so"
Ну а тут - "liboffline_search-data_reader.so"
На этом все. Спасибо за внимание!
Недавно был обнаружен новый вид атаки, а именно: Man-In-The-Disk, с помощью которого можно скомпрометировать любые Android приложения. В данной статье, будет рассказано, как с помощью простого приложения можно атаковать другие приложения через Внешнее Хранилище. Для того что бы начать, нужно повторить основы безопасности.
ОСНОВЫ БЕЗОПАСНОСТИ АНДРОИД ПРИЛОЖЕНИЯ
Главная концепция — изолирование одного приложения от другого:
Фреймворк Андроида имеет сотни разрешений для разных приложений. И конечно же, самые большие привилегии доступны уже предустановленным приложениям, таким как Радио или Медиа:
Но для чего Андроиду нужно Внешние Хранилище?
- Совместное использование медиафайлов между приложениями
- Передача файлов между смартфоном и ПК
- Совместимость с ограниченными внутренними запоминающими устройствами
- Скрыть текущий размер приложения
* Глобальный доступ к хранилищу:
- Разрешение READ_EXTERNAL_STORAGE
- Разрешение WRITE_EXTERNAL_STORAGE
- Файлы недоступны для провайдера информации MediaStore
- Наблюдение предупреждении
Есть 2 типа использования Внешнего Хранилища: при первом используется дополнительный сервер для загрузки данных, при втором - передача данных через загрузчики.
Что важно: при всех этих сценариях, мы можем внедриться в эти цепочки, и переписать любую информацию:
Самым тяжелым, при первом сценарии, является поймать тот момент, когда скачанный файл должен быть переписан. Что бы решить эту проблему, нам нужно наблюдать за файлом. Большинство Андроид приложений, как вы знаете, написаны на Java, но бывает и на машинном коде («native library»).
Рассмотрим вариант с Java кодом:
Фреймворк Java предоставляет компонент FileObserver для наблюдения за файлами:
Но все же атака MITD основывается не только на FileObserver, но и на Timer:
Классические
Ссылка скрыта от гостей
по безопасности для андроид-разработчиков, не всегда могут спасти от атак, в нашем случае MITD.Вроде бы все просто, но допустим Google Translate (com.google.android.apps.translate) содержит автономные режимы перевода на Внешнем Хранилище:Вы должны выполнить проверку ввода при обработке данных из внешнего хранилища, как это было бы с данными из любого ненадежного источника
Поэтому мы можем переписать файл который читает Google Translate, и попытаться его крашнуть.
1. Столько занимает файл который будет переписан:
2. Открываем приложение, которое переписывает определенный файл, и переписываем его:
3. Файлы изменились:
4. Теперь пробуем что-то перевести:
5. И Google Translate крашнулся
Все тоже самое можно проделать и с Yandex Translate (ru.yandex.translate). Там разве что другая библиотека.
Так же можно атаковать Google Voice Typing (com.google.android.googlequicksearchbox) ну или же «Окей Гугл». Программа скачивает файлы для распознавания речи через Внешние Хранилище без верификации!:
Можно воспользоваться тем же приложением, которые было использовано для Google Translator, изменив директорию, крашнуть Google Voice Typing.
Еще один пункт гласит:
Вы не должны хранить исполняемые файлы или файлы классов (классы в языке Java) на внешнем хранилище до динамической загрузки
LG видимо не хотят следовать этим правилам:
Дело в том, что LG Application Manager (com.lge.appbox.client) устанавливает или обновляет приложения, связанные с LG, через Внешнее Хранилище, а именно через папку /.dwnld/
И как же это можно использовать?
1. Запускаем уже знакомую нам программу, и перезаписываем файл в самом LG Application Manager:
2. Заходим в LG Application Manager, и выбираем обновить Радио:
3. И «Радио» "обновилось":
Так хакер может использовать MITD и установить любое приложение в любое время на телефоны LG
Такая же проблема и с LG World (com.lge.lgworld):
Следующий пункт для андроид-разработчиков:
Вроде все просто и понятно. Все телефоны с ОС Андроид имеют Google Text-to-speech (com.google.android.tts). Чтобы скачать определенные файлы для работы, он, после их загрузки, проверят подпись, и распаковывает во Внешние Хранилище. Звучит безопасно, ведь скачанные файлы проверяются, но между 2 и 3 пунктом нету проверки файлов:Внешние файлы хранения должны быть подписаны и проверяется до динамической загрузки
Что дает хакеру возможность без всяких усилий переписать файлы после верификации пакетов.
К сожалению, у Xiaomi Browser (com.android.browser package) такая же проблема:
Но вроде кажется, что успеть перезаписать файл после проверки и установки невозможно. Но на самом деле это не так:
1. Запускаем наше приложение, которое перезапишет нужный нам файл:
2. Заходим в Настройки --> Информация о версии --> Обновить:
3. Происходит загрузка и проверка:
4. Нам предлагают установить уже перезаписанное приложение, мы соглашаемся:
5. И приложение установлено:
ПОДВОДЯ ИТОГИ
- Android не обеспечивает соответствующую защиту данных во Внешнем Хранилище, и ничего не может предложить.
- Многие предустановленные и популярные приложения ROM содержат конфиденциальные данные во Внешнем Хранилище.
- Атака Man-In-The-Disk, основанная на хранении, может блокировать защиту «песочницы» защищенного приложения Android.
- Внешнее Хранилище устройства является общедоступной областью, которую можно наблюдать / изменять сторонним приложением, а также пользователем устройства.
Главной целью для атаки MITD является машинный код (native library), с форматом .so. Этот самый файл можно переписать на С, и если файл бегает из директории в директорию, то это приложение под угрозой. Также перед атакой проводится глобальный поиск библиотек, которые имеют формат .so и так сказать «путешествуют».
Вот как это примерно происходит:
Тут мы нашли нужную нам файл с названием "libhwrword.so"
Ну а тут - "liboffline_search-data_reader.so"
На этом все. Спасибо за внимание!