Duqu — вредоносная матрёшка

Введение

1 сентября 2011, из Венгрии, на сайт VirusTotal был отправлен файл с именем ~DN1.tmp. На тот момент файл детектировался как вредоносный только двумя антивирусными движками — BitDefender и AVIRA. Так начиналась история Duqu. Забегая наперед, нужно сказать, что семейство ВПО Duqu было названо так по имени этого файла. Однако этот файл является полностью самостоятельным шпионским модулем с функциями кейлоггера, установленного, вероятно, с помощью вредоносного загрузчика-дроппера, и может рассматриваться только в качестве «полезной нагрузки», загруженной ВПО Duqu в процессе своей работы, но не составной частью (модулем) Duqu. Один из компонентов Duqu был отправлен на сервис Virustotal только 9 сентября. Его отличительная особенность — это драйвер, подписанный цифровой подписью компании C-Media. Некоторые эксперты тут же принялись проводить аналогии с другим знаменитым образцом ВПО — Stuxnet, который тоже использовал подписанные драйверы. Общее количество зараженных Duqu компьютеров, обнаруженными различными антивирусными компаниями по всему миру, исчисляется десятками. Многие компании утверждают, что опять главная цель — Иран, однако судя по географии распределения заражений, этого нельзя утверждать наверняка.
Duqu — вредоносная матрёшка
В данном случае следует уверенно говорить только об очередной компании с новомодным словом APT (advanced persistent threat).

Процедура внедрения в систему

Расследование, проводимое специалистами Венгерской организации CrySyS (Венгерская лаборатория криптографии и системной безопасности Будапештского университета технологии и экономики), привело к обнаружению установщика (дроппера), посредством которого происходило заражение системы. Он представлял собой файл формата Microsoft Word с эксплоитом уязвимости драйвера win32k.sys (MS11-087, описана Microsoft 13 ноября 2011), отвечающего за механизм рендеринга TTF шрифтов. Шелкод эксплоита использует встроенный (embedded) в документ шрифт с названием ‘Dexter Regular’, в качестве создателя шрифта указана компания Showtime Inc. Как видно, создателям Duqu не чуждо чувство юмора: Dexter — серийный убийца, герой телевизионного сериала с одноименным названием, снимаемый компанией Showtime. Dexter убивает только (по возможности) преступников, то есть преступает закон во имя законности. Вероятно, таким образом, разработчики Duqu иронизируют, что они занимаются противоправной деятельностью с благими целями. Отправка писем по электронной почте велась целенаправленно. Для отправки, скорее всего, использовались скомпрометированные (взломанные) компьютеры в качестве посредника для затруднения отслеживания.
В документе Word, таким образом, находились следующие компоненты:

  • текстовое содержимое;
  • встроенный шрифт;
  • шелкод эксплоита;
  • драйвер;
  • инсталлятор (библиотека DLL).

В случае успешного срабатывания шелкод эксплоита выполнял следующие операции (в режиме ядра):

  • производилась проверка на повторное заражение, для этого в реестре по адресу ‘HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsZones4’ проверялось наличие ключа ‘CF1D’, если это было верно, шелкод завершал свое выполнение;
  • расшифровывались два файла — драйвер (sys) и инсталлятор (dll);
  • драйвер инжектировался в процесс services.exe и выполнял запуск инсталлятора;
  • в завершении шелкод затирал себя нулями в памяти.

Благодаря тому, что win32k.sys выполняется от имени привилегированного пользователя ‘System’, разработчиками Duqu была элегантно решена задача как несанкционированного запуска, так и повышения прав (запуск из-под аккаунта пользователя с ограниченными правами).
Инсталлятор после получения управления расшифровывал в памяти находящиеся в нем три блока данных, содержащих:

  • подписанный драйвер (sys);
  • основной модуль (dll);
  • данные конфигурации инсталлятора (pnf).

В данных конфигурации инсталлятора был задан диапазон дат (в виде двух временных меток — начальной и конечной). Инсталлятор проверял, попадает ли текущая дата в него, если нет — завершал свое выполнение. Также в данных конфигурации инсталлятора были указаны имена, под которыми сохранялись драйвер и основной модуль. При этом основной модуль сохранялся на диске в зашифрованном виде.

Duqu — вредоносная матрёшка

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

Основной модуль

Основной модуль (ресурс 302), по информации компании Kaspersky Lab, написан с использованием MSVC 2008 на чистом С, однако с использованием объектно-ориентированного подхода. Этот подход является нехарактерным при разработке вредоносного кода. Как правило, такой код пишется на C, что бы уменьшить размер и избавиться от неявных вызовов, присущих C++. Здесь же наблюдается некий симбиоз. Плюс использовалась событийно-ориентированная архитектура. Сотрудники Kaspersky Lab склоняются к теории, что основной модуль был написан с использованием предпроцессорной надстройки, позволяющей писать код на C в объектном стиле.
Основной модуль отвечает за процедуру получения команд от операторов. В Duqu предусмотрено несколько способов взаимодействия: с использованием протоколов HTTP и HTTPS, а так же с помощью именованных каналов (pipe). Для HTTP(S) указываются доменные имена командных центров, при этом предусматривалась возможность работы через прокси-сервер — для них задавались имя пользователя и пароль. Для канала задаются IP адрес и его имя. Указанные данные хранятся в блоке данных конфигурации основного модуля (в зашифрованном виде).
Для использования именованных каналов запускалась собственная реализация RPC сервера. Она поддерживала выполнение следующих семи функций:

  • вернуть установленную версию;
  • выполнить инжект dll в указанный процесс и вызвать указанную функцию;
  • загрузить dll;
  • запустить на выполнение процесс посредством вызова CreateProcess();
  • читать содержимое заданного файла;
  • записать данные в заданный файл;
  • удалить заданный файл.

Именованные каналы могли использоваться внутри локальной сети для распространения между зараженными Duqu компьютерами обновленных модулей и данных конфигурации. Кроме того, Duqu мог выступать в качестве прокси-сервера для других зараженных компьютеров (у которых не было доступа к Интернету из-за настроек сетевого экрана на шлюзе). В отдельных версиях Duqu функционал RPC отсутствовал.

Известные «полезные нагрузки»

Компанией Symantec было обнаружено по меньшей мере четыре вида «полезной нагрузки», загруженной по команде от управляющего центра Duqu.
При этом только одна из них была резидентной и скомпилированной в виде исполняемого файла (exe), который сохранялся на диск. Остальные три были выполнены в виде dll библиотеки. Они загружались динамически и выполнялись в памяти без сохранения на диск.

Резидентная «полезная нагрузка» представляла собой шпионский модуль (infostealer) с функциями кейлоггера. Именно с отправки его на VirusTotal и началась работа по исследованию Duqu. Основной шпионский функционал находился в ресурсе, первые 8 килобайт которого содержали часть фото галактики NGC 6745 (для маскировки). Здесь нужно напомнить, что в апреле 2012 года в некоторых СМИ публиковалась информация (http://www.mehrnews.com/en/newsdetail.aspx?NewsID=1297506), что Иран подвергся воздействию некого вредоносного программного обеспечения «Stars», при этом подробности инцидента не раскрывались. Возможно, именно такой образец «полезной нагрузки» Duqu был обнаружен тогда в Иране, отсюда и название — «Stars» (звезды).
Шпионский модуль собирал следующую информацию:

  • список запущенных процессов, информацию о текущем пользователе и домене;
  • перечень логических дисков, включая сетевые;
  • снимки экрана;
  • адреса сетевых интерфейсов, таблицы маршрутизации;
  • лог-файл нажатий клавиш клавиатуры;
  • имена открытых окон приложений;
  • перечень доступных ресурсов сети (sharing resources);
  • полный список файлов на всех дисках, включая съемные;
  • список компьютеров в «сетевом окружении».

Еще один шпионский модуль (infostealer) представлял собой вариацию уже описанного, но скомпилированного в виде dll библиотеки, из него были убраны функции кейлоггера, составления списка файлов и перечисления компьютеров, входящих в домен.
Следующий модуль (reconnaissance) собирал системную информацию:

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

Последний модуль (lifespan extender) реализовывал функцию увеличения значения (храниться в файле данных конфигурации основного модуля) количества дней, оставшихся до завершения работы. По умолчанию это значение устанавливалось равным 30 или 36 дням в зависимости от модификации Duqu, и уменьшалось на единицу каждый день.

Командные центры

20 октября 2011 года (спустя три дня после распространения информации об обнаружении) операторы Duqu провели процедуру уничтожения следов функционирования командных центров. Командные центры размещались на взломаных серверах по всему миру — во Вьетнаме, Индии, Германии, Сингапуре, Швейцарии, Великобритании, Голландии, Южной Корее. Интересно, что все выявленные сервера работали под управлением ОС CentOS версий 5.2, 5.4 или 5.5. ОС были как 32-битными, так и 64-битными. Несмотря на то, что все файлы, касающиеся работы командных центров, были удалены, специалистам Kaspersky Lab удалось восстановить часть информации LOG файлов из slack space. Наиболее интересный факт, что злоумышленники на серверах всегда заменяли пакет OpenSSH 4.3, установленный по умолчанию, на версию 5.8. Это может указывать на использование для взлома серверов неизвестной уязвимости в OpenSSH 4.3. Не все системы использовались в качестве командных центров. Некоторые, судя по ошибкам в логах sshd при попытках перенаправления трафика для портов 80 и 443, использовались в качестве прокси-сервера для соединения с конечными командными центрами.

Даты и модули

Документ Word, рассылаемый в апреле 2011 года, который исследовали в Kaspersky Lab, содержал в себе драйвер загрузки инсталлятора с датой компиляции 31 августа 2007 года. Аналогичный драйвер (размер — 20608 байт, MD5 — EEDCA45BD613E0D9A9E5C69122007F17) в документе, попавшем в лаборатории CrySys, имел дату компиляции 21 февраля 2008 года. Помимо этого, экспертами Kaspersky Lab был найден драйвер автозапуска rndismpc.sys (размер — 19968 байт, MD5 — 9AEC6E10C5EE9C05BED93221544C783E) с датой 20 января 2008 года. Не было найдено ни одного компонента с отметкой 2009 годы. Исходя из временных отметок компиляции отдельных частей Duqu его разработка могла относится к началу 2007 года. Наиболее раннее его проявление связано с обнаружением временных файлов вида ~DO (вероятно создаваемым одним из шпионских модулей), дата создания которых 28 ноября 2008 года (статья «Duqu & Stuxnet: A Timeline of Interesting Events»). Наиболее поздняя дата, относящаяся к Duqu — 23 февраля 2012 года, она содержалась в драйвере загрузки инсталлятора, обнаруженном сотрудниками Symantec в марте 2012 года.

Использованные источники информации:

цикл статей о Duqu от компании Kaspersky Lab;
аналитический отчет компании Symantec «W32.Duqu The precursor to the next Stuxnet», version 1.4, November 2011 (pdf).

Источник: habr.com