Посты о SOC, TI и IR

ShrinkLocker: как BitLocker превращают в шифровальщик

Введение

Злоумышленники постоянно ищут новые способы обхода защиты для достижения своих целей. В этом им помогают упаковщики, крипторы и обфускаторы кода. Тем не менее один из лучших способов избежать обнаружения и обеспечить максимальную совместимость — воспользоваться встроенной функциональностью операционной системы. В контексте шифровальщиков одним из ярких примеров является использование экспортируемых функций из криптографической библиотеки ADVAPI32.dll, таких как CryptAcquireContextA, CryptEncrypt и CryptDecrypt. В этом случае злоумышленники могут быть уверены, что вредоносная программа будет работать на разных версиях ОС с поддержкой этой DLL и не привлекать внимания подозрительным поведением.

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

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

Это не первый случай, когда преступники шифруют диски с помощью BitLocker для последующего вымогательства. Ранее злоумышленники использовали эту функцию Microsoft для шифрования критически важных систем после получения контроля над ними. В данном же случае они предприняли дополнительные шаги, чтобы нанести максимальный ущерб и затруднить реагирование на инцидент.

Анализ VBS-скрипта

Примечательно, что авторы, в отличие от большинства других злоумышленников, не обфусцировали большую часть кода. Вероятнее всего, это объясняется тем, что на момент выполнения скрипта они уже имели полный контроль над целевой системой. Скрипт сохраняется по пути C:\ProgramData\Microsoft\Windows\Templates\ как Disk.vbs. В его первых строках содержится функция, позволяющая преобразовать строку с помощью объекта ADODB.Stream в ее двоичное представление. Эта функция в дальнейшем кодирует данные, отправляемые в запросах HTTP POST.

Функция Stream_StringToBinary

Функция Stream_StringToBinary

В самом начале функции main задействуется инструментарий управления Windows (WMI), чтобы запросить информацию об операционной системе с помощью класса Win32_OperatingSystem. Скрипт проверяет каждый объект в результатах запроса и автоматически завершается, если текущий домен отличается от целевого. После этого проверяется, содержит ли имя операционной системы следующие строки: «xp», «2000», «2003» и «vista». Если версия Windows совпадает с этими строками, скрипт автоматически завершает работу и удаляет себя.

Исходные условия для выполнения

Исходные условия для выполнения

После этого скрипт запрашивает дальнейшую информацию об ОС через WMI. Затем он выполняет операции по изменению размера диска, которые могут отличаться в зависимости от результатов проверки версии ОС. Эти операции охватывают только локальные накопители (DriveType = 3). В файловой системе обычно присутствуют следующие типы дисков:

Зловред не пытается выполнить те же операции на сетевых дисках (DriveType = 4) — вероятно, из опасения быть обнаруженным сетевыми средствами детектирования.

Чтобы изменить размер локальных дисков в Windows Server 2008 или 2012, скрипт определяет основной загрузочный раздел и сохраняет эту информацию. Он также сохраняет индекс различных разделов, а затем выполняет с помощью diskpart следующие действия:

  • Сжимает каждый раздел, не используемый для загрузки ОС, уменьшая его на 100 МБ. В результате этой операции образуется свободное дисковое пространство (100 МБ для каждого раздела, отличного от загрузочного тома).
  • Разбивает это свободное пространство на новые основные разделы размером 100 МБ.
  • Форматирует разделы с параметром override, который при необходимости предварительно демонтирует том, и назначает каждому из них файловую систему и букву диска.
  • Активирует разделы.
  • Если процедура сжатия прошла успешно, скрипт сохраняет слово «ok» в переменную, после чего продолжает выполнение.
Операции по изменению размера диска, выполняемые скриптом в Windows Server 2008 и 2012

Операции по изменению размера диска, выполняемые скриптом в Windows Server 2008 и 2012

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

Переустановка загрузочных файлов

Переустановка загрузочных файлов

Операции сжатия разделов для других версий ОС выглядят аналогично, но по соображениям совместимости реализованы в другом фрагменте кода. В примере ниже показана процедура для версий 7, 8 и 8.1.

Операции по изменению размера диска, выполняемые скриптом в Windows 7, 8 или 8.1

Операции по изменению размера диска, выполняемые скриптом в Windows 7, 8 или 8.1

Если в качестве операционной системы используется Windows 2008 или 7, то после завершения процедуры сжатия разделов в переменной matchedDrives сохраняются разделенные запятыми буквы дисков (если их файловая система — NFTS, exFAT, FAT32, ReFS или FAT). Ниже приведен пример значения этой переменной (код был модифицирован, чтобы вывести эту строку):

Содержимое переменной matchedDrives

Содержимое переменной matchedDrives

Затем скрипт добавляет следующие записи в реестр:

  • fDenyTSConnections = 1: отключает RDP-соединения.
  • scforceoption = 1: активирует аутентификацию по смарт-карте.
  • UseAdvancedStartup = 1: требует использования PIN-кода BitLocker для аутентификации перед загрузкой.
  • EnableBDEWithNoTPM = 1: позволяет использовать BitLocker без совместимого чипа TPM.
  • UseTPM = 2: позволяет использовать TPM, если таковой имеется.
  • UseTPMPIN = 2: позволяет использовать PIN-код для запуска с TPM, если таковой имеется.
  • UseTPMKey = 2: позволяет использовать ключ запуска с TPM, если таковой имеется.
  • UseTPMKeyPIN = 2: позволяет использовать ключ и PIN-код для запуска с TPM, если таковой имеется.
  • EnableNonTPM = 1: позволяет использовать BitLocker без совместимого чипа TPM, запрашивает пароль или ключ запуска на USB-накопителе.
  • UsePartialEncryptionKey = 2: требует использования ключа запуска с TPM.
  • UsePIN = 2: требует использования PIN-кода для запуска с TPM.

При обнаружении ошибки скрипт перезагружает систему.

Внесение изменений в реестр

Внесение изменений в реестр

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

Примечательно, что существует несколько функций, выполняющих эти операции, каждая из которых предназначена для конкретной версии Windows. В некоторых случаях скрипт проверяет, активны ли средства шифрования дисков BitLocker (BitLocker Drive Encryption Tools) через ID 266 в средствах удаленного администрирования сервера (Remote Server Administration Tools). Затем зловред проверяет, запущена ли служба BitLocker Drive Encryption Service (BDESVC). Если нет, то он запускает службу в системе.

Проверка BDESVC

Проверка BDESVC

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

Изменение метки диска

Изменение метки диска

Электронная почта злоумышленника в качестве метки диска

Электронная почта злоумышленника в качестве метки диска

После этого вредоносная программа отключает механизмы, отвечающие за безопасность ключа шифрования BitLocker, и удаляет их. Метод удаления может различаться в зависимости от версии ОС. В случае с Windows Server 2008 или Windows 7 эту задачу выполняет VBS-скрипт, который после отключения средств защиты дополнительно принудительно удаляет их через PowerShell.

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

Удаление средств защиты

Удаление средств защиты

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

Восстановление ключей BitLocker

Восстановление ключей BitLocker

На следующем этапе зловред генерирует 64-значный ключ шифрования посредством выбора 64 случайных символов из строки, состоящей из:

  • цифр от 0 до 9;
  • знаменитой панграммы (фразы, содержащей все буквы английского алфавита) «the quick brown fox jumps over the lazy dog» в нижнем и верхнем регистре;
  • специальных символов.

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

Процедура генерации ключей

Процедура генерации ключей

Затем код преобразует сгенерированный ключ шифрования в безопасную строку (с помощью соответствующей функции PowerShell, предотвращающей создание строкового объекта в памяти) и активирует BitLocker на дисках:

Затем скрипт создает объект запроса HTTP POST со следующими параметрами:

  • использовать WinHTTP версии 5.1;
  • принимать французский язык;
  • игнорировать ошибки SSL (httpRequest.Option(4) = 13056  ➔ WinHttpRequestOption_SslErrorIgnoreFlags);
  • отключить перенаправление (httpRequest.Option(6) = false  ➔ WinHttpRequestOption_EnableRedirects).

Чтобы скрыть свой реальный адрес, злоумышленники использовали домен trycloudflare.com. Это официальный домен компании CloudFlare, назначение которого — предоставлять разработчикам быстрые туннели. Поддомен, настроенный злоумышленниками, назывался scottish-agreement-laundry-further.

Формирование запроса

Формирование запроса

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

Информация, отправляемая в POST-запросе

Информация, отправляемая в POST-запросе

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

Процедура повтора

Процедура повтора

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

Отправляемая информация

Отправляемая информация

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

Он проверяет, является ли имя хоста целью зловреда, а затем удаляет файлы:

  • \Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml
  • \scripts\Login.vbs
  • \scripts\Disk.vbs
  • C:\ProgramData\Microsoft\Windows\Templates\Disk.vbs
Операции удаления

Операции удаления

Затем скрипт с помощью wevtutil очищает журналы Windows PowerShell и Microsoft-Windows-PowerShell/Operational. Он включает системный сетевой экран и удаляет все его правила. Он также удаляет задачи VolumeInit и VolumeCheck. В завершение вредоносная программа принудительно завершает работу компьютера.

После перезагрузки жертва увидит экран BitLocker. Если пользователь попытается обратиться к параметрам восстановления BitLocker, то увидит только сообщение об их отсутствии.

Экран восстановления BitLocker

Экран восстановления BitLocker

Тактики, техники и процедуры

Анализ показал, что автор зловреда хорошо разбирается в языке VBScript, во внутреннем устройстве Windows и системных утилитах, таких как WMI, diskpart и bcdboot. Ниже перечислены тактики, техники и процедуры (TTP), выявленные в этом сценарии.

Тактика Техника ID
Execution Command and Scripting Interpreter: Visual Basic T1059.005
Execution Windows Management Instrumentation T1047
Execution Command and Scripting Interpreter: PowerShell T1059.001
Impact Data Encrypted for Impact T1486
Impact System Shutdown/Reboot T1529
Defense evasion Clear Windows Event Logs T1070.001
Defense evasion Modify Registry T1112
Defense Evasion Disable or Modify System Firewall T1562.004
Exfiltration Exfiltration Over Web Service T1041

Артефакты и цифровая криминалистика

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

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

Полученные безопасные строки

Полученные безопасные строки

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

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

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

Восстановление

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

Собранные сетевые данные для формирования «зерна»

Предупреждение негативных последствий

Компаниям рекомендуется использовать BitLocker или другие средства шифрования (например, VeraCrypt) для защиты корпоративных секретов. Однако можно предпринять некоторые меры предосторожности, чтобы не дать преступникам злоупотребить этой функцией:

  • Используйте хорошие и правильно настроенные защитные решения для конечных точек, чтобы вовремя обнаруживать угрозы, которые пытаются воспользоваться BitLocker.
  • Внедрите сервис Managed Detection and Response (MDR) для проактивного мониторинга угроз.
  • Если функция BitLocker включена, убедитесь, что используется надежный пароль, и храните ключи восстановления в безопасном месте.
  • Предоставляйте пользователям минимально необходимые привилегии. Таким образом, они не смогут самостоятельно включать функции шифрования или изменять ключи реестра.
  • Включите логирование и мониторинг сетевого трафика. Настройте логирование GET- и POST-запросов. В случае проникновения зловреда в систему запросы к домену злоумышленника могут содержать пароли или ключи.
  • Отслеживайте события, связанные с выполнением VBS- и PowerShell-скриптов, и сохраняйте выявленные скрипты и команды во внешнем хранилище — это очень поможет в случае удаления локальных данных.
  • Регулярно создавайте резервные копии, храните их на недоступных из интернета носителях и периодически проверяйте.

Если вам нужна помощь в расследовании атаки шифровальщика и восстановлении файлов, обратитесь к специалистам «Лаборатории Касперского» по адресу gert@kaspersky.com.

Заключение

Наш анализ инцидентов и вредоносного ПО показывает, что злоумышленники постоянно меняют свою тактику, чтобы избежать обнаружения. В этом инциденте мы наблюдали злоупотребление системной функцией BitLocker для несанкционированного шифрования данных. Из применяемого VBS-скрипта следует, что злоумышленники обладают хорошим пониманием внутреннего устройства Windows. И хотя анализ скрипта не представлял особой сложности, такие угрозы трудно поддаются обнаружению, поскольку уникальные строки внутри артефакта можно легко изменить, чтобы обойти правила YARA. Поэтому наиболее эффективным методом обнаружения угроз в таких сценариях является поведенческий анализ, который позволяет вынести вердикт по совокупности действий, выполняемых программой.

Решения «Лаборатории Касперского» детектируют угрозу, описанную в этой статье, как:

  • Trojan.VBS.SAgent.gen
  • Trojan-Ransom.VBS.BitLock.gen
  • Trojan.Win32.Generic

Индикаторы компрометации

URL-адреса:
hxxps://scottish-agreement-laundry-further[dot]trycloudflare[dot]com/updatelog
hxxps://generated-eating-meals-top[dot]trycloudflare.com/updatelog
hxxps://generated-eating-meals-top[dot]trycloudflare.com/updatelogead
hxxps://earthquake-js-westminster-searched[dot]trycloudflare.com:443/updatelog

Адреса электронной почты:
onboardingbinder[at]proton[dot]me
conspiracyid9[at]protonmail[dot]com

Хеши MD5:
842f7b1c425c5cf41aed9df63888e768

ShrinkLocker: как BitLocker превращают в шифровальщик

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике