Руткиты На Базе Bios. Часть 1



Руткиты на базе BIOS. Часть 1

Здравствуйте, хабровчане! OTUS запускается в конце августа 2 мощных курса по обратной разработке кода (обратному инжинирингу).

В связи с этим мы приглашаем вас День открытых дверей , где Артур Пакулов (экс-вирусный аналитик «Лаборатории Касперского») расскажет подробнее о программах, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения.

Также приглашаем вас принять участие в бесплатных открытых уроках: «Анализ буткитов» И «Анализ банковских троянов» .






Предварительные условия

Все описанное здесь основано на проекте, который я завершил в начале 2011 года, через несколько лет после его начала.

Во время посещения CanSecWest в 2009 году Анибал Сакко и Альфредо Ортега из Core Security выступили с презентацией на тему «Постоянное заражение BIOS», в которой они продемонстрировали, как можно внести исправления в BIOS, чтобы совершать некоторые неприятные/неожиданные вещи.

Вы можете прочитать их отчет Здесь .

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

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

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

Простые меры, такие как подписание обновлений BIOS, легко предотвратят подобные модификации BIOS. Также уже проведены некоторые исследования по поиску путей решения этой проблемы (например, презентация «Атака на Intel BIOS» Рафаля Войчука и Александра Терешкина).

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

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

Я думаю, что эта тема актуальна и сегодня, хотя новые технологии постепенно делают этот тип атак менее актуальным.

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



Подход

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

Моей первоначальной целью было воспроизвести выводы, сделанные Core Security в 2009 году, а затем выяснить, как я могу их изменить.

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

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

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

Этот тип руткита называется «Bootkit» и, как и руткит BIOS, он пытается загрузиться до загрузки ОС.

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

Первым шагом в этом проекте было создание среды тестирования и разработки, в которой можно было бы вносить и отлаживать модификации BIOS. В своей статье о постоянных заражениях BIOS Сакко и Ортега подробно описывают, что они обнаружили, что VMware содержит ПЗУ BIOS, а также сервер GDB, который можно использовать для отладки приложений, начиная с самого BIOS. После успешной работы в VMware была проведена работа по портированию модификаций VMware BIOS на другие подобные BIOS — об этом будет рассказано во второй половине статьи.



Конфигурация BIOS VMware

Ладно, хватит предыстории, приступим! Первый необходимый шаг — извлечь BIOS из самой VMware. В Windows это можно сделать, открыв исполняемый файл vmware-vmx.exe с помощью любого экстрактора ресурсов, например Resource Hacker. Это приложение объединяет несколько разных двоичных ресурсов, а BIOS хранится в ресурсе с идентификатором 6006 (по крайней мере, в VMware 7).

Это может варьироваться от версии к версии, но ключевым моментом является то, что размер файла ресурсов составляет 512 КБ.

На следующем изображении показано, как это выглядит в Resource Hacker:

Руткиты на базе BIOS. Часть 1

Хотя этот образ BIOS входит в состав приложения vmware-vmx.exe, его также можно использовать отдельно, без необходимости редактировать исполняемый файл VMware после каждого изменения.

VMware позволяет указать ряд «скрытых» параметров в файле настроек образа VMX. В какой-то момент я планирую задокументировать некоторые из них на вкладке «Инструменты» этого сайта, потому что они на самом деле очень полезны! Вот те, которые пригодятся для модификации и отладки BIOS:

   

bios440.filename = "BIOS.ROM" debugStub.listen.guest32 = "TRUE" debugStub.hideBreakpoint = "TRUE" monitor.debugOnStartGuest32 = "TRUE"

Первая настройка позволяет загружать ПЗУ BIOS не из приложения vmware-vmx, а из файла.

Следующие две строки подключают встроенный сервер GDB. Этот сервер прослушивает соединения на порту 8832 во время работы образа.

Последняя строка сообщает VMware прекратить выполнение кода в первой строке гостевого образа BIOS. Это очень полезно, поскольку позволяет вам определять точки останова и тестировать память до того, как произойдет какое-либо выполнение BIOS. Тестирование проводилось с использованием IDA Pro в качестве клиента GDB. Пример гостевого образа VMware, остановленного на первой инструкции BIOS, можно увидеть на скриншоте ниже:

Руткиты на базе BIOS. Часть 1

Когда я впервые использовал эту тестовую среду, у меня возникли серьезные проблемы с подключением IDA к серверу GDB. После долгих проб и ошибок и тестирования с различными клиентами GDB выяснилось, что виновата моя версия VMware. Версии 6 и 6.5, похоже, не очень хорошо работают с IDA, поэтому для большей части тестирования я использовал VMware 7. BIOS представляет собой 16-битный код, а не 32-битный код по умолчанию для IDA, поэтому необходимо было определить «Области памяти вручную» в параметрах отладки IDA. Это позволило определить адреса памяти как 16-битный код, чтобы они декомпилируйте правильно.



Воссоздание готовых решений — модификация VMware BIOS

Как отмечается, Сакко и Ортега сделали две презентации по модификации BIOS, а также презентацию Войчука и Терешкина.

Из этих трех презентаций только Сакко и Ортега включили какой-либо исходный код или пример, демонстрирующий описанные ими методы.

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

В работе Сакко и Ортеги довольно подробно описаны их методы настройки и тестирования.

Установка VMware была завершена, как описано выше, и следующим шагом стала реализация предоставленного ими кода модификации BIOS. Предоставленный код требовал извлечения ПЗУ BIOS в отдельные модули.

ПЗУ BIOS, входящее в комплект VMware, представляет собой Phoenix BIOS. В исследовании говорится, что существует два основных инструмента для работы с этим типом BIOS: инструмент с открытым исходным кодом «phxdeco» и коммерческий «Phoenix BIOS Editor», предоставляемый непосредственно Phoenix. В работе Сакко и Ортеги рекомендовалось использовать приложение Phoenix BIOS Editor — они разработали свой код для использования под ним.

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

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

Я просто предполагаю, что найти какую-нибудь легальную пробную версию не составит труда.

После установки инструментов следующим шагом будет создание собственного BIOS. Сначала я убедился, что небольшая модификация образа BIOS подействует в VMware, что и произошло (изменен цвет логотипа VMware).

Затем я запустил сценарий сборки Python, предоставленный Сакко и Ортегой, чтобы изменить BIOS. Если не считать одной опечатки в скрипте сборки BIOS на Python, все работало нормально, и новый BIOS был сохранен на диск.

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

Отладка этой проблемы производилась в IDA и GDB, но проблему было сложно отследить (плюс были проблемы с версиями в IDA).

Чтобы ускорить процесс, была загружена другая версия VMware, чтобы тестовая среда соответствовала среде Сакко и Ортеги.

После некоторых поисков была найдена и установлена точная версия VMware, которую они использовали.

К сожалению, это не решило проблему, VMware сообщила о той же ошибке.

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

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

Этот код очень долго сканировал жесткий диск (его объем составлял всего 15 ГБ) и запускался несколько раз перед запуском системы.

В качестве доказательства концепции кода была возможность исправить notepad.exe, чтобы он отображал сообщение при запуске, или изменить файл /etc/passwd в системе Unix, чтобы для пароля root было установлено фиксированное значение.

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



Тестирование буткита

Значительно позже в процессе работы над проектом я также протестировал функциональность различных буткитов, и результаты были проанализированы, чтобы определить, какой из них будет лучше работать не только как буткит, но и как руткит BIOS. Были исследованы четыре различных буткита: Stoned, Whistler, Vbootkit и Vbootkit2. Буткиты Stoned и Whistler были разработаны так, чтобы функционировать скорее как вредоносное ПО, чем как руткиты, и не имели простой структуры исходного кода.

Vbootkit2 выделялся тем, что он с меньшей вероятностью был вредоносным ПО и имел (относительно) хорошо документированный исходный код. Этот буткит предназначался для запуска с компакт-диска, но тестировался только с бета-версией Windows 7. При использовании с коммерческой копией Windows 7 буткит просто не загружался, поскольку Windows использовала другие подписи файлов.

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

В целях тестирования я нашел бета-версию Windows 7. Когда Vbootkit2 запускался на бета-версии Windows 7, все работало как положено.

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

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

Далее мы рассмотрели Vbootkit; он был разработан для работы с Windows 2003, XP и 2000. Хотя он не был создан для запуска с компакт-диска, для добавления этой функциональности потребовались лишь незначительные изменения.

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

Поэтому этот программный пакет был выбран для использования с руткитом BIOS, который описан в следующем разделе.

НВЛабс являются авторами этого буткита, который по большому счету представляет собой основной функционал данного проекта, огромное им спасибо за публикацию своего кода! Похоже, что исходный код больше не доступен на их веб-сайте, но его все еще можно скачать с Archive.org. Здесь .

Давайте рассмотрим внедрение кода в BIOS в следующая часть .

Следите за новостями!




Узнайте больше о курсах: "Обратный инжиниринг.

Передовой" , "Обратный инжиниринг"


Теги: #информационная безопасность #python #vmware #обратное проектирование #обратное проектирование #bootkit #руткиты на базе BIOS #bootkit #BIOS ROM #gdbserver #gdbserver #Resource Hacker #IDA Pro #IDA Pro #Phoenix BIOS #Phoenix BIOS #phxdeco # phxdeco #phxdeco #Редактор Phoenix BIOS #Редактор Phoenix BIOS
Вместе с данным постом часто просматривают: