Исследователи из компании ESET выявили новый буткит “Bootkitty”, устанавливаемый после взлома системы вместо загрузчика GRUB и применяемый для подстановки в ядро Linux вредоносных компонентов, которые затем позволяют атакующему скрыто контролировать систему и выполнять в ней свои действия. Утверждается, что это первый UEFI-буткит, нацеленный на поражение систем Linux.
Bootkitty размещается в файле grubx64.efi в системном разделе EFI (EFI system partition, /boot/efi/EFI/ubuntu) вместо штатного загрузчика GRUB. После активации UEFI-прошивкой буткит загружает в память реальный загрузчик GRUB2 и вносит в размещённый в памяти код GRUB2 изменения, отключающие проверку целостности компонентов, загружаемых в дальнейшем, а также добавляет обработчик, вызываемый после распаковки образа ядра Linux в память. Указанный обработчик вносит изменения в загруженные в память функции ядра (отключает проверку модулей по цифровой подписи), а также изменяет строку запуска процесса инициализации с “/init” на “LD_PRELOAD=/opt/injector.so /init)”.
Библиотека injector.so перехватывает некоторые операции SELinux и функцию init_module, которая затем используется для загрузки модуля ядра /opt/dropper.ko. Модуль ядра dropper.ko создаёт и запускает исполняемый файл /opt/observer, затем скрывает себя в списке модулей ядра и выставляет обработчики системных вызовов, таких как getdents и tcp4_seq_show, для скрытия файла /opt/observer и определённого сетевого трафика. Исполняемый файл /opt/observer загружает модуль ядра /opt/rootkit_loader.ko, который является загрузчиком руткита /opt/rootkit.
Для установки буткита требуется привилегированный доступ к системе и обычно подобные виды вредоносного ПО используются атакующими после успешного взлома или компрометации системы для закрепления своего дальнейшего присутствия и скрытия осуществляемой вредоносной активности. Библиотека injector.so и вредоносные модули ядра помещаются в образ начального RAM-диска или файловую систему атакующим. Загрузчик grubx64.efi размещается в раздел с файлами для UEFI.
В варианте Bootkitty, попавшем в руки исследователей, модификация функций в памяти ядра производилась по заранее определённым смещениям без проверки корректности этих смещений для загруженной версии ядра. используемые в Bootkitty смещения были применимы лишь к версиям ядра и GRUB, поставляемым в определённых выпусках Ubuntu, а в остальных системах приводили к сбою при загрузке. Для верификации загрузчика Bootkitty (grubx64.efi) использовался самоподписанный сертификат, что не позволяло применять буткит на системах с включённым режимом UEFI Secure Boot без установки сертификата атакующего в список заслуживающих доверия сертификатов в UEFI. Подобные особенности натолкнули исследователей на мысль, что Bootkitty лишь прототип буткита, пока не применяемый для реальных атак.
Изучив опубликованную ESET информацию исследователи из компании Binarly REsearch заметили среди связанных с Bootkitty артефактов BMP-изображения, используемые для эксплуатации уязвимости LogoFAIL, позволяющей выполнить код на уровне UEFI-прошивки и обойти механизм UEFI Secure Boot. В контексте Bootkitty эксплуатация уязвимости LogoFAIL применялась для добавления в список одобренных сертификатов UEFI самоподписанного сертификата атакующего, которым заверен загрузчик буткита grubx64.efi, что позволяло запустить буткит на системах c активным UEFI Secure Boot без добавления сертификата вручную.
Атака осуществляется через размещение в разделе ESP (EFI System Partition) специально оформленного изображения в формате BMP для его вывода UEFI-прошивкой в качестве логотипа производителя. Из-за использования в UEFI-прошивках уязвимых библиотек для работы с изображениями, обработка специально оформленного изображения может привести к переполнению буфера и выполнению кода с привилегиями прошивки UEFI. Уязвимость LogoFAIL была выявлена год назад и затрагивала UEFI-прошивки, среди прочего используемые на ноутбуках Acer, HP, Fujitsu и Lenovo. В новых версиях UEFI-прошивок проблема устранена, но многие находящиеся в обиходе устройства продолжают работать с уязвимыми версиями прошивок.