РУССКИЙ
РУССКИЙ
ENGLISH
19.10.2022

Ничто, кроме NAS:

анализ программы-вымогателя DeadBolt

Команда реагирования Group-IB провела расследование инцидента, связанного с атакой DeadBolt, и проанализировала использованный в ней сэмпл программы-вымогателя
Андрей Жданов
Главный специалист по анализу вредоносного кода
и проактивному поиску угроз
Владислав Азерский
Cпециалист по реагированию на инциденты
и цифровой криминалистике
В январе 2022 года некоторые владельцы систем хранения данных NAS (Network Attached Storage) обнаружили зашифрованные файлы с расширением .deadbolt. Тогда же издание Bleeping Computer опубликовало новость о 3600 зараженных устройствах. С этого момента сообщения об атаках на NAS-устройства программ-вымогателей семейства DeadBolt появлялись регулярно. По заявлениям самой группы, оперирующей шифровальщиком DeadBolt, они эксплуатируют выявленные ими 0-day-уязвимости в программном обеспечении NAS. С каждой выявленной уязвимостью связана новая серия атак.
В середине июня этого года компания QNAP, производитель сетевых систем хранения данных (NAS) и видеорегистраторов (NVR), обнаружили серию атак DeadBolt, нацеленных на NAS-устройства, работающие под управлением QTS 4.2.x, 4.3.x, 4.4.x. Ранее, в феврале 2022 года, программы-вымогатели DeadBolt были использованы для атак на NAS-устройства ASUSTOR. Уже в начале сентября QNAP в очередной раз выпустила предупреждение об участившихся атаках с применением DeadBolt (CVE-2022-27593).

Команда реагирования Group-IB провела расследование инцидента, связанного с атакой DeadBolt, и проанализировала использованный в ней сэмпл программы-вымогателя. В этом блоге мы представляем первый полноценный анализ шифровальщика DeadBolt с полной декомпиляцией программного кода.

Ключевые выводы:

Цель
Вымогательство денежных сумм:
  • у жертв за разблокировку данных, зашифрованных на NAS-устройстве;
  • у производителей NAS – за техническую информацию об использованной в атаке уязвимости и предоставление мастер-ключа для расшифровки данных клиентов.
Жертвы
Компании малого и среднего бизнеса, учебные заведения, физические лица.
Страна пребывания жертвы для атакующих не имеет значения.
Сумма выкупа
С жертв – 0,03 - 0,05 BTC (менее $1 000)
С производителей NAS – 10-50 BTC (от $200 000 до $1 000 000)
Период активности
С января 2022 года по настоящее время
Начальный вектор атаки
Уязвимости в программном обеспечении NAS (CVE-2022-27593 и другие)

Программа-вымогатель
Кросс-платформенное семейство программ, разработанное на языке программирования Go, с использованием средств анти-анализа.
Программа может осуществлять шифрование или расшифровку данных. Для взаимодействия с жертвой программа использует веб-интерфейс самого NAS-устройства.
Особенности
Отсутствие контактов злоумышленников с жертвой. Жертва получает ключ расшифровки в деталях транзакции после выплаты выкупа.
Не дожидайтесь атаки!
Получите первичный анализ вашего инцидента от специалистов Group-IB бесплатно

Анализ программы-вымогателя DeadBolt

В рамках исследованного нами инцидента NAS-устройство QNAP функционировало под управлением уязвимой версии QTS 4.3.6.1446 build 20200929, вследствие чего и стало мишенью для атаки злоумышленников. Неудивительно, что спустя некоторое время сотрудники компании при обращении к веб-интерфейсу NAS-устройства увидели сообщение с требованием выкупа за разблокировку файлов, хранящихся в NAS.

Сообщение DeadBolt с требованием выкупа, размещенное в веб-интерфейсе NAS-устройства

Любопытно, что атакующие вымогают выкуп не только у жертвы их атаки, но также и у производителя NAS-устройства, в программном обеспечении которого они выявили уязвимость.

Сообщение DeadBolt для производителя NAS-устройства – QNAP

За 10 BTC злоумышленники обещают вендору передать все технические детали использованной уязвимости нулевого дня, а за 50 BTC – дополнительно к этому передать еще и мастер-ключ для разблокировки файлов пострадавших клиентов. С жертв же вымогатели требуют достаточно скромную по меркам современных вымогателей сумму – 0.03-0.05 BTC, что на момент написания этого блогпоста составляет порядка $1000.

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

Описание процесса получения ключа расшифровки

Использованная в атаке программа-вымогатель DeadBolt представляет собой 32-битную программу для Linux/ARM формата ELF, разработанную на языке программирования Go. Программа была обфусцирована и сжата упаковщиком UPX. Также из программы удалена идентифицирующая информация о сборке Go. Анализ такого образца может вызывать некоторые затруднения, поэтому мы более подробно остановимся на описании логики работы DeadBolt. Для этого мы дополнительно провели полную декомпиляцию кода Go вымогателя.

Код функции main шифровальщика DeadBolt

В зависимости от аргументов командной строки программа осуществляет шифрование или расшифровку файлов:

– шифрование файлов: {RANSOM_APP} -e {config} {dir}
– расшифровка файлов: {RANSOM_APP} -d {key} {dir}
где
  • RANSOM_APP – путь к программе-вымогателю DeadBolt;
  • dir – пути для шифрования/расшифровки файлов, разделенные запятой;
  • config – путь к файлу конфигурации;
  • key – ключ для расшифровки файлов.

Шифрование

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

Основные структуры DeadBolt

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

Начальный фрагмент функции режима шифрования DeadBolt

Файл конфигурации DeadBolt при запуске программы содержит следующие данные:
Поля "client_id", "master_key_hash", "key" содержат шестнадцатеричные строки, длина "client_id", "key" составляет 32 символа, а "master_key_hash" – 64 символа. Значение поля "key" представляет собой шестнадцатеричную строку с ключом для шифрования файлов. Описания всех полей будет приведено ниже.

Далее для замены страницы веб-интерфейса NAS-устройства программа создает файлы:
/home/httpd/index.html
/mnt/HDA_ROOT/update_pkg/SDDPd.bin
/mnt/HDA_ROOT/update_pkg/.SDDPd_required

После этого программа приступает к шифрованию файлов.

Конечный фрагмент функции режима шифрования DeadBolt

Ранее существовавший файл /home/httpd/index.html предварительно переименовывается в /home/httpd/index.html.bak. Замененный DeadBolt файл /home/httpd/index.html представляет собой shell-скрипт, который обрабатывает входящие HTTP-запросы.

Фрагмент содержащегося в теле DeadBolt шаблона shell-скрипта /home/httpd/index.html

Скрипт проверяет, что метод входящего HTTP-запроса – POST. Если в URL содержится параметр (query string) "action=decrypt" совместно с "key={KEY}", где KEY – ключ расшифровки, то shell-скрипт проверяет соответствие значения key хешу ключа, использованного при шифровании, или хешу мастер-ключа. В случае соответствия одному из хешей, скрипт запускает программу-вымогатель DeadBolt в режиме расшифровки, указав при этом значение key в соответствующем аргументе командной строки. Если в URL содержится параметр "action=status", скрипт возвращает в формате JSON данные со статистикой процесса расшифровки файлов.

Факт запуска процесса расшифровки проверяется по содержимому файла /tmp/deadbolt.pid, завершение процесса расшифровки – по содержимому файла /tmp/deadbolt.finish, текущее количество расшифрованных файлов содержится в файле /tmp/deadbolt.status.

Для других методов HTTP-запроса скрипт отображает содержащуюся в его теле сжатую в gzip-архив HTML-страницу с требованием выкупа и дополнительной информацией. Изображения HTML-страницы приведены в самом начале блога.

Фрагмент содержащегося в теле DeadBolt шаблона shell-скрипта /home/httpd/index.html

Код JavaScript, содержащийся в HTML-странице, периодически проверяет статус расшифровки, направляя запрос POST /index.html?action=status.

При вводе пользователем корректного значения ключа расшифровки в соответствующее поле и нажатии на кнопку "Decrypt Files", направляется запрос POST /index.html?action=decrypt&key={KEY}, где KEY – введенное значение ключа.

Shell-скрипт /mnt/HDA_ROOT/update_pkg/SDDPd.bin содержит в себе gzip-архив с содержимым скрипта /home/httpd/index.html, созданного ранее программой-вымогателем.

Функция извлечения /mnt/HDA_ROOT/update_pkg/SDDPd.bin

Cкрипт /mnt/HDA_ROOT/update_pkg/SDDPd.bin предназначен для закрепления в системе, при выполнении он восстанавливает содержимое shell-скрипта DeadBolt /home/httpd/index.html и запрещает его изменение.

Содержащийся в теле DeadBolt шаблон shell-скрипта /mnt/HDA_ROOT/update_pkg/SDDPd.bin

Шифрование файлов

Программа осуществляет многопоточное шифрование файлов по указанным в командной строке путям. Многопоточность реализована в программе штатными средствами Go.

Расширения шифруемых файлов:
Программа-вымогатель DeadBolt не шифрует файлы в каталогах:
/dev
/sys
/proc
/usr/share
/usr/bin
/usr/sbin
/sbin

Также программа пропускает при шифровании файлы и каталоги с именами:
.swap
.qpkg
.samba
.@root
.@sys
.ssh
@system
@zlog
.system
.@system
.@ezsync
.@iscsi
.@snapshots
.@thumbnail
.@tmp
.@uploads
.@trashcan
.@plugins
.@CNID

К именам зашифрованных файлов добавляется расширение ".deadbolt". В каждом из указанных в командной строке путей вымогатель создает текстовый файл с требованием выкупа !!!_IMPORTANT_README_WHERE_ARE_MY_FILES_!!!.txt.

Содержимое !!!_IMPORTANT_README_WHERE_ARE_MY_FILES_!!!.txt

Шифрование содержимого файлов производится с помощью алгоритма AES-128 CBC. Для его реализации используются стандартные криптографические пакеты Go "crypto/aes" и "crypto/cipher". В качестве ключа шифрования используется значение, указанное в файле конфигурации, 16-байтный вектор инициализации IV является случайным для каждого файла. Для его генерации используется стандартная функция rand.Read из криптографического пакета Go "crypto/rand".

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

Фрагмент функции шифрования файла DeadBolt

После шифрования данных в конец файла добавляется блок метаданных размером 128 байт.

Конечный фрагмент функции шифрования файла

Конфигурация

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

Параметры конфигурации:

Расшифровка

Для расшифровки файлов в командной строке DeadBolt указываются ключ и пути для расшифровки. Как мы видели выше, пользователю это не потребуется: после приобретения ключа, расшифровка файлов запускается через веб-интерфейс NAS-устройства, он только должен ввести в поле корректный ключ.

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

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

Функция режима расшифровки

В начале расшифровки программа DeadBolt создает текстовый файл /tmp/deadbolt.pid, который содержит идентификатор ее процесса, в ходе расшифровки программа обновляет количество расшифрованных файлов в текстовом файле /tmp/deadbolt.status, а по завершении создает файл /tmp/deadbolt.finish, который содержит "1". Эти файлы, как уже сказано выше, используются shell-скриптами DeadBolt для их синхронизации с процессом расшифровки и отображения статуса его выполнения.

Перед расшифровкой файла DeadBolt считывает метаданные, проверяет маркер "DEADBOLT" и получает размер оригинального файла.

Фрагмент функции расшифровки файла

Далее проверяется корректность указанного ключа для расшифровки.

Фрагмент функции расшифровки файла

Как мы видим из кода, если указанный ключ шифрования совпадает по хешу с тем, что был использован для шифрования файла, то он непосредственно и используется для расшифровки. Если же ключ соответствует хешу мастер-ключа, то с помощью этого ключа, который является мастер-ключом, и идентификатора клиента, программа-вымогатель вычисляет ключ шифрования/расшифровки. Он соответствует первым 16 байтам хеша SHA-256, полученного от мастер-ключа и идентификатора клиента (ClientID).

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

По завершении расшифровки программа удаляет свои файлы.

Функция удаления файлов DeadBolt

Дополнительные сведения

В теле программы-вымогателя содержатся вложенные файлы (Go embedded files), которые используются в качестве шаблонов для создания shell-скриптов и других вспомогательных файлов.
В шаблонах используются следующие переменные для подстановки значений в скрипты и дополнительные файлы:
С частью исходных кодов DeadBolt в виде демонстрационного проекта можно ознакомиться по ссылке.

Заключение

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

Атакующие не похищают данные клиента и, соответственно, не используют метод двойного вымогательства (Double Extortion), как многие RaaS (Ransomware-as-a-Service). Контакты жертвы со злоумышленниками отсутствуют как таковые: жертва либо платит на указанный адрес и получает ключ из деталей транзакции, либо нет. Возможно, в связи с этим DeadBolt и не требует от жертв астрономических сумм выкупа.

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

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

Рекомендации для компаний

Для контроля уровня информационной безопасности инфраструктуры организации могут использовать продукт Group-IB Attack Surface Management. Решение обеспечит полную инвентаризацию интернет-ресурсов организации, позволит выявить уязвимости и оценить критические риски для принятия мер повышения защищенности.

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

Наши рекомендации по настройке NAS:

Осуществлять обновление программного обеспечения / прошивки NAS-устройства;
Настроить двухфакторную аутентификацию (2FA) в учётной записи администратора на NAS
Включить журнал подключений (System Connection Logs) на NAS-устройстве
Настроить отправку событий журналов (системного журнала и журнала подключений) на удалённый Syslog-сервер
Устанавливать пароли в соответствии со сложной парольной политикой
Отключить учётную запись admin и создать отдельную учётную запись с правами администратора
Выключить неиспользуемые сервисы на NAS-устройстве (например: FTP-сервер, Telnet и так далее)
Переназначить порты основных сервисов (SSH, FTP, HTTP/HTTPS и другие) со значений по умолчанию на другие
Отключить автоматический проброс портов в myQNAPcloud (QNAP)
Следуя миссии Group-IB — борьбе с киберпреступностью — мы продолжим изучать методы, инструменты и тактику группы DeadBolt.
Также мы считаем своей задачей делиться своими находками с коммьюнити по кибербезопасности и призываем исследователей совместно изучать сложные угрозы, обмениваться данными и использовать наши технологии, как инструмент борьбы со злоумышленниками.

Если вам интересно то, что мы делаем и вы хотели бы уметь так же, приглашаем вас на наши курсы по форензике, реагированиям на инциденты и Threat Intelligence. Также у нас открыто много технических и других вакансий — присоединяйтесь к команде Group-IB.