Мы продолжаем исследование Win32/Duqu, в этом посте поговорим об особенностях использования RPC-протокола. Во-первых, сразу хочу отметить, что реализация RPC-протокола еще раз подтверждает сходство кода Duqu и Stuxnet. RPC-протокол, был одной из наиболее интересных частей Stuxnet. В Duqu используется, лишь часть от полного функционала этого протокола, который подробно описан в нашем исследовании "Stuxnet under the Microscope" (стр. 56-57).
Проанализировав реализацию RPC-сервера в одном из компонентов Duqu, который реализует лишь локальную часть протокола и сравнив в BinDiff две основные процедуры, мы получили интересные результаты:
Код практически идентичен, за исключением несущественных артефактов, появившихся после его рекомпиляции в составе Duqu. Что же касается самого RPC функционала, то заключается в следующем:
- RpcHandler_1 – возвращает установленную версию
- RpcHandler_2 – выполняет ижект модуля в указанный процесс и вызывает на выполнение указанную функцию экспорта
- RpcHandler_3 - загружает модуль и выполняет его с точки входа
- RpcHandler_4 – запускает на выполнение процесс посредством вызова CreateProcess()
- RpcHandler_5 - читает содержимое указанного файла (например, конфига)
- RpcHandler_6 - записывает данные в указанный файл
- RpcHandler_7 – удаляет указанный файл из системы
Вот так выглядит декомпилированный код обработчика, который возвращает номер версии:
Использование RPC-протокола, позволяет оставаться незамеченным и не вызывать подозрение со стороны защитного ПО. Единственный антируткит (из публично доступных), который собирает информацию о зарегистрированных в системе RPC интерфейсах, это WinCheck.
Так, например у Stuxnet был реализован полноценный P2P-протокол на базе RPC для общения внутри локальной сети между зараженными хостами.
Комментариев нет:
Отправить комментарий