вторник, 1 ноября 2011 г.

Win32/Duqu REsearch: что скрывает RPC

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