Мы продолжаем исследование 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 для общения внутри локальной сети между зараженными хостами.


Комментариев нет:
Отправить комментарий