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_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\’ проверялось наличие ключа ‘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 года.

Stuxnet и Duqu — есть ли связь?

Тема кибероружия сейчас у всех на слуху. Больше всех любят эту тему муссировать эксперты Kaspersky Lab. По их заявлениям все значимые образцы ВПО последних трех лет связаны между собой. Например, Stuxnet и Duqu. Но так ли это на самом деле?

Stuxnet (информация взята из аналитического отчета компании Symantec «W32.Stuxnet Dossier», version 1.4, February 2011, pdf):

  • основной модуль представляет собой dll;
  • в dll содержится несколько ресурсов, в том числе два подписанных файла — драйвер автозагрузки и руткит для сокрытия факта заражения USB Flash носителя;
  • присутствует блок данных конфигурации (первая его половина зашифрована при помощи операции XOR 0xFF, вторая — другим способом);
  • при инсталляции основной модуль и подписанные файлы сохранялись на диск под именами, заданными в блоке данных конфигурации;
  • для автозапуска создавалась служба, которая использовала подписанный драйвер;
  • в реестре по адресу ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MrxCls’ в ключе ‘Data’ в зашифрованном виде сохранялись имена целевых процессов (services.exe, S7tgtopx.exe, CCProjectMgr.exe), в которые производился инжект.

Duqu  (информация взята из аналитического отчета компании Symantec «W32.Duqu The precursor to the next Stuxnet», version 1.4, November 2011, pdf):

  • инсталлятор представляет собой dll;
  • в dll содержится три блока данных, содержащих подписанный драйвер, основной модуль и данные конфигурации инсталлятора;
  • блок данных конфигурации инсталлятора зашифрован при помощи 7-байтового ключа (0x2b 0x72 0x73 0x34 0x99 0x71 0x98);
  • при инсталляции основной модуль и подписанные драйвера сохранялись на диск под именами, заданными в блоке данных конфигурации;
  • для автозапуска создавалась служба, которая использовала подписанный драйвер;
  • в реестре по адресу ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\JmiNET3’ в ключе ‘FILTER’ в зашифрованном виде сохранялись имя целевого процесса (services.exe), в который производился инжект.

В целом просматривается общий алгоритм:

  • загрузка подписанного драйвера;
  • расшифровка им данных в реестре (содержащего сопоставление ‘целевой процесс — модуль’) ;
  • инжект модуля в целевой процесс.

Однако это не значит, что алоритм реализовывали в коде одни и те же люди.

Stuxnet и Duqu используют для вызова функции библиотек dll одинаковую методику, направленную на обход мониторинга средствами антивирусной защиты использования LoadLibrary. Для Ntdll.dll устанавливается перехватчик (hook) функций:

  • ZwMapViewOfSection;
  • ZwCreateSection;
  • ZwOpenFile;
  • ZwCloseFile;
  • ZwQueryAttributesFile;
  • ZwQuerySection.

Далее производится вызов LoadLibrary по специально выбранному имени библиотеки dll, несуществующей в системе. В обычных условиях (без перехвата) это вызвало бы ошибку. Именно перехватчик и производит загрузку настоящей библиотеки  в адресное пространство.

Так же по информации компании Eset, и Stuxnet, и Duqu используют одинаковую систему межпроцессорного взаимодействия (RPC), предназначенную для обновления компонентов ВПО в локальной сети.

Являются ли указанные факты явным доказательством связи Stuxnet и Duqu между собой? По-видимому, нет. Вышеописанное вполне может быть результатом заимствования метода внедрения в систему или кода процедуры RPC. Теперь что касается драйверов. В Stuxnet использовался драйвер mrxcls.sys, подписанный сертификатом Realtek. Чуть позже был обнаружен другой драйвер, jmidebs.sys, подписанный JMicron. Последний везде был анонсирован как очередной драйвер Stuxnet, однако основной модуль с таким драйвером так и не был найден. Также были другие расхождения, драйвер mrxcls.sys использовал прямой вызов функций API по именам, драйвер jmidebs.sys — искал функции по их хэшам. Для внедрения основного модуля mrxcls.sys создавал файл-заглушку (exe) размером 6332 байта, jmidebs.sys — размером 7061 байта. Необычно то, что для расшифровки строк в реестре mrxcls.sys и jmidebs.sys использовали одинаковый ключ — 0xAE240682, который, впрочем, в других версиях Duqu был уже другим. Один из драйверов Duqu имел идентичные jmidebs.sys характеристики (размер файла-заглушки и ключ расшифровки). Таким образом, можно утверждать, что jmidebs.sys, ранее связываемый со Stuxnet, на самом деле — часть Duqu. Есть еще косвенный признак — для ветки Duqu название параметра в реестре набрано заглавными буквами — ‘IDE’ и ‘FILTER’, а у ветки Stuxnet — нет (‘Data’, ‘Config’ и ‘Action’). Специалисты Dell SecureWorks считают, что сходство некоторых элементов обеих вредоносных программ является случайностью. Например, аналогичные методики применяются в других образцах ВПО. Использование имен рабочих файлов, начинающихся с символа ‘~’, также не свидетельство родства. Не стоит также сбрасывать со счетов такую вещь, как подражательство. Исходя из временных отметок компиляции отдельных частей Duqu, его разработка могла относиться к началу 2007 года. Наиболее раннее его проявление в «диком» виде относится к 28 ноября 2008 года (статья «Duqu & Stuxnet: A Timeline of Interesting Events»). Исходя из информации, описанной в разделе «Даты и модули», Stuxnet мог быть создан позже, чем Duqu, с использованием нескольких сходных технологий. Либо разработчики черпали информацию (или исходный код) из одного источника. Так что утверждение Микко Хиппонен из F-Secure: «Сходство кодов Duqu и Stuxnet очевидно. Драйвер ядра Duqu (jminet7.sys) настолько схож с драйвером Stuxnet (mrxcls.sys), что наши системы анализа решили, что это и есть Stuxnet» — не совсем соответствует действительности (jminet7.sys и cmi4432.sys — драйвера Duqu, обнаруженные в Венгрии сотрудниками лаборатории CrySyS).

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

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

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s