Угруповання Sednit використовує буткіт в кібератаках

Перші дві частини [1,2] нашого детального аналізу діяльності угруповання Sednit були присвячені механізмам первісної компрометації користувачів, а також опису бекдорів угруповання під назвою SEDRECO, XAGENT і XTUNNEL. Ці бекдори використовувалися для кібершпіонажу за скомпрометованими користувачами, а також для эксфильтрации даних із заражених систем.



Заключна частина нашого дослідження присвячена цікавого механізму скритного підтримки своєї присутності в системі, який також використовується угрупованням для маскування своєї присутності. Sednit використовує для цих цілей буткіт-технології, що дозволяють компрометувати Windows на самому ранньому етапі її завантаження.

Для компрометації системи жертви компонентом режиму ядра, групування використовує спеціальний компактний завантажувач або даунлоадер, який фахівці ESET називають Downdelph. Sednit використовувала цей даунлоадер досить рідко. Протягом двох останніх років цей завантажувач залучався для використання буткіту, хоча оператори також використовували його і для установки в систему бекдорів SEDRECO і XAGENT. Downdelph використовувався угрупованням з листопада 2013 року по вересень 2015.

Нижче представлена інформація про використання зловмисниками Downdelph в хронологічному порядку.



Нам вдалося відслідкувати лише сім випадків встановлення Downdelph на комп'ютери користувачів. У всіх цих випадках використовувався дроппер, який відповідав за встановлення в систему компонентів шкідливого ПЗ.



Видно, що у випадках 3, 4, 5, 6 дроппер використовував техніку обходу системи управління обліковим записом користувача (UAC). Автори використовували дві техніки для обходу UAC. Перша полягає у використанні вже відомого метода «RedirectEXE» shim database, а друга на використанні DLL hijack уразливості стандартної утиліти Windows під назвою sysprep.exe. Цей додаток має властивість автоматично підвищувати свої привілеї.

У сьомому кейсі, дроппер був встановлений в систему за допомогою спрямованого фішингу. Для інших згаданих на схемі випадків, такий метод встановлення шкідливого ПЗ не актуальне. В даному випадку, після свого запуску дроппер показує користувачу документ-приманку для маскування своєї шкідливої діяльності. Нижче на малюнку показаний цей документ, який представляє з себе запрошення на конференцію, організовану Slovak Foreign Policy Association в листопаді 2015 р. Конференція присвячена російсько-українським відносинам.



Основна логіка роботи (core) Downdelph реалізована в одному Delphi класі, який був названий авторами TMyDownloader. Цей клас використовується в усіх інших проаналізованих нами примірниках завантажувача. Коротко кажучи, перше що робить Downdelph, це завантажує основний конфігураційний файл, що дозволяє розширити список C&C серверів, а потім витягує корисну навантаження з кожного з цих серверів. Весь цей процес наочно представлений на малюнку нижче.



Як вже згадувалося, перше, що робить Downdelph, це завантажує з початкового C&C сервера файл конфігурації під назвою extended.ini. Адресу цього сервера жорстко зашитий в тілі виконуваного файлу. Для відправки мережевого запиту використовується HTTP POST, в якому рядок URI містить назву файлу для завантаження. Це назва файлу закодовано з використанням спеціального алгоритму.



Згадуваний алгоритм кодування запиту був розроблений для того, щоб зробити написання мережевих сигнатур для мережевих запитів Downdelph складним процесом. Для цього після кожного символу рядка вставляються спеціальні символи, які генеруються псевдо-спеціальним способом. Таким чином, при введенні в запит одного і того ж слова, кожен з них буде кодуватися по різному.

Відповідь сервера являє собою зашифрований конфігураційний файл формату INI. У файлі присутній одна секція з назвою [options], яка містить пари ключ-значення, як зазначено в таблиці нижче.



Якщо значення ключа Servers не пусте, Downdelph додає адреси зазначених C&C-серверів в свій список для подальшого завантаження звідти корисного навантаження (payload).

Для кожного з C&C серверів в списку, шкідлива програма виконує три кроки, які використовуються для завантаження корисного навантаження. На першому кроці Downdelph відправляє на сервер ID системи, який був згенерований на основі серійного номера жорсткого диска. Другий крок полягає у завантаженні конфігураційного файлу під назвою pinlt.ini, який описує файл корисного навантаження. Мережеві запити надсилаються в наведеному вище на скріншоті форматі. Можливі ключі і їх значення конфігураційного фала описані нижче в таблиці.



На останньому етапі шкідлива програма здійснює завантаження файлу корисного навантаження з певного C&C сервера і працює з ним таким чином, як вказано в файлі конфігурації. Після опитування всіх C&C серверів, Downdelph призупиняє свою роботу на деякий час (Sleep), при цьому час такого очікування вказана в параметрі Sleep конфігураційного файлу. Після цього Downdelph починає процес опитування C&C серверів з самого початку. Ми не спостерігали приклади конфігураційних файлів Downdelph in-the-wild. Тим не менш, нам відомо, що в деяких випадках він завантажував в систему бекдори Sedreco і Xagent.

Ми спостерігали випадки використання Downdelph з буткитом у двох кейсах — 1 і 5. В останні роки буткиты досить популярним способом завантаження нелегітимних драйверів режиму ядра в 64-битих випусках Windows. Хоча це справедливо і для нашого випадку, варто зазначити, що використання буткіта обумовлюється механізмом гарантованого забезпечення виживаності завантажувача Downdelph в системі. Використання буткіта дозволяє авторам глибоко заховати шкідливі компоненти, роблячи їх невидимими ще до завантаження ОС.

Буткіт Sednit здатний компрометувати 32-х і 64-х бітні версії Windows XP — 7. Наскільки нам відомо, цей буткіт ще жодного разу не був задокументований ким-небудь з дослідників, навіть незважаючи на те, що інші представники подібного роду шкідливих програм уже добре задокументовані.

Процес установки буткіта змінюється залежно від версії Windows, а також від її розрядності, тобто вона є 32-х або 64-х бітної. В обох випадках установник буткіта починає своє виконання перезапису MBR.



MBR перезаписується її шкідливим аналогом, а оригінальний сектор шифрується і зберігається у другому секторі. Код основний буткіта зберігається на диску, починаючи з третього сектора також у зашифрованому за допомогою операції XOR вигляді. Цей основний код буде відрізнятися для різних версій Windows, так як встановлюються їм перехоплення в процесі завантаження Windows розрізняються. Після цього управління передається на драйвер руткіта, який зберігається на диску у зашифрованому за допомогою алгоритму RC4 вигляді. Драйвер може бути як 32-х, так і 64-х бітних.

Для доступу до першого сектору диска, тобто MBR, дроппер вдається до вже відомого способу, який раніше использовали і автори руткіта TDL4.



Після відкриття дескриптора на пристрій диска, дроппер використовує API WriteFile для перезапису перших секторів диска. Слід зазначити, що ця операція вимагає наявності прав адміністратора у дроппера в системі.

Далі дроппер зберігає спеціальну бібліотеку DLL у створеному розділі системного реєстру під назвою HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Core Packages. Як ми пояснимо пізніше, ця бібліотека представляє з себе компонент користувацького режиму. Крім цього, сам завантажувач Downdelph зберігається по тому ж шляху реєстру, але в розділі з назвою Impersonation Packages.

Ці два файли зберігаються параметри системного реєстру після інших зашифрованих даних, які також використовуються кодом буткіта. Ці дані стиснуті з допомогою aPLib, а потім зашифровані з допомогою RC4 і починаються з заголовка наступної структури.

struct PackedChunkHeader
{
DWORD magic; // значення встановлено у '0x203a3320' або " :3 " в ASCII
DWORD packed_size;
DWORD unpacked_size;
DWORD key_size;
BYTE rc4_key[16];
};

Значення поля magic також записується дроппером по зсуву 0x19B шкідливого MBR і служить маркером того, що MBR вже перезаписаний шкідливим вмістом.

Після установки в систему, буткіт бере на себе контроль за нею з наступним завантаженням Windows. Процес завантаження системи Windows 7 з буткитом вказано нижче на малюнку.



Очевидно, що основною метою буткіта є компрометація Windows на самому ранньому етапі і потайне виконання корисної навантаження після її завантаження. На жаль, така схема виживання буткіта в системі вимагає використання значних модифікацій системних компонентів Windows пам'яті. Буткіт повинен містити в своєму арсеналі код як для реального режиму роботи мікропроцесора, так і для захищеного, а також постійно перевіряти факт отримання контролю над завантаженням системи на кожному з етапів. Для досягнення цієї мети шкідливий код встановлює різні перехоплення системних компонентах в пам'яті. Незважаючи на те, що процес виконання коду буткіта в системі описаний на картинці вище, а також у презентації наших фахівців під назвою Bootkits: Past, Present & Future, існує ряд особливостей, які ми хотіли б відзначити.

Шкідливий код в MBR буткіта розшифровує в буфер пам'яті код буткіту, а також драйвер, який був збережений на диску починаючи з третього сектора. У дослідженій нами системі цей буфер перебував з фізичного адресою 0x97C00. Таким чином, цей регіон пам'яті містить основну частину коду буткіту, а також перехоплення для bootmgr, winload.exe і ACPI.sys. Таким чином, перехоплення в цих модулях будуть перенаправляти потік виконання в вищезазначений буфер. Така властивість не характерно для буткіти, оскільки, як правило, вони копіюють свій код на кожному етапі завантаження в нову область пам'яті, щоб забезпечити своє виживання при перемиканні режиму мікропроцесора з реального на захищений.

Крім цього, Sednit буткіт є першим примірником, який використовує легітимний драйвер acpi.sys для завантаження. Шкідливий код модифікує код в точці входу в цей драйвер таким чином, щоб вона вказувала на невеликий фрагмент коду з його секції ресурсів.



Цей фрагмент шкідливого коду отримує в якості вхідного аргументу адреса завантаження ядра ntoskrnl.exe в пам'яті, в невикористовуваних полях PE-заголовка якого буткіт зберігає деякі свої важливі дані. Використовуючи ці дані, код буткіта відновлює перші п'ять байт точки входу acpi.sys а потім перенаправляє код буткіта по фізичній адресою 0x97C00. Даний регіон фізичної пам'яті був спроектований на віртуальну пам'ять захищеного режиму з допомогою API ядра MmMapIoSpace. Цей код розшифровує і запускає на виконання драйвер буткіта.

Драйвер буткіта впроваджує вміст користувача режиму в процес explorer.exe шляхом модифікації його точки входу перед її фактичним виконанням. Цей компонент користувальницького режиму запускає на виконання сам завантажувач Downdelph. Крім цього, він намагається встановити експортується глобальну boolean-змінну m_bLoadedByBootkit в одиницю.



Оскільки ця глобальна змінна відсутній у всіх виконуваних файлах Downdelph крім завантажувача, ми припускаємо, що буткіт спочатку був призначений для використання з різною корисною навантаженням, а в подальшому він був переорієнтований операторами Sedbit на потрібний компонент. Крім цього, настроюваний компонент буткіта експортує дві функції під назвами Entry ep_data. Обидва ці назви экспортов були присутні в ранніх зразках відомого шкідливого ПО BlackEnergy. Цей факт приводить нас до думки про те, що розробники обох шкідливих програм можуть бути пов'язані між собою.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.