Представьте себе вредоносное программное обеспечение, получающее полный доступ к системе, и которое почти невозможно обнаружить, а переустановка операционной системы или смена жесткого диска его не убивают. И это не что-то из области фантастики, а суровая реальность. Тема этой статьи — UEFI руткиты, что это такое и как работают, сейчас разберемся.

UEFI и/или BIOS

Для начала, разберемся с понятиями: что такое BIOS, и что такое UEFI. BIOS (Basic Input-Output system) — программа низкого уровня, хранящаяся на чипе материнской платы компьютера. Основная функция — корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру ОС.

Basic Input-Output system
Basic Input-Output system

Таким образом, при включении компьютера, вначале загружается BIOS, иницализирует аппаратные компоненты, убеждается в правильности их работы и далее запускает программу-загрузчик, загружающую операционную систему. До загрузки ОС, BIOS выполняет самотестирование после включения — POST (Power-On Self Test), необходимое для проверки аппаратных настроек. В случае неисправности, вылетают системные ошибки.

Вход в BIOS осуществляется нажатием клавиши в начале загрузки ПК. Стандартные кнопки: Esc, F2, F8, F10, Delete. Через BIOS можно настраивать параметры системы: от простой установки времени, до выбора загрузочного устройства и изменения частоты процессора. Сохраняются настройки на самой материнской плате.

Пример ошибки BIOS в случае неправильного «разгона» комплектующих
Пример ошибки BIOS в случае неправильного «разгона» комплектующих

При успешном прохождении тестов BIOS передаёт управление Master Boot Record (MBR), главную загрузочную запись, хранящуюся на жестком диске и используемую для дальнейшей загрузки ОС.

С BIOS'ом разобрались, что такое UEFI? Справедливо назвать UEFI (Unified Extensible Firmware Interface) современной итерацией BIOS, массивным обновлением, если хотите. На всех современных ПК с завода идёт именно UEFI, но часто называется BIOS/EFI BIOS, чтобы не путать пользователя, привыкшего к традиционному BIOS. Причин перейти на UEFI достаточно: работает быстрее, поддерживает жёсткие диски большего объёма (в теории — до 9.4 зеттабайт), загрузка быстрее, выше уровень безопасности, а также есть графический интерфейс с поддержкой мыши.

Пример UEFI материнской платы ASUS
Пример UEFI материнской платы ASUS

С более технической стороны, 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.

Кольца привилегий х86
Кольца привилегий х86

Изначально Blue Pill требовала поддержки виртуализации AMD‑V (Pacifica), поскольку виртуализация от AMD была спроектирована как целостная система и виртуализируемый гость не может определить, гость он или нет. Вредоносный код, попадая в целевую систему, незаметно виртуализирует хостовую систему, превращая её в гостевую. При этом не требуется перезагрузка ОС. Предыдущая ОС сохраняла существующие ссылки на все устройства и файлы, но почти всё, включая запросы данных и аппаратные прерывания может быть перехвачено гипервизором с последующей отправкой поддельного ответа. Для противодействия Blue Pill Рутковская создала Red Pill, таблетку, которая обнаруживает присутствие гипервизора через таблицу регистров IDTR.

LoJack или LoJax?

В 2018 году исследователи из ESET обнаружили применение троянизированной версии программы для защиты устройств от краж — LoJack. Хакеры из Sednit привлекли внимание ИБ‑специалистов из‑за использования модуля UEFI/BIOS в качестве механизма обеспечения персистентности. Добиться устойчивости к переустановке ОС и смене жесткого диска (LoJax живет в модуле на материнской плате) получилось благодаря использованию приложения для отслеживания устройства и защиты от краж — LoJack/Computrace.

Интерфейс включения/выключения Computrace
Интерфейс включения/выключения 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 сервером для загрузки и исполнения необходимого вредоносного пейлоада на машине жертвы.

Наглядное изображение всего процесса с разбора руткита на сайте Securelist
Наглядное изображение всего процесса с разбора руткита на сайте Securelist

Полный разбор руткита 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)


  1. dartraiden
    00.00.0000 00:00
    -3

    Ну, по крайней мере, можно защититься. А вот защититься от вредоносной оромки в случае с Legacy BIOS… Причём, на большинстве десктопных мамок legacy-режим (CSM) был включён по умолчанию.

    Спасибо Microsoft, которая в Windows 11 сделала EFI-загрузку обязательным требованием, иначе мы бы так и жили в этом аду.


    1. dartraiden
      00.00.0000 00:00
      +2

      К слову, большая часть проблем, обозначенные в 2022 году, так и не решена.


    1. KillJ0y
      00.00.0000 00:00

      Кто сказал что от перепрошивки вредоносом uefi можно защититься ? Есть вредоносы которые пропишут свой загрузчик в efi а вы и знать не будете. Для защиты от такого нужны другие механизмы защиты - аппаратного уровня, не перезаписываемый модуль с сертом и прошивкой будет сначала проверять подпись uefi в идеале еще проверка хэша прошивки но при обновлении он естественно поменяется, потом разрешать запуск и только потом через secure boot запуск системы.


  1. DanilinS
    00.00.0000 00:00
    +2

    механизма обеспечения персистентности

    Это на каком языке?


    1. KillJ0y
      00.00.0000 00:00
      +1

      "Персистентные структуры данных — это структуры данных, которые при внесении в них изменений сохраняют доступ ко всем своим предыдущим состояниям."

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


  1. nehrung
    00.00.0000 00:00
    +3

    В статье не сказано, какие пользователи наиболее подвержены риску заражения, по какой цепочке действий оно происходит, и что не надо делать, чтобы гарантированно не заразиться.
    Поясню, что имею ввиду. В старинные времена нас админы предупреждали — не посещать порнуху и варез, там заразишься почти наверняка. Те, кто туда не лазил, жили себе интернетной жизнью спокойненько (кстати, и до сих пор спокойно живут). А что является фактором риска теперь?


    1. KillJ0y
      00.00.0000 00:00

      Почта, спам, офисные файлы(doc, pdf и другие), пиратское по, даже фильм с торрента может быть заражён, а также ужасные rce 0-day уязвимости, как пример eternalblue, cve ms17-010.


      1. nehrung
        00.00.0000 00:00

        Т.е. всё??? Вообще всё? И даже оффлайн? Но это же не жизнь!


        1. KillJ0y
          00.00.0000 00:00

          Даже фото может содержать вирус. На сайте может быть вредоносный скрипт. И тд.


        1. Gor40
          00.00.0000 00:00
          +1

          Даже оффлайн. Придёт девушка лёгкого поведения в гости и заразит вирусом. Жить опасно, можно умереть.


  1. awoland
    00.00.0000 00:00

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


    1. AVX
      00.00.0000 00:00

      Ну что Вы хотите, у автора написано же, что он "Маркетолог в ИБ". Ну, вроде и ИБ, но маркетолог...

      Интересно было бы посмотреть, что на это скажет, например, @CodeRush


      1. 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-режиме, а установил он, разумеется, потому, что такие настройки в прошивке были по умолчанию).


        1. litos
          00.00.0000 00:00

          Сейчас новые материнки, зачастую вообще не имеют возможности загрузки в legacy boot, нет включения csm, особенно ноутбуки. Также распространение nvme m2 дисков приводит к тому, что установка ос/загрузка с него осуществляется в efi режиме


        1. CodeRush
          00.00.0000 00:00

          Добавлю к уже сказанному, что к проблемам по ссылке выше недавно добавились еще и известные эксплуатируемые уязвимости в загрузчиках Windows, которые MS отказывается отзывать (при том, что загрузчики других ОС они при похожих условиях отзывали массово). Т.е. мало того, что SecureBoot и так никто не включал, кроме полутора анонимусов, так теперь еще и его конфигурация по умолчанию перестала выполнять свою основную функцию - защищать от выполнения вредоносного кода. Отлично, мужики, замечательная безопасная загрузка, и конкурсы интересные…


  1. AVX
    00.00.0000 00:00

    Самая надёжная защита - это аппаратная защита от записи в bios. Но это можно проделать с более старыми флешками биос, где SPI работал не в режиме QSPI, и 3й вывод (WP) можно было использовать именно для того, для чего он и был изначально разработан - для защиты от записи. В 2015 году я описывал свои эксперименты по этому поводу - если кратко: берём программатор, записываем дамп на флешку, выставляем бит защиты от записи. После записи просто подгибаем 3й вывод микросхемы на 4й (на землю), и вставляем в колодку (ну или как-то иначе, если она в SOIC/WSON корпусе, и нет длинных ножек). Всё, после этого можно пытаться как угодно софтово записать туда - ни встроенные в биос средства не могут записать, ни виндовые утилиты, содержимое остаётся исходным.

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


    1. dartraiden
      00.00.0000 00:00
      +2

      В современных биосах это всё натыкается на известные проблемы: схема с двумя флешками (в одной прошивка, в другой настройки) увеличивает себестоимость платы (перемножая на число производимых плат получается очень внушительная сумма) и сложность обновления прошивки (каждый раз лезть отключать крыжик, блокирующий запись, затем не забывать переключить его обратно). При этом, пользователей, которым можно такую фичу продать, крайне мало. Не окупится.

      И, в идеале, защита должна работать сразу из коробки, чтобы защищать подавляющее большинство пользователей. Представить себе массового пользователя, который будет лазить и переключать аппаратный переключатель на мамке, я не могу. Если такая защита будет включена по умолчанию, это приведёт к тому, что:
      — большая часть пользователей, которая вообще никакие биосы не обновляет, не хочет, и ничего не знает про это, будет сидеть на старых и уязвимых биосах (сейчас, хотя бы, им можно обновления присылать через какой-нибудь Windows Update, как делает вендор моего ноутбука). Да, защищённых от перезаписи, но уязвимых. Аксиома Эскобара в действии.
      — те, кто всё-таки озаботится обновить (энтузиасты) немедленно отключат защиту, которая им мешает. Это удел любой меры безопасности: если она мешает пользователю и отключается — она будет отключена, и на тысячах сайтов в интернете будет инструкция, как её отключить.
      — 2,5 параноика эксперта в области безопасности будут в восторге


      1. eurol
        00.00.0000 00:00

        Помогло бы решение, где вместо переключателя стояла бы кнопка, которую следует нажать непосредственно перед прошивкой. Но это тоже усложнение схемы...


        1. Tarakanator
          00.00.0000 00:00

          Не обязательно делать отдельную кнопку. Можно отбивать морзянкой на кнопке power sw.


          1. eurol
            00.00.0000 00:00

            При таком раскладе пусть пользователь сам и прошивку морзянкой заливает, никакого ПО не надо.


  1. ahdenchik
    00.00.0000 00:00
    +2

    Вообще, признаюсь, я не осилил саму идею UEFI, и не понимаю почему они вместо BIOS родили такой более сложный чем BIOS комбайн вместо упрощения. Можно ведь было просто выкинуть из биос весь легаси (как выкинули когда-то бейсик и поддержку магнитофона) и добавить проверку ЭЦП загрузчика в первых секторах диска, чтобы доверенная цепочка могла быть реализована.

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


    1. tark-tech
      00.00.0000 00:00
      +3

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


  1. 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.


  1. sefedeh
    00.00.0000 00:00

    Мне кажется, что скоро уязвимости будут находить у меня в башке


    1. Gor40
      00.00.0000 00:00

      Нос. Это "дыра" в безопасности.


  1. WishNight
    00.00.0000 00:00
    +1

    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 работает следующим образом: при включении компьютера и перед запуском Windows выполняется файл autochk.exe,

    то в какой среде выполняются EXE-шники?

    Какие DLL-ки? какой svchost.exe? откуда выскочил  Internet Explorer?

    я, правда, не понимаю...


    1. Badimagination
      00.00.0000 00:00

      UEFI построен на экзешниках вроде. Да да, прямо из биоса запускпется exe-шник.


      1. WishNight
        00.00.0000 00:00

        Ок.. а по остальным? неужто и Internet Explorer там есть? :)