Чем открыть зашифрованные файлы андроида

Защита файлов в телефоне на Android

На сегодняшний день существует много инструментов шифрования важных файлов в устройствах под управлением Android. В настоящей статье речь пойдет о некоторых из них, удовлетворяющих следующим условиям:

  • бесплатные;
  • работающие без прав root и со стандартным ядром Android;
  • поддерживающие как можно большее количество версий Android;
  • возможность работы с зашифрованными файлами на компьютере под Windows.

ES Проводник

Отличный бесплатный менеджер файлов для Android (необходима версия 2.1 или выше). В этом приложении предусмотрено несколько способов шифрования файлов.

Зашифрованные архивы

Этим способом я пользуюсь в случае необходимости полной совместимости, так как зашифрованные архивы поддерживают все популярные архиваторы (WinRAR, 7z и другие), то есть расшифровать файл на компьютере не составит труда.

Для начала шифрования файлов зайдите этим приложением в нужную папку, выберите файлы и коснитесь опции «Сжатие» в контекстном меню. Для ускорения процесса сжатия выберите функцию «Без сжатия», придумайте и укажите пароль.

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

Недостатки этого метода в том, что имена файлов в архиве остаются не зашифрованными, а процесс сжатия довольно медленный (хотя, скорее всего, для новых четырехъядерных процессоров этот минус несущественный).

Encrypt/Decrypt

В последних версиях ES проводника появились контекстные опции «Encrypt» и «Decrypt» при работе с файлами. Использование очень простое: выберите файлы или целую папку, файлы которой хотите зашифровать, и нажмите на опцию «Encrypt». В появившемся диалоге дважды введите желаемый пароль и нажмите «OK».

Шифрование происходит довольно быстро. Структура папок не шифруется, только файлы! Зашифрованные файлы будут иметь расширение «eslock».

Если в диалоге ввода пароля включить опцию «Encrypt file name», имена всех файлов будут зашифрованы. Вы увидите только набор цифр в именах файлов, обозначающий дату шифрования.

Чтобы расшифровать нужные файлы, выберите их и нажмите на опцию контекстного меню «Decrypt».

Единственный минус в том, что на компьютере расшифровать эти файлы не получится, по крайней мере я не нашел такого способа.

Видео

С помощью EDS (Encrypted Data Store) вы можете хранить файлы в зашифрованном контейнере для предотвращения несанкционированного доступа к ним. Приложение работает в Android начиная с версии 2.2. Поддерживаются контейнеры формата «TrueCrypt», а это значит, что вы сможете получить доступ к зашифрованным файлам с ПК. Программа может работать в двух режимах: в обычном (бесплатная версия) и в режиме монтирования (платная версия).

EDS Lite (бесплатная версия)

В EDS Lite присутствует только обычный режим, в котором отстутствует «шифрование на лету». Т. е. для того, чтобы открыть или изменить файл в стороннем приложении телефона, программа сначала расшифрует его во временную директорию (кроме некоторых аудио и видео форматов). Но зато есть огромный плюс по сравнению с платной версией: приложение не требует прав root и наличия модуля fuse в ядре системы Android.

Итак, чтобы создать новый контейнер для хранения зашифрованных файлов, нужно коснуться ключика с плюсиком.

В диалоге создания нового контейнера укажите путь и имя (я указал в корень карты памяти и имя «secret»). Укажите объем контейнера в Мб и пароль.

Алгоритм шифрования и хэширования оставьте по умолчанию, для совместимости с программой TrueCrypt для Windows. После нажатия на кнопку «ОК» и недолгого ожидания (зависит от указанного размера и производительности вашего устройства) контейнер появится в списке. Нажмите на него, и введите пароль доступа.

Контейнер разблокируется и замок разомкнется. Внутри контейнера можно создавать свою иерархию папок и файлов как на обычном диске компьютера или карте памяти телефона. Чтобы переместить секретные файлы в контейнер нажмите на кнопку «Назад» на телефоне, затем перейдите на вкладку «Устройство». Далее, выберите в проводнике файлы, которые хотите скрыть, нажмите на клавишу «Меню» телефона, затем на опцию «Вырезать», вернитесь назад в контейнер и нажмите на опцию «Вставить» в контекстном меню.

Файлы можно открывать любым подходящим приложением в телефоне (кроме изображений, см. раздел «Важные настройки») приложением.

Читайте также:  Android and quad core

По завершению работы с файлами обязательно нажмите «Закрыть» в контекстном меню контейнера, чтобы заблокировать его.

Важные настройки

Рекомендую в настройках приложения изменить следующие настройки:

Перевести опцию «Использовать встроенный просмотрщик изображений» в режим «Никогда», чтобы просматривать изображения внешним просмотрщиком.

Для просмотра нескольких фотографий или при работе с несколькими файлами удобнее поместить их во временную директорию для доступа внешних программ к ним (только в режиме чтения). Создайте папку в удобном месте и пропишите к ней путь в соответствующей настройке. Также укажите в поле «Максимальный размер файла для запуска» соответствующий размер файлов, с которыми будете работать (если их размер превышает 5 Мб).

Для просмотра файлов во внешней программе выделите их и нажмите на опцию контекстного меню «Скопировать во временную директорию», затем перейдите в папку, которую вы указали в настройках, и в подпапке «/mirror/XX..XX/» вы увидите расшифрованные файлы.

TrueCrypt (работа с данными на компьютере)

Для работы с зашифрованными контейнерами «EDS Lite» вам понадобится приложение TrueCrypt для ПК (есть версии для Windows, Linux и MacOS). Перед началом работы скопируйте контейнер с файлами на компьютер или подключите телефон к компьютеру по USB в режиме съемного диска. Откройте программу «TrueCrypt», в списке дисков выберите любую желаемую букву будущего виртуального диска, а в поле ниже укажите путь к контейнеру (воспользуйтесь кнопкой «Select File…»).

Нажмите кнопку «Mount…», контейнер смонтируется в виде локального диска, который появится в проводнике компьютера.

С файлами контейнера можно работать так же, как и с файлами обычного локального диска.

По завершению работы не забудьте размонтировать диск, чтобы заблокировать доступ к конфиденциальным данным.

Видео

Источник

Android: извлекаем данные с зашифрованной SD-карты и получаем доступ к скрытым методам

Содержание статьи

Сегодня в выпуске: обзор систем безопасности Android, объяснение атак типа Cloak & Dagger, гайд по извлечению данных с зашифрованной карты памяти, обход ограничений на загрузку нативных библиотек и доступ к скрытым Java-методам, уязвимость в Android Download Provider. А также: несколько инструментов пентестера и подборка библиотек для программистов.

Почитать

Как Android обеспечивает безопасность

The Android Platform Security Model — написанный сотрудниками Google вайтпейпер, посвященный теории и практике реализации подсистем безопасности в Android. В документе много воды, но есть и хоть и не новая, но полезная новичкам информация. Наиболее интересные моменты:

  • Android использует три вида аутентификации (проще говоря: метода разблокировки экрана) с разным уровнем надежности и, соответственно, уровнем доступа: 1) пароль или пин-код — считается наиболее надежным и поэтому дает полный контроль над устройством без всяких ограничений; 2) отпечаток пальца или снимок лица — менее надежный, поэтому система запрашивает пароль после каждой перезагрузки телефона, а также через каждые 72 часа; 3) аутентификация по местоположению или близости определенного Bluetooth-устройства — наименее надежный метод, поэтому на него накладываются те же ограничения, что и на биометрический метод, плюс он не позволяет получить доступ к аутентификационным ключам Keymaster (например, тем, что используются для платежей), а принудительный запрос пароля происходит не через 72 часа, а уже через четыре.
  • Песочницы (изолированная среда исполнения) для приложений в Android реализованы с помощью запуска каждого приложения от имени созданного специально для него Linux-пользователя. Приложение имеет полный контроль над файлами своей песочницы ( /data/data/имя_пакета ), но не может получить доступ к файлам других приложений и многим системным файлам. Система также использует UID (идентификатор пользователя) для контроля полномочий приложения.
  • Контроль доступа на основе UID не распространяется на карты памяти и USB-накопители, так как зачастую они используют файловую систему FAT, которая не позволяет назначить права доступа к файлам. Чтобы решить эту проблему, Android использует виртуальную файловую систему (sdcardfs), которая подключается к каталогу /sdcard/Android . Приложения могут хранить данные внутри нее без опасения, что другие приложения получат к ним доступ. Также Android позволяет подключить карту памяти в режиме Adoptable Storage, когда SD-карта форматируется в зашифрованную ФС ext4 и становится частью внутреннего хранилища данных.
  • Единственный способ покинуть песочницу — получить права root. В Linux пользователь root имеет неограниченный доступ к файловой системе (ядро отключает любые проверки доступа для этого пользователя).
  • Для защиты ключей шифрования/аутентификации Android и приложения могут использовать Keymaster. Это подсистема, позволяющая хранить данные в TEE (Trusted Execution Environment), специальном микрокомпьютере внутри SoC, к которому имеет доступ только система. TEE позволяет защитить данные даже в том случае, если злоумышленник получил права root. Начиная с девятой версии Android также поддерживает StrongBox, выделенный чип TEE, разработанный самой Google. Он позволяет защититься от атак класса Rowhammer.
  • Для защиты от эксплуатации уязвимостей в системных компонентах Android использует SELinux, подсистему ядра Linux, позволяющую более тонко управлять правами доступа, а также контролировать доступ процессов к системным вызовам. К примеру, обнаружив в одном из системных компонентов уязвимость, взломщик может попытаться принудить этот компонент выполнить системный вызов exec для запуска root shell, но, если правила SELinux запрещают это делать данному компоненту, вызов будет отклонен.
  • Начиная с седьмой версии Android способен гарантировать, что ни операционная система, ни загрузчик не были скомпрометированы. Такая проверка называется Verified Boot и выполняется на этапе загрузки: сначала загрузчик сверяет контрольную сумму раздела boot, затем один из следующих компонентов загрузки сверяет контрольные суммы файлов в разделе system. Тот же механизм используется для защиты от отката на предыдущую версию прошивки, которая может содержать уязвимости. Производители вольны сами выбирать, как должна повести себя система в случае обнаружения нарушения: вывести на экран предупреждающее сообщение или прекратить загрузку.
Читайте также:  Спл лаб для андроид

Как работают атаки класса Cloak & Dagger

Cloak and Dagger — Mobile Malware Techniques Demystified — небольшая заметка о том, как работают атаки класса Cloak & Dagger. Мы писали об этом типе атак еще в 2017 году, но тогда рассмотрели только одну из них: кейлоггер, не требующий дополнительных прав в системе. Эта статья посвящена другой атаке, позволяющей заставить пользователя включить настройку доступа к AccessibilityService (позволяет перехватывать любые нажатия пользователя и нажимать кнопки интерфейса за него), замаскировав переключатель под нечто безобидное.

Атака использует разрешение SYSTEM_ALERT_WINDOW, которое приложения из Google Play получают автоматически. SYSTEM_ALERT_WINDOW позволяет выводить элементы интерфейса поверх других приложений, то есть реализовать такие вещи, как плавающие окна, меню, панели управления. Создатели вирусов быстро смекнули, что эту возможность можно использовать для перекрытия текущего окна на экране и обмана пользователя, поэтому с версией Android 5 Google выкатила защиту, которая проверяет, не был ли перекрыт какой-либо опасный для включения элемент интерфейса оверлеем, и отказывается его включить, если это так. Поэтому Cloak & Dagger вместо одного оверлея на весь экран создает несколько небольших и выкладывает их вокруг элемента управления, так что в результате защита не срабатывает.

Обход защиты на включение AccessibilityService с помощью трех-четырех оверлеев

Атака работает на Android версий 4.4.4–7.1.2, исходный код доступен.

В дополнение можно отметить еще одну статью на смежную тему: Android Toast Overlay Attack: “Cloak and Dagger” with No Permissions. Ее авторы пошли еще дальше и реализовали ту же атаку вообще без использования разрешения SYSTEM_ALERT_WINDOW. Вместо него они засунули все оверлеи в toast-сообщение, то самое, которое позволяет выводить в нижней части экрана информационные сообщения. Как оказалось, такие сообщения тоже представляют собой полноценные полноэкранные окна, большая часть которых прозрачна. И у приложения есть доступ к этому окну и возможность его изменять.

Как получить доступ к зашифрованной карте памяти

Recovering data from a failing Android adoptable storage — статья о том, как восстановить данные с карты памяти, отформатированной с помощью механизма Adoptable Storage. В отличие от обычного подключения SD-карты, Adoptable Storage создает на карте памяти зашифрованный том, форматирует его в файловую систему ext4, а затем подключает ее к основному хранилищу данных так, что на нее можно сохранять не только фотки с пляжа, но и приложения, их данные и любую другую информацию, которая обычно хранится только во внутренней памяти устройства. Другими словами, Adoptable Storage позволяет расширить встроенную память устройства.

Но есть одна, а точнее две смежные проблемы: 1) если вставить карту памяти в другой телефон — он ее не увидит из-за отсутствия ключа для расшифровки данных; 2) если что-то пойдет не так (например, карта памяти начнет сбоить), восстановить данные с нее не получится, точнее получится, но через одно место. Как через это место восстанавливать данные, описано в статье.

Для начала на телефоне необходимо получить права root. Затем подключить карту памяти к Linux-машине (macOS тоже должна подойти, но действия описаны именно для Linux) и снять ее образ. Обычный dd в этом случае не подойдет, так как, если карта памяти начала сбоить, он, скорее всего, вывалится с ошибкой Input/output error. Выручит ddrescue, который предназначен как раз для таких случаев:

Далее необходимо извлечь из памяти устройства ключ шифрования (на устройствах с активным модулем TEE такой трюк, скорее всего, не пройдет):

Читайте также:  Wiimote controller для андроид

Используем полученный ключ, чтобы смонтировать файловую систему:

Это все. Далее автор рассказывает, как залить файлы на другую карту памяти и изменить размер файловой системы. Про это можно прочитать в оригинальной статье. Также стоит отметить, что если карты памяти одинакового объема, то можно вообще не заморачиваться с подключением файловой системы на компе и копированием ключа, а просто залить полученный на первом шаге образ на новую карту памяти с помощью того же ddrescue:

Как обойти ограничения на доступ к внутренним библиотекам и методам

Android Runtime Restrictions Bypass — статья о том, как обойти ограничения на доступ к внутренним библиотекам и методам Android.

Начиная с Android 7 Google ввела ограничения на прямую загрузку нативных системных библиотек (например, /system/lib/libart.so ). Позже, уже в релизе Android 9, появилось ограничение на доступ к определенным скрытым методам, которые раньше можно было вызывать с помощью рефлексии. Как оказалось, эти механизмы достаточно просто обойти.

Принцип работы механизма, ограничивающего загрузку библиотек, построен на пространствах имен. Если JNI-библиотека приложения попытается загрузить библиотеку, которая расположена за пределами каталогов /data , /mnt/expand или в песочнице самого приложения, оно будет завершено с такой ошибкой:

Проверка осуществляется в лоадере библиотек ( /system/bin/linker ), который создает для каждой JNI-библиотеки приложения структуру soinfo, которая хранит информацию о ней и пространствах имен, к которым она может получить доступ:

Все структуры soinfo размещены в мэпе g_soinfo_handles_map.

Интересно здесь то, что g_soinfo_handles_map — это экспортированная статическая переменная. Поэтому с помощью символьной таблицы ELF можно найти базовый адрес /system/bin/linker , рассчитать адрес g_soinfo_handles_map JNI-библиотеки и изменить структуру soinfo, добавив нужные пути в доступное ей пространство имен:

После этого попытка загрузить библиотеку будет успешной:

Ограничение доступа к внутренним методам Java API, предназначенным только для использования системными компонентами, реализовано иначе, а именно с помощью прямых проверок на доступ. Например, функция GetStaticMethodID, используемая для доступа к Java-методам из JNI-библиотеки, вызывает функцию FindMethodID, которая в том числе проверяет, доступен ли данный метод:

ShouldBlockAccessToMember() в конечном итоге вызывает метод Runtime::GetHiddenApiEnforcement(), который сообщает, стоит ли отклонить вызов или нет. При этом система может либо пропустить его без вопросов, либо вывести предупреждение, либо использовать черный и серый списки, которые содержат имена запрещенных к использованию методов.

Чтобы отключить проверку, мы должны перевести рантайм в режим «пропускать без вопросов» (EnforcementPolicy::kNoChecks), но для этого нам нужен доступ к самому рантайму:

Однако в этом случае компилятор (а точнее, линковщик) будет вынужден импортировать символ art::Runtime::instance_ в JNI-библиотеку, то есть слинковать ее с libart.so. И здесь мы столкнемся с ограничением пространства имен, а предложенный ранее метод его обхода не сработает, так как мы не сможем изменить пространство имен раньше, чем в память загрузится libart.so.

Но есть другой способ получить доступ к рантайму. Дело в том, что метод JNI_OnLoad, который запускается при загрузке JNI-библиотеки, в качестве первого аргумента получает указатель на art::JavaVMExt, который имеет метод GetRuntime(). Так что все, что нам остается, — это получить доступ к рантайму и отключить проверку:

Примечательно, что команда Android security team не считает описанные методы обхода нарушением безопасности (мол, не для безопасности они были придуманы), поэтому быстро дала согласие на обнародование информации и публикацию исходного кода PoC.

Описание уязвимостей в Android Download Provider

Multiple Vulnerabilities in Android’s Download Provider — статья исследователя, нашедшего три уязвимости в Android: CVE-2018-9468, CVE-2018-9493 и CVE-2018-9546. Все они затрагивают Download Content Provider, компонент, позволяющий любому приложению запустить загрузку файла из интернета так, чтобы пользователь видел уведомление с прогрессом загрузки.

  • CVE-2018-9468. Первая уязвимость заключается в том, что Download Content Provider позволяет увидеть любые другие загрузки, происходящие на устройстве, а не только свои собственные. Используя URL вида content://downloads/public_downloads/# , зловредное приложение может подобрать загрузку по номеру и, например, прочитать загруженный файл или подменить его сразу после загрузки. Причем это относится как к обновлениям ПО, так и к загрузкам из Google Play. Исходный код примера.
  • CVE-2018-9493. Вторая уязвимость — SQL-инъекция, позволяющая получить доступ к закрытым столбцам таблицы (например, CookieData). Исходный код примера.
  • CVE-2018-9546. Третья уязвимость позволяет извлечь HTTP-заголовки (могут включать аутентификационные данные и кукисы) для любой загрузки. Уязвимость использует тот же трюк, что и первая. Исходный код примера.

Данные уязвимости были исправлены в сентябрьском и ноябрьском security-патчах.

Источник

Оцените статью