Process Injection Teknikleri

İlgili yazım Process injection teknikleri hakkında olacak. Ön bilgi olarak teknikler hakkında bilgiler yer alacak ve zararlı yazılımlarda nasıl kullanıldıklarına bakacağız.

Özellikle son yıllarda malware yazarları tarafından bu yöntemler yaygın olarak kullanılmaya başlandı. Kısaca tanımlamak gerekirse başka bir işlem adresi içerisinde özel bir kodun çalıştırılmasını gerektiren yaygın savunma kaçırma tekniği diyebiliriz. Process injection teknikleri özellikle sistem içerisinde gizliliği arttırır ve bazı tekniklerin kullanılmasıyla birlikte de kalıcılığı sağlar.

1- DLL Injection

DLL injection yöntemi malware yazanlar tarafından günümüzde en çok tercih edilen yöntemlerin başında geliyor. Zararlı yazılımlar bu yöntem ile zararsız bir işlemin (process) hafızasına yerleşir ve uzaktaki bir işlemin çağrılmasında bir köprü vazifesi görür.

Zararlı yazılım injection yapabilmesi için öncelikle olarak bir işlemi (process) hedeflemesi gerekir (svchost.exe gibi). Bu işlemi gerçekleştirirken de Windows API’lerinden CreateToolhelp32Snapshot, Process32First ve Process32Next üçlüsünü çağırarak, süreç aramalarını gerçekleştirir.

CreateToolhelp32Snapshot API’sine baktığımızda belirtilen bir işlemin yada tüm işlemlerin, yığın veya modül numaralandırılmasını yapar ve Snapshot olarak geri döner. Process32First ise Snapshot içerisinden ilk işlem hakkında bilgi alır. Daha sonra ise Process32Next ise bunları yinelemek için bir döngü (loop) içerisinde kullanır. Zararlı yazılım tarafından hedeflenmiş işlem (process) bulunduktan sonra da OpenProcess’i çağrılarak hedeflenmiş işlemi alır.

Dll injection yapılırken veya zararlı yazılımlar bu işlemi gerçekleştirirken herhangi bir injection yapmadan önce bir alana sahip olmak için VirtualAllocEx() işlemini kullanırlar. Hedeflenmiş alana sahip olunduktan sonra ise Dll yolunu veya dll dosyasını kopyalamak için WriteProcessMemory’i çağırıp, bu işlemi gerçekleştirir. Bu kısıma kadar ilerleyen zararlı yazılım, kodu başka bir işlemde çalıştırabilmek içinse CreateRemoteThread, NtCreateThreadEx veya RtlCreateUserThread gibi API’leri çağırır. Bu API’lerden birine ise LoadLibrary() adresi iletilmektedir.

ROKRAT zararlı grubuna ait örnektir.
SHA256-9b383ebc1c592d5556fec9d513223d4f99a5061591671db560faf742dd68493f

Yukarıdaki örnekte gördüğümüz zararlı yazılımı IDA Pro ile analiz ettiğimiz zaman, Dll dosyasını yazacak bir alana(path) sahip olabilmek için VirtualAllocEx‘i çağırıyor. Daha sonra da zararlı, ayrılmış bellek içerisine yazabilmek için WriteProcessMemory‘i çağırıyor. Son olarakta kodun başka bir işlem içerisinde çalışabilmesi için CreateRemoteThread, NtCreateThreadEx veya RtlCreateUserThread gibi API’lerden birini çağırıyor.

Bu kısımdan sonraki genel fikir ise bu API’lerden birine Loadlibrary adresi iletiliyor ve sonrasında uzaktan bir işlemin zararlı adına DLL dosyasını çalıştırması gerekiyor.

Yukarıdaki API’lereden CreateRemoteThread, açıkcası en yaygın olarak bilinen ve kullanılan bir yöntemdir. Fakat sofistike veya karmaşık olarak yazılmış zararlı yazılımları göz önüne aldığımızda muhtemelen bu yaklaşımı kullanmayacaklardır. Çünkü pek çok güvenlik ürünü tarafından izlenebilmesi ve işaretlenmesi kolaydır.

2- PE Injection

PE Injection tekniği, hedef makine üzerinde herhangi bir dosya bırakmadığı için Reflective Dll Injection ve memory module tekniği ile benzerlik gösterir. Fakat bu iki teknik PE Injection’a oranla biraz daha gizliden yürütüyor diyebiliriz.

Çünkü bu iki yaklaşım belleğe yükleme ve çalıştırma işlemini kendisi yürütür ve fazladan Windows API’lerine (CreateRemoteThread veya LoadLibrary gibi ) güvenmezler. Reflective DLL injection, Windows yükleyecisine güvenmek yerine, çalıştırıldığında kendisini belleğe bağlayan bağlı bir Dll dosyası olarak çalıştırır. Memory Module‘de belli bir ölçüde Reflective DLL’e benzer.

PE Injection tekniği başta dediğimiz gibi Reflective Dll Injection tekniğine benzerliği ile biliniyor. Bu teknik, LoadLibrary() fonksiyonunun işlevine dayanmaz. Fakat zararlı kodu açık olan işlemlerin birine kopyalar ve execute eder. Bunu da shellcode kullanarak veya CreateRemoteThread fonksiyonunu çağırarak yapabilir. Malware, process içerisinde gerekli alana sahip olduktan sonra, DLL path’ı yazmak yerine WriteProcessMemory‘i çağırarak zararlı kodun çalıştırılmasını sağlar.

PE dosya formatıyla ilgili bilgiler önceki yazılarımda bulunmaktadır.

SHA256 - ce8d7590182db2e51372a4a04d6a0927a65b2640739f9ec01cfd6c143b1110da

Yukarıdaki örnekte gördüğümüz zararlı yazılımı IDA Pro ile analiz ettiğimiz zaman, CreateRemoteThread çağrılmadan önce bazı döngülerin çağrıldığını görüyoruz. Bu teknik özellikle zararlı yazılımları şifreleme ve gizleme işlevlerinde kullanılıyor. Yukarıdaki görseli incelediğimizde WriteProcessMemory ve CreateRemoteThread fonksiyonları çağırmadan önce iç içe geçmiş iki döngüye (0FFFh ve 0FFFFFFFh) sahiptir.

Daha sonrasında ise malware tüm adresleri yeniden hesaplayıp, sonrasında tek yapması gereken başlangıç adresini CreateRemoteThread’a geçirip çalıştırmaktır.

Şimdilik bu serimizi bu şekilde sonlandırıyoruz. Bu serinin devamında;

1- Process Hollowing
2- Hook Injection
3- APC Injection ve Atombombing
4- IAT Hooking ve Inline Hooking

Yukarıdaki konularla ilgili yazı serime devam edeceğim.