РУССКИЙ
РУССКИЙ
ENGLISH
15 марта 2021

Мастера перевоплощений

    Охотимся на буткиты
    Семен Рогачев
    Специалист по исследованию вредоносного кода Group-IB
    Прогосударственые хакерские группы уже давно и успешно используют буткиты — специальный вредоносный код для BIOS/UEFI, который может очень долго оставаться незамеченным, контролировать все процессы и успешно пережить как переустановку ОС, так и смену жесткого диска. Благодаря тому, что подобные атаки сложно выявить (вендорам ИБ удалось лишь дважды самостоятельно обнаружить такие угрозы!), наблюдается рост интереса к подобному методу заражения компьютеров среди финансово мотивированных преступников — например, операторов TrickBot. Семен Рогачев, специалист по исследованию вредоносного кода Group-IB, рассказывает как охотиться за подобными угрозами в локальной сети и собрать свой тестовый стенд с последним из обнаруженных UEFI-буткитов Mosaic Regressor. Бонусом - новые сетевые индикаторы компрометации, связанные с инфраструктурой Mosaic Regressor, и рекомендации по защите в соответсвии с MITRE ATT&CK и MITRE Shield.
    Начнем с небольшой исторической справки
    2013
    В 2013 году Себастьен Качмарек (Sébastien Kaczmarek) из QuarksLab создал PoC-буткит Dreamboot, использующий UEFI для атаки на загрузчик ОС. Его исходный код доступен на GitHub. Следует отметить, что данный буткит работал только при отключенном механизме Secure Boot, и в том же году на конференции BlackHat USA 2013 был представлен доклад "A Tale of One Software Bypass of Windows 8 Secure Boot", в котором авторы описали первый публичный способ обхода этого механизма.
    2014
    В 2014 году Рафаль Войтчук (Rafal Wojtczuk) и Кори Калленберг (Corey Kallenberg) опубликовали информацию об уязвимости Darth Venamis в механизме S3 Resume. Это механизм, определяющий продолжение работы компьютера после выхода из состояния сна. В результате исследования выяснилось, что область памяти, в которой хранится S3 BootScript (список команд, проводящих инициализацию устройств после выхода из состояния сна), не защищена от модификации, что приводит к различным уязвимостям. Эта же уязвимость использовалась, предположительно, ЦРУ для установки имплантов. Почитать об этом можно здесь, здесь и здесь.
    2015
    В 2015 году Кори Калленберг и еще один исследователь, Ксено Ковах (Xeno Kovah), представили LightEater — руткит, позволяющий получать различную важную информацию (ключи шифрования и прочее) за счёт прямого доступа к физической памяти и постраничного поиска с использованием сигнатур.

    В том же году, после утечки данных из компании HackingTeam, был обнаружен фреймворк Vector-EDK, разработанный для внедрения имплантов в UEFI-based прошивки. Этот же фреймворк использовался для разработки Mosaic Regressor.
    2016
    В 2016 году Дмитро Олексюк (Dmytro Oleksiuk) создал PeiBackdoor — первый публично доступный UEFI-руткит, загружаемый на этапе PEI (Pre-EFI Initialization).

    В том же году из-за утечки документов Equation Group (по некоторым источникам, связана с АНБ США) появилась информация о существовании BIOS-модуля BANANABALLOT, загружающего некий имплант для взаимодействия с роутерами CISCO.
    2017
    В 2017-м WikiLeaks опубликовали информацию о DerStarke — UEFI-версии бэкдора Triton для macOS.
    2018
    В 2018-м компания ESET нашла и проанализировала UEFI-руткит LoJax — первый UEFI-буткит, обнаруженный ИБ-компаниями in the wild.
    2020
    В октябре 2020 года Лаборатория Касперского в процессе расследования атаки обнаружила Mosaic Regressor — UEFI-буткит, созданный с использованием инструментов, полученных из утечки данных HackingTeam.

    В декабре 2020-го зафиксирована новая версия TrickBot, которая обладает функциональными возможностями по внедрению кода UEFI. На данный момент нет свидетельств активного внедрения UEFI-имплантов in the wild TrickBot'ом, но сам факт появления подобного функционала говорит о том, что злоумышленники интересуются подобными атаками.
    Фреймворк Vector-EDK, обнаруженный в 2015-м и разработанный для внедрения имплантов в UEFI-based прошивки. Этот же фреймворк использовался для разработки Mosaic Regressor.
    Даже этот неполный список прекрасно демонстрирует, насколько актуальны и опасны атаки, связанные с UEFI. В последние несколько лет количество публично выявленных уязвимостей в прошивках удваивается каждый год, что приводит к явному увеличению интереса со стороны киберпреступников и активному росту количества выявленных таргетированных атак.
    Создание стенда с UEFI-буткитом
    Mosaic Regressor состоит из нескольких модулей, которые описаны в таблице.
    Для создания тестового стенда произведем заражение прошивки виртуальной машины QEMU, в которой для эмуляции прошивки используется Open Virtual Machine Firmware, представленный файлом OVMF_CODE.fd.
    Таким образом, чтобы модифицировать прошивку виртуальной машины, необходимо внести изменения в файл OVMF_CODE.fd. Для этого используем кроссплатформенную утилиту с открытым исходным кодом UEFITool. Она позволяет проводить анализ прошивки, извлекать из неё модули и многое другое.
    Для заражения прошивки надо добавить в неё два DXE-драйвера и два UEFI-приложения. Сначала находим раздел, в котором содержатся все используемые DXE-драйверы (в данном случае раздел с GUID 8C8CE578-8A3D-4F1C-9935-896185C32DD3 в формате FFSv2):
      Перед записью каждый из имеющихся EFI-файлов надо представить в виде файла FFS (Firmware File System). Каждый файл в формате FFS состоит из секций (для создания стенда — из двух). Первая будет содержать исполняемый код, вторая — имя модуля в понятном для человека виде. Все драйверы будут собраны в файлы типа EFI_FV_FILETYPE_DRIVER, все приложения — в файлы типа EFI_FV_FILETYPE_APPLICATION. Для сборки используем утилиты GenSec и GenFfs из EDK II (доступны в репозитории EDK II).

      Генерация секции с кодом:
      GenSec.exe -o pe32.sec .\Ntfs.efi -S EFI_SECTION_PE32
      Генерация секции с именем:
      GenSec.exe -o name.sec -S EFI_SECTION_USER_INTERFACE -n "NTFS"
      Создание из секций файла в формате FFS:
      GenFfs -g "F50258A9-2F4D-4DE9-86AE-BDA84D07A41C" -o ntfs_driver.ffs -i pe32.sec -i name.sec -t EFI_FV_FILETYPE_DRIVER
      При создании секции с именем необходимо изменять имя файла, передаваемое после аргумента -n, а при создании секции с кодом — путь до EFI-файла (в примере — .\Ntfs.efi).

      При создании FFS-файлов надо менять GUID (аргумент -g), тип создаваемого файла (аргумент -t для драйверов должен принимать значение EFI_FV_FILETYPE_DRIVER, а для приложений — EFI_FV_FILETYPE_APPLICATION) и имя выходного файла (аргумент -o).

      В результате мы получим четыре файла в формате FFS, которые можно добавить в прошивку с использованием UEFITool. При добавлении нужно убедиться, что в разделе хватает свободного места. В результате модифицированная прошивка выглядит приблизительно так:
      После замены файла прошивки и запуска виртуальной машины происходит создание файлов Mosaic Regressor'ом, что указывает на успешную модификацию прошивки. Это файлы %WINDIR%\setupinf.log и %PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Startup\IntelUpdate.exe. Первый является индикатором компрометации компьютера (файл IntelUpdate.exe будет создан, только если файла setupinf.log не существует), второй скачивает полезную нагрузку с сервера:
      Несмотря на то, что в данном случае производилось заражение виртуальной машины, схожим способом возможно заражать компьютеры с некорректной конфигурацией и за счет этого добиваться гарантированного запуска вредоносных программ на компьютере.
      Охота на Mosaic Regressor
      Выявить Mosaic Regressor можно несколькими способами:

      • поиск индикаторов в прошивке или сравнение с эталонным образом UEFI;

      • поиск индикаторов на уровне ОС;

      • анализ сетевой активности.

      Разберем каждый способ подробнее.
      Поиск индикаторов в прошивке
      После анализа EFI-файла SmmReset мы получили индикатор компрометации прошивки. Этот исполняемый файл создаёт NVRAM-переменную с именем "fTA". Переменная с таким же именем и функциональной нагрузкой использовалась в rkloader, разработанном HackingTeam, поэтому поиск по этому индикатору позволит найти и Mosaic Regressor, и rkloader, и другие буткиты, основанные на rkloader.
      Для поиска этого и других индикаторов компрометации можно использовать многофункциональную утилиту Chipsec, распространяемую и поддерживаемую компанией Intel. Она умеет проверять прошивки на защищённость, получать дампы прошивок и многое другое. Утилиту Chipsec можно использовать из ОС или загрузившись в UEFI Shell, в данном случае был выбран второй вариант. Для создания загрузочного флеш-накопителя, с которого будет запускаться Chipsec, надо выполнить следующие действия:

      • Отформатировать флеш-накопитель в файловую систему FAT-32;
      • Сохранить на него UEFI Shell, который будет получать управление после загрузки компьютера. Для этого необходимо скачать файл UEFI Shell и сохранить его в директорию /efi/boot под именем "Bootx64.efi".
      • Скачать репозиторий Chipsec.
      • Извлечь содержимое архива _instal_/UEFI/chipsec_uefi_x64.zip в корневую директорию флеш-накопителя.
      • Оставшееся содержимое репозитория скопировать в корневую директорию флеш-накопителя.

      После загрузки в UEFI Shell выполняем команду mount, которая покажет список доступных устройств. В данном случае флеш-карта обозначена как FS0 (это можно понять по надписи "USB" в описании устройства):
      После перехода в директорию Chipsec, с помощью команды python chipsec_util.py uefi var-find fTA можно проверить, есть ли переменная с таким именем в прошивке. Если эта переменная существует — её дамп будет сохранён в файл:
      Если нужен более глубокий анализ прошивки, Chipsec позволяет получить её дамп. Для этого нужно выполнить команду python chipsec_util.py spi dump rom.bin:
      Полученный дамп можно открыть в уже упомянутом UEFITool и, например, извлечь модули, которые кажутся подозрительными:
      Если есть эталонный образ прошивки, Chipsec позволяет использовать его для поиска модификаций в прошивке. Для этого сначала нужно сгенерировать список модулей эталонного образа с помощью команды python chipsec_main.py -i -m tools.uefi.scan_image -a generate,list_of_variables.json,firmware.bin, где list_of_variables.json — файл, в который будет записан результат выполнения команды, а firmware.bin — дамп эталонной прошивки.
      После получения данных об эталоне можно проводить сравнение с помощью команды python chipsec_main.py -i -m tools.uefi.scan_image -a check,list_of_variables.json,suspected_firmware.bin, где suspected_firmware.bin — имя файла дампа проверяемой прошивки.

      Как мы уже сказали, утилиту Chipsec можно использовать из ОС. Для этого нужно установить драйвер Chipsec, после чего можно запускать .py-файлы с помощью интерпретатора Python. Таким образом можно автоматизировать сбор образов прошивок для их дальнейшего анализа.
      Поиск индикаторов на уровне ОС
      В этом разделе уделим немного внимания тому, как детектировать заражение прошивки Mosaic Regressor'ом на уровне операционной системы. После загрузки операционной системы полезная нагрузка Mosaic Regressor'а — файл IntelUpdate.exe — ведёт себя как самая обычная вредоносная программа. Для её детектирования можно использовать данные, полученные при анализе EFI-файлов — хеш файла, сохраняемого в %PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Startup, его имя и прочие индикаторы. Однако стоит отметить, что поиск события создания файла не увенчается успехом, поскольку файл создается до загрузки ОС, а значит, событие не будет обнаружено с помощью EDR или аналогичных решений (одним из вариантов детектирования создания файлов видится сохранение информации о состоянии файловой системы перед выключением или гибернацией компьютера и сравнение сохраненного состояния с состоянием после загрузки ОС).

      Аналогичная ситуация наблюдается с файлом %WINDIR%\setupinf.log, который используется Mosaic Regressor'ом как дополнительный индикатор заражения — наряду с переменной UEFI. Файл IntelUpdate.exe будет сохранен, только если файла setupinf.log не существует.

      С помощью следующего запроса в Huntbox можно обнаружить следы запуска полезной нагрузки, которую сохранил EFI-модуль Mosaic Regressor'а:
      event_type: "Process creation" AND Payload.CommandLine: "Microsoft\Windows\Start Menu\Programs\Startup\IntelUpdate.exe"
      Файл IntelUpdate.exe создается с немодифицированными временными атрибутами, поэтому если вы видите запуск файла из автозагрузки без событий созданий этого файла, то это хороший повод для проведения дальнейшего исследования.

      Все создаваемые файлы в автозагрузке следует проверять в песочницах или системах детонации вредоносных файлов. В нашем случае Huntpoint отправит файлы на анализ в Polygon, где он будет обнаружен как вредоносный, и, как следствие, запуск этого файла будет блокироваться на всех хостах.
      Использование комбинации систем класса EDR и Malware Detonation — достаточно универсальное решение, но не всегда есть возможность устанавливать агенты на всех рабочих местах. В этом случае поможет анализ сетевого трафика на наличие соединений с уже известными вредоносными хостами.

      А таким образом можно проверить наличие сетевых соединений с сервером, отдающим полезную нагрузку:
      event_type: "Network connection opening"  AND Payload.RemoteAddress: "103.56.115.69"
      dns_query: "myfirewall.org"
      Для более эффективного обнаружения таких угроз в трафике необходимы качественные индикаторы. Для этих целей в Group-IB мы создали систему External Threat Hunting, которая позволяет выявлять аналогичную инфраструктуру атакующих за счет анализа уже известных вредоносных хостов. Все новые найденные хосты автоматически конвертируются в правила для обнаружения этой угрозы в сетевом трафике. Более расширенный список сетевых индикаторов мы приводим в конце, в разделе «Индикаторы».
      Потенциальные векторы заражения
      Существует 3 варианта заражения UEFI:

      • Удалённое заражение.
      • Заражение при наличии физического доступа.
      • Заражение через цепочку поставок.

      Для удалённого заражения атакующему надо получить повышенные привилегии, позволяющие установить полезную нагрузку, которая будет работать на уровне ядра ОС. После этого он должен проэксплуатировать уязвимость SMM (например, такую). Это позволит исполнять код в режиме SMM, обходить различные механизмы защиты прошивки (Flash Write Protection) и получить прямой доступ к памяти прошивки.

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

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

      Утилиту Chipsec также можно использовать для базовой проверки UEFI на предмет неправильной конфигурации или наличия уязвимостей. Для этого достаточно запустить основной модуль командой python chipsec_main.py, которая запустит различные проверки безопасности, например, проверку на защиту от перезаписи.

      Следует отметить, что успешное прохождение данного теста не значит, что ваша система не заражена, поскольку Chipsec предоставляет лишь базовый набор проверок безопасности. Однако провал теста свидетельствует о том, что нужно как минимум поставить последние обновления UEFI или разобраться, почему базовые механизмы безопасности прошивки нарушены.
      Заключение
      Угрозы UEFI являются одними из самых серьезных, и индустрия безопасности только начинает адаптировать свои решения для качественного обнаружения этих угроз.

      Точно не стоит ждать серебряной пули или уповать на встроенные механизмы доверенной загрузки операционной системы. Чтобы защитить свою инфраструктуру и эффективно охотиться за такими угрозами, необходимо использовать данные киберразведки. Кроме коммерческих продуктов, реализующих компенсационные меры, можно использовать и бесплатные аналоги, например, Chipsec, которая расширяет возможности охоты по индикаторам и позволяет проверять правильность конфигурации UEFI.
      Индикаторы
      Модули UEFI
      Хеши
      Пути до файлов
      Мьютексы
      Сетевые индикаторы
      MITRE ATT&CK и MITRE Shield