nightstalker
Bronz Üye
- Katılım
- 11 Nisan 2021
- Mesajlar
- 272
- Tepkime puanı
- 184
- İlgi Alanlarınız
- elektronik
- Cinsiyet
-
- Erkek
PROCESS INJECTION NEDİR ?
Process injection, zararlı kodların ya da yazılımların çeşitli tekniklerle processlere enjekte edilmesi ve enjekte edilen yazılımın veya kodun process içerisinde çalıştırılmaya zorlanmasıdır. Bu enjekte işleminin gerçekleşmesi için ilk olarak process tanınmalıdır. Çeşitli Windows API'ler kullanılarak yapılan process tanıma işlemine "Enumerate İşlemi" adını veriyoruz.
PROCESS INJECTION TEKNİKLERİ
REMOTE DLL INJECTION
Uygulamaların ortak bir şekilde bellek kullanımı ve performans tüketimini düşürmek amacıyla DLL'ler kullanılır. Bu başlığımızda da Remote DLL Injection tekniğini ele alacağız.
Zararlı yazılım, çalışan herhangi bir process'in sanal belleği içerisine zararlı olan DLL dosyasına ait yolu belirterek yüklenmesini sağlar. Burada DLL processe enjekte olabilmek için Process Walking işlemlerini gerçekleştirir. Process Walking işlemi Process32First() ve Process32Next() API'lerinin kullanılmasıyla yapılır. Process32First() API'si, CreateToolhelp32Snapshot() API’si tarafından alınan ilk baştaki sistem snapshotlarında bulunan bilgileri okur. Process32Next() API'si ise diğer snapshotlardaki bilgileri okuyarak processler hakkında bilgi toplanır. Ardından enjekte olunacak process belirlenir. Daha sonra işletim sisteminin, bir işleme ait bilgileri depoladığı yerden OpenProcess API'si kullanılarak handle alınır. Ardından bellekte VirtualAllocEx API’si kullanılarak bir yer ayrılır ve bu yere WriteProcessMemory API’si kullanılarak zararlı DLL'nin yolu yazılır. Bu işlemin ardından zararlı yazılım CreateRemoteThread API'sine zararlı DLL'nin yolunun belirtildiği LoadLibrary API'sini yerleştirir. Ardından LoadLibrary API'sine zararlı DLL'yi enjekte eder ve bu DLL'nin çalıştırılmasını sağlar.
APC (Asynchronous Procedure Call) DLL INJECTION
Bu enjekte tekniğinde DLL enjekte edilirken threadlerin uyarılabilir hale geçtiğinde eşzamansız olarak çalıştığı bir işlev olan APC kullanılır. Birden fazla thread kullanarak çalışan programlarda threadler arasında bekleme oluşmasına neden olacak herhangi bir durumda thread, bellekte daha az yer kaplayan nesneler oluşturur. Bu nesneler kullanıcı girişlerine ait hizmete aktarılır. Kullanıcının yanıtına göre nesne, execute birimine iletilir. Ve burada sırayla işleme konur. Buradaki threadler herhangi bir göreve dahil olmadığında bekleyerek belleğin gereksiz kullanılmamasını sağlar. Burada threadlerin uyarılabilir hale geçmesi için SleepEx(); , SignalObjectAndWait(); gibi çeşitli API'ler kullanılır. Bu injekte yönteminde zararlı yazılım, hedef process'in uyarılabilir durumda olan thread'ine enumerate işlemi uygular. Daha sonra QueueUserAPC() API’si kullanılarak zararlı kod APC sırasına gönderilir. Sırayla işlem yapan threadler, sırası geldiğinde zararlı kodu çalıştırır ve injekte işlemi gerçekleşmiş olur.
ATOM BOMBING INJECTION
Adını Windowsun processler arasında stringler ve tanımlarını saklayan atom tablolarından almaktadır. Bu tablolarda her bir string, atom olarak ifade edilir. Bu teknikte zararlı yazılım, GlobalAddAtom API'si ile string yerine zararlı kodu bir atom olarak yükler. Ardından GlobalGetAtomName API'si ile atom tablosuna eklenen zararlı atomu hedef processin belleğine enjekte eder. Bunun ardından artık process çalıştığında belleğe enjekte edilen zararlı kodda çalışmış olur.
PROCESS HOLLOWING
Bu injection tekniğinde çalışan bir process'ın belleğine zararlı exe yerleştirilir. Bu teknik ile yapılan enjekte işlemleri sistem güvenliği araçları tarafından farkedilmez. Bunun sebebi, process zararlı olmayan legal bir processin yolunu belirtir. Fakat yolu belirtilen process'in belleğinde zararlı exe olması sebebiyle hem zararlı çalışacak hemde process yolu güvenli olduğu için güvenlik araçları tarafından fark edilmeyecektir. Bu teknikte zararlı yazılım processi askıya alınmış bir şekilde başlatır. Ardından bu processin yürütülebilir bölümü belleğe aktarılır. Burada processin yolu, Process Environment Block olarak adlandırıldığımız PEB içerisinde bulunur. Aynı zamanda bu yapının ImageBaseAddress kısmında processin belleğe aktarılan bölümüne ait yol belirtilir. ImageBaseAddress kısmında processin base değeri de bulunur ve bu base değerine erişim sağlandıktan sonra processin yürütülebilir bölümü, process'ten NtUnmapViewOfSection API'si ile ayrılır ve zararlı için ortam hazır hale getirilir. Ardından VirtualAllocEx() API'si ile zararlı için bellekte yer ayrılır. Ardından WriteProcessMemory API'si ile zararlı belleğe yazdırılır. Ardından SetThreadContext API'si ile zararlı kod bloğu için giriş noktası oluşturulur. Bu adımın ardından geriye yalnızca askıya alınmış processin tekrar çalışmasını sağlamak kalıyor. Bu işlemi de ResumeThread API'si ile gerçekleştirerek zararlı kod içeren process çalışmaya başlatılır.
PROCESS DOPPELGÄNGING
Bu teknik TFS dosyasının yazma işlemleriyle ilgilenen kod enjekte tekniklerinden biridir. Transact, Load, Rollback, Animate olmak üzere 4 Aşamadan oluşur.
Transact Aşaması
Bu aşamada CreateTransaction API'si ile process üzerinde yeni bir işlem oluşturulur. Ardından bu işlemlerin kullanılacağı handle elde edilir ve WriteFile API'si ile zararlı kod yazılır.
Load Aşaması
Bu aşamada NtCreateSection API'si ile zararlının yerleşeceği section oluşturulur. Ve dosyamız oluşturulan sectiondan hafızaya yüklenir
RollBack Aşaması
RollBack ile oluşturulan yeni dosya işlemi kayıtlardan geri alınır. Bu sayede sistem, Transact aşamasında oluşturulan dosyanın hiç oluşturulmamış gibi davranabilmesini sağlar.
Animate Aşaması
Bu aşamada, NtCreateProcessEx API'si kullanılarak yeni bir process oluşturulur. Son olarak NtResumeThread API'si ile process başlatılır.
Process injection, zararlı kodların ya da yazılımların çeşitli tekniklerle processlere enjekte edilmesi ve enjekte edilen yazılımın veya kodun process içerisinde çalıştırılmaya zorlanmasıdır. Bu enjekte işleminin gerçekleşmesi için ilk olarak process tanınmalıdır. Çeşitli Windows API'ler kullanılarak yapılan process tanıma işlemine "Enumerate İşlemi" adını veriyoruz.
PROCESS INJECTION TEKNİKLERİ
REMOTE DLL INJECTION
Uygulamaların ortak bir şekilde bellek kullanımı ve performans tüketimini düşürmek amacıyla DLL'ler kullanılır. Bu başlığımızda da Remote DLL Injection tekniğini ele alacağız.
Zararlı yazılım, çalışan herhangi bir process'in sanal belleği içerisine zararlı olan DLL dosyasına ait yolu belirterek yüklenmesini sağlar. Burada DLL processe enjekte olabilmek için Process Walking işlemlerini gerçekleştirir. Process Walking işlemi Process32First() ve Process32Next() API'lerinin kullanılmasıyla yapılır. Process32First() API'si, CreateToolhelp32Snapshot() API’si tarafından alınan ilk baştaki sistem snapshotlarında bulunan bilgileri okur. Process32Next() API'si ise diğer snapshotlardaki bilgileri okuyarak processler hakkında bilgi toplanır. Ardından enjekte olunacak process belirlenir. Daha sonra işletim sisteminin, bir işleme ait bilgileri depoladığı yerden OpenProcess API'si kullanılarak handle alınır. Ardından bellekte VirtualAllocEx API’si kullanılarak bir yer ayrılır ve bu yere WriteProcessMemory API’si kullanılarak zararlı DLL'nin yolu yazılır. Bu işlemin ardından zararlı yazılım CreateRemoteThread API'sine zararlı DLL'nin yolunun belirtildiği LoadLibrary API'sini yerleştirir. Ardından LoadLibrary API'sine zararlı DLL'yi enjekte eder ve bu DLL'nin çalıştırılmasını sağlar.
APC (Asynchronous Procedure Call) DLL INJECTION
Bu enjekte tekniğinde DLL enjekte edilirken threadlerin uyarılabilir hale geçtiğinde eşzamansız olarak çalıştığı bir işlev olan APC kullanılır. Birden fazla thread kullanarak çalışan programlarda threadler arasında bekleme oluşmasına neden olacak herhangi bir durumda thread, bellekte daha az yer kaplayan nesneler oluşturur. Bu nesneler kullanıcı girişlerine ait hizmete aktarılır. Kullanıcının yanıtına göre nesne, execute birimine iletilir. Ve burada sırayla işleme konur. Buradaki threadler herhangi bir göreve dahil olmadığında bekleyerek belleğin gereksiz kullanılmamasını sağlar. Burada threadlerin uyarılabilir hale geçmesi için SleepEx(); , SignalObjectAndWait(); gibi çeşitli API'ler kullanılır. Bu injekte yönteminde zararlı yazılım, hedef process'in uyarılabilir durumda olan thread'ine enumerate işlemi uygular. Daha sonra QueueUserAPC() API’si kullanılarak zararlı kod APC sırasına gönderilir. Sırayla işlem yapan threadler, sırası geldiğinde zararlı kodu çalıştırır ve injekte işlemi gerçekleşmiş olur.
ATOM BOMBING INJECTION
Adını Windowsun processler arasında stringler ve tanımlarını saklayan atom tablolarından almaktadır. Bu tablolarda her bir string, atom olarak ifade edilir. Bu teknikte zararlı yazılım, GlobalAddAtom API'si ile string yerine zararlı kodu bir atom olarak yükler. Ardından GlobalGetAtomName API'si ile atom tablosuna eklenen zararlı atomu hedef processin belleğine enjekte eder. Bunun ardından artık process çalıştığında belleğe enjekte edilen zararlı kodda çalışmış olur.
| Bu resim yeniden boyutlandırıldı, tam halini görmek için tıklayınız. |
PROCESS HOLLOWING
Bu injection tekniğinde çalışan bir process'ın belleğine zararlı exe yerleştirilir. Bu teknik ile yapılan enjekte işlemleri sistem güvenliği araçları tarafından farkedilmez. Bunun sebebi, process zararlı olmayan legal bir processin yolunu belirtir. Fakat yolu belirtilen process'in belleğinde zararlı exe olması sebebiyle hem zararlı çalışacak hemde process yolu güvenli olduğu için güvenlik araçları tarafından fark edilmeyecektir. Bu teknikte zararlı yazılım processi askıya alınmış bir şekilde başlatır. Ardından bu processin yürütülebilir bölümü belleğe aktarılır. Burada processin yolu, Process Environment Block olarak adlandırıldığımız PEB içerisinde bulunur. Aynı zamanda bu yapının ImageBaseAddress kısmında processin belleğe aktarılan bölümüne ait yol belirtilir. ImageBaseAddress kısmında processin base değeri de bulunur ve bu base değerine erişim sağlandıktan sonra processin yürütülebilir bölümü, process'ten NtUnmapViewOfSection API'si ile ayrılır ve zararlı için ortam hazır hale getirilir. Ardından VirtualAllocEx() API'si ile zararlı için bellekte yer ayrılır. Ardından WriteProcessMemory API'si ile zararlı belleğe yazdırılır. Ardından SetThreadContext API'si ile zararlı kod bloğu için giriş noktası oluşturulur. Bu adımın ardından geriye yalnızca askıya alınmış processin tekrar çalışmasını sağlamak kalıyor. Bu işlemi de ResumeThread API'si ile gerçekleştirerek zararlı kod içeren process çalışmaya başlatılır.
PROCESS DOPPELGÄNGING
Bu teknik TFS dosyasının yazma işlemleriyle ilgilenen kod enjekte tekniklerinden biridir. Transact, Load, Rollback, Animate olmak üzere 4 Aşamadan oluşur.
Transact Aşaması
Bu aşamada CreateTransaction API'si ile process üzerinde yeni bir işlem oluşturulur. Ardından bu işlemlerin kullanılacağı handle elde edilir ve WriteFile API'si ile zararlı kod yazılır.
Load Aşaması
Bu aşamada NtCreateSection API'si ile zararlının yerleşeceği section oluşturulur. Ve dosyamız oluşturulan sectiondan hafızaya yüklenir
RollBack Aşaması
RollBack ile oluşturulan yeni dosya işlemi kayıtlardan geri alınır. Bu sayede sistem, Transact aşamasında oluşturulan dosyanın hiç oluşturulmamış gibi davranabilmesini sağlar.
Animate Aşaması
Bu aşamada, NtCreateProcessEx API'si kullanılarak yeni bir process oluşturulur. Son olarak NtResumeThread API'si ile process başlatılır.