Выбираем приложение-шифровальщик для Android: Decrypto, Cryptography и EncryptIt! – кодируем файлы и текст

Вступление

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

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

Первым пойдет Decrypto – эффективная программа с англоязычным интерфейсом, позволяющая шифровать текст чуть ли не всеми известными алгоритмами кодирования. Ей в противовес выступает Cryptography – криптографическое решение, поддерживающее разноплановое хэширование и кодирование.

В качестве тестового оборудования использовались:

  • Планшет DEXP Ursus 8EV2 3G (Android 4.4.2, процессор MT8382, 4 x Cortex-A7 1.3 ГГц, видеоядро Mali-400 MP2, 1 Гбайт ОЗУ, аккумулятор 4 000 мАч, 3G-модуль, Wi-Fi 802.11b/g/n);
  • Смартфон Homtom HT3 Pro (Android 5.1 Lollipop, процессор MT6735P, 4 x Cortex-A53 1.0 ГГц, 64-бит, видеоядро Mali-T720, 2 Гбайт ОЗУ, аккумулятор 3 000 мАч, 4G-модуль, Wi-Fi 802.11b/g/n).

С nexus 6 что-то не так

Устройства линейки Nexus интересны в первую очередь тем, что прошивки для них доступны в виде исходных кодов и могут быть исследованы и модифицированы независимыми разработчиками. Один из них сумел активировать аппаратный ускоритель шифрования в Nexus 6. Результат… обескураживающий. Даже с активированным криптосопроцессором Nexus 6 демонстрирует чрезвычайно низкий результат:

Производительность Nexus 6 с активированным криптомодулем
Производительность Nexus 6 с активированным криптомодулем

Что ж, давай посмотрим, как обстоят дела с шифрованием в других устройствах компании Google.

А что у других производителей?

Платформа Android выделяется сильнейшей фрагментацией. Разительно отличаются как аппаратные платформы (вплоть до используемых наборов команд — ARMv7, ARMv8, Intel x86 и x64), так и прошивки, под управлением которых работают устройства разных производителей.

Учитывая все разнообразие устройств, проверить работу аппаратного шифрования даже небольшой части не представляется возможным. Тем не менее мы решили протестировать еще по крайней мере один аппарат — редакционный OnePlus One (версия с 16 Гбайт) под управлением прошивки CyanogenMod.

OnePlus One и шифрование данных
OnePlus One и шифрование данных

Почему «программное ускорение» — зло?

Отлично, просто замечательно! В 2022 году на Android зашифрованные данные читаются всего вдвое медленнее незашифрованных и всего в пять раз медленнее снятого с производства iPhone 5S (2022 год), в котором шифрование активировано из коробки! Инженерам Google нужно ставить памятник. ТАК медленно реализовать потоковое шифрование нужно сильно постараться.

Но скорость не главное. Основная проблема «программного» ускорения в том, что каждый раз, когда системе нужно что-то прочитать или записать, она вынуждена вместо микроскопического сопроцессора активировать огромные энергоемкие ядра, насильно выводя их из спящего режима. На времени жизни аккумулятора это сказывается однозначно негативно.

Отвлечемся на минуту от 64-разрядных устройств и вернемся к Nexus 6. Представь себе Snapdragon 805. Это — четыре больших ядра («больших» по числу транзисторов, по площади — и прожорливых соответственно). А выделенный ускоритель AES — это даже не малое ядро (хотя в некоторых решениях для крипто используется как раз одно из малых ядер ARM на низкой тактовой частоте, у нас не тот случай).

Теперь каждый раз, когда системе нужно дописать строчку в лог-файл, активируется не отдельный маленький энергоэффективный чип, а все огромное и «горячее» ядро. Пусть и на миллисекунды, но пробуждается. А пишет или читает что-то Android постоянно (только в Android 6 появился режим Doze, который снижает интенсивность работы устройства в спящем режиме), и ядро активирует — тоже. Отсюда высокая скорость, с которой аккумулятор разряжается в простое (и еще более высокая — при работе).

И знаешь, что самое грустное? Это референсный дизайн Google. И если уж в Google не смогли или не захотели реализовать крипто на выделенном сопроцессоре, то никто, ни один OEM (за исключением, возможно, Samsung) этим заниматься тем более не будет. Ведь это не попугаи в AnTuTu, это что-то невидимое и обычному пользователю совсем непонятное и, как показала статистика, ненужное.

Подведем итог. Мало того, что за полтора года с выхода Nexus 6 так и не удалось задействовать криптосопроцессор. Мало того, что наступили на те же грабли в свежем последнем поколении Nexus’ов. У нас отобрали надежду на то, что шифрование будет реализовано на уровне хотя бы трехлетней давности iPhone 5S.

В Google не могут или не хотят сделать быстрое потоковое крипто, несмотря на наличие всего необходимого — от выделенного сопроцессора до исходных кодов драйверов. Увы. На сегодня скорость шифрования в Android не достигла даже того уровня, который был взят Apple три года назад.

Android 5.0–6.0

Первым устройством под управлением Android 5.0 стал Google Nexus 6, выпущенный в 2022 году компанией Motorola. В то время уже активно продвигались 64-разрядные мобильные процессоры с архитектурой ARMv8, но у компании Qualcomm не было готового решения на этой платформе.

Почему это важно? Дело в том, что в процессоры на архитектуре ARMv8 встроен набор команд для ускорения потокового шифрования данных, а в 32-битных процессорах ARMv7 таких команд нет.

Итак, следи за руками. Инструкций для ускорения крипто в процессоре нет, поэтому Qualcomm встроил в набор системной логики выделенный аппаратный модуль, призванный выполнять те же функции. Но что-то у Google не сложилось. То ли драйверы на момент выпуска не допилили, то ли Qualcomm не предоставил исходные коды (или не разрешил публиковать их в AOSP).

Скорость чтения/записи данных с активированным шифрованием
Скорость чтения/записи данных с активированным шифрованием

Причина восьмикратного отставания от «младшего брата», смартфона Motorola Moto X 2022, проста: насильно включенное шифрование, реализованное компанией на программном уровне. В реальной жизни пользователи Nexus 6 на оригинальной версии прошивки жаловались на многочисленные лаги и фризы, заметный нагрев устройства и относительно слабую автономность. Установка ядра, отключающего насильственно активированное шифрование, разом решала эти проблемы.

Впрочем, прошивка — дело такое, ее ведь можно и допилить, не так ли? Особенно если ты Google, располагаешь неограниченными финансами и имеешь в штате самых квалифицированных разработчиков. Что ж, посмотрим, что было дальше.

А потом был Android 5.1 (спустя полгода), в котором нужные драйверы для работы с аппаратным ускорителем сначала добавили в предварительной версии прошивки, а потом снова убрали в финальной из-за серьезных проблем со спящим режимом. Потом был Android 6.

Android 7.0

Хорошо, но уж в Android 7 можно было исправить серьезную проблему флагманского устройства, которой уже почти два года? Можно, и ее исправили! В лаборатории «Элкомсофт» сравнили производительность двух идентичных Nexus 6, на одном из которых была установлена версия Android 6.0.

Nexus 6, Android 7 и шифрование
Nexus 6, Android 7 и шифрование

Несмотря на тестовый статус сборки, что-то в этой версии явно подкрутили. Скорость последовательного чтения данных с зашифрованного раздела подросла с жалких 25 Мбайт/с до чуть менее жалких 39. Почему «жалких»? Даже если сравнивать со скоростью работы аналогичного устройства с выключенным шифрованием в 126 Мбайт/с, получается трехкратное падение производительности. А если сравнить со стареньким, 2022 года iPhone 5S под управлением iOS? Обратимся к AnandTech:

Nexus 6 vs iPhone 5S
Nexus 6 vs iPhone 5S

Разница в скорости чтения данных с зашифрованного Nexus 6 и зашифрованного iPhone 5S — пять раз. Вопрос можно закрывать.

Decrypto: кручу-верчу – запутать хочу

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

Правда, весь интерфейс на английском языке, хотя и без знания оного с ним легко разобраться. Сама программа бельгийская, а это редкость в Google Play.

Оценка в Google Play 4.5
Разработчик Benoit V. (Бельгия)
Количество загрузок в Google Play 100 000–500 000
Совместимость приложения с другими версиями ОС Android 4.0.3 или более поздняя
Размер после установки 20 Мбайт
Последнее обновление (на момент написания статьи) 29 сентября 2022 г.
Версия приложения 1.4.7
Покупки в приложении 99 рублей

Smart lock

Почему все так ополчились на функцию Smart Lock? Дело в том, что её использование позволяет разблокировать телефон по ряду критериев, которые не имеют ничего общего с безопасностью. Рассмотрим на примерах.

Face unlock. Разблокировка по лицу в разделе Smart Lock не имеет ничего общего с биометрической аутентификацией. Это – всего лишь сличение образа пользователя с фотографией, сделанной на фронтальную камеру устройства. Такой face unlock легко обманывается плоской фотографией.

Обратите внимание: в некоторых телефонах, оборудованных биометрической функцией Face Unlock (например, Xiaomi Mi 8) этого пункта в настройках не будет; в таких устройствах Face Unlock будет подчиняться тем же требованиям и правилам, что и разблокировка по датчику отпечатка пальцев. Разблокировку по лицу в разделе Smart Lock лучше не использовать.

Trusted places. Автоматически разблокирует устройства в окрестностях тех мест, где часто бывает пользователь. Если телефон вытащат из кармана возле дома, у злоумышленника не возникнет никаких проблем с его разблокировкой.

Trusted devices. Если подключено доверенное устройство Bluetooth, телефон может быть разблокирован автоматически. Поверьте, у полиции не возникнет затруднений использовать ваши «умные» часы или трекер для такой разблокировки.

Voice match, On-body detection: в какой-то степени экспериментальные варианты, позволяющие пользователям реже разблокировать устройство кодом блокировки.

Если Smart Lock настолько небезопасен, почему он вообще есть в Android? Smart Lock – тяжкое наследие с тех времён, когда ввод кода блокировки или паттерна был единственным способом разблокировать телефон. Подавляющему большинству пользователей не нравилось, что на разблокировку устройства тратятся драгоценные секунды (а разблокировать телефон в перчатках было той ещё задачей); в результате многие не устанавливали никакой защиты вообще.

Для того, чтобы хоть как-то приучить пользователей к установке кода блокировки, Google пришлось сильно занизить планку: так, появились опции, позволяющие отсрочить блокировку экрана на 10-15 минут с момента последней разблокировки. Smart Lock – из той же оперы.

Никакой разумной нужды что в Smart Lock, что в отложенной блокировке уже не осталось: современные сканеры отпечатков пальцев срабатывают чуть быстрее, чем просто «мгновенно», а разблокировка по лицу достигла достаточно высоких уровней скорости и иногда (об этом ниже) безопасности.

Алгоритм

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

private byte[] encrypt(byte[] my_key, byte[] clear){

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

Cipher cipher = Cipher.getInstance(cypher_name);

В реализации Java ключ шифрования требуется преобразовать в так называемый специальный секретный ключ SecretKeySpec. Полученный объект будет содержать «наш ключ плюс название алгоритма шифрования». Также нам потребуется задать вектор инициализации.

SecretKeySpec secretKeySpec = new SecretKeySpec(my_key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(my_key);

Все необходимое сделано. Теперь заполним данными объект cipher, и можно выполнять шифрование поданных на вход метода байтов.

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] encrypted = cipher.doFinal(clear);

Расшифровка будет выполняться по тому же алгоритму, следует только заменить первый аргумент метода init на Cipher.DECRYPT_MODE.

:/>  Управление назначенными заданиями средствами командной строки. Часть 5

Анализ компьютера: правовые особенности

Насколько реальны риски, связанные с анализом компьютера? По информации от самих полицейских, исследование компьютеров проводят нечасто. Как правило, у полиции возникают следующие препятствия:

  • Препятствия юридического характера: имеющееся постановление разрешает досмотр и анализ улик, имевшихся у задержанного при себе (но не дают разрешения на обыск в квартире).
  • Ограничения по времени: работа эксперта поставлена на поток. В рутинных случаях у эксперта нет месяца, недели или даже нескольких дней, чтобы подробнейшим образом проанализировать все доступные улики.
  • Пароль к BitLocker чрезвычайно стойкий. Атаки «в лоб» обречены, если полиция не сможет извлечь готовый ключ шифрования посредством, к примеру, FireWire Attack.
  • Поверхностная экспертиза: в результате жёстких временных рамок содержимое жёсткого диска просматривается на предмет вполне конкретных файлов (фото- и видеоматериалы, переписка, базы данных мессенжеров).
  • Даже если предпринимается полный анализ, очень часто в кэше браузеров не оказывается нужных паролей.
  • Даже если нужные пароли есть, в «облаке» подозреваемого не оказывается резервных копий вообще или достаточно свежих резервных копий. Даже для iOS это типичная ситуация: если оставить все настройки «по умолчанию», то мизерные 5 ГБ бесплатного места в «облаке» в кратчайшие сроки будут забиты синхронизированными фотографиями. На резервные копии места уже не останется. А вот у пользователей Android – останется: как резервные копии, так и фотографии в «стандартном» качестве не учитываются в и без того достаточно щедрой квоте в 15 ГБ.

Безопасность android

Какие рекомендации обычно дают статьи, посвящённые безопасности Android? Использовать код блокировки посложнее или паттерн подлиннее; отключить Smart Lock; обновить Android; включить двухфакторную аутентификацию. Советы звучат логично, но при этом исключительно поверхностно, в стиле «как перестать переживать об информационной безопасности и начать жить».

Между тем, для каждого второго смартфона на Android длина кода блокировки никак не влияет на безопасность; отключение Smart Lock бесполезно, если пользователь включил (или забыл выключить) отладочный режим USB debugging, а проверять обновления Android бесполезно, если производитель устройства затягивает с обновлениями.

Для начала составим свой список рекомендаций, а потом пройдёмся по некоторым пунктам подробно. Итак:

Безопасность небезопасного: советы энтузиастам

Эта глава посвящена в основном китайским устройствам, в прошивках которых обнаружились (или ещё не обнаружились, но точно есть) сюрпризы. Если вы – не энтузиаст, готовый потратить часы и дни на чтение форумов и возню с прошивками, — смело пропускайте этот раздел, перейдя сразу к следующей главе.

Что можно сделать, если у вас на руках – телефон с разблокированным загрузчиком или перепрошитая ушлыми продавцами китайская версия? В этом случае говорить о серьёзной безопасности, конечно, не приходится, но кое-что сделать всё-таки можно.

Первый и самый простой вариант: у вас на руках телефон, загрузчик которого разблокирован (например, предыдущим владельцем). Часто подобные ситуации осложняются тем, что на телефоне установлена кастомная прошивка, root-доступ, модифицирован системный раздел или и вовсе непонятно, что творится внутри.

В большинстве случаев такой телефон можно вернуть в «заводское» состояние, прошив его на заводскую прошивку, после чего загрузчик можно заблокировать из fastboot командой oem lock. Особенно это рекомендуем проделать с китайскими устройствами, на которые ушлые продавцы часто (чаще, чем можно себе представить) устанавливают прошивки с самыми разнообразными сюрпризами. При попытке после этого разблокировать загрузчик командой oem unlock криптоключи и все данные будут уничтожены.

Обратите внимание: данная стратегия не сработает со свежими телефонами Xiaomi, перепрошитыми с китайской версии прошивки на «глобальную» версию MIUI. Если заблокировать загрузчик на таком устройстве, на выходе получится «кирпич», восстановить который может быть очень и очень трудно.

А если загрузчик нельзя заблокировать (так часто бывает на многих китайских устройствах)? Значит, вам не повезло. Впрочем, если вы всё же приобрели такое устройство, то, вероятно, безопасность – последняя из интересующих вас проблем. Теоретически даже на таких устройствах будет работать шифрование, которое не позволит просто так считать данные.

На практике же взлом таких устройств обычно не представляет никакой проблемы. Единственное, что можно попытаться сделать – настроить Secure Startup; в этом режиме ключ шифрования данных будет генерироваться на основе кода блокировки. Достаточно длинный код блокировки увеличит время, которое потребуется на взлом.

Что делать, если был куплен телефон, который ведёт себя странно? При малейшем подозрении на вредоносное ПО в прошивке рекомендуем зайти в профильную ветку на 4PDA. Вполне вероятно, что проблема известна, и на форуме уже есть подробные инструкции по удалению или заморозке зловредного ПО.

А что делать, если производитель не выпускает обновлений, а в прошивке прочно прописались зловредные компоненты? Конечно, разумным поступком было бы избавиться от такого устройства, но в реальном мире так мало кто делает. Поэтому рекомендация: попробуйте разблокировать загрузчик (хуже уже не станет) и установить на телефон официальную сборку Lineage OS.

В официальных сборках Lineage (в отличие от, например, Resurrection Remix) всё хорошо и с приватностью, и с шифрованием, и с обновлениями «по воздуху». В зависимости от доступной для конкретного устройства версии прошивки может использоваться шифрование как FDE, так и FBE; в первом случае рекомендуем настроить Secure Startup. Если же сборок Lineage нет или разблокировать загрузчик невозможно, то даже ребёнку я бы такой телефон отдавать не стал.

В новых устройствах шифрование починили!

С выходом в свет Android 6.0 в Google таки прописали требование активировать шифрование в 64-битных устройствах, выпущенных с Android 6 на борту (требование не распространяется на аппараты, которые до Android 6 обновились). Таких устройств пока выпущено немного, так что делать вывод о том, приняли ли производители к сведению это требование, пока рано.

Очевидно, компанию Google не вдохновили лавры Apple, не устроил выделенный модуль ускорения крипто в топовом чипсете Qualcomm — или просто не сложилось. Срочно понадобилось что-то новое. Не хватало, казалось, только набора команд ускорения крипто, которые появились в ARMv8.

Итак, выходят 64-битные Nexus 5x и 6P, базирующиеся на чипсетах Snapdragon 808 и 810 соответственно. Так же как и Snapdragon 805, эти наборы системной логики оснащены высокопроизводительными выделенными модулями аппаратного ускорения шифрования. И так же, как и в Nexus 6, разработчики из Google не смогли (или не захотели) использовать эти модули.

Виноград оказался настолько зеленым и кислым, что начальник отдела разработки официально заявил: «Мы использовали программное ускорение шифрования, а именно — набор команд ARMv8, который обеспечивает более высокую производительность в сравнении с аппаратным ускорителем AES, встроенным в SoC».

Что же такое это «программное ускорение» и почему оно «лучше», чем использование выделенного модуля? В 64-разрядных процессорах (непосредственно в основных ядрах, а не в выделенном модуле, наличие которого остается на усмотрение разработчика SoC) есть несколько инструкций, использование которых позволяет ускорить потоковое шифрование подобно инструкциям, ускоряющим кодирование и декодирование потоков видео H.264 в большинстве современных процессоров.

Согласно официальной позиции Qualcomm, эти инструкции ни в коей мере не могут служить полноценной заменой выделенному модулю. Тем не менее Google (а за ней и большинство производителей) радостно начинает использовать именно эти инструкции и начисто игнорирует встроенные в чипсеты криптосопроцессоры.

Результат: зашифрованные данные на таких аппаратах (даже на устройствах начального уровня вроде Moto E 2022) читаются всего лишь в два раза медленнее незашифрованных. А вот на устройствах, базирующихся на 32-битных процессорах ARMv7, падение производительности гораздо сильнее — в четыре раза.

Android 6P и скорость чтения данных
Android 6P и скорость чтения данных

Moto E (64 бит) vs Moto G (32 бит)
Moto E (64 бит) vs Moto G (32 бит)

Взлом кода блокировки экрана

Мне очень хотелось бы написать подробную статью о том, как и чем можно взломать заблокированный смартфон на Android, но, боюсь, это невозможно: на руках у пользователей тысячи разнообразных моделей, основанных на десятках чипсетов в сотнях вариаций. С учётом разнообразия прошивок, версий самого Android и доступности актуальных патчей безопасности (та самая проблема фрагментации Android) сложилась ситуация, в которой даже крупнейший производитель криминалистических продуктов не знает, с какими устройствами работает их комплекс. «Попробуйте подключить» — стандартный ответ на вопрос, поддерживает ли комплекс Х смартфон Y.

К примеру, простой вопрос: можно ли взломать код блокировки у конкретной модели смартфона, а главное – нужно ли это делать или можно обойтись и так (тот самый «расшифровывающий загрузчик»)? Многочисленные статьи по безопасности в один голос рекомендуют устанавливать стойкий код блокировки, умалчивая о том, что примерно для каждого второго смартфона это совершенно бесполезно. Как определить, имеет ли смысл терять в удобстве со сложным кодом блокировки или стоит подойти с другой стороны?

Ответ лежит в области используемого в конкретном устройстве алгоритма шифрования. Как известно, все смартфоны, вышедшие с завода с Android 6 и более поздними версиями, обязаны зашифровать пользовательские данные к моменту окончания процесса начальной настройки.

Однако шифрование шифрованию рознь. В большинстве старых устройств используется так называемое дисковое шифрование Full Disk Encryption (FDE). В режиме FDE данные на пользовательском разделе зашифрованы посредством device credentials – ключа шифрования, который генерируется на основе некого аппаратного ключа и фразы “default_password”.

Да, именно так – “default_password” защищает все ваши данные. И что же, всё пропало? Любой желающий может взять и расшифровать информацию? Не совсем. Ключ шифрования генерируется внутри Trusted Execution Environment (TEE) в момент загрузки устройства; в качестве исходных данных участвует уникальный для каждого устройства ключ, который за пределы TEE не выходит.

Если из телефона извлечь чип памяти и скопировать из него информацию, то расшифровать данные без ключа из TEE не удастся. Соответственно, для расшифровки информации потребуется не просто извлечь из телефона данные (например, через режим EDL, роль которого постепенно уходит в прошлое), но и взломать TEE или подменить загрузчик.

В принципе, такие «расшифровывающие загрузчики» (decrypting bootloader) существуют, например, у Cellebrite для целого ряда моделей, а иногда и целых семейств моделей, объединённых общим набором системной логики. Тем не менее, для использования этой возможности нужно воспользоваться специальным комплексом, который и осуществит извлечение данных.

Даже если в вашем телефоне используется устаревшая защита FDE, надёжно защитить свои данные можно. Для этого достаточно включить режим Secure Startup (сделать это довольно просто: нужно сначала убрать код блокировки, а затем – установить новый; если телефон использует FDE, то система запросит, включить ли режим безопасной загрузки).

:/>  Как почистить кэш на компьютере с ОС Windows 8? | El:Store

В этом режиме ключ шифрования будет перешифрован данными аппаратного ключа и введённого кода блокировки (вместо “default_password”). Недостаток у этого метода тоже есть: телефон просто не загрузится вплоть до момента ввода кода блокировки; если ваш телефон случайно перезагрузится, то вы не сможете даже ответить на звонок, пока телефон не загрузится до конца (для чего требуется код блокировки).

Доступ к файлам

Для начала хакеры получают доступ к данным на устройстве. С этим нет проблем, такую операцию мы выполняем практически в каждой статье. Нам потребуется добавить пару строчек в манифест-файл приложения.

При запуске система предупредит пользователя, что приложению необходимо предоставить доступ к дисковому пространству, без какой-либо конкретики. Это выглядит вполне нормально: можно придумать тысячу вполне легальных причин, зачем разработчику потребовалось что-то сохранять или читать с диска. ОС в дальнейшем никак не будет ограничивать действия приложения, все файлы окажутся в нашем распоряжении.

Сегодня мы займемся только фотографиями. Первым делом нужно найти корневую директорию для всех изображений на устройстве. В зависимости от версии ОС путь к этой папке может немного отличаться, поэтому воспользуемся классом Environment. Он предоставляет доступ к различным переменным окружения, нам нужна DIRECTORY_PICTURES.

File myPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
Переменные окружения — удобный инструмент для хранения динамически изменяемой информации. В них хранятся стандартные параметры, которые требуются сразу многим приложениям: пути к папкам со стандартным наполнением (домашняя директория, хранилище временных файлов), кодировка по умолчанию и другие.

Чтобы зашифровать файл, необходимо получить его полный путь на устройстве, с этой целью применим старую добрую рекурсию. Если проверяемый файл является директорией, вызываем метод еще раз, но уже для нового пути. Определить, чем именно является проверяемый путь, поможет класс File. В нем есть методы isFile() и isDirectory, которые выполнят необходимую проверку.

private void dirScan(File dir){
  if(dir.isFile()){
    //do smth with file
  }else if(dir.isDirectory()){
    for(File child : dir.listFiles())
      dirScan(child);
  }
}

Как только получен путь к файлу, можно сразу приступить к его модификации. Первые экземпляры троянов-шифровальщиков использовали нестойкие алгоритмы кодирования: от изменения расширений файлов до накладывания XOR с вшитым в модуль ключом. Такой подход позволял антивирусным аналитикам создавать декодеры практически моментально.

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

Запускаем шифрование

Если удалось получить доступ к устройству, то операцию шифрования возможно запустить сразу же, при первом старте приложения методом onCreate. Поскольку файлов много, этот процесс может занять продолжительное время. В ОС Android для выполнения длительных операций (более 5 секунд) требуется создавать отдельный поток.

final Handler handler = new Handler();
Runnable runnable = new Runnable() {

Для выполнения задуманного воспользуемся методом Run, который запустит шифрование файлов. Этот метод может выполняться достаточно долго, все зависит от производительности устройства. Тем неменее, пользователь визуально не заметит, чем именно нагружен его аппарат.

public void run() {
dirScan(file);

Теперь воспользуемся задействованным классом Handler. Он позволяет нам после завершения длительных процедур вернуть какое-либо значение в главный поток, т.е. внести видимые для пользователя изменения.

handler.post(new Runnable() {
public void run() {
TextView text=(TextView)findViewById(R.id.textV);
text.setText("Your files was crypted!");...};

Для запуска созданного потока достаточно создать новый объект Thread.

new Thread(runnable).start();

Зачем шифровать телефон?

Честному человеку скрывать нечего — популярнейшей лейтмотив, который звучит после каждой публикации на тему защиты данных. «Мне скрывать нечего», — говорят многие пользователи. Увы, но гораздо чаще под этим подразумевается всего лишь уверенность в том, что уж в данные конкретного Васи Пупкина никто не потрудится залезть, ибо кому они вообще интересны?

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

Как будет действовать полиция

Если ваш смартфон попал в руки полиции или пограничного контроля в США, вас попытаются заставить разблокировать устройство. В случае успеха дальнейшее от вас не зависит; с экрана разблокированного смартфона следователь получит доступ:

Аналогичную информацию получит пограничный контроль Китая. Впрочем, китайские пограничники действуют грубо и предельно неряшливо: на смартфон устанавливается приложение-агент, которое и извлекает всю необходимую пограничнику информацию. Ситуация достигла полного абсурда тогда, когда китайские пограничники стали массово забывать удалить приложение-агента.

Как защитить свой смартфон от взлома кода блокировки и физического извлечения данных

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

adb shell getprop ro.crypto.type

Если команда вернула слово “file”, то смартфон использует шифрование FBE.

Если используется пофайловое шифрование FBE:

Если используется FDE, включите режим Secure Startup. Для этого:

Можно ли изменить тип шифрования с FDE на FBE? В общем случае – нет. Возможность перейти с FDE на FBE была лишь у некоторых устройств Google (например, в планшете Pixel C) в процессе разработки FBE. Для современных устройств такой возможности нет.

Мощный механизм шифрования

Криптофоны часто используют наиболее защищенные и хорошо изученные механизмы шифрования с очень длинными ключами, что делает взлом системы невозможным для злоумышленников. Например, криптофоны GMSK шифруют все звонки 256-битными ключами с использованием надежных методов шифрования AES и Twofish.

Аналогично, для текстовых сообщений, режим CCM-mode применяется в качестве безопасного метода для связи.Другие популярные криптофоны на рынке используют несколько методов шифрования, чтобы обеспечить еще более лучшую защиту. Это делается для того, чтобы в случае взлома (что маловероятно) одного из методов шифрования, другие обеспечили дополнительные уровни безопасности.

Надеваем черную шляпу

Разумеется, мы ни в коей мере не призываем читателя к написанию малвари. Но ведь мы, как специалисты по безопасности, должны быть в курсе того, как действуют злохакеры? Должны, иначе как мы будем им противодействовать? Поэтому сейчас мы наденем блекхет и посмотрим, как действуют кодеры, пишущие шифровальщики личной информации для Андроида.

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

Плохие новости для пользователя
Плохие новости для пользователя

Организуем шифрование

Чтобы изменить пользовательские файлы, воспользуемся наработками мировой криптографии. В Android нам доступен Java-класс Cipher, в котором реализованы стойкие алгоритмы шифрования данных. Наша задача — в короткий срок зашифровать большой объем данных.

Для этих целей хорошо подходит AES. Это симметричный блочный алгоритм шифрования. Его реализация в Android позволяет использовать ключ длиной до 256 бит. Современные ученые пока не нашли существенных уязвимостей в этом алгоритме, а время прямого подбора такого ключа стремится к бесконечности.

Aes

AES — это симметричный блочный алгоритм шифрования, пришел на смену DES в 2002 году. В одном из режимов шифрования каждый следующий блок данных дополнительно маскируется операцией XOR с предыдущим блоком, а на самый первый блок накладывается XOR с вектором инициализации — случайными данными, по размеру равными блоку.

Отложенная блокировка

Когда-то давно ввод кода блокировки был единственным, медленным и неудобным способом разблокировать экран телефона. Многим пользователям постоянный ввод пароля представлялся неудобным; они отказывались от защиты в пользу удобства и скорости. Отложенная блокировка стала логичной реакцией на проблему как со стороны Google, так и Apple.

При активации соответствующей опции можно было отключить дисплей телефона кнопкой, включить его снова – и попасть сразу на домашний экран. Задержку можно настраивать в зависимости от собственных предпочтений. Нужно ли говорить, что задержка блокировки катастрофически снижает уровень безопасности?

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

В iOS есть аналогичная настройка: Settings > Touch ID & Passcode > Require Passcode. Её предназначение примерно такое же, как в смартфонах с Android, за одним важным отличием: если использовать Touch ID или Face ID, то в современных версиях iOS единственным доступным вариантом выбора будет Immediately (т.е. блокировать сразу после отключения экрана).

А вот если отключить биометрику, оставив только код блокировки, то станут доступными и другие варианты вплоть до Never (запрашивать код блокировки только после первой загрузки и время от времени согласно постоянно меняющимся политикам Apple). Обратите внимание: некоторые варианты могут быть недоступны, если на устройстве установлена внешняя политика безопасности.

Получаем ключ

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

Поэтому наиболее продвинутые лесорубы (та-ак, кто тут забыл, что первых hacker’ов отечественные переводчики нарекали лесорубами? А про file, переведенный как «напильник»? — Прим. ред.) организовывают специальные серверы управления, на которых по запросу генерируются ключи, и хранятся они только в оперативной памяти зараженного устройства. Если алгоритм шифрования будет реализован корректно, антивирусные специалисты будут серьезно озадачены.

Для упрощения разработки рекомендую воспользоваться какой-нибудь сторонней библиотекой. Недавно мы разбирали библиотеку Retrofit, в которой уже все готово для передачи данных на сервер и обратно. Поэтому сегодня мы не будем подробно останавливаться на этом, ты найдешь все необходимое в моей прошлой статье «Шесть лучших библиотек Android-разработчика».

Для полноты картины рассмотрим еще один распространенный вариант, когда ключ будет генерироваться на основе какой-то уникальной информации. Класс TelephonyManage предоставляет доступ к различным техническим параметрам, связанным с сотовой связью: параметрам сети, данным о провайдере, состоянию сим-карты и прочему. Сегодня мы для основы ключа возьмем IMEI-номер.

TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
String imeiData = tm.getDeviceId();

Теперь приступим к генерации ключа, подходящего для шифрования. Нам необходимо преобразовать полученные данные в последовательность из 256 байт. Чтобы исключить возможные проблемы, принудительно укажем кодировку UTF-8.

String key = "";
while (key.length() < 256)
  key  = imeiData;
return key.substring(0, 256).getBytes("UTF-8");

Предыстория

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

:/>  Сколько нужно оперативной памяти для Windows 10

«Используйте стойкий код блокировки», «включите датчик отпечатков» и предельно циничное «обновитесь на последнюю версию Android» — советы сами по себе логичные, но совершенно, абсолютно недостаточные. Очень редко среди советов попадается рекомендация отключить Smart Lock – тоже правильно и также недостаточно.

Какой смысл устанавливать длинный и сложный код блокировки, если в вашем смартфоне используется устаревшее шифрование FDE и вы не включили режим Secure Startup? Для многих моделей доступны загрузчики, которые расшифруют всё содержимое твоего устройства даже без перебора паролей: шифрование всё равно будет использовать фразу default_password.

Отключение Smart Lock — необходимый, но недостаточный шаг. Уверены ли вы в безопасности используемой в вашем устройстве технологии сканирования лица (если телефон ей оборудован)? А известно ли вам, что, просто зайдя на ваш компьютер, можно извлечь из браузера все ваши пароли, после чего попросту зайти в облако и сменить код блокировки смартфона?

(Работает, к счастью, не для всех устройств, но знать о такой возможности нужно.) Наконец, нужно отдавать себе отчёт, что если с компьютера будет получен пароль от облака Google Account, то сам телефон будет никому не нужен: все необходимые данные можно извлечь из облака (и, скорее всего, их там будет даже больше, чем в самом телефоне).

Разблокировка по лицу: шаг вперёд, два шага назад

Насколько безопасна разблокировка по лицу? В случае с iPhone всё понятно; в них используется система с достаточным уровнем технической безопасности; и даже несмотря на это, систему Face ID регулярно подвергают критике.

В смартфонах с Android производители устанавливают модули разблокировки по лицу, безопасность которых находится в пределах от «удовлетворительно» до «тот же Smart Lock, вид сбоку». Так, в смартфонах Samsung есть режим, комбинирующий образ лица со сканированием радужной оболочки глаза; обмануть такую систему трёхмерной моделью головы не удастся.

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

Обмануть такие системы вполне возможно, иногда – очень просто. Как правильно заметили в статье «Разблокировка по лицу — не лучшая идея», подход «Мой телефон умеет все то же, что и твой iPhone, — и стоит в десять раз меньше!» будет встречаться всё чаще.

Пример из жизни, или почему не стоит доверять производителю. В смартфонах Xiaomi Mi 8 и Mi 8 Proдля разблокировки по лицу использовалась система из сдвоенных камер и инфракрасной подсветки. Система работала достаточно быстро, обеспечивая удовлетворительный уровень безопасности.

В моделях Xiaomi Mi 9 и Mi 9 Pro, которые пришли на смену восьмой серии, система из двух камер и инфракрасной подсветки уступила место единственному глазку фронтальной камеры, расположенной в миниатюрном каплевидном вырезе.

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

Особняком стоит правовой аспект разблокировки по лицу. В США был создан ряд прецедентов, регулирующих возможности полиции по разблокировке устройств посредством сканирования лица подозреваемого. Имеются как ряд положительных (разрешение на разблокировку по лицу было выдано), так и отрицательных (разрешение не было выдано или было выдано неправомерно) прецедентов, благодаря которым установлены достаточно чёткие правовые рамки, переходить которые полицейские в большинстве случаев не станут.

В то же время в России мы неоднократно слышали о случаях, когда телефон «случайно» поворачивался в сторону задержанного, после чего «сам собой» разблокировался. Доказать, что телефон был разблокирован с нарушением правовых норм, в таких случаях очень тяжело: нательными камерами, как в США, российские полицейские пока не оснащены.

Использовать или не использовать разблокировку по лицу – вопрос открытый, и ответ на него лежит не только в технической области; решать в любом случае вам.

Способы внедрения

Как обычно, для внедрения шифровальщика будут использоваться человеческие слабости. Кто-то захочет сэкономить деньги и скачает этот троян, думая, что получает полновесную версию дорогой игры из Google Play, а другие могут заинтересоваться каким-то необычным контентом. Любопытство и жадность — вот два порока, которые сейчас чаще всего приводят к беде пользователей мобильных устройств.

Возможный вектор атаки
Возможный вектор атаки

Читаем файлы

В ОС Android жестко лимитирован объем ресурсов, выделенных приложению. При обработке файла велик соблазн полностью загрузить его в оперативную память, но так лучше не делать, если заранее не знаешь точный размер файла. Данные о количестве выделенной оперативной памяти можно получить методом getMemoryClass().

Если загрузить в память что-то очень большое, доступный объем может быть исчерпан, и приложение аварийно завершится с ошибкой OutOfMemoryError. Чтобы этого избежать, следует загружать файл в память по частям (блоками). Для блочного чтения и записи файлов воспользуемся классами BufferedInputStream и -OutputStream.

InputStream in = new BufferedInputStream(new FileInputStream(file));
OutputStream out = new BufferedOutputStream(new FileOutputStream(file_encr));

Метод read позволяет прочитать из файла последовательность байтов указанной длины. В качестве выходного значения указывается количество прочитанных байтов, метод возвращает -1, если файл закончился. Чтобы записать последовательность байтов в файл, достаточно операции присваивания, при следующей итерации запись будет продолжена.

Экономическая целесообразность взлома защиты от физического анализа

Если есть защита, то будут и попытки её взломать. В частности, для процессоров Qualcomm до Snapdragon 821 включительно существует уязвимость, использование которой позволяет запустить на выполнение собственный «трастлет» и обойти ограничение на скорость перебора.

В реальности же разработчики криминалистических комплексов относятся к этой уязвимости как к зубной боли: с одной стороны, уязвимость существует, она мозолит глаза; заказчики её хотят. С другой – воспользоваться ей очень трудно: для каждого устройства нужно писать свой код, подбирать смещения, тестировать… Если бы речь шла об iPhone, количество актуальных моделей которого можно пересчитать по пальцам одной руки – поддержка уязвимости такого уровня была бы реализована ещё вчера.

Для флагманских смартфонов на процессорах Qualcomm возможность извлечь данные через уязвимости выглядит приблизительно так:

  • Для старых устройств (до Snapdragon 821 включительно) с известными уязвимостями иногда можно взломать код блокировки, если не установлен Secure Startup (способов обнаружено множество).
  • Для старых устройств с включённым Secure Startup либо с шифрованием FBE — скорость перебора ограничена GateKeeper. Атака на «холодное» устройство (после перезагрузки или включения) практически не реализуется за исключением единичных популярных моделей (проблема «неуловимого Джо»).
  • Для устройств начиная с Snapdragon 835 недоступны эксплойты EDL, недоступен эксплойт TEE, и даже в редких случаях, когда используется шифрование FDE, расшифровать содержимое раздела данных в общем случае довольно непросто (но в отдельных случаях можно, уязвимости уже обнаружены).
  • Наконец, для новых устройств (SD835 и новее), в которых используется шифрование FBE, никакие эксплойты не работают: ключ шифрования зависит от пароля, а перебор — достаточно медленный (GateKeeper).

Эффективна ли защита?

Безусловно, если взять Secret Space Encryptor, который обеспечивает защиту файлов чуть ли на уровне спецслужб. Причем конкретную категорию информации можно не только кодировать отдельным ключом, но и выбрать алгоритм шифрования. FileEnc, будучи намного проще, тоже предлагает неплохую защиту с помощью криптографии, взломать которую сложно. А вот войти в приложение и заблокировать что-то для злоумышленника не составит труда.

«Сейф» — это действительно цифровой сейф, в котором будут хранится важные данные, однако эта возможность реализована и в Secret Space Encryptor. Приложение позволяет хранить персональные данные от посторонних глаз и поможет в том случае, если вам приходится «помнить» их достаточно часто.

Заключение

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

Впрочем, окно возможностей рисковать персональными данными вот-вот закроется и для любителей свободной ОС, ведь, начиная с шестой версии Android, Google собирается требовать от производителей обязательного включения шифрования из коробки. Учитывая, что с точки зрения Google виноград так и не созрел, использование аппаратного ускорения шифрования владельцам большинства устройств не грозит (впрочем, Samsung может удивить, самостоятельно реализовав то, чего не смогли достигнуть в Google.

Вся история шифрования на платформе Android прямо-таки кричит об этом; однако это тема для отдельной статьи). Отдельные производители, такие как OnePlus, могут порадовать хорошей реализацией крипто в реальных сценариях использования, так что, если защита персональных данных для тебя не пустой звук, ты знаешь, куда смотреть. Если же выбирать между горьким и соленым не хочется, почему бы не обратить внимание на устройства яблочной компании?

Выводы

Возможно, производителям стоит пересмотреть подход к используемой в мобильных операционных системах модели безопасности. Да, приложения достаточно надежно изолированы друг от друга, но мы сегодня убедились, что доступ к самому важному — пользовательским данным — можно получить одной строкой.

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

Мы с тобой живем в очень интересное время. Современные технологии меняют мир каждый день, а прогресс делает людей все более зависимыми от гаджетов. Еще недавно все мы сидели за стационарными компьютерами, а сейчас большинству достаточно планшета. Раз ты читатель «Хакера», то наверняка понимаешь, что новые технологии — это не только молочные реки и кисельные берега, но и дополнительные угрозы ИБ, а значит, для нас всегда найдется работа. Так или иначе, темная сторона силы будет повержена :). Удачи!

Оставьте комментарий

Adblock
detector