Process Injection Teknikleri 3 – Hook Injection ve IAT/Inline Hooking
IAT hooking ve inline hooking genel olarak user space rootkits methodları olarak bilinirler. Zararlı yazımlar IAT hooking tekniğini import address tablolarında değişiklikler yapmak için kullanırlar. Yasal veya normal bir uygulama bir DLL içerisinde bulunan bir API’yi çağırdığında, değiştirilen
Yazı dizimize kaldığımız yerden devam ediyoruz. Şuana kadar zararlı yazılımlar üzerinde DLL ve PE Injection, Process Hollowing ve Atombombing tekniklerinin nasıl kullanıldığı ile ilgili konulara değinmiştik. Bugünkü yazımızda yine zararlı yazılımlar içerisinde Hook Injection ve IAT/Inline Hooking konularına bakacağız.
1- Hook Injection
Hooking, intercept function çağrılarını engellemeye yarayan bir tekniktir. Zararlı yazılım belirli bir iş parçacığında (thread) tetiklenen bir olay üzerine zararlı DLL’leri yüklemek için Hooking işlevselliğinden yararlanabilir. Bu işlevide SetWindowsHookEx
fonksiyonlarını çağırarak gerçekleştirir. Windows işletim sistemi, programların SetWindowsHookEx
fonksiyonunu kullanmalarına izin vererek onların klavye tuşları veya fare tıklamaları gibi çeşitli sistemsel olaylarını izlemelerini sağlar ve bu sayede Hooking tekniğine izin verir.
MSDN tarafından sağlanan bilgilere baktığımızda;
HHOOK SetWindowsHookExA(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadId
);
Yukarıdaki SetWindowsHookExA
‘ya ait parametrelere baktığımızda;
idHook : Açıkcası burada birkaç farklı Hooking türü mevcuttur. Örnek olarak WH_KEYBOARD
ve ** WH_MOUSE** verebiliriz. Bu ikisi sırasıyla klavye tuşlarını ve fare tıklamalarını izlemek içindir. Bu iki fonksiyonun düşük seviyeleri de mevcuttur fakat burada anlaşılması gereken en önemli şey gerçekleşecek olan her olayın hook zincirinden geçecek olacağı gerçeğidir.
lpfn : Hook işlevi için bir işaretçi konumundadır.
hmod : Hook işlevini içeren DLL için bir tanıtıcıdır.
dwThreadId : Hook işlevini çağıran iş parçacığının tanımlayacısıdır. Parametre 0 olduğu zaman hook, tüm iş parçacıkları tarafından çağrılır. Bu yüzden belirli bir iş parçacığı kimliği ile sınırlandırılması gerekmiyor.
Zararlı yazılımlar ise yazının başında belirttiğimiz gibi SetWindowsHookEx
işlevinden yararlanırlar. Fakat bu fonksiyon çağrılmadan önce yaygın olarak LoadLibrary
ve GetProcAddress
çağrılarını görebiliriz. Eğer zararlı yazılımlar dwThreadId
‘de parametreyi 0 olarak ayarladıklarında tüm iş parçacıkları çağrılacağından bunun yerine daha az gürültü çıkarmak için tek bir işe parçacığını hedeflerler. Bu yüzden tek bir işe parçacığını bulup ve hedeflediklerinde SetWindowsHookEx**‘den önce CreateToolhelp32Snapshot
ve Thread32Next
çağrılarını da görmek mümkündür.
DLL injection başarılı olduktan sonra zararlı yazılım, ThreadId öğesinin SetWindowsHookEx
işlevine geçirildiği işlem adına kötü amaçlı kodu yürütür.
SHA 256 - 5d6ddb8458ee5ab99f3e7d9a21490ff4e5bc9808e18b9e20b6dc2c5b27927ba1
Resimde yer alan zararlı yazılımı unpack işlevinden önce IDA Pro ile incelediğimiz zaman, yukarıda bahsedilen süreçlerin olduğunu görebiliyoruz.
2- IAT/Inline Hooking
IAT hooking ve inline hooking genel olarak user space rootkits methodları olarak bilinirler. Zararlı yazımlar IAT hooking tekniğini import address tablolarında değişiklikler yapmak için kullanırlar. Yasal veya normal bir uygulama bir DLL içerisinde bulunan bir API’yi çağırdığında, değiştirilen bir işlem orjinal işlemin yerine getirilir.
Buna karşın zararlı yazılım inline hooking tekniği ile API işlevini kendisi değiştirir.
SHA256 - f827c92fbe832db3f09f47fe0dcaafd89b40c7064ab90833a1f418f2d1e75e8e
Referanslar
1- https://attack.mitre.org/techniques/T1179/
2- https://ired.team/offensive-security/code-injection-process-injection/setwindowhookex-code-injection
3- https://docs.microsoft.com/en-us/windows/win32/winmsg/hooks
4- https://warroom.rsmus.com/dll-injection-part-1-setwindowshookex/
5- https://www.mwrinfosecurity.com/our-thinking/dynamic-hooking-techniques-user-mode/
6- https://www.malwaretech.com/2015/01/inline-hooking-for-programmers-part-1.html