Буткит что это за вирус

Обновлено: 12.05.2024

То есть, реальностью внутри компьютерного мира рулит тот, кто раньше стартовал. Именно он, с вершины своей горы, обозревает окрестности и блюдёт в системе порядок… Или беспорядок, незаметно и безнаказанно – если первым загрузился зловред.

В общем, " The winner takes it all " © ABBA.

А очередь на загрузку начинается с загрузочного сектора – специальной области на диске, где сосредоточены все стрелки на что, когда и куда будет грузиться. И - о, ужас! - даже операционная система подчиняется этому порядку! Немудрено, что кибер-негодяи давно питают нездоровый интерес к оному сектору – это же идеальный вариант надеть тапки первым и полностью скрыть факт заражения компьютера! А помогает им в этом особый класс зловредов – буткиты .

Как загружается компьютер?

О том, что такое буткиты и как мы вас от них защищаем – рассказ ниже.

На самом деле буткиты – история с бородой . Да ещё с какой!

Второе дыхание буткиты обрели в конце 2007г., когда на арену выползла новая версия троянца-шпиона Sinowal с функцией заражения загрузочного сектора. Кстати, для некоторых антивирусных компаний это был шок - с конца 90х угроза считалась неактуальной и некоторые продукты в принципе не умели защищать загрузочные секторы. Хотя буткиты сейчас уже не блещут пандемическим распространением, в наших отчётах они стабильно создают заметный вредоносный фон. А компьютерный андерграунд не перестаёт изобретать новые уловки.

Раз буткиты такие хитрые и неуловимые, почему же они не такие распространённые? И вообще стоит ли заморачиваться защитой?

Спросите - раз буткиты такие хитрые и неуловимые, почему же они не такие распространённые? И вообще стоит ли овчинка выделки – надо ли заморачиваться разработкой защиты?

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

География распространения буткитов, 2013г.

Прежде всего, кратенько рассмотрим жизненный цикл буткита.

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

При заражении буткит записывается в загрузочный сектор, а его оригинальное содержимое переносится в укромное место и зашифровывается. Далее при каждом запуске компьютера буткит будет загружать в память свои модули, содержащие вредоносный функционал (например, банковский троянец ) и средства маскировки ( руткит ). Руткит необходим для сокрытия факта заражения компьютера – он перехватывает последующие попытки операционной системы или других приложений (в том числе антивирусов) проверить содержимое загрузочного сектора и… подсовывает из того самого укромного места оригинал! Как будто ничего и не было!

В наших корпоративных и персональных продуктах есть эмулятор загрузки . Подобно эмулятору операционной системы или браузера он создаёт искусственное окружение, соответствующее процессу загрузки компьютера. Затем эмулятор в обход перехваченных дисковых функций собирает все необходимые секторы, формирует специальный контейнер и запускает его в этом окружении. Буткит думает, что пришло время поработать и запускает свою стандартную процедуру, тут-то мы его и палим! Подозрительный объект через KSN отправляется нашим вирусным аналитикам - они разрабатывают защиту, обновляют базы, а дальше дело техники – антивирус расшифровывает оригинальный загрузочный сектор, удаляет буткит и все его модули и восстанавливает систему. Если нет возможности ждать – можно попытаться вылечить компьютер нашей бесплатной антивирусной утилитой KVRT .

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

Как и любой эмулятор, виртуализация загрузки компьютера – процесс дюже ресурсоёмкий. С другой стороны – а зачем постоянно и глубоко сканировать загрузочный сектор? В общем, мы совместили приятное с полезным таким образом, что проверка загрузочной области происходит по требованию, по расписанию (например, поздно ночью) или в режиме простоя , когда на компьютере никто не работает. И овцы целы и волки сыты :)

Что будет дальше?

Нет сомнений, что буткиты будут дальше эволюционировать и совершенствоваться. Наглядный пример – полиморфный вирус XPAJ , который запросто обходит новые механизмы защиты Windows для маскировки своего буткит-модуля. На повестке дня биоскиты – вредоносные перехватчики ещё более глубокого системного уровня.

Также ясно, что этот класс зловредов ещё некоторое время останется оружием ограниченного числа кибер-банд, которым логично привлекать к себе поменьше внимания, подольше оставаясь в тени. А тень есть и ещё какая – тень от антивирусной индустрии, которая откровенно забивает на защиту от буткитов.

Ниже – результаты недавнего сравнительного тестирования способности разных антивирусов лечить активное заражение некоторыми распространёнными буткитами. Картина мрачная, но с элементами оптимизма :)

В общем, скучно точно не будет. Вместе с тем, мы тоже на месте не стоим, думаем, работаем, изобретаем, внедряем, детектим, лечим, спасаем!


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

Цели буткита:

незаметно установить основную нагрузку (как правило руткит);

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

препятствовать загрузке системы (например, в случае атаки с помощью шифровальщика).

Несколько лет назад появились такие методы защиты от руткитов, как проверка подписи драйверов (Driver Signature) и технология запуска своего легитимного средства защиты раньше всех (Enforcement Early Launch Antimalware), чтобы опередить руткит.

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

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


Буткиты бывают двух типов. Одни заточены на так называемые старые Legacy-способы оперировать стадией предзагрузки. Второй тип использует новые подходы, например, основанные на подсистеме UEFI. В статье мы рассматриваем только Legacy-режим.


Если посмотреть на исследования коллег, то зловреды, такие как FinSpy, все еще используют в своем арсенале заражение в режиме Legacy наряду с современным UEFI.


Обратите внимание на распространенность операционных систем, таких как Windows 7 (около 16%) и Windows XP (0,59%). Даже полпроцента Windows XP — это более 9 млн компьютеров, многие из которых, по нашему опыту, могут относиться к весьма чувствительным сферам (SCADA, банки и пр.).


Отметим и виртуальные машины — когда мы устанавливаем такую ОС, сам же vCenter рекомендует Legacy-BIOS, это поле выбрано по умолчанию. А, так как на виртуальной инфраструктуре часто делают критически важные узлы на предприятии, такие как контроллеры домена, то Legacy-BIOS хакеру весьма интересен.


Процесс загрузки Windows в режиме Legacy

В целом загрузку можно представить как работу цепочки программ, которые стартуют начиная с нажатия клавиши питания ПК. Первым появляется BIOS, который работает на отдельном чипе. Его задача — инициализировать оборудование, определить загрузочный диск, сформировать программный интерфейс для взаимодействия с оборудованием и т.д.


Сразу после загрузки процессор работает в реальном режиме, который остался от старых поколений CPU. Ключевой особенностью такого режима является сегментная адресация. В этом режиме каждый адрес памяти идентифицируется двумя значениями — это сегмент и смещение. Чтобы перевести в линейный адрес, надо использовать формулу ниже:


На данном этапе используется физическая память, виртуальная еще не задействована, процессор имеет доступ к физической памяти без ограничений. BIOS после первоначальных операций определяет загрузочный диск и считывает его нулевой сектор в память, на которой располагается MBR (главная загрузочная запись). Получив управление от BIOS, MBR находит VBR (загрузочная запись раздела) и передает туда управление. Оба эти компонента находятся в загрузочных секторах диска, а не внутри файловой системы.


MBR занимает весь нулевой сектор, содержит загрузочный код, таблицу разделов и сигнатуру, которая позволяет проверить валидность MBR.


Если посмотрим на реальную MBR (ниже), то в конце увидим сигнатуру 55 AA и выделенное значение 80 в поле статус, которое отмечает активный раздел на диске. Справа мы видим загрузочный код, который в начале своей работы перемещает себя в другое место.


Ниже — программный интерфейс, который предназначен для взаимодействия MBR с диском и другим оборудованием и представлен BIOSом в виде таблицы векторов прерываний. Эта таблица представляет собой набор ячеек по 4 байта, каждая из которых содержит сегмент и смещение обработчика прерывания. В частности, под номером 0x13 располагается обработчик прерывания для работы с диском; это не одна функция, а набор сервисов для определения параметров диска, чтения его в различных режимах. Номер конкретного сервиса задается в регистре AH.


Задача MBR состоит в том, чтобы с использованием прерывания 0x13 считать нулевой сектор активного раздела. Его адрес находится в таблице разделов MBR. Этот нулевой сектор содержит главную загрузочную запись раздела (VBR), внутри которой содержатся параметры раздела и фрагмент загрузочного кода. Помимо параметров раздела там есть указатели на структуру, описывающие файловую систему (в данном случае — NTFS), для того чтобы найти таблицы, прочитать их и распарсить файловую систему активного раздела.


Далее мы видим дамп VBR, он содержит сигнатуру 55 AA для проверки валидности, а справа — листинг загрузочного кода раздела.


После того как VBR получила управление, ее главной задачей является загрузка кода Initial Program Loader. Этот код может занимать до 15 секторов и располагается сразу же после VBR. Его размер позволяет распарсить файловую систему и найти дальнейшие компоненты, участвующие в загрузке системы.


Дальнейшая работа ложится на модули, которые расположены внутри файловой системы.


Главной целью менеджера загрузки bootmgr является переключение процессора в защищенный режим. Этот менеджер работает на стыке двух режимов — реального и защищенного.


Далее переходим к Winload.exe, задача которого (если глобально) — найти ядро и передать ему управление. После этого вступает в работу непосредственно операционка — запускает процессы, службы, драйверы и готовится к взаимодействию с пользователем.


Как работает буткит


Важно отметить, что инфекторы могут сохранять оригинальный загрузочный код в скрытой области диска. Это может быть сделано для того, чтобы после выполнения вредоносных действий использовать этот оригинальный код для продолжения загрузки системы. На примере ниже инфектор заражает MBR, а для сохранения дополнительных компонентов и прочего создает скрытый раздел в неразмеченной области. Такой раздел не будет отражен ни в таблицах MBR, ни в таблицах NTFS.

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


Чтобы записать данные в диск напрямую, используется простейший набор функций CreateFile и WriteFile.



Буткиту необходимо отслеживать тот этап загрузки, который происходит в данный момент. Главным механизмом является использование перехвата обработчика какого-либо прерывания и замены его на свою вредоносную функцию, сохраняя адрес оригинальной функции, чтобы не поломать загрузку. Самым важным является 0x13-е прерывание — перехватывая его, буткит может проверять, что считывается с диска в данный момент и позволяет подменить данные, считываемые с диска, например, набор параметров, которые управляют загрузкой системы, включая цифровую проверку подписи драйверов.


Чтобы сохранить данные при переключении в защищенный режим работы процессора, некоторые буткиты, такие как Rovnix, применяют копирование части своего вредоносного кода в неиспользованную область таблицы IDT.


Кроме того, чтобы передать управление на код, спрятанный в таблице, этот буткит использует механизм отладки с помощью специальных регистров, ставя точку останова на адрес точки входа Winload.exe. И как только управление передается на Winload.exe, сработает ранее перехваченный обработчик первого — дебажного — прерывания и выполняется вредоносный код.


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


В частности, имея контроль над процессом чтения данных перехваченного обработчика прерываний, буткит может подменять значения загрузочных параметров BCD. Например, буткит может вынудить загрузиться систему в уязвимом режиме.


В частности, вредонос TDL4 проверяет, какой параметр считывается: если это EmsEnabled, то буткит подменяет его на параметр WinPEMode и загружает систему в режиме Pre-Installation Environment, в котором проверка подписей отключена.


Rovnix использует более интересный способ. Этот буткит модифицирует список загрузочных драйверов, вставляет свой драйвер, и ядро, когда оно будет проходить по этому списку в процессе инициализации, вызовет точку входа вредоносного драйвера.


Ниже мы видим, что в первом параметре функции OslArchTransferToKernel содержится указатель на структуру LoaderBlock, и он же передается в качестве единственного параметра точки входа ядра.


Если говорить о более свежих зловредах, то буткит ESPecter, описанный коллегами из ESETниже, перехватывает функцию OslArchTransferToKernel и патчит проверку цифровых подписей в ядре, оставляя систему в уязвимом состоянии.

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


В заключении материала повторим основные угрозы:

ядро ОС не всегда может быть уверено в себе;

код, который выполняется в процессе загрузки, в тех же зараженных MBR и VBR, может получить доступ к любым данным, расположенным на диске без каких-либо ограничений;

несмотря на то, что Legacy-BIOS уходит в небытие, до сих пор миллионы машин работают на Windows 7 и XP, при этом зачастую они функционируют на критически важных узлах.

В этом материале мы постарались рассказать об основных угрозах, связанных с буткитами, нацеленными на Legacy-BIOS, обрисовать наиболее популярные техники атак и объяснить, почему такие зловреды по-прежнему используются. На следующем вебинаре мы будем говорить о другом классе буткитов, которые нацелены на системы на базе UEFI. Он состоится 15 марта. Рекомендуем зарегистрироваться, чтобы не пропустить.

Антон Белоусов, старший специалист отдела обнаружения вредоносного ПО экспертного центра безопасности Positive Technologies (PT Expert Security Center)

Алексей Вишняков, руководитель отдела обнаружения вредоносного ПО экспертного центра безопасности Positive Technologies (PT Expert Security Center)


Прогосударственые хакерские группы уже давно и успешно используют буткиты — специальный вредоносный код для BIOS/UEFI, который может очень долго оставаться незамеченным, контролировать все процессы и успешно пережить как переустановку ОС, так и смену жесткого диска. Благодаря тому, что подобные атаки сложно выявить (вендорам ИБ удалось лишь дважды самостоятельно обнаружить такие угрозы!), наблюдается рост интереса к подобному методу заражения компьютеров и среди финансово мотивированных преступников — например, операторов TrickBot. Семен Рогачев, специалист по исследованию вредоносного кода Group-IB, рассказывает как охотиться за подобными угрозами в локальной сети и собрать свой тестовый стенд с последним из обнаруженных UEFI-буткитов Mosaic Regressor. Бонусом - новые сетевые индикаторы компрометации, связанные с инфраструктурой Mosaic Regressor, и рекомендации по защите в соответсвии с MITRE ATT&CK и MITRE Shield.

Давайте начнем с небольшой исторической справки.

► В 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 году Рафаль Войтчук (Rafal Wojtczuk) и Кори Калленберг (Corey Kallenberg) опубликовали информацию об уязвимости Darth Venamis в механизме S3 Resume. Это механизм, определяющий продолжение работы компьютера после выхода из состояния сна. В результате исследования выяснилось, что область памяти, в которой хранится S3 BootScript (список команд, проводящих инициализацию устройств после выхода из состояния сна), не защищена от модификации, что приводит к различным уязвимостям. Эта же уязвимость использовалась, предположительно, ЦРУ для установки имплантов. Почитать об этом можно здесь, здесь и здесь.

► В 2015 году Кори Калленберг и еще один исследователь, Ксено Ковах (Xeno Kovah), представили LightEater — руткит, позволяющий получать различную важную информацию (ключи шифрования и прочее) за счёт прямого доступа к физической памяти и постраничного поиска с использованием сигнатур.

► В том же году, после утечки данных из компании HackingTeam, был обнаружен фреймворк Vector-EDK, разработанный для внедрения имплантов в UEFI-based прошивки. Этот же фреймворк использовался для разработки Mosaic Regressor.


► В 2016 году Дмитро Олексюк (Dmytro Oleksiuk) создал PeiBackdoor — первый публично доступный UEFI-руткит, загружаемый на этапе PEI (Pre-EFI Initialization).

► В том же году из-за утечки документов Equation Group (по некоторым источникам, связана с АНБ США) появилась информация о существовании BIOS-модуля BANANABALLOT, загружающего некий имплант для взаимодействия с роутерами CISCO.

► В 2017-м WikiLeaks опубликовали информацию о DerStarke — UEFI-версии бэкдора Triton для macOS.

► В октябре 2020 года Лаборатория Касперского в процессе расследования атаки обнаружила Mosaic Regressor — UEFI-буткит, созданный с использованием инструментов, полученных из утечки данных HackingTeam.

► В декабре 2020-го зафиксирована новая версия TrickBot, которая обладает функциональными возможностями по внедрению кода UEFI. На данный момент нет свидетельств активного внедрения UEFI-имплантов in the wild TrickBot’ом, но сам факт появления подобного функционала говорит о том, что злоумышленники интересуются подобными атаками.

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

Создание стенда с UEFI-буткитом

Mosaic Regressor состоит из нескольких модулей, которые описаны в таблице.

В последние несколько лет увеличилось распространение вредоносных программ (буткитов), модифицирующих загрузочные сектора в процессе заражения системы. Среди самых видных представителей — TDL4, Olmasco и Rovnix. Каждый из них использует различные способы заражения жесткого диска, это либо модификация главной загрузочной записи (MBR), либо модификация первых секторов загрузочного раздела, т. е. VBR или IPL (первые сектора тома, куда передается управление из MBR — Volume Boot Record/Initial Program Loader). Наглядно эти семейства показаны на рисунке ниже.



Рис. 1. Схема различных семейств буткитов и методов заражения диска.

Существует несколько причин использования буткитов в современных угрозах:
● Возможность запуска вредоносного кода раньше кода ОС, что дает неоспоримые преимущества и позволяет контролировать процесс загрузки ОС.
● Как следствие первого пункта, позволяет обходить систему мониторинга целостности ключевых компонентов ядра — PatchGuard (практически единственный способ обеспечить выживаемость руткита в x64-среде).
● Возможность глубоко скрывать свой код и, таким образом, делать его невидимым для AV-сканеров.
● Буткит имеет посекторную архитектуру хранения своего тела на диске, что дает возможность выносить свой вредоносный код и код полезной нагрузки далеко за пределы файловой системы и даже разделов диска, делая почти невозможным его обнаружение.
● Безопасная установка руткита в системе.

В отчете ESET по угрозам и трендам за 2012 г., мы указали, что буткиты являются одним из ключевых технических трендов прошедшего года. Наши эксперты отслеживают появление новых сложных угроз. Мы также не обошли стороной и Win32/Gapz, так как он содержит ряд технических особенностей, которые делают его действительно интересным. Александр Матросов и Евгений Родионов проделали большую работу, занимаясь анализом этого буткита. Сегодняшний наш пост посвящен этому анализу.

Начнем с дроппера — компонента, который является изначальным носителем кода буткита и отвечает за его установку в системе. Мы детектируем его как: Win32/Gapz.X, X-версия. Мы обнаружили три его версии, A, B и C. Ниже в таблице приведены их характеристики:



Рис. 2.

В соответствии с нашими наблюдениями, первая известная версия дроппера была скомпилирована в апреле прошлого года и содержала много отладочной информации, т. е. не подразумевалась для массового распространения. Вполне вероятно, что Win32/Gapz начали массово распространять в конце лета или начале сентября прошедшего года. Для поднятия своих привилегий в системе Win32/Gapz использует LPE-эксплойты и COM Elevation метод.
В процессе анализа мы обнаружили, что заражению Win32/Gapz подвержены: 32-битные Windows XP SP2 и выше (исключая Windows Vista и Vista SP1) и 64-битные Windows XP SP2 и выше. Обсуждаемая версия дроппера Win32/Gapz способна заражать Windows XP и Windows 7, включая x64 версии, однако на Windows 8 буткит-часть не работает должным образом и после заражения часть, надлежащая к исполнению в режиме ядра, не исполнялась.



Рис. 3. Часть кода дроппера, проверяющая версию ОС.

Дроппер, устанавливающий буткит в систему, тщательно продуман и способен обойти современные проактивные защиты (HIPS), а также поднимать свои привилегии до уровня системы. Кроме того, он содержит хитрый метод внедрения кода в адресное пространство процесса. Файл дроппера экспортирует из себя несколько функций, которые указаны ниже на рисунке.



Рис. 4. Функции, экспортируемые исполняемым файлом дроппера.

Есть три экспортируемые функции, на которые следует обратить внимание: start, icmnf и isyspf. Краткое описание:
● start — точка входа в дроппер, осуществляет его внедрение в адресное пространство доверенного процесса explorer.exe;
● icmnf — отвечает за повышение (эскалацию) привилегий;
● isyspf — выполняет заражение жертвы кодом буткита.

Код дроппера использует специальную секцию, которая спроецирована в адресное пространство процесса explorer. Через эту секцию он загружает шелл-код в этот процесс и далее, с помощью специально сформированного API-вызова, производит его активацию. Соответственно, после того, как шелл-код активирован, он подгружает образ дроппера в адресное пространство процесса explorer, вызывает функцию повышения привилегий и инициирует процедуру заражения кодом буткита, записывая его на диск.



Рис. 5. Стадии выполнения дроппера и заражения жертвы кодом буткита.

После того, как дроппер заразил систему буткитом, его задача исполнена, и он удаляет свой файл с диска.

Вредоносный код MBR

Мы обнаружили две модификации буткита Win32/Gapz, которые различаются методами заражения диска жертвы. Самая ранняя модификация появилась в начале лета 2012 г., эта версия была нацелена на заражение MBR. Другая, более поздняя модификация, которая заражает VBR, была замечена в конце осени 2012 г.



Рис. 6. Две модификации Win32/Gapz, нацеленные на заражения MBR и VBR.

Давайте рассмотрим более раннюю модификацию буткита, которая нацелена на заражение MBR, подробнее. В этом случае, код буткита можно разбить на несколько частей:
● вредоносный MBR;
● код режима ядра и полезная нагрузка, внедряемая в процессы.

Вредоносный код сохраняет свой код режима ядра и полезную нагрузку либо перед самым первым разделом, либо после последнего раздела на жестком диске. Такой подход очень похож на тот, который использовался в бутките Rovnix, за исключением того, что Rovnix заражает VBR.
Что касается буткит части Win32/Gapz, то в ней нет ничего необычного: как только код из вредоносного MBR исполнился, он восстанавливает оригинальный код в памяти и читает следующие секторы жесткого диска, содержащие код для последующего исполнения, на который и передается управление. Код буткита перехватывает обработчик прерывания 0x13, int 13h и отслеживает, таким образом, загрузку ниже перечисленных модулей ОС для установки туда перехватов:
● ntldr (на системах до Windows Vista)
● bootmgr (на системах Vista+)
● winload.exe (на системах Vista+)

Код буткита идентифицирует каждый из вышеперечисленных модулей, используя специальные последовательности байт. Ниже перечислен список функций, которые буткит перехватывает в этих модулях:


Как только вредоносный код обнаруживает, что конкретный модуль читается с жесткого диска, он модифицирует его таким образом, чтобы вернуть себе контроль после того, как процессор переключится в защищенный режим. Буткит устанавливает перехваты на загрузчик ядра ОС: это либо ntldr в устаревших системах до Windows Vista, либо bootmgr в Vista и выше. В случае с bootmgr, он также перехватывает функцию OslArchTransferToKernel в winload.exe.



Рис. 7. Перехватчик функции OslArchTransferToKernel в winload.exe.

Следующий этап, это установка перехвата на функцию IoInitSystem, которая вызывается в процессе инициализации ОС. Она перехватывается вредоносным кодом либо из ntldr, либо из winload.exe, в зависимости от версии ОС.



Рис. 8. Код перехвата, устанавливаемого на функцию IoInitSystem.

После того, как вредоносный код из IoInitSystem был исполнен, буткит восстанавливает модифицированные байты в образе ядра ntoskrnl и передает управление оригинальной IoInitSystem. Перед передачей управления оригинальному коду, буткит перезаписывает адрес возврата в стеке на свою функцию, которая, соответственно, будет исполнена по завершении исполнения IoInitSystem. С помощью такого трюка вредоносный код получает управление после того, как ядро ОС будет инициализировано. Далее вредоносный код считывает остальную свою часть с жесткого диска и создает отдельный системный поток, который исполняет эти инструкции и в завершении возвращает управление ядру. В этой части буткита, которая исполняется в режиме ядра, реализуется руткит-функционал, внедрение полезной нагрузки в процессы и взаимодействие с C&C сервером.

Вредоносный код VBR



Рис. 9. Схема первого сектора VBR.



Рис. 10. Структура NTFS-тома.

В случае заражения системы, VBR-код вызывает на исполнение код буткита вместо легального IPL. Код буткита, как уже упоминалось, записывается либо перед самым первым разделом диска, либо после последнего. В остальном код буткита, по существу, ничем не отличается от версии с MBR-инфектором.

Вредоносный код режима ядра

Основное предназначение непосредственно той части, которая и называется буткитом, описанной выше, заключается в загрузке вредоносного кода режима ядра или руткита в системное адресное пространство, обходя ограничения, накладываемые ОС для такого привилегированного кода. Мы уже упоминали, что этот загружаемый буткитом код, содержит в себе руткит для скрытия своего присутствия, механизм работы с управляющим сервером C&C, а также полезную нагрузку (payload), которая предназначена для внедрения в процессы.
В отличие от Rovnix, TDL4 и других распространенных буткитов, вредоносный код режима ядра в Win32/Gapz не имеет структуры исполняемого PE-файла. Вместо этого он структурирован особым образом. Код состоит из 12 объединенных между собой блоков, каждый из которых имеет заголовок — структуру, которая хранит служебную информацию о нем. Она имеет следующий вид:


Каждый из блоков реализует определенный функционал: внедрение полезной нагрузки, взаимодействие с C&C серверами, самозащиту и так далее. Функционал кода режима ядра является достаточно сложным и может быть рассмотрен отдельно (выходит за рамки этого поста).

Bootkits vs. Microsoft ELAM

В этой части нашего поста мы хотим остановиться на специальном средстве, которое Microsoft решили использовать для борьбы с различного рода угрозами, особенно, руткитами и буткитами, которые пытаются загрузить себя раньше других драйверов в системе. Средство называется ELAM, Early Launch Anti-Malware Module и поставляется в составе ОС, начиная с Windows 8. По сути ELAM – это драйвер, предоставляемый антивирусным вендором, которому гарантирован приоритет при загрузке драйверов режима ядра. С точки зрения же ядра ОС, ELAM представляет собой API для антивирусных драйверов, а также набор правил, которых такому драйверу следует придерживаться. Одна из главных возможностей этого средства заключается в том, что он гарантированно позволяет AV-драйверу загружаться раньше остальных драйверов в системе и, таким образом, выходить за рамки обычных правил автозагрузки, регламентируемых для остальных драйверов.

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



Рис. 12. Мы видим, что буткит может компрометировать систему с активным ELAM, делая его бесполезным инструментом. Поскольку буткит загружается раньше инициализации ОС, он будет уже находиться в памяти на тот момент, когда ELAM получит управление.

My power over you
grows stronger yet
(c) Andrew Lloyd Webber — Phantom Of The Opera

Кто раньше встал – того и тапки
(с) неизвестен.

То есть, реальностью внутри компьютерного мира рулит тот, кто раньше стартовал. Именно он, с вершины своей горы, обозревает окрестности и блюдёт в системе порядок… Или беспорядок, незаметно и безнаказанно – если первым загрузился зловред.

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

Как загружается ваш компьютер?

loading_comp

О том, что такое буткиты и как мы вас от них защищаем – рассказ ниже.

На самом деле буткиты – история с бородой. Да ещё с какой!

Второе дыхание буткиты обрели в конце 2007г., когда на арену выползла новая версия троянца-шпиона Sinowal с функцией заражения загрузочного сектора. Кстати, для некоторых антивирусных компаний это был шок — с конца 90х угроза считалась неактуальной и некоторые продукты в принципе не умели защищать загрузочные секторы. Хотя буткиты сейчас уже не блещут пандемическим распространением, в наших отчётах они стабильно создают заметный вредоносный фон. А компьютерный андерграунд не перестаёт изобретать новые уловки.

Раз буткиты такие хитрые и неуловимые, почему же они не такие распространённые? И вообще стоит ли заморачиваться защитой?

Спросите — раз буткиты такие хитрые и неуловимые, почему же они не такие распространённые? И вообще стоит ли овчинка выделки – надо ли заморачиваться разработкой защиты?

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

География распространения буткитов, 2013г.
(данные только по пользователям ЛК)

bootkit-infection-statistics-map

Прежде всего, кратенько рассмотрим жизненный цикл буткита.

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

При заражении буткит записывается в загрузочный сектор, а его оригинальное содержимое переносится в укромное место и зашифровывается. Далее при каждом запуске компьютера буткит будет загружать в память свои модули, содержащие вредоносный функционал (например, банковский троянец) и средства маскировки (руткит). Руткит необходим для сокрытия факта заражения компьютера – он перехватывает последующие попытки операционной системы или других приложений (в том числе антивирусов) проверить содержимое загрузочного сектора и… подсовывает из того самого укромного места оригинал! Как будто ничего и не было!

Эмулятор создаёт искусственное окружение, соответствующее процессу загрузки компьютера. Буткит запускает в нём свою стандартную процедуру — тут-то мы его и палим!

В наших корпоративных и персональных продуктах есть эмулятор загрузки. Подобно эмулятору операционной системы или браузера он создаёт искусственное окружение, соответствующее процессу загрузки компьютера. Затем эмулятор в обход перехваченных дисковых функций собирает все необходимые секторы, формирует специальный контейнер и запускает его в этом окружении. Буткит думает, что пришло время поработать и запускает свою стандартную процедуру, тут-то мы его и палим! Подозрительный объект через KSN отправляется нашим вирусным аналитикам — они разрабатывают защиту, обновляют базы, а дальше дело техники – антивирус расшифровывает оригинальный загрузочный сектор, удаляет буткит и все его модули и восстанавливает систему. Если нет возможности ждать – можно попытаться вылечить компьютер нашей бесплатной антивирусной утилитой KVRT.

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

Как и любой эмулятор, виртуализация загрузки компьютера – процесс дюже ресурсоёмкий. С другой стороны – а зачем постоянно и глубоко сканировать загрузочный сектор? В общем, мы совместили приятное с полезным таким образом, что проверка загрузочной области происходит по требованию, по расписанию (например, поздно ночью) или в режиме простоя, когда на компьютере никто не работает. И овцы целы и волки сыты :)

emulator_check_rus

Что будет дальше?

Нет сомнений, что буткиты будут дальше эволюционировать и совершенствоваться. Наглядный пример – полиморфный вирус XPAJ, который запросто обходит новые механизмы защиты Windows для маскировки своего буткит-модуля. На повестке дня биоскиты – вредоносные перехватчики ещё более глубокого системного уровня.

Также ясно, что этот класс зловредов ещё некоторое время останется оружием ограниченного числа кибер-банд, которым логично привлекать к себе поменьше внимания, подольше оставаясь в тени. А тень есть и ещё какая – тень от антивирусной индустрии, которая откровенно забивает на защиту от буткитов.

Ниже – результаты недавнего сравнительного тестирования способности разных антивирусов лечить активное заражение некоторыми распространёнными буткитами. Картина мрачная, но с элементами оптимизма :)

table_AV

В общем, скучно точно не будет. Вместе с тем, мы тоже на месте не стоим, думаем, работаем, изобретаем, внедряем, детектим, лечим, спасаем!

Читайте также: