COM Hijacking: Zafiyet Analizi

Gökhan
10 min readMay 18, 2024

--

Sessiz, ancak etkili bir saldırı: COM Hijacking ve potansiyel zafiyet analizi raporu.

Hedef sistemler için potansiyel saldırı yöntemleri her zaman kaba kuvvete dayalı olmayabilir. Zaman zaman bir saldırı için, uygun zamanı beklemek gerekebilir.

Saldırganlar, AV çözümlerini ve gömülü güvenlik sistemlerini atlatmak amacıyla zararsız görünen bir yöntemi, COM Hijacking metodunu kullanıyor.

Bu zafiyet raporu temelde bir örnek uygulamayı (ExplorerBlurMica), bu uygulamanın beraberinde getirdiği riskleri ve potansiyel COM Hijacking risklerini ele alacak ve zafiyetin boyutunu değerlendirecek.

COM Nedir?

COM (Component Object Model), farklı yazılımların benzer işlevselliğe sahip olması amacıyla sistem içinde gömülü olarak yer alan kaynakların kullanımıdır. COM nesneleri, Class Identifier’ları (CLSID) ve Global Unique Identifier’ları (GUID) ile registry üzerinde tanımlanır. Bir DLL veya object class’ı gösterebilir. Registry üzerinde HKCU ve HKLM altında yer alır.

HKCU (HKEY_CURRENT_USER), yalnızca ilgili kullanıcıya ait komponentleri gösterirken, HKLM (HKEY_LOCAL_MACHINE), sistemin tümü için geçerli komponentleri gösterir. Bu bağlamda HKLM üzerinde gerçekleşen değişiklikler tüm sistemi etkiler, ancak önyükleme gerektirir. HKCU üzerindeki değişiklikler için ise ilgili profilin yüklenmesi yeterlidir.

COM Hijacking Nedir?

COM Hijacking, COM kaynaklarının kullanımının istismar edilmesidir. Bu istismar, tek bir metoda bağlı değildir, birden fazla şekilde gerçekleştirilebilir.

Registry üzerinde gösterilen .dll veya .exe dosyalarının girdilerinin değiştirilmesi, en yaygın kullanım metodlarından biridir.

AV çözümleri ve güvenlik sistemleri tarafından fark edilmezler, bunun sebebi saldırı yönteminin güvenli/whitelisted servislerin altında yürütülmesidir.

Code Injection metodu, ilgili API Call takibi yapılarak servisler ve işlemler üzerinden tespit edilebilir, zira pek çok AV çözümü tarafından kolaylıkla yakalanır.

Ancak COM Hijacking ile yapılan bir saldırı, güvenli/göz ardı edilmiş bir COM nesnesinin altında gerçekleşir ve tıpkı bir sistem işlevi gibi davranarak AV gözetiminden kaçar.

Örneğin “explorer.exe”, veya “svchost.exe” gibi işlemler, çoğu AV çözümü ve güvenlik sistemi tarafından beyaz listeye alınmış olan, işlemleri kritik yetki düzeyinde olsa dahi sistemsel süreci aksatmamak adına zorunda kalmadıkça müdahale edilmeyen bileşenlerdir. Bu bileşenler yüzlerce farklı COM nesnesine sahiptir ve bunları belirli registry pointler üzerinden yüklemek zorundadır.

Bu noktada, belirli CLSID keyleri üzerindeki registry pointleri değiştirilerek saldırgan tarafından belirlenmiş bir zararlıya, bir servise veya bir kütüphaneye yönlendirilebilir. Üstelik bu yönlendirme “svchost.exe” veya “explorer.exe” gibi bir sistem servisi tarafından yapıldığı için otomatik olarak beyaz listededir.

Zafiyet Raporu: ExplorerBlurMica

Testimizde, Windows 10 ve 11 üzerindeki “explorer.exe” için müdahalelerde bulunarak registry pointleri değiştiren bir aracı seçtik.

Seçilen araç, COM Hijacking için birebir. Zira bu araç tek başına zararlı olmasa da bir saldırgan tarafından kullanılarak “explorer.exe” üzerinde COM Hijacking gerçekleştirebilir.

  • Etkilenen bileşenler: “explorer.exe”
  • Test senaryosu: ExplorerBlurMica (zararlı aktivite yok/temiz servis)
  • Etkilenen yapı: Win32 Native Win10 1089–2004–22H2, Win11 22H2–23H2
  • Potansiyel Risk: İlgili araç zararlı aktivite barındırmasa da, çalışma yöntemi sebebiyle COM Hijacking için bir açık oluşturabilir.

Yukarıdaki tablo, MITRE’ye göre mevcut araç üzerinde gerçekleştirilme ihtimali olan teknikleri göstermekte. Sadece bir sistem bileşenine basit bir müdahalede bulunmak dahi, VirtualAlloc gibi kritik fonksiyonların izole olmamış alanlar üzerinde çağırılmasına sebep olabilir. Aşağıda ise, eşleşen tüm MITRE ATT&CK listesini görüyorsunuz.

MITRE ATT&CK DB
TA0002
T1129
TA0003
T1176
T1547.001
T1574.002
TA0004
T1134
T1547.001
T1574.002
TA0005
T1112
T1134
T1218.010
T1218.011
T1497
T1497.001
T1574.002
TA0006
T1056.001
TA0007
T1012
T1057
T1082
T1083
T1497
T1497.001
T1518.001
TA0009
T1056.001
T1185

Sırada Crowdsource Sigma Ruleset incelemesi var. Farklı Sample Event Setler üzerinden çalışacağız, bunların tamamı ise ExplorerBlurMica’ya ait, ki doğrudan COM Hijacking’e zemin hazırlıyorlar.

Sample Setlerin ilki, HKCR üzerinden yüklenen çeşitli bileşenlerin, “\system32” dizini altındaki sistem servislerine aktarımını gösteriyor. Bu aktarımlarda CLSID değerlerine dikkat edin.

//EventSample1

EventID:13
ProcessId:8156
EventType:SetValue
Image:C:\Windows\system32\regsvr32.exe
ProcessGuid:{C784477D-0DD1-64D8-1F06-000000004400}
UtcTime:1691880913
Details:C:\Users\george\Desktop\ExplorerBlurMica.dll
RuleName:T1122
TargetObject:HKCR\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32\(Default)

EventID:13
ProcessId:7360
EventType:SetValue
Image:C:\Windows\system32\rundll32.exe
RuleName:T1122
UtcTime:1691880919
Details:C:\Users\george\Desktop\ExplorerBlurMica.dll
ProcessGuid:{C784477D-0DD7-64D8-2906-000000004400}
TargetObject:HKCR\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32\(Default)

EventID:13
ProcessId:8096
EventType:SetValue
Image:C:\Windows\system32\loaddll64.exe
RuleName:T1122
UtcTime:1691880922
Details:C:\Users\george\Desktop\ExplorerBlurMica.dll
ProcessGuid:{C784477D-0DD1-64D8-1C06-000000004400}
TargetObject:HKCR\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32\(Default)

EventSample1: Potential Persistence Via COM Hijacking From Suspicious Locations

3 farklı ProcID ile, T1122 eşleşmesini yakalıyoruz. Processlerin tamamı “\system32” altındaki yüksek yetkili, kısıtlamasız ve potansiyel whitelisted servisler.

4. blok hariç GUID partlara bölünmüş ve birebir aynı, ki bu da çoğunlukla bir .dll yürütmesi için sıraya alınmış işlem ağacını temsil ediyor. EventType kontrolü ile bu teoriyi doğruluyoruz, “SetValue” ile bir registry point değişikliği yapılacak.

EventType ile doğruladığımız .dll yürütmesi için adres bilgisi gerekli. Bu adres bilgisi registry üzerinden alınacak. “InprocServer/InprocServer32”, DLL servislerine giden bir yolu temsil etmekte, bu bağlamda adres bilgisi elimizde var.

TargetObject parametresi, değişikliğin yapılacağı reg entrysinin yerini gösteriyor. Bu senaryoda bu entry, “{B44BD3C8-E597–4E08-AE43–246CE24698E7}” altında yer alıyor. Değişikliğin ardından, CLSID tarafından belirtilen COM objesi, InprocServer32 keyi ile tespit edilip ilgili .dll dosyasının yüklenmesini sağlıyor.

COM Hijacking de burada devreye giriyor. İstismarın sağlanabilmesi için, saldırgan tarafından InprocServer32 keyinin, geçerli ancak sahte bir CLSID’yi point etmesi sağlanarak zararlının barındırıldığı .dll dosyasının yüklenmesi sağlanır. Zararlı .dll dosyasının yüklenmesi sonrasında saldırgan, -ki burada bahsi geçen uygulama “explorer.exe”- sistemde kod yürütmeden post-infection saldırılarına kadar pek çok farklı zararlı işlemi gerçekleştirebilir.

//EventSample2


EventID:13
ProcessId:7360
EventType:SetValue
Image:C:\Windows\system32\rundll32.exe
ProcessGuid:{C784477D-0DD7-64D8-2906-000000004400}
UtcTime:1691880919
Details:C:\Users\george\Desktop\ExplorerBlurMica.dll
RuleName:T1122
TargetObject:HKCR\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32\(Default)

EventID:13
ProcessId:8096
EventType:SetValue
Image:C:\Windows\system32\loaddll64.exe
RuleName:T1122
UtcTime:1691880922
Details:C:\Users\george\Desktop\ExplorerBlurMica.dll
ProcessGuid:{C784477D-0DD1-64D8-1C06-000000004400}
TargetObject:HKCR\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32\(Default)

EventSample2: Potential Persistence Via COM Search Order Hijacking

“Potential Persistence Via COM Search Order Hijacking” şeklinde sınıflandırılan Sigma kuralına göre ise, benzer bir saldırı gerçekleştirilebilir. Ancak bu defa saldırı, CLSID altında key değişimi ile değil, arama sırasında önceliği zararlı .dll dosyalarına vererek sağlar.

Sistemde yüklenecek olan orijinal .dll dosyası ile aynı isme sahip farklı bir .dll dosyası, sistem dışındaki bir konuma yerleştirilir (örneğin ilgili uygulamanın dosya konumuna) ve sistemin arama sırasında önceliğinin değişmesiyle uygulamaya yüklenir.

Burada fark, herhangi bir registry modifikasyonu yapılmamasıdır. Bu sayede registry üzerindeki girdileri kontrol eden AV çözümlerine karşı bir avantaj elde edilir.

Saldırı sırasında, COM objeleri yüklenirken sistem registry üzerinden kontrol etmek yerine önceliği uygulamanın dosya klasörüne verebilir, bu sayede güvenli dosya yerine zararlı koda sahip .dll dosyası yüklenmiş olur.

//EventSample3


EventID:13
ProcessId:8156
EventType:SetValue
Image:C:\Windows\system32\regsvr32.exe
ProcessGuid:{C784477D-0DD1-64D8-1F06-000000004400}
UtcTime:1691880913
Details:DWORD (0x00000001)
RuleName:T1176
TargetObject:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\NoInternetExplorer

EventID:13
ProcessId:7360
EventType:SetValue
Image:C:\Windows\system32\rundll32.exe
ProcessGuid:{C784477D-0DD7-64D8-2906-000000004400}
UtcTime:1691880919
Details:DWORD (0x00000001)
RuleName:T1176
TargetObject:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\NoInternetExplorer

EventID:13
ProcessId:8096
EventType:SetValue
Image:C:\Windows\system32\loaddll64.exe
RuleName:T1176
UtcTime:1691880922
Details:DWORD (0x00000001)
ProcessGuid:{C784477D-0DD1-64D8-1C06-000000004400}
TargetObject:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\NoInternetExplorer

EventSample3: CurrentVersion Autorun Keys Modification

“CurrentVersion Autorun Keys Modification” olarak sınıflandırılan bu Sigma kuralında ise, COM Hijacking harici bir saldırı kullanılabilir. CurrentVersion altında Explorer için birer extension görevi görebilecek keyler değiştiriliyor, bu bağlamda saldırgan, “Run”, “RunOnce”, “RunOnceEx” pointlerine müdahale ederek otomatik başlatma görevlerini değiştirebilir.

Bu elbette doğrudan zararlı kod yürütmekten uzak bir davranış olsa da, dolaylı olarak zararsız bir uygulamanın saldırgan bir amaçla kullanabilmesini sağlar.

Bahsi geçen modifikasyon uygulamasının (ExplorerBlurMica) eriştiği kritik registry lokasyonları:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regsvr32.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsSelfHost\FIDs\ByFID
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem\
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{B44BD3C8-E597-4E08-AE43-246CE24698E7}

Bloktan da anlaşılacağı üzere, explorer.exe shell extension üzerindeki değişiklikleri manipüle edildiği taktirde, hem AV yazılımlarından kaçabilecek hem de güvenli sistem uygulamalarının altında çalışabilecek zararlı yazılımlara davetiye çıkartıyor.

"regsvr32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}"; Key: "(DEFAULT)"; Value: "ExplorerBlurMica BHO"), "regsvr32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\INPROCSERVER32"; Key: "(DEFAULT)"; Value: "C:\ExplorerBlurMica.dll"), "regsvr32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\INPROCSERVER32"; Key: "THREADINGMODEL"; Value: "Apartment"), "regsvr32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\BROWSER HELPER OBJECTS\{B44BD3C8-E597-4E08-AE43-246CE24698E7}"; Key: "NOINTERNETEXPLORER"; Value: "01000000"), "rundll32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}"; Key: "(DEFAULT)"; Value: "ExplorerBlurMica BHO"), "rundll32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\INPROCSERVER32"; Key: "(DEFAULT)"; Value: "C:\ExplorerBlurMica.dll"), "rundll32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\CLASSES\CLSID\{B44BD3C8-E597-4E08-AE43-246CE24698E7}\INPROCSERVER32"; Key: "THREADINGMODEL"; Value: "Apartment"), "rundll32.exe" (Access type: "SETVAL"; Path: "HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\BROWSER HELPER OBJECTS\{B44BD3C8-E597-4E08-AE43-246CE24698E7}"; Key: "NOINTERNETEXPLORER"; Value: "01000000")

Verilen örnek komut seti, ExplorerBlurMica için geçerli. Adım adım inceleyecek olursak;

  • SETVAL: Registry erişimi ve point değişimi.
  • CLSID ve CurrentVersion altında “\{B44BD3C8-E597–4E08-AE43–246CE24698E7}” erişim ve key modifikasyonu.
  • InprocServer32 key değişimi “\{B44BD3C8-E597–4E08-AE43–246CE24698E7}” altında gerçekleşiyor.

Komut seti, BHO (Browser Helper Object) kaydını ExplorerBlurMica için özel oluşturulan bir dizin altında gerçekleştiriyor. Sadece explorer.exe arayüzünde bir modifikasyon yapmak için onlarca farklı key değiştirildi ve onlarca farklı key eklendi bile. COM Hijacking için bulunmaz bir fırsat.

Memory adresleri için patchler:

"rundll32.exe" wrote bytes "20d29856fc010000f05f9756fc01000070fbd1bbf87f000020179a56fc010000" to virtual address "0xF0C4E090" (part of module "RUNDLL32.EXE")
"rundll32.exe" wrote bytes "00889956fc010000" to virtual address "0xF0C4E058" (part of module "RUNDLL32.EXE")
"rundll32.exe" wrote bytes "20d49756fc010000" to virtual address "0xF0C4E0F8" (part of module "RUNDLL32.EXE")
"rundll32.exe" wrote bytes "605d9756fc010000e08e9756fc010000a0d19856fc01000050619956fc010000" to virtual address "0xF0C4E0B8" (part of module "RUNDLL32.EXE")
"rundll32.exe" wrote bytes "a09dfeb8f87f0000608efeb8f87f000090b7fcb8f87f0000a090feb8f87f0000508dfcb8f87f0000502efcb8f87f000020c4feb8f87f000070bbfeb8f87f000080bcfeb8f87f00004078ffb8f87f0000a0bafeb8f87f00000088feb8f87f0000" to virtual address "0xBA1D4030" (part of module "GDI32.DLL")
"rundll32.exe" wrote bytes "6012fdb8f87f0000" to virtual address "0xBA1D4020" (part of module "GDI32.DLL")
"rundll32.exe" wrote bytes "30c0ffb8f87f000020c0ffb8f87f000000b8ffb8f87f0000c09efeb8f87f0000d0a1feb8f87f000090bafeb8f87f000080ba04b9f87f000080a2ffb8f87f0000603dfcb8f87f0000402303b9f87f0000" to virtual address "0xBA1D52B0" (part of module "GDI32.DLL")
"rundll32.exe" wrote bytes "f0c0feb8f87f000030ea01b9f87f0000303ffcb8f87f0000102402b9f87f00009080fcb8f87f0000c04bfcb8f87f0000802402b9f87f00006072ffb8f87f000030f2fcb8f87f00008005feb8f87f0000" to virtual address "0xBA1D4270" (part of module "GDI32.DLL")
"rundll32.exe" wrote bytes "e03b88b6f87f0000302a88b6f87f0000e02188b6f87f0000e01e88b6f87f0000c03588b6f87f0000b01588b6f87f0000c02689b6f87f0000c01488b6f87f0000" to virtual address "0xB66E10F0" (part of module "UXTHEME.DLL")
"regsvr32.exe" wrote bytes "e98102b2ff" to virtual address "0xBBD20710" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e9c108b2ff" to virtual address "0xBBD20010" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e981ffb1ff" to virtual address "0xBBD208D0" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e94106b2ff" to virtual address "0xBBD20190" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e94100b2ff" to virtual address "0xBBD20690" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e98103b2ff" to virtual address "0xBBD20290" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e991f0b1ff" to virtual address "0xBBD21AC0" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e911d5b1ff" to virtual address "0xBBD23680" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e911edb1ff" to virtual address "0xBBD21D00" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e911f3b1ff" to virtual address "0xBBD21200" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e9d1e6b1ff" to virtual address "0xBBD22300" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e991dab1ff" to virtual address "0xBBD22E80" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e911dbb1ff" to virtual address "0xBBD22C80" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e991d2b1ff" to virtual address "0xBBD23480" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e951e4b1ff" to virtual address "0xBBD22240" (part of module "NTDLL.DLL")
"regsvr32.exe" wrote bytes "e951f8b1ff" to virtual address "0xBBD20D40" (part of module "NTDLL.DLL")

“rundll32.exe” ile GDI32.dll (Windows Core Graphics Lib) içinde modifikasyon gerçekleştiriliyor ve bir injection yapılıyor. Ardından bu, memory içerisinde yenileniyor ve explorer.exe, istenen saydam görünüme kavuşmuş oluyor.

“regsvr32.exe” ile NTDLL.dll (Core System Lib) içinde bir jump instruction “e9XXXXb1ff” gerçekleştiriliyor. Bu aşamada saldırgan, tekrardan bir hooking gerçekleştirerek system call içerisinde zararlı kod yürütebiliyor.

Autogen YARA Rule:

rule autogen_peexe_AntiVmControlDllhostExplorerGreywareLolbinSettingsynchost_9d6f5546
{
meta:
author = "FileScan.IO Engine v1.1.0-77bd2b4"
date = "2023-08-24"
sample = "9d6f554604111405e48f7fdf0eba972bdde5e0a275d2e7dd66240681ea595344"
score = 20
tags = "anti-vm,control,dllhost,explorer,greyware,lolbin,settingsynchost"
isWeakRule = false

strings:

//IOC patterns
$req0 = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
$req1 = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\"
$req2 = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\\\"
$req3 = "Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"
$req4 = "https://github.com/Maplespe/ExplorerBlurMica/"
$req5 = "{B44BD3C8-E597-4E08-AE43-246CE24698E7}"

//optional strings
$opt0 = "ADVAPI32.dll"
$opt1 = "AcquireSRWLockExclusive"
$opt2 = "AdjustTokenPrivileges"
$opt3 = "AreFileApisANSI"
$opt4 = "COMCTL32.dll"
$opt5 = "CloseThreadpoolTimer"
$opt6 = "CloseThreadpoolWait"
$opt7 = "CoCreateInstance"
$opt8 = "Control Panel\\Desktop\\WindowMetrics"
$opt9 = "CreateEventExW"
$opt10 = "CreateEventW"
$opt11 = "CreateFileW"
$opt12 = "CreateMutexW"
$opt13 = "CreateSemaphoreExW"
$opt14 = "CreateSemaphoreW"
$opt15 = "CreateSymbolicLinkW"
$opt16 = "CreateThread"
$opt17 = "CreateThreadpoolTimer"
$opt18 = "CreateThreadpoolWait"
$opt19 = "CreateThreadpoolWork"
$opt20 = "CreateToolhelp32Snapshot"
$opt21 = "CreateWindowExW"
$opt22 = "DeleteCriticalSection"
$opt23 = "DestroyWindow"
$opt24 = "DisableThreadLibraryCalls"
$opt25 = "DllCanUnloadNow"
$opt26 = "DllGetClassObject"
$opt27 = "DllRegisterServer"
$opt28 = "DllUnregisterServer"
$opt29 = "EncodePointer"
$opt30 = "EnterCriticalSection"
$opt31 = "EnumChildWindows"
$opt32 = "ExitProcess"
$opt33 = "FindFirstFileExW"
$opt34 = "FindFirstFileW"
$opt35 = "FindNextFileW"
$opt36 = "FlushFileBuffers"
$opt37 = "FlushInstructionCache"
$opt38 = "FlushProcessWriteBuffers"
$opt39 = "FreeEnvironmentStringsW"
$opt40 = "FreeLibrary"
$opt41 = "FreeLibraryAndExitThread"
$opt42 = "FreeLibraryWhenCallbackReturns"
$opt43 = "GetCommandLineA"
$opt44 = "GetCommandLineW"
$opt45 = "GetConsoleMode"
$opt46 = "GetConsoleOutputCP"
$opt47 = "GetCurrentPackageId"
$opt48 = "GetCurrentProcess"
$opt49 = "GetCurrentProcessId"
$opt50 = "GetCurrentProcessorNumber"
$opt51 = "GetCurrentThreadId"
$opt52 = "GetDesktopWindow"
$opt53 = "GetEnvironmentStringsW"
$opt54 = "GetFileInformationByHandleEx"
$opt55 = "GetFileSizeEx"
$opt56 = "GetFileType"
$opt57 = "GetKeyState"
$opt58 = "GetLastError"
$opt59 = "GetModuleFileNameW"
$opt60 = "GetModuleHandleExW"
$opt61 = "GetModuleHandleW"
$opt62 = "GetPrivateProfileStringW"
$opt63 = "GetProcAddress"
$opt64 = "GetProcessHeap"
$opt65 = "GetStartupInfoW"
$opt66 = "GetStdHandle"
$opt67 = "GetStringTypeW"
$opt68 = "GetSystemInfo"
$opt69 = "GetSystemTimeAsFileTime"
$opt70 = "GetSystemTimePreciseAsFileTime"
$opt71 = "GetThreadContext"
$opt72 = "GetThreadId"
$opt73 = "GetTickCount64"
$opt74 = "GetWindowLongW"
$opt75 = "HeapCreate"
$opt76 = "HeapDestroy"
$opt77 = "HeapReAlloc"
$opt78 = "InitOnceExecuteOnce"
$opt79 = "InitializeConditionVariable"
$opt80 = "InitializeCriticalSectionAndSpinCount"
$opt81 = "InitializeCriticalSectionEx"
$opt82 = "InitializeSListHead"
$opt83 = "InitializeSRWLock"
$opt84 = "InterlockedFlushSList"
$opt85 = "IsDebuggerPresent"
$opt86 = "IsProcessorFeaturePresent"
$opt87 = "KERNEL32.dll"
$opt88 = "LCMapStringW"
$opt89 = "LeaveCriticalSection"
$opt90 = "LoadLibraryExW"
$opt91 = "LoadLibraryW"
$opt92 = "LookupPrivilegeValueW"
$opt93 = "MonitorFromWindow"
$opt94 = "OpenProcessToken"
$opt95 = "OpenThread"
$opt96 = "QueryPerformanceCounter"
$opt97 = "RaiseException"
$opt98 = "RegCloseKey"
$opt99 = "RegCreateKeyExW"
$opt100 = "RegDeleteKeyW"
$opt101 = "RegGetValueW"
$opt102 = "RegOpenKeyExW"
$opt103 = "RegQueryValueExW"
$opt104 = "RegSetValueExW"
$opt105 = "ReleaseMutex"
$opt106 = "ReleaseSRWLockExclusive"
$opt107 = "ResetEvent"
$opt108 = "ResumeThread"
$opt109 = "RtlCaptureContext"
$opt110 = "RtlLookupFunctionEntry"
$opt111 = "RtlPcToFileHeader"
$opt112 = "RtlVirtualUnwind"
$opt113 = "SHCore.dll"
$opt114 = "SendMessageW"
$opt115 = "SetFileInformationByHandle"
$opt116 = "SetFilePointerEx"
$opt117 = "SetLastError"
$opt118 = "SetStdHandle"
$opt119 = "SetThreadContext"
$opt120 = "SetThreadpoolTimer"
$opt121 = "SetThreadpoolWait"
$opt122 = "SetUnhandledExceptionFilter"
$opt123 = "SetWindowCompositionAttribute"
$opt124 = "SetWindowLongW"
$opt125 = "SettingSyncHost.exe"
$opt126 = "SleepConditionVariableCS"
$opt127 = "SleepConditionVariableSRW"
$opt128 = "SubmitThreadpoolWork"
$opt129 = "SuspendThread"
$opt130 = "SystemParametersInfoW"
$opt131 = "TerminateProcess"
$opt132 = "TerminateThread"
$opt133 = "Thread32First"
$opt134 = "Thread32Next"
$opt135 = "TlsGetValue"
$opt136 = "TlsSetValue"
$opt137 = "TryAcquireSRWLockExclusive"
$opt138 = "TryEnterCriticalSection"
$opt139 = "USER32.dll"
$opt140 = "UnhandledExceptionFilter"
$opt141 = "UxTheme.dll"
$opt142 = "VirtualAlloc"
$opt143 = "VirtualFree"
$opt144 = "VirtualProtect"
$opt145 = "VirtualQuery"
$opt146 = "WaitForSingleObject"
$opt147 = "WaitForSingleObjectEx"
$opt148 = "WaitForThreadpoolTimerCallbacks"
$opt149 = "WakeAllConditionVariable"
$opt150 = "WakeConditionVariable"
$opt151 = "WriteConsoleW"
$opt152 = "dllhost.exe"
$opt153 = "dwmapi.dll"
$opt154 = "explorer.exe"
$opt155 = "gdiplus.dll"
$opt156 = "inappropriate io control operation"
$opt157 = "kernel32.dll"
$opt158 = "mscoree.dll"
$opt159 = "read only file system"
$opt160 = "user32.dll"
$opt161 = "uxtheme.dll"
$opt162 = "vmtoolsd.exe"

condition:
//require 50% of optional strings
uint16(0) == 0x5A4D and filesize > 197223 and filesize < 21913621913 and all of ($req*) and 81 of ($opt*)
}

Sonuç

Neticede yalnızca dosya gezgininin görünümünü değiştirmek amacıyla kullanılan ve herhangi bir zararlı aktiviktesi bulunmayan/zararlı kod içermeyen bir araç, sistemdeki kritik bileşenlere ve dosyalara erişimi sayesinde saldırganlara bir açık kapı bırakıyor.

Saldırganlar, zararlı .dll dosyalarını ve Autostart konfigürasyonlarını “explorer.exe”, “svchost.exe” gibi kritik sistem bileşenleri altında yürüttükleri için, güvenlik çözümlerinden de kolayca sıyrılmış oluyor.

Bu senaryo, yalnızca ExplorerBlurMica için değil, sistem dosyalarına müdahale eden ve bunları değiştiren, registry pointlere erişimi olan her araç için geçerli.

Her ne kadar AV çözümleri günümüzde gittikçe gelişiyor olsa da, kritik sistem bileşenlerine müdahale yetenekleri hala kısıtlı. Bunun farkında olan saldırganlar da hedeflenmiş sistemlere sızmak için bu metodları rahatlıkla kullanabilir.

-Gökhan

--

--

Gökhan

Information Security Specialist / Computer Engineer