Process Injection Teknikleri 3 – Hook Injection ve IAT/Inline Hooking

Herkese selamlar,

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