Аналіз нового варіанту Miniduke

    Нещодавно наші аналітики виявили новий варіант шкідливої ​​програми MiniDuke (Kaspersky, Symantec), який поширювався з використанням експлойта для уразливості CVE-2014-1761 . Цієї уразливості були піддаються всі версії MS Word 2003-2013 до виходу відповідного виправлення MS14-017 . MiniDuke представляє з себе бекдор невеликого розміру (близько 20 КБ) і дозволяє атакуючим отримувати повний доступ до скомпрометованої системі. Він має такий малий розмір, оскільки розроблений з використанням асемблера. ESET виявляє MiniDuke як Win32/SandyEva .
 
 
 
У новій версії цієї шкідливої ​​програми зловмисники додали допоміжний компонент, виконаний на JavaScript. Він призначений для роботи з віддаленим C & C-сервером через Twitter.
 
 
Рис. RTF-документ з експлойтів CVE-2014-1761 на борту.
 
Вищезгаданий документ називався Proposal-Cover-Sheet-English.rtf . Ми отримали його 8-го квітня, через всього три дні після того як новий виконуваний файл MiniDuke було скомпільовано (тимчасова мітка 5 квітня зі PE-заголовка). Цей виконуваний файл доставляється експлойтів і його розмір становить 24 КБ.
 
Функціональні можливості шелл-коду, який виконується після спрацьовування уразливості, досить прості і зрозумілі. Після розшифровки свого коду та отримання адрес деяких функцій, що експортуються бібліотекою kernel32.dll, він розшифровує файл корисного навантаження і розміщує його в директорії% TEMP% і файлі «al». Цей скинутий на диск файл представляє з себе бібліотеку, яка потім буде завантажена в пам'ять з використанням стандартної функції kernel32! LoadLibraryA .
 
Шелл-код містить анти-налагоджувальні механізми і перевіряє перші байти викликаються API на предмет присутності там перехоплень або брейкпоинтов, використовуваних отладчиками. У разі присутності яких аномалій (розбіжність прологу функції з оригіналом), шелл-код пропускає перші п'ять початкових байт функції шляхом ручного виконання прологу (mov edi, edi; push ebp; mov ebp, esp) зі свого коду.
 
 
Рис. Шелл-код перевіряє пролог функції на предмет присутності там інструкцій передачі управління сторонньому коду. Видно, що в разі присутності модифікації, пролог виповнюється безпосередньо з шелл-коду.
 
На наступній діаграмі представлений потік виконання (execution flow) коду шкідливої ​​програми, у разі успішної експлуатації уразливості. Як ми вже зазначали вище, ця версія корисного навантаження MiniDuke складається з двох компонентів, які ми називаємо основним модулем і модулем TwitterJS.
 
 
Рис. Дії шкідливої ​​програми.
 
Як тільки шкідлива DLL MiniDuke отримує управління, вона перевіряє контекст свого процесу на приналежність до rundll32.exe, а також поточну директорію на збіг з% TEMP%. У разі виконання цих умов, шкідлива програма припускає, що вона була запущена в перший раз і починає процес своєї установки в систему. MiniDuke збирає інформацію про систему і шифрує свої дані конфігурації на основі цієї інформації. Такий метод використовувався в OSX / Flashback і йому було присвоєно назву watermarking (Bitdefender). Це призводить до того, що дані конфігурації, що зберігаються в DLL, неможливо витягнути на іншому комп'ютері. Зібрана шкідливим кодом інформація, на основі якої дані будуть зашифровані, не змінилася з попередньої версії і грунтується на наступних значеннях.
 
 
     
Серійний номер тому (через використання kernel32! GetVolumeInformationA ).
 Інформація про CPU (за допомогою інструкції cpuid).
 Ім'я комп'ютера (kernel32! GetComputerNameA ).
 
Коли MiniDuke згенерував зашифровану версію своєї DLL, він записує її у файл у директорії «% ALLUSERSPROFILE% \ Application Data». Файл, як і розширення, вибирається на основі значень, перерахованих тут . Для забезпечення свого виживання після перезавантаження MiniDuke створює прихований файл ярлика. LNK в директорії «Startup», який вказує на компонент шкідливої ​​програми. Назва файл ярлика генерується за допомогою одного з нижчезазначених значень.
 
 
 
Як неважко здогадатися, для виконання dll через. LNK буде використаний rundll32.exe. При цьому команда буде мати вигляд:
 
 «C: \ Windows \ system32 \ rundll32.exe% path_to_main_module%, export_function»
«C: \ Windows \ system32 \ rundll32.exe C: \ DOCUME ~ 1 \ ALLUSE ~ 1 \ APPLIC ~ 1 \ data.cat, IlqUenn»

 
Коли rundll32 виконує DLL MiniDuke, код з цієї бібліотеки вже буде виконуватися за іншим сценарієм (запущений не в перший раз). Для розшифровки своїх даних шкідливий код починає збирати інформацію про систему, яку ми згадували вище. Як і у випадку з попередньою версією MiniDuke, ця версія виконує перевірку наступних запущених процесів в системі.
 
 
 
При виявленні одного з цих процесів у системі, шкідливий код некоректно розшифровує свої дані, що призводить до неможливості роботи з віддаленим C & C-сервером. У разі коректної розшифровки своїх даних і відсутності запущених процесів зі списку вище, MiniDuke отримує сторінку сервісу Twitter аккаунта @ FloydLSchwartz для пошуку URL-адрес віддаленого C & C-сервера. Для пошуку на сторінці використовується тег «X)))» (попередня модифікація шкідливої ​​програми здійснювала пошук за тегом «uri!"). Якщо тег знайдений, шкідливий код розшифровує URL з даних, які слідують за тегом. Виявлений нами аккаунт @ FloydLSchwartz в Twitter містить на своїй сторінці тільки ретвіти без згадки вищевказаного тега.
 
 
Рис. Аккаунт в Twitter, який використовується для добування інформації про C & C-сервері шкідливої ​​програми.
 
На наступному кроці MiniDuke збирає на зараженій системі наступну інформацію:
 
 
     
ім'я комп'ютера та домену;
 код країни IP-адреси зараженого комп'ютера, отриманий через www.geoiptool.com;
 інформація про версію ОС;
 ім'я контролера домену, ім'я користувача і груп, які йому належать;
 список AV-продуктів, встановлених в системі;
 конфігурація Internet proxy;
 версія шкідливої ​​програми.
 
Ця інформація потім відправляється на C & C-сервер разом зі спеціальним запитом на отримання корисного навантаження. Кінцевий URL-адресу, що використовується для взаємодії з C & C-сервером виглядає наступним чином: " <url_start> / create.php? <rnd_param> = <system_info> ".
 
 
     
url_start — URL-адресу, отриманий через акаунт Twitter;
 rnd_param — довільним чином згенеровані символи в нижньому регістрі;
 system_info — інформація про систему, зашифрована, а потім закодована через base64.
 
Приклад такого URL наведено нижче.
 
 
 
Корисне навантаження завантажується з використанням API urlmon! URLDownloadToFileA і представляє з себе файл з ім'ям «fdbywu».
 
 
Рис. Функція отримання корисного навантаження.
 
Завантажена корисне навантаження представляє з себе фальшивий файл зображення у форматі GIF8. Цей файл містить зашифрований виконуваний код. MiniDuke обробляє цей завантажений файл аналогічно своїй попередній версії. Цілісність даних перевіряється з використанням RSA-2048, потім дані виконуваного файлу розшифровуються і зберігаються в окремому файлі. Далі файл запускається на виконання. Для перевірки цілісності виконуваного файлу всередині GIF використовується відкритий ключ RSA-2048, який аналогічний використовуваному в попередній версії шкідливої ​​програми.
 
У тому випадку, якщо MiniDuke не вдається отримати адресу C & C-сервера з аккаунта в Twitter, він генерує спеціальне ім'я користувача для пошуку, заснованого на поточній даті. Пошуковий запит змінюється кожні сім днів і нагадує механізм резервного копіювання в минулих версіях шкідливої ​​програми, які використовували пошук Google. Реалізацію цього DGA алгоритму на Python можна знайти тут .
 
Модуль TwitterJS вбудовується в копію системного файлу Windows cryptdll.dll. Шкідливий код вставляє в цю системну dll блок коду, перенаправляючи на цей код одну з експортованих функцій. Нижче на скріншоті показана таблиця експорту модифікованої версії цієї бібліотеки.
 
 
 
Цей файл (модифікована копія cryptdll.dll) потім зберігається як потік даних NTFS (ADS) для файлу NTUSER.DAT в директорії% USERPROFILE% (системний файл, який представляє з себе частину системного реєстру). Далі виклик цієї бібліотеки реєструється як команда Open для диска. Таким чином вона буде викликатися кожен раз, коли користувач буде намагатися відкрити логічний диск через провідник. Нижче наведено вміст файлу скрипта init.cmd, який використовується шкідливою програмою для установки модуля TwitterJS (cryptdll.dll) в систему.
 
 
 
Будучи завантаженим, TwitterJS ініціює створення екземпляра COM-об'єкта JScript і розшифровує сам файл JScript, який містить логіку роботи модуля.
 
 
 
Перед його запуском, MiniDuke застосовує до нього обфускація. Скріншоти нижче показують результат двох різних обфускація. Ми можемо побачити, що змінні мають різні значення. Можливо, це робиться для того, щоб перешкоджати їх дослідженню з боку різних систем виявлення, які сканують код в точці входу JScript.
 
 
Рис. Результат першого обфускаціі.
 
 
Рис. Результат другого обфускаціі.
 
Призначення цього скрипта полягає у використанні Twitter для знаходження C & C і витяг коду JScript для виконання. Він генерує аккаунт користувача Twitter для пошуку інформації. Пошук здійснюється з використанням вираження, яке змінюється кожні сім днів. Далі бот відвідує профілі користувачів Twitter, які були отримані в результаті виконання пошукового запиту і шукає в твітах посилання, які закінчуються на «. Xhtml». Як тільки такий URL був знайдений, бот бере рядок посилання і замінює «. Xhtml» на «. Php». Інформація про комп'ютер впроваджується в параметр Accept HTTP-заголовка.
 
 
 
Перше посилання на отриманій сторінці повинна містити дані, закодовані base64. Назва атрибуту посилання використовується в якості ключа для алгоритму XOR, використовуваного для розшифровки JScript. Нарешті, Miniduke розраховує хеш витягнутого скрипта і порівнює його з хешем, зашитим в його коді TwitterJS. Якщо вони збігаються, отриманий скрипт виповнюється з використанням виклику eval () .
 
 
 
Алгоритм хешування, використовуваний в цьому компоненті, дуже схожий на SHA-1, але не ідентичний йому, так як на виході виходять різні хеши. Ми вирішили з'ясувати, що саме автори змінили в оригінальному алгоритмі. Одна з можливих гіпотез полягала в тому, що алгоритм був модифікований таким чином, щоб допустити можливі колізії (баг). Проте зовні все виглядає схожим на оригінальну схему: використовуються ті ж математичні кроки і константи. Ми спостерігали відмінність для коротких повідомлень, наприклад, друга 32-бітове подвійне слово в хеше було відмінним від того, яке генерується звичайним SHA-1.
 
SHA1 («test»): a94a8fe5 ccb19ba6 1c4c0873d391e987982fbbd3
TwitterJS_SHA1 («test»): a94a8fe5 dce4f01c 1c4c0873d391e987982fbbd3
 
Ми з'ясували, чому другий подвійне слово в хеше не збігається з оригінальним алгоритмом. Проблема викликана неправильним використанням області видимості змінних (scope). Як показано нижче, в коді SHA-1 змінна f використовується двічі. Але у функції Z перед її використанням відсутня ключове слово var , яке оголошувало б її як локальну змінну. Видно, що потім функція Z викликається ще раз з глобальної змінної f , яка вже була инициализирована самої функцією.
 
 
 
Можливе пояснення цієї помилки полягає в тому, що імена змінних генерувалися якимось автоматичним інструментом перед безпосереднім впровадженням скрипта в корисне навантаження. Швидше за все, у початковому варіанті скрипта ці дві змінні мали різні назви.
 
Нам вдалося згенерувати передбачувані назви акаунтів на Twitter для 2013-2014 рр… і перевірити активні чи вони зараз. На момент нашого дослідження, активним був тільки один аккаунт @ AA2ADcAOAA. Цей акаунт був згенерований згаданим скриптом між 21-м і 27-м серпня 2013 і не мав твітів.
 
Намагаючись виявити потенційних жертв цього шкідливого коду, ми зареєстрували спеціальні акаунти в Twitter і згенерували Твіти посиланнями для пошукових роботів. Нам вдалося отримати декілька підключень з чотирьох комп'ютерів, розташованих у Бельгії, Франції та Великобританії. Ми зв'язалися з центрами швидкого реагування CERT цих країн для повідомлення про заражених комп'ютерах.
 
Ми виявляємо RTF-документ з експлойтів як Win32/Exploit.CVE-2014-1761.D і компонент MiniDuke як Win32/SandyEva.G .
    
Джерело: Хабрахабр

0 коментарів

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