Представьте себе вредоносное программное обеспечение, получающее полный доступ к системе, и которое почти невозможно обнаружить, а переустановка операционной системы или смена жесткого диска его не убивают. И это не что-то из области фантастики, а суровая реальность. Тема этой статьи — 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, достаточно трудоемкая задача. Злоумышленникам нужно учитывать различные чипсеты, системы защиты, встроенные производителями, и сами методы внедрения вредоносного ПО. Именно из‑за сложности создания и загрузки в систему, руткиты нечасто используются злоумышленниками. Но это не значит, что угрозы можно не бояться, нужно своевременно озадачиваться комплексной безопасностью компьютера: обновлять прошивку и банально установить антивирус. Также не стоит забывать о безопасности при покупке комплектующих с рук и, если есть возможность, проверить материнскую плату непосредственно до покупки. При соблюдении всех мер предупреждения угрозы, риск подхватить низкоуровневый руткит минимальна. Но злоумышленники не дремлют и уже ищут новые способы получить полный доступ к системе, поэтому почаще запускайте полноценное сканирование системы и следите за новостями в мире информационной безопасности.
Комментарии (28)
DanilinS
00.00.0000 00:00+2механизма обеспечения персистентности
Это на каком языке?
KillJ0y
00.00.0000 00:00+1"Персистентные структуры данных — это структуры данных, которые при внесении в них изменений сохраняют доступ ко всем своим предыдущим состояниям."
Но в данном ключе это несколько другое, персистентность - это закрепление в системе, пользователь переустановил системы но вредонос снова загрузился из uefi. Так же и как раньше, вредоносы в mbr обеспечивали персистентность в системе, для их удаления нужно было затирать mbr.
nehrung
00.00.0000 00:00+3В статье не сказано, какие пользователи наиболее подвержены риску заражения, по какой цепочке действий оно происходит, и что не надо делать, чтобы гарантированно не заразиться.
Поясню, что имею ввиду. В старинные времена нас админы предупреждали — не посещать порнуху и варез, там заразишься почти наверняка. Те, кто туда не лазил, жили себе интернетной жизнью спокойненько (кстати, и до сих пор спокойно живут). А что является фактором риска теперь?KillJ0y
00.00.0000 00:00Почта, спам, офисные файлы(doc, pdf и другие), пиратское по, даже фильм с торрента может быть заражён, а также ужасные rce 0-day уязвимости, как пример eternalblue, cve ms17-010.
nehrung
00.00.0000 00:00Т.е. всё??? Вообще всё? И даже оффлайн? Но это же не жизнь!
KillJ0y
00.00.0000 00:00Даже фото может содержать вирус. На сайте может быть вредоносный скрипт. И тд.
Gor40
00.00.0000 00:00+1Даже оффлайн. Придёт девушка лёгкого поведения в гости и заразит вирусом. Жить опасно, можно умереть.
awoland
00.00.0000 00:00После прочтения осталось стойкое ощущение, что автор сего опуса склонен не видеть различий между "тёплым" и "мягким" ...
AVX
00.00.0000 00:00Ну что Вы хотите, у автора написано же, что он "Маркетолог в ИБ". Ну, вроде и ИБ, но маркетолог...
Интересно было бы посмотреть, что на это скажет, например, @CodeRush
dartraiden
00.00.0000 00:00+2Думаю, что-то типа habr.com/company/pt/blog/668154/#comment_24383470
По-моему, с тех пор ничего не изменилось. Ну, кроме того, что теперь на новом железе обычно CSM по умолчанию выключен, а Secure Boot включён. С релизом Windows 11 эти изменения в ченджлогах к прошивкам у каждого вендора можно было видеть. Онлайн-игры к этому тоже подталкивают. Недавно как раз консультировал пользователя, которому античит в игре сказал что-то типа «или включай Secure Boot, или я тебя не пущу» (а это в свою очередь повлекло необходимость отключать CSM, а это, в свою очередь — конвертацию системного накопителя, который использовал MBR-разметку… а конвертация не удалась по неизвестной причине, короче, пользователь словил нехилый геморрой от того, что когда-то установил систему в legacy-режиме, а установил он, разумеется, потому, что такие настройки в прошивке были по умолчанию).litos
00.00.0000 00:00Сейчас новые материнки, зачастую вообще не имеют возможности загрузки в legacy boot, нет включения csm, особенно ноутбуки. Также распространение nvme m2 дисков приводит к тому, что установка ос/загрузка с него осуществляется в efi режиме
CodeRush
00.00.0000 00:00Добавлю к уже сказанному, что к проблемам по ссылке выше недавно добавились еще и известные эксплуатируемые уязвимости в загрузчиках Windows, которые MS отказывается отзывать (при том, что загрузчики других ОС они при похожих условиях отзывали массово). Т.е. мало того, что SecureBoot и так никто не включал, кроме полутора анонимусов, так теперь еще и его конфигурация по умолчанию перестала выполнять свою основную функцию - защищать от выполнения вредоносного кода. Отлично, мужики, замечательная безопасная загрузка, и конкурсы интересные…
AVX
00.00.0000 00:00Самая надёжная защита - это аппаратная защита от записи в bios. Но это можно проделать с более старыми флешками биос, где SPI работал не в режиме QSPI, и 3й вывод (WP) можно было использовать именно для того, для чего он и был изначально разработан - для защиты от записи. В 2015 году я описывал свои эксперименты по этому поводу - если кратко: берём программатор, записываем дамп на флешку, выставляем бит защиты от записи. После записи просто подгибаем 3й вывод микросхемы на 4й (на землю), и вставляем в колодку (ну или как-то иначе, если она в SOIC/WSON корпусе, и нет длинных ножек). Всё, после этого можно пытаться как угодно софтово записать туда - ни встроенные в биос средства не могут записать, ни виндовые утилиты, содержимое остаётся исходным.
В современных биосах мало того, что сама флешка в режиме QSPI (с целью увеличения скорости считывания) и вывод защиты от записи уже нельзя использовать для защиты, так и сама прошивка сделана с расчётом на то, что она будет сохранять свои данные и параметры прямо в этой флешке, и это может помешать корректной работе.
dartraiden
00.00.0000 00:00+2В современных биосах это всё натыкается на известные проблемы: схема с двумя флешками (в одной прошивка, в другой настройки) увеличивает себестоимость платы (перемножая на число производимых плат получается очень внушительная сумма) и сложность обновления прошивки (каждый раз лезть отключать крыжик, блокирующий запись, затем не забывать переключить его обратно). При этом, пользователей, которым можно такую фичу продать, крайне мало. Не окупится.
И, в идеале, защита должна работать сразу из коробки, чтобы защищать подавляющее большинство пользователей. Представить себе массового пользователя, который будет лазить и переключать аппаратный переключатель на мамке, я не могу. Если такая защита будет включена по умолчанию, это приведёт к тому, что:
— большая часть пользователей, которая вообще никакие биосы не обновляет, не хочет, и ничего не знает про это, будет сидеть на старых и уязвимых биосах (сейчас, хотя бы, им можно обновления присылать через какой-нибудь Windows Update, как делает вендор моего ноутбука). Да, защищённых от перезаписи, но уязвимых. Аксиома Эскобара в действии.
— те, кто всё-таки озаботится обновить (энтузиасты) немедленно отключат защиту, которая им мешает. Это удел любой меры безопасности: если она мешает пользователю и отключается — она будет отключена, и на тысячах сайтов в интернете будет инструкция, как её отключить.
— 2,5параноикаэксперта в области безопасности будут в восторгеeurol
00.00.0000 00:00Помогло бы решение, где вместо переключателя стояла бы кнопка, которую следует нажать непосредственно перед прошивкой. Но это тоже усложнение схемы...
Tarakanator
00.00.0000 00:00Не обязательно делать отдельную кнопку. Можно отбивать морзянкой на кнопке power sw.
eurol
00.00.0000 00:00При таком раскладе пусть пользователь сам и прошивку морзянкой заливает, никакого ПО не надо.
ahdenchik
00.00.0000 00:00+2Вообще, признаюсь, я не осилил саму идею UEFI, и не понимаю почему они вместо BIOS родили такой более сложный чем BIOS комбайн вместо упрощения. Можно ведь было просто выкинуть из биос весь легаси (как выкинули когда-то бейсик и поддержку магнитофона) и добавить проверку ЭЦП загрузчика в первых секторах диска, чтобы доверенная цепочка могла быть реализована.
По факту сейчас в виде UEFI мы имеем некий аналог ОС, который никто не заинтересован поддерживать в безопасном состоянии и который стал бОльшей дырой, в отличие от старого доброго биоса, который можно было просто защитить перемычкой или паролем от перезаписи.tark-tech
00.00.0000 00:00+3Если сделать просто и функционально - сложно будет загнать РСшную вольницу под вендорлок, а-ля мобильные девайсы.
odiemius
00.00.0000 00:00А разве нельзя уже из EFLAGS извлечь IOPL и посмотреть в каком кольце защиты мы исполняемся? Вроде это всегда можно было и R/O доступ на EFLAGS не вызывает GPF.
Пишем простую прогу на ASM, которая вместо OS грузится и сообщает попала ли она в CPL0, переходит в protected mode и проверяет IDT, GDT, LDT (если есть)?
Если не попала в CPL0 то значит какой-то гипервизор висит и надо строниться такого железа.
А если кто-то умный задумает на все инструкции вызывать GPF и потом смотреть что исполнялось и пытаться подставить в возврат CPL0 так всё настолько будет тормозить, что таким железом никто не захочет пользоваться.
Поправьте меня, если я что упустил. Я изучал работу проца по замечательному четырёхтомнику от Intel i486.
WishNight
00.00.0000 00:00+1Computrace работает следующим образом: при включении компьютера и перед запуском 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 работает следующим образом: при включении компьютера и перед запуском Windows выполняется файл autochk.exe,
то в какой среде выполняются EXE-шники?
Какие DLL-ки? какой svchost.exe? откуда выскочил Internet Explorer?
я, правда, не понимаю...
Badimagination
00.00.0000 00:00UEFI построен на экзешниках вроде. Да да, прямо из биоса запускпется exe-шник.
dartraiden
Ну, по крайней мере, можно защититься. А вот защититься от вредоносной оромки в случае с Legacy BIOS… Причём, на большинстве десктопных мамок legacy-режим (CSM) был включён по умолчанию.
Спасибо Microsoft, которая в Windows 11 сделала EFI-загрузку обязательным требованием, иначе мы бы так и жили в этом аду.
dartraiden
К слову, большая часть проблем, обозначенные в 2022 году, так и не решена.
KillJ0y
Кто сказал что от перепрошивки вредоносом uefi можно защититься ? Есть вредоносы которые пропишут свой загрузчик в efi а вы и знать не будете. Для защиты от такого нужны другие механизмы защиты - аппаратного уровня, не перезаписываемый модуль с сертом и прошивкой будет сначала проверять подпись uefi в идеале еще проверка хэша прошивки но при обновлении он естественно поменяется, потом разрешать запуск и только потом через secure boot запуск системы.