Представьте себе вредоносное программное обеспечение, получающее полный доступ к системе, и которое почти невозможно обнаружить, а переустановка операционной системы или смена жесткого диска его не убивают. И это не что-то из области фантастики, а суровая реальность. Тема этой статьи — UEFI руткиты, что это такое и как работают, сейчас разберемся.
UEFI и/или BIOS
Для начала, разберемся с понятиями: что такое BIOS, и что такое UEFI. BIOS (Basic Input-Output system) — программа низкого уровня, хранящаяся на чипе материнской платы компьютера. Основная функция — корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру ОС.
Таким образом, при включении компьютера, вначале загружается BIOS, иницализирует аппаратные компоненты, убеждается в правильности их работы и далее запускает программу-загрузчик, загружающую операционную систему. До загрузки ОС, BIOS выполняет самотестирование после включения — POST (Power-On Self Test), необходимое для проверки аппаратных настроек. В случае неисправности, вылетают системные ошибки.
Вход в BIOS осуществляется нажатием клавиши в начале загрузки ПК. Стандартные кнопки: Esc, F2, F8, F10, Delete. Через BIOS можно настраивать параметры системы: от простой установки времени, до выбора загрузочного устройства и изменения частоты процессора. Сохраняются настройки на самой материнской плате.
При успешном прохождении тестов BIOS передаёт управление Master Boot Record (MBR), главную загрузочную запись, хранящуюся на жестком диске и используемую для дальнейшей загрузки ОС.
С BIOS'ом разобрались, что такое UEFI? Справедливо назвать UEFI (Unified Extensible Firmware Interface) современной итерацией BIOS, массивным обновлением, если хотите. На всех современных ПК с завода идёт именно UEFI, но часто называется BIOS/EFI BIOS, чтобы не путать пользователя, привыкшего к традиционному BIOS. Причин перейти на UEFI достаточно: работает быстрее, поддерживает жёсткие диски большего объёма (в теории — до 9.4 зеттабайт), загрузка быстрее, выше уровень безопасности, а также есть графический интерфейс с поддержкой мыши.
С более технической стороны, UEFI может работать в 32-битном или 64-битном режимах, адресное пространство больше, есть безопасный запуск Secure Boot (о нём позже подробнее). Функции настройки системы остались, но стали выглядеть лучше: удобнее выбирать порядок загрузки, настраивать предустановки работы комплектующих, выбирать частоту работы процессора, оперативной памяти, добавлены метрики температуры, скорости вертушек, напряжения и прочие плюшки обновленной системы. Одно из основных отличий — BIOS прекращает работу после выполнения POST тестирования, а UEFI продолжает работу. Также UEFI поддерживает более широкий спектр устройств.
UEFI/BIOS является программным обеспечением, хоть и «посаженым» глубокого в материнскую плату. Поскольку это ПО, то как и любое ПО, оно подвержено угрозам, одна из таких угроз — rootkit.
Что такое rootkit?
Rootkit (root — «суперпользователь» из Unix, kit — комплект) — исходя из названия, набор инструментов с правами администратора. Сегодня руткиты чаще относятся к ОС Windows, нежели Unix. Руткит — программа, скрывающая от антивирусов собственные вредоносные действия, либо прячущая работу другой вредоносной программы. Они делятся на 2 вида по правам доступа: уровня пользователя и уровня ядра.
Руткиты уровня пользователя получают те же права, что и обычные приложения, запущенные на компьютере. Они используют память других приложений, внедряясь в них.
Руткиты уровня ядра получают полный доступ к системе на уровне ядра ОС. Обнаружить и удалить подобный руткит намного сложнее, чем руткит пользовательский. После попадания такого вредоносного приложения в систему возможности атакующего почти безграничны. Но они сложнее в создании и встречаются реже. Буткит — подвид руткита, заражает загрузочный сектор жесткого диска MBR с целью закрепления в системе.
«Blue Pill» — руткит через виртуализацию
В 2006 году Йоанна Рутковская на конференции Black Hat Briefings 3 августа продемонстрировала руткит, основанный на виртуализации х86. Основной посыл: в архитектуре х86 существуют 4 кольца защиты: ring0 — ring3, от наиболее привилегированного, до менее привилегированного уровня. И 3 типа ресурсов, в отношении которых действуют механизмы защиты процессора: память, порты ввода и вывода, а также возможность выполнения некоторых инструкций. В любой момент x86 процессор работает на определенном уровне привилегий, и от этого зависит, что может и чего не может сделать код. Большинство современных ядер для архитектуры x86 используют всего 2 уровня: ring0 и ring3.
Выполнение части инструкций (команд) процессора возможно только в ring0. Попытки выполнения инструкций за пределами нулевого кольца вызовут исключение #GP. #GP (general‑protection exception) — означает, что процессор обнаружил один из классов нарушения защиты, называемых «general protection violations». Аналогичные исключения происходят при попытке обращения к неопределённым адресам памяти и портам ввода/вывода. Таким образом, пользовательский код из ring3 никогда не прорвётся в ring2, не говоря уже о ring0. С ростом популярности виртуализации на x86 архитектуре Intel и AMD добавили для неё аппаратную поддержку. Для этого гипервизору требовалось запустить Virtual Machine Control Structure (VMCS), ключевую структуру для реализации виртуализации процессора, определяющую виртуальную машину и вызывающую VMenter/VMexit, то есть, условия, которые нужны виртуальной машине от гипервизора. Подобная работа гипервизора называется ring-1, хотя такого уровня привилегий нет. Но из‑за того, что могут хоститься несколько ядер уровня ring0, обозначение ring-1 имеет смысл. Именно работу гипервизора в ring-1 и эксплуатирует BluePill.
Изначально Blue Pill требовала поддержки виртуализации AMD‑V (Pacifica), поскольку виртуализация от AMD была спроектирована как целостная система и виртуализируемый гость не может определить, гость он или нет. Вредоносный код, попадая в целевую систему, незаметно виртуализирует хостовую систему, превращая её в гостевую. При этом не требуется перезагрузка ОС. Предыдущая ОС сохраняла существующие ссылки на все устройства и файлы, но почти всё, включая запросы данных и аппаратные прерывания может быть перехвачено гипервизором с последующей отправкой поддельного ответа. Для противодействия Blue Pill Рутковская создала Red Pill, таблетку, которая обнаруживает присутствие гипервизора через таблицу регистров IDTR.
LoJack или LoJax?
В 2018 году исследователи из ESET обнаружили применение троянизированной версии программы для защиты устройств от краж — LoJack. Хакеры из Sednit привлекли внимание ИБ‑специалистов из‑за использования модуля UEFI/BIOS в качестве механизма обеспечения персистентности. Добиться устойчивости к переустановке ОС и смене жесткого диска (LoJax живет в модуле на материнской плате) получилось благодаря использованию приложения для отслеживания устройства и защиты от краж — LoJack/Computrace.
Computrace работает следующим образом: при включении компьютера и перед запуском Windows выполняется файл autochk.exe, с которого начинается проверка логической целостности файловой системы. Создается бэкап autochk.exe, а оригинальный файл, в свою очередь, заменятся на модифицированный. При запуске модифицированного autochk.exe внедряется мини‑агент rpcnetp.exe и восстанавливается оригинальная версия autochk.exe. Задача мини‑агента rpcnetp.exe — обеспечение работы основного агента. В случаях, когда основной агент не работает, rpcnetp.exe пытается подключиться к Command and Control серверу издателя приложения Absolute Software для его скачивания и исполнения. Мини‑агент сначала дублируется, затем преобразуется в динамическую библиотеку DLL. Библиотека загружается в память, инициализирует службу работы с библиотеками svchost.exe и подгружается в него. Следующим запускается процесс работы с Internet Explorer и в него инжектируется DLL для связи через интернет. Готово, Computrace работает.
Описание процесса работы Computrace и сетевого протокола было опубликовано в 2014, и светлые, но не очень доброжелательные умы взялись за работу. Из‑за отсутствия механизма аутентификации злоумышленники получали доступ к серверу, могли заставить мини‑агента скачать произвольный код. Найденные троянизиванные образцы rpcnetp.exe устанавливали связь с Command and Control сервером злоумышленников, вместо легитимного сервера Absolute Software. При этом, легитимная и троянизированная версии почти не отличаются, у них идентичные временные метки компиляции и лишь несколько десятков байтов и переменных таймера отличаются от оригинальных. Специалисты ESET обнаружили мини‑агенты LoJax в атаках на организации на Балканах, в Центральной и Восточной Европе. Определить причастность группы Sednit помогло найденное во всех атаках ПО, используемое ими:
SedUploader, бэкдор.
XAgent, флагманский бэкдор Sednit.
Xtunnel, сетевой прокси для передачи трафика между C&C сервером и конечной машиной.
Специалисты ESET составили подробный WhitePaper на руткит LoJax.
Актуальные угрозы
В середине лета 2022 исследователи из Лаборатории Касперского нашли новую версию руткита, существовавшего с 2016 года. Первые версии руткита под названием CosmicStrand, созданного неизвестными китайско‑говорящими злоумышленниками, были задокументированы специалистами из Qihoo 360 в 2017 году. Доподлинно неизвестно, как вредоносное ПО попадало на устройства, но удалось установить комплектующие, подверженные атакам — это оказались материнские платы от Gigabyte и ASUS с чипсетами Intel H81. Основная версия — покупка материнской платы с уже заложенным бэкдором.
Источник угрозы — модифицированный драйвер CSMCORE DXE, отвечающий за процесс загрузки. Он был изменен таким образом, чтобы перехватывать последовательность загрузки и внедрять в неё вредоносную логику. Целью руткита является загрузка импланта на уровне ядра операционной системы.
Логическая цепочка выглядит следующим образом:
Зараженный EFI драйвер запускает цепочку событий.
Вредоносный код вносит изменения в менеджер загрузки, разрешая модифицировать загрузчик ядра Windows до его непосредственной сборки.
Меняясь с загрузчиком ОС, атакующие модифицируют функцию ядра Windows.
Далее, при запуске измененной функции, во время обычной процедуры загрузки ОС, вредоносный код получает контроль над исполняемым кодом функции ядра Windows.
Наконец, запускается шелл‑код из памяти и контактирует с Command and Control сервером для загрузки и исполнения необходимого вредоносного пейлоада на машине жертвы.
Полный разбор руткита CosmicStrand с исполняемым кодом представлен на сайте Securelist по ссылке.
Методы защиты
Первый очевидный способ защиты — включение функции Secure Boot в UEFI/BIOS. И он не сработает. UEFI SecureBoot защищает от запуска недоверенных по отношению к прошивке компонентов: загрузчиков, драйверов, EFI‑приложений. Но если вредоносный код уже на SPI Flash, то узнать о его существовании можно только прибегнув к внешним технологиям безопасности: TPM Measured Boot, Verified Boot. Одним из способов защиты является своевременное обновление прошивки UEFI.
Задача также ложится на плечи производителей, прошивка должна быть изначально построена с пониманием методик безопасности. Лучшее решение — установка антивируса, способного отследить низкоуровневое проникновение в систему. Популярные вендоры, предоставляющие защитные решения:
Kaspersky
ESET
InfoTeCS
Ликвидация последствий — отдельная, трудоемкая задача. В отдельных случаях, по типу LoJax, нужно перепрошить SPI флеш‑память. Также нужно обновить прошивку самого UEFI. Но если предложенные методы не помогли, единственное решение — замена материнской платы.
Создание руткитов, внедренных в UEFI/BIOS, достаточно трудоемкая задача. Злоумышленникам нужно учитывать различные чипсеты, системы защиты, встроенные производителями, и сами методы внедрения вредоносного ПО. Именно из‑за сложности создания и загрузки в систему, руткиты нечасто используются злоумышленниками. Но это не значит, что угрозы можно не бояться, нужно своевременно озадачиваться комплексной безопасностью компьютера: обновлять прошивку и банально установить антивирус. Также не стоит забывать о безопасности при покупке комплектующих с рук и, если есть возможность, проверить материнскую плату непосредственно до покупки. При соблюдении всех мер предупреждения угрозы, риск подхватить низкоуровневый руткит минимальна. Но злоумышленники не дремлют и уже ищут новые способы получить полный доступ к системе, поэтому почаще запускайте полноценное сканирование системы и следите за новостями в мире информационной безопасности.