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

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


Компания «Доктор Веб» называет трояны-шифровальщики основной угрозой для пользовательского сегмента сети Интернет. Согласно опубликованному компанией отчету, с середины 2013 года к ним поступило более восьми с половиной тысяч запросов на расшифровку закодированных шифровальщиками файлов. К ноябрю 2015 года такого рода запросы составили 60% от всех обращений. В своем отчете «Доктор Веб» честно признается, что шанс восстановить закодированные данные — не больше 10%.
 

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

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

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

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

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

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

<uses-permission android:name=
  "android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name=
  "android.permission.WRITE_EXTERNAL_STORAGE" />

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

Сегодня мы займемся только фотографиями. Первым делом нужно найти корневую директорию для всех изображений на устройстве. В зависимости от версии ОС путь к этой папке может немного отличаться, поэтому воспользуемся классом 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 с вшитым в модуль ключом. Такой подход позволял антивирусным аналитикам создавать декодеры практически моментально.

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

 

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

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

AES

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

 

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

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Криптографическая уязвимость ROBOT 19-летней давности угрожает Facebook, PayPal и многим другим сайтам

Новая вариация старого криптографического бага позволяет узнать ключ шифрования, необходим…