- Поиск руткитов
- Внедрение в процесс, или DLL Injection
- Использование Native API для внедрения в процесс
- Winlogon hook
- Svchost hook
- Keylogger hook
- Замещение процесса в оперативной памяти
- Основные инструменты анализа
- Отладчик ядра WinDbg
- Загрузчик драйверов OSR Driver Loader
- VirtualKD Faster Windows Kernel debugging with Virtual Machines
- Литература о руткитах
- Заключение
Ключевая и основная сложность борьбы с руткитами в том, что они активно противодействуют своему обнаружению, пряча как свои файлы, так и процессы в оперативной памяти, а также ключи реестра от детектирующих программ.
Тем не менее существуют утилиты, специально созданные для поиска известных и неизвестных руткитов различными узкоспециальными методами, а также с помощью сигнатурного (используя базы данных) и поведенческого анализа.
Поиск руткитов
К примеру, известен алгоритм отлова MEP-руткитов. Его суть заключается в том, что одна и та же информация регистрируется несколькими способами — с использованием API и «напрямую», после чего полученные данные сравниваются в поисках расхождений. Наиболее часто сканируются таблицы импорта и таблицы вызовов Native API, а также структурно вся файловая система.
Базовый арсенал средств отлова руткитов основывается на следующих методах.
- Сигнатурный поиск. Применяется еще со времен первых антивирусов и представляет собой поиск в проверяемом файле уникальной цепочки байтов (сигнатуры), присущей вредоносной программе.
- Эвристический или поведенческий анализатор. Эта технология основывается на поиске отклонений в настройках системы, конфигурационных файлах Linux или реестре Windows, подозрительном поведении процессов и модулей и так далее.
- Контроль целостности. Этот тип поиска основан на сравнении контрольной суммы (MD5 и тому подобное) или цифровой подписи разнообразных системных файлов с базой, содержащей контрольную сумму оригинальных файлов. В случае несовпадения программа делает вывод, что файл был модифицирован или вовсе заменен.
В качестве более полного ликбеза на данную тему могу порекомендовать почитать эту статью и вот эту книжку: A Comparitive Analysis of Rootkit Detection Techniques, которая доступна для загрузки и чтения в формате PDF. И не забудьте ознакомиться с работой нашего соотечественника Игоря Коркина, посвященной форензике оперативной памяти и поиску в ней руткитов, — Applying memory forensics to rootkit detection.
Malware tools, такие как загрузчики (downloaders and droppers), rootkits, bootkits, в большинстве случаев сами по себе не являются вредоносным ПО в классическом понимании. Однако с помощью подобного инструментария злоумышленник может инфицировать целевую систему, при этом заметая следы взлома и заражения, что значительно усложняет последующий поиск и детектирование malware внутри системы.
Внедрение в процесс, или DLL Injection
DLL-инъекция дает возможность выполнять свой (вирусный) код в адресном пространстве уже запущенного процесса. Поэтому такой способ многие разработчики используют для написания различных читов к играм, взлома коммерческого ПО и, конечно же, выполнения вредоносных действий в целевой системе.
Использование Native API для внедрения в процесс
Нативный API-интерфейс Windows фактически предлагает нам ряд функций, которые позволяют внедряться в исполняемый код и управлять другими приложениями. Более подробно можно узнать из MSDN-документации.
В целом весь процесс взлома можно разделить на четыре самостоятельных этапа:
- присоединение к родительскому процессу;
- выделение в процессе памяти, необходимой под внедряемый код;
- копирование DLL в память процесса с определением в соответствующие адреса памяти;
- запуск в процессе секции с внедренным кодом присоединенной библиотеки DLL.
Каждый из этих шагов может быть реализован с помощью одного или нескольких методов программирования. Важно помнить, что каждый метод инжекта имеет как достоинства, так и недостатки. Более подробно об инжекте в процессы с описанием примеров на С++ можно почитать в блоге OpenSecurity.
Winlogon hook
Один из часто используемых трюков вирусописателей — заменить шелл в winlogon, что обеспечивает запуск малвари при любом входе, выходе, запуске, перезагрузке, выключении компьютера и блокировке экрана. В реестре для этого создается специальный ключ:
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ |
Svchost hook
Более продвинутый, чем предыдущий, и наиболее широко используемый хук. Вредоносные программы часто устанавливаются в систему в качестве службы Windows. После инсталляции в систему малварь висит в процессах как общесистемная служба svchost.exe, что делает ее менее приметной.
Как известно, svchost.exe — это универсальное имя для всех хост-процессов в виде сервисов (служб) Windows, которые стартуют при запуске системы нативных DLL-библиотек, обеспечивающих различную функциональность ОС — сетевое взаимодействие, печать, обнаружение внешних подключаемых устройств и работу с ними и так далее. Очень часто каждый запущенный в памяти экземпляр svchost.exe содержит группу потоков (тредов, от англ. thread — нить).
Соответствующая этим службам ветка реестра располагается по данному адресу:
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost |
А сами названия служб определены в реестре по следующему адресу:
1 |
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ServiceName |
Keylogger hook
Еще один вариант системного хука — перехват событий, поступающих от клавиатуры или мыши (PS/2- или USB-драйвер порта).
1 |
WM_KEYDOWN |
1 |
KEYBOARD_INPUT_DATA |
Замещение процесса в оперативной памяти
Еще вариант запустить вредоносный код в системе — не внедрять malware-код в DLL или запущенный процесс, а полностью заменить легитимный процесс на вредоносный, то есть перезаписать память запущенного процесса на содержимое вредоносного исполняемого файла. Замещение процесса используется, когда автор вредоноса хочет замаскировать малварь под полностью легитимный процесс, без риска вызвать сбой или вовсе крах процесса, как это возможно при DLL Injection. Этот метод позволяет выполняться вредоносной программе с теми же привилегиями, что и процесс, который был запущен легитимно от имени пользователя или системы.
Эта процедура выполняется только в приостановленном состоянии (SUSPEND). Иными словами, это означает, что, пока процесс будет загружаться в память, его основной поток (thread) попадает в состояние приостановки. Легитимная программа не сможет ничего сделать, пока внешняя (вирусная) программа не возобновит основной поток, вызывая основную программу к запуску. Под отладчиком это можно заметить, когда мы видим, что используется функция
1 |
CREATE_SUSPENDED |
запущенная с параметром
1 |
dwCreationFlags |
при выполнении вызова на
1 |
CreateProcess |
На одном из зарубежных форумов я нашел интересную функцию, которая, если ее вставить в легитимный исполняемый файл, в отдельных случаях позволяет защитить свой процесс от внедрения постороннего кода:
Если посмотреть внимательно на код, то мы сможем понять суть его работы: он затирает адрес LdrLoadDll, в результате чего все последующие вызовы LoadLibrary приведут к однозначному падению программы.
Основные инструменты анализа
Отладчик ядра WinDbg
Программа WinDbg — это отладчик уровня ядра от всем известной Microsoft. Он менее популярен, чем OllyDbg, но имеет много преимуществ, наиболее весомое из которых — возможность исследования ядра системы в режиме отладки.
Помимо графического (GUI) интерфейса, в WinDbg реализован интерфейс командной строки (CLI), содержащий почти все необходимые для наших исследований функциональные возможности.
Рабочее окно отладчика WinDbg поддерживает просмотр памяти напрямую из командной строки. Для этого используется команда чтения стека адресов в памяти:
1 |
dx addressToRead |
где dx — это один из нескольких вариантов того, как данные будут отображаться.
Загрузчик драйверов OSR Driver Loader
Данная утилита позволяет в ручном и автоматическом (запуск Windows-служб) режиме устанавливать, удалять, запускать и приостанавливать драйверы, загружаемые в память из файлов, хранящихся на жестком диске.
Эта весьма полезная утилита будет помогать нам в дальнейшем при выполнении лабораторных работ.
VirtualKD Faster Windows Kernel debugging with Virtual Machines
VirtualKD — это быстрый, легкий отладчик режима ядра, адаптированный под виртуальные машины VMware и VirtualBox.
Программа интегрируется с WinDbg и значительно сокращает время отладки.
Будьте осторожны при скачивании и распаковке архивов с образцами malware на компьютер. Все исследования выполняйте только в изолированной виртуальной среде! Не выполняй действий, в которых на 100% не уверен! И не забывай делать регулярные snapshot системы для быстрого отката.
Литература о руткитах
Тема malware tools очень обширна и часто заслуживает минимум нескольких статей, посвященных всем аспектам использования руткитов, буткитов, firmware-закладок, хуков, внедрений в исполняемые процессы и замещений. Поскольку объем данной статьи не позволяет рассказать обо всем, мы можем порекомендовать вам, дорогой друг, несколько хороших книг и ресурсов в сети Интернет для самостоятельного изучения матчасти :).
Rootkits: Subverting the Windows Kernel (Greg Hoglund, Jamie Butler)
Одна из немногих книг, в целом посвященная руткитам и технологиям их обнаружения в Windows системах. Настоящий must have для начинающего исследователя, неискушенного в тонкостях функционирования Windows.
Inside Windows Debugging (Developer Reference)
Довольно занятная книга, пошагово с самых основ рассказывающая о технологиях отладки различных программ под ОС Windows, особенностях архитектуры этой ОС, инструментах и методиках отладки, фичах и других не менее важных деталях.
Rootkits and Bootkits. Reversing Modern Malware and Next Generation Threats
Книга, которую стоит рекомендовать в первую очередь. Ценнейший сборник информации о руткитах и буткитах, алгоритмах их работы, особенностях реализации в ОС, методах детектирования и противодействия.
Rootkits and Bootkits
Архив wasm.ru, посвященный низкоуровневому программированию. В комментариях не нуждается — самый большой сборник русскоязычных материалов по низкоуровневому программированию, написанию драйверов, системных модулей и приложений, работающих в ring 0.
Заключение
Сегодня наша копилка знаний пополнилась еще одним важным элементом из мира реверсинга малвари, а именно поиск руткитов. Мы рассмотрели malware tools, коснулись теории вопроса, рассмотрели основные методы и способы скрытия присутствия инфекции в системе.
Безусловно, в одной статье всего не объять, так что дерзайте, изучайте, анализируйте и прокачивайте свои скиллы исследователя! Всем удачи в исследованиях! И до новых встреч!
Автор: Иван Пискунов