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 бібліотеки. Вони завантажувалися динамічно і виконували пам'яті без збереження на диск.

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

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

Ще один шпигунський модуль (інфокрада) являв собою варіацію вже описаного, але скомпільованого у вигляді dll бібліотеки, з нього були прибрані функції кейлоггера, складання списку файлів та перерахування комп'ютерів, що входять до домену.
Наступний модуль (розвідка) збирав системну інформацію:

  • чи є комп'ютер частина домену;
  • шляхи до системних каталогів 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

Додати коментар або відгук