Process Injection Nedir?
Process Injection, kötü niyetli yazılımların veya güvenlik araştırmalarının, başka bir sürecin (process) belleğine kod enjekte ederek veya yürütme akışını değiştirerek zararlı aktiviteler gerçekleştirmesine olanak sağlayan bir tekniktir. Bu yöntem, saldırganların tespit edilmeden çalışmasını ve güvenlik yazılımlarını atlatmasını kolaylaştırır. Process Injection yöntemleri, Windows, Linux ve macOS gibi farklı işletim sistemlerinde kullanılabilir.

Process Injection Neden Tehlikeli?
Bu saldırı türünü tehlikeli kılan birkaç faktör bulunmaktadır. Enjekte edilen thread hedef süreçle aynı ayrıcalıklara sahip olduğu için saldırganlara sistem üzerinde yükseltilmiş erişim sağlar. Ayrıca, zararlı kod yalnızca bellekte çalıştığından, dosya tabanlı güvenlik taramalarını atlatır.
Bu yöntem, sistemin güvenliği ve kararlılığı üzerinde de ciddi etkiler yaratabilir. Injection işlemleri, hedef süreçlerin çökmesine neden olarak sistemde istikrarsızlığa yol açabilir. Ayrıca, güvenlik yazılımlarını devre dışı bırakma, korunan uygulamalardan veri sızdırma ve geleneksel temizlik yöntemlerinden kaçan kalıcı erişim sağlama gibi tehlikeli amaçlar için de kullanılabilir.
Bu yazıda aşağıdaki Process Injection tekniklerini detaylı olarak inceleyeceğiz:
- Process Injection Mindset
- Classic Process Injection
- APC Code Injection
- Module Stomping
- Section Mapping
- Process Hollowing
- Process Doppelganging
- Transacted Hollowing
- Process Herpaderping
- Process Ghosting
Bu Teknikler için yazdığım kodlara şu linkten erişebilirsiniz: https://github.com/0xz3ze/Advanced-Process-Injection-
1-Process Injection Mindset
Kötü amaçlı PE/DLL/shellcode’un başka bir sürecin adres alanına enjekte edilmesi:
Antivirüs (AV) yazılımlarından kaçınmak için
Güvenlik analistlerinin gözünden kaçmak için
Bazen başka bir sürecin sahip olduğu kaynaklara (ağ, bellek, dosyalar vb.) erişmek için
Process Injection gerçekleştirirken aklımızda şu sorular olmalıdır:
Uzak bir sürece nasıl erişebiliriz?
Zararlı kodumuzu uzak sürece nasıl gönderebiliriz?
Uzak süreç içinde bulunan zararlı kodumuzu nasıl çalıştırabiliriz?
2-Classic Process Injection
Process injection tekniği genel olarak 3 adımdan oluşur;

1- Enjekte edilecek processi belirlemek ve erişim sağlamak
Process Injection için ilk adım, enjekte edilecek hedef süreci belirlemek ve ona erişim sağlamaktır. Bu, Windows API’leri gibi sistem çağrıları kullanılarak gerçekleştirilir. Yaygın olarak kullanılan bazı API’ler şunlardır:
Mevcut bir süreci açma
Win32 API: OpenProcess() – Hedef sürecin tanıtıcısını (handle) almak için kullanılır.
NT API: NtOpenProcess() – OpenProcess() fonksiyonuna düşük seviyeli bir alternatif olup, doğrudan sistem çağrısı (syscall) ile çalışır.


Yeni bir süreç oluşturma
Win32 API: CreateProcessA() – Belirtilen yürütülebilir dosyadan yeni bir işlem oluşturur.
NT API: NtCreateProcessEx(), NtCreateUserProcess() – CreateProcessA() API’sine benzer şekilde ancak daha düşük seviyede çalışır.

Mevcut bir süreç tanıtıcısını kopyalama
Win32 API: DuplicateHandle() – Bir işlemin tanıtıcısını başka bir işlemle paylaşmak için kullanılır.
NT API: NtDuplicateObject() – DuplicateHandle() API’sinin doğrudan sistem çağrısı ile çalışan sürümüdür.

2-Zararlı Kodu Enjekte Etmek
Bellek tahsis etme
Win32 API: VirtualAllocEx() – Hedef sürecin belleğinde belirli izinlerle yeni bir alan ayırır.
NT API: NtAllocateVirtualMemory() – VirtualAllocEx() API’sine düşük seviyeli bir alternatiftir.

Bellek erişim izinleri: PAGE_READWRITE, (PAGE_READWRITE | PAGE_EXECUTE) gibi seçeneklerle bellek bölgesi tanımlanır.
Kodu belleğe yazma
Win32 API: WriteProcessMemory() – Ayrılan bellek bölgesine zararlı kodu yazar.
NT API: NtWriteVirtualMemory() – WriteProcessMemory() API’sinin düşük seviyeli sürümüdür.

Bellek koruma izinlerini değiştirme (yazılabilir bellek, yürütülebilir hale getirilir)
Win32 API: VirtualProtectEx() – Bir bellek bölgesinin erişim haklarını değiştirir.
NT API: NtProtectVirtualMemory() – VirtualProtectEx() API’sinin doğrudan sistem çağrısıyla çalışan versiyonudur.

Güvenlik önlemleri nedeniyle modern işletim sistemlerinde bellek genellikle ya yazılabilir ya da yürütülebilir (X) olarak ayarlanır. Bu yüzden kod yürütmeden önce bellek erişim izinleri değiştirilmelidir.
3-Enjekte ettiğimiz kodu çalıştırmak
Zararlı kodun çalıştırılması için aşağıdaki yöntemler kullanılabilir:
Yeni bir Thread oluşturma
Win32 API: CreateRemoteThread() – Hedef sürecin içinde yeni bir thread oluşturur ve zararlı kodu yürütür.
NT API: NtCreateThreadEx(), RtlCreateUserThread() – CreateRemoteThread() API’sinin düşük seviyeli versiyonlarıdır.

Mevcut bir Threadi ele geçirme
Win32 API: SetThreadContext() – Hedef sürecin mevcut bir threadi ele geçirerek yürütme akışını değiştirmek için kullanılır.
NT API: NtSetContextThread() – SetThreadContext() API’sinin düşük seviyeli sürümüdür.

Bir iş parçacığı kuyruğa alma
Win32 API: QueueUserAPC() – Hedef sürecin bir iş parçacığının uyarı tabanlı prosedürünü (APC) manipüle ederek kod yürütmek için kullanılır.
NT API: NtQueueUserAPC() – QueueUserAPC() API’sinin düşük seviyeli alternatifi olup, doğrudan sistem çağrısı üzerinden çalışır.

Process Injection’un son aşamasında kullanılan API’ler genellikle antivirüs (AV) ve uç nokta tespit ve yanıt (EDR) çözümleri tarafından izlenmektedir. Bu nedenle, saldırganlar daha gelişmiş ve tespit edilmesi zor yöntemler kullanarak bu kontrollerden kaçınmaya çalışır.
Bu adımlar, farklı Process Injection teknikleriyle birleştirilerek gelişmiş saldırı yöntemleri oluşturulabilir. İlerleyen bölümlerde her yöntemi detaylıca ele alacağız.
Classic Process Injection özet;

APC Code Injection Neden Kullanılır?
Tespit Edilmeden Çalıştırma: Zararlı kodu hedef süreç içerisinde yürütmek için kullanılır.
EDR ve AV Atlama: Bazı antivirüs (AV) ve Endpoint Detection and Response (EDR) sistemlerinden kaçınmak için uygundur.
Meşru Süreçlerin Kullanımı: Meşru bir süreçte çalışan bir iş parçacığını manipüle ederek kod yürütmek, saldırganların daha az dikkat çekmesine yardımcı olur.
APC Code Injection Nasıl Yapılır?
1. Hedef Processi Bulma
Öncelikle, saldırgan hedef processi belirlemelidir. Bunun için aşağıdaki API’ler kullanılabilir:
Win32 API: CreateToolHelp32Snapshot() – Çalışan süreçleri ve iş parçacıklarını listelemek için kullanılır.

NT API: NtQuerySystemInformation() – Daha düşük seviyeli süreç bilgilerini almak için kullanılır.
2. Hedef Sürecin Threadlerini Bulma
Belirlenen sürecin içindeki thread tespit edilmelidir:
Win32 API: Thread32First() – Bir sürecin ilk iş parçacığını bulur.
Win32 API: Thread32Next() – Belirtilen sürecin bir sonraki iş parçacığını listeler.


3. Hedef Processin Belleğinde Hafıza Ayırma
Zararlı kodun yazılacağı bellek bölgesi oluşturulmalıdır:
Win32 API: VirtualAllocEx() – Hedef sürecin belleğinde yeni bir alan ayırır.
NT API: NtAllocateVirtualMemory() – Daha düşük seviyeli bellek tahsis fonksiyonudur.

4. Zararlı Kodu Belleğe Yazma
Tahsis edilen belleğe zararlı kod enjekte edilir:
Win32 API: WriteProcessMemory() – Ayrılan belleğe zararlı kodu yazar.
NT API: NtWriteVirtualMemory() – Daha düşük seviyeli bellek yazma fonksiyonudur.

5. APC Fonksiyonunu Kuyruğa Ekleme
Hedef sürecin threadlerinde APC kuyruğuna zararlı kod eklenir:
Win32 API: QueueUserAPC() – Bir iş parçacığının APC kuyruğuna yürütülecek bir fonksiyon ekler.
NT API: NtQueueUserAPC() – Daha düşük seviyeli APC kuyruğu ekleme fonksiyonudur.

Bu aşamada, eklenen APC fonksiyonu, zararlı shellcode’u çalıştıracak şekilde ayarlanır.
APC Code Injection Güvenlik Önlemleri
Saldırganların APC Code Injection kullanmasını engellemek veya tespit etmek için aşağıdaki güvenlik önlemleri alınabilir:
Threadleri İzleme: Sürekli “alertable” modda çalışan iş parçacıkları anormal aktivite gösterebilir.
APC Kuyruklarını Analiz Etme: Hangi APC çağrılarının işlendiğini incelemek zararlı aktiviteleri ortaya çıkarabilir.
EDR ve Antivirüs Kullanımı: Modern uç nokta güvenlik çözümleri, şüpheli APC çağrılarını tespit edebilir.
4.Module Stomping Nedir?
Module Stomping, kötü niyetli aktörlerin veya güvenlik araştırmacılarının hedef bir sürece meşru bir DLL yükleyerek ve bu DLL’in belleğine shellcode enjekte ederek zararlı kod çalıştırmasına olanak sağlayan bir tekniktir. Bu yöntemin en büyük avantajı, bellek koruma izinlerini değiştirmeye gerek kalmadan kod enjekte edilebilmesi ve zararlı kodun meşru bir DLL’in içinden çalıştırılabilmesidir.
Module Stomping Neden Tehlikelidir?
Tespit Edilmesi Zordur: Meşru bir DLL kullanıldığı için antivirüs ve EDR çözümlerinden kaçınmak daha kolaydır.
Bellek Koruma Değişikliği Gerekmez: Klasik bellek manipülasyon tekniklerinden farklı olarak, PAGE_EXECUTE_READWRITE gibi şüpheli bellek izinleri değiştirilmez.
Meşru Süreçler İçinde Çalıştırılır: Zararlı kod, güvenilir olarak görülen bir DLL’in içinden yürütüldüğü için analiz ve tespit süreçlerini zorlaştırır.
Module Stomping Tekniği Nasıl Uygulanır?
Module Stomping tekniği aşağıdaki adımlardan oluşur:
1. Hedef Süreci Açma
İlk olarak hedef processin belleğine erişim sağlamak için uygun API çağrıları kullanılır:
Win32 API: OpenProcess() – Hedef sürecin handle’ını almak için kullanılır.

NT API: NtOpenProcess() – Daha düşük seviyeli işlem açma fonksiyonudur.
2. Meşru Bir DLL’i Hedef Sürece Yükleme
Hedef sürece bir DLL yükleyerek zararlı kodu bu modül üzerinden çalıştırmak için aşağıdaki işlemler gerçekleştirilir:
Win32 API: VirtualAllocEx() – Hedef processin belleğinde yeni bir alan tahsis eder.

Win32 API: WriteProcessMemory() – DLL’in içeriğini hedef processin belleğine yazar.

Win32 API: CreateRemoteThread() – Yüklenen DLL’i çalıştırmak için hedef processin içinde yeni bir thread oluşturur.

3. Zararlı Kodu DLL’in Giriş Noktasına Yazma
DLL’in Entry Point adresine shellcode yazılarak çalıştırılması sağlanır:
Win32 API: WriteProcessMemory() – Zararlı kodu DLL’in giriş noktasına yazar.

4. Zararlı Kodu Çalıştırma
Son adım olarak, hedef sürecin içinde bir iş parçacığı oluşturarak zararlı kodun yürütülmesi sağlanır:
Win32 API: CreateRemoteThread() – Zararlı kodu içeren iş parçacığını başlatır.

Module Stomping’e Karşı Nasıl Kendimizi Güvende Tutarız?
Bu tekniğin kullanılmasını veya tespit edilmesini sağlamak için alınabilecek bazı önlemler şunlardır:
Bellek Analizi Yapmak: Süreçlerde yürütülebilir alanları kontrol etmek ve şüpheli yüklemeleri incelemek.
DLL Enjeksiyonunu İzlemek: Süreçler arasındaki bellek manipülasyonlarını izleyen güvenlik araçları kullanmak.
Davranışsal Analiz Kullanmak: EDR çözümleri ile anormal süreç davranışlarını tespit etmek.
Section Mapping Nedir?
Section Mapping, birden fazla sürecin aynı bellek bölümünü paylaşmasını sağlayarak zararlı kod enjekte etmeye olanak tanıyan bir Process Injection tekniğidir. Bellekte her section’ın karşılık gelen görünümleri vardır ve bu görünümler, süreçler tarafından görülebilen bölümlerdir. Bir section için görünüm oluşturma işlemine “section görünümünü eşleme” denir. Bu yöntemde, saldırgan tarafından bir section oluşturulur ve hem yerel (injector) hem de hedef süreç bu bölüme farklı erişim izinleriyle erişebilir. Bu sayede, zararlı kod hedef sürecin belleğine doğrudan yazılmadan çalıştırılabilir ve böylece geleneksel güvenlik önlemlerini atlatmak kolaylaşır.
Section Mapping Adımları
1. Bellek Bölümü (Section) Oluşturma
Öncelikle, tam erişim yetkisine sahip bir bellek bölümü oluşturulmalıdır:
NT API: NtCreateSection() – Yeni bir bellek bölümü oluşturur ve süreçler arası paylaşımı mümkün kılar.

2. Yerel Süreç İçin Bellek Görünümü (View) Oluşturma
Oluşturulan section’ın bir görünümü, saldırgan sürecin belleğinde oluşturulur. Burada sadece okuma ve yazma (RW – Read & Write) izinleri bulunur:
NT API: NtMapViewOfSection() – Section’ın bir görünümünü yerel sürecin belleğine eşler.

3. Hedef Süreç İçin Bellek Görünümü (View) Oluşturma
Hedef sürecin belleğinde, aynı section için bir görünüm oluşturulur. Ancak bu sefer okuma ve yürütme (RX – Read & Execute) izinleri kullanılır:
NT API: NtMapViewOfSection() – Section’ın bir görünümünü hedef sürecin belleğine eşler.

4. Zararlı Kodu Belleğe Yazma
Saldırgan sürecin bellek görünümüne zararlı kod yazılır. Bu kod, hedef sürecin görünümüne otomatik olarak yansır:
Win32 API: WriteProcessMemory() – Hedef sürecin belleğine doğrudan yazmak yerine, paylaşılan bellek bölgesine kod yazmak için kullanılır.

NT API: NtWriteVirtualMemory() – Bellek yazma işlemini gerçekleştiren düşük seviyeli API.
C Fonksiyonu: memcpy() → Bellekte belirli bir adrese veri kopyalamak için kullanılır.

5. Uzaktan İş Parçacığı (Thread) Oluşturma
Son adımda, hedef süreç içinde yeni bir iş parçacığı (thread) oluşturularak zararlı kod yürütülür:
Win32 API: CreateRemoteThread() – Hedef sürecin içinde yeni bir iş parçacığı oluşturur.

NT API: NtCreateThreadEx() – Düşük seviyeli iş parçacığı oluşturma fonksiyonudur.
NT API: RtlCreateUserThread() – Hedef sürecin içinde yürütülebilir bir iş parçacığı oluşturur.
Section Mapping’in Avantajları
Güvenlik Yazılımlarını Atlama: Bellek bölümü paylaşıldığı için doğrudan bellek yazımı tespit edilmesi zor hale gelir.
Süreçler Arasında Gizli İletişim: Zararlı kod, sürecin belleğinde değil, paylaşılan bir bellek bölgesinde saklanır.
EDR ve Antivirüslerden Kaçınma: Geleneksel bellek taramaları bu yöntemi algılamakta zorlanır.
Section Mapping’e Karşı Güvenlik Önlemleri
Süreçler Arası Bellek Paylaşımlarını İzleme: NtCreateSection() ve NtMapViewOfSection() API çağrılarının kullanımı analiz edilmelidir.
Anormal Thread Yürütmelerini Tespit Etme: CreateRemoteThread() ve NtCreateThreadEx() gibi çağrılar takip edilmelidir.
Davranışsal Analiz Kullanımı: Section Mapping gibi teknikleri tespit edebilen modern güvenlik çözümleri devreye alınmalıdır.
Sonuç
Section Mapping, saldırganların bellek manipülasyonu yoluyla tespit edilmeden zararlı kod çalıştırmasını sağlayan etkili bir yöntemdir. Güvenlik çözümleri tarafından tespit edilmesi zor olduğu için, süreç içi bellek aktivitelerinin izlenmesi ve gelişmiş güvenlik önlemlerinin uygulanması büyük önem taşır.
Process Hollowing Nedir?
Process Hollowing, saldırganların meşru bir sürecin (process) yürütülebilir bölümünü (executable section) zararlı bir kodla değiştirmesine olanak tanıyan bir kod enjeksiyon tekniğidir.
Bu yöntemle, saldırganlar kötü amaçlı kodlarını meşru bir işlem gibi göstererek güvenlik önlemlerini atlatabilirler.
Process Hollowing’in Temel Özellikleri:
Kod değişimi bellekte gerçekleşir. Hedef sürecin diske yazılan dosyası değiştirilmez.
Zararlı kod, güvenilir bir sürecin içinde çalıştırılır. Böylece sistem yöneticileri ve güvenlik yazılımları sürecin kötü niyetli olduğunu fark etmekte zorlanır.
Hedef sürecin dosya yolu değişmez. Windows Görev Yöneticisi’nde veya diğer sistem araçlarında süreç orijinal yürütülebilir dosyanın yolunu gösterir.
Process Hollowing Adımları
1. Hedef Süreci Askıya Alarak (Suspended Mode) Başlatma
Öncelikle hedef süreç (örneğin notepad.exe) askıya alınmış (suspended) modda başlatılır.
Bu, sürecin yürütülmesini durdurur ve bellekte değişiklik yapılmasına olanak tanır.
Win32 API: CreateProcessA() → Yeni bir süreç başlatır ve onun başlangıçta askıya alınmış olmasını sağlar.

2. Hedef Sürecin Bellek Adresini Öğrenme
Hedef sürecin yürütülebilir kodunun yüklendiği taban adresi (Image Base Address) bulunur.
Bu adresin belirlenmesi, zararlı kodun doğru bölgeye yerleştirilmesi için gereklidir.
NT API: NtQueryInformationProcess() → Hedef sürecin bilgilerini almak için kullanılır.
Win32 API: ReadProcessMemory() → Hedef sürecin belleğinden belirli verileri okumaya yarar.

3. Hedef Sürecin Mevcut Bellek Görünümünü Kaldırma (Unmapping)
Meşru sürecin bellekteki kod bölgesi boşaltılır (hollowed out).
Bu işlem, sürecin orijinal içeriğinin silinmesini ve yerine zararlı kodun yüklenmesini sağlar.
NT API: ZwUnmapViewOfSection() → Hedef sürecin belleğindeki yürütülebilir bölümü kaldırır.

4. Hedef Süreç İçin Yeni Bellek Alanı Ayırma
Zararlı kodu yerleştirebilmek için hedef sürecin belleğinde yeni bir alan tahsis edilir.
Win32 API: VirtualAllocEx() → Hedef sürecin belleğinde yeni bir bölge oluşturur.

5. Zararlı Kodu Yeni Bellek Bölgesine Kopyalama
Zararlı yazılımın kodu, hedef sürecin yeni tahsis edilen bellek alanına yazılır.
Win32 API: WriteProcessMemory() → Bellek tahsis edilen alana zararlı kodu yazar.

6. Hedef Sürecin Bağlamını (Context) Almak
Sürecin kaydedilmiş bağlamı alınarak, yürütme noktası (entrypoint) belirlenir.
Win32 API: GetThreadContext() → Sürecin mevcut yürütme durumu hakkında bilgi alır.

7. Yürütme Noktasını Zararlı Koda Yönlendirme
Meşru süreç yürütüleceği zaman, aslında zararlı kod çalıştırılacak şekilde ayarlanır.
EAX (x86) veya RCX (x64) → Yürütme noktası, hedef platforma uygun bir register’a yüklenir.
Win32 API: SetThreadContext() → Sürecin bağlamı değiştirilerek zararlı kodun yürütülmesi sağlanır.

8. Hedef Süreci Devam Ettirme (Resume)
Süreç askıya alındığı için son adımda tekrar çalıştırılması gerekir.
Bu, zararlı kodun çalışmasını başlatan adımdır.
Win32 API: ResumeThread() → Askıya alınmış süreci devam ettirerek zararlı kodun çalışmasını sağlar.

Process Hollowing’in Avantajları
Meşru Süreç Kılığına Girme → Zararlı kod güvenilir bir süreç içinde çalıştırıldığı için tespit edilmesi zordur.
Bellek Tabanlı Saldırı → Diske zararlı yazılım bırakmadan çalıştırılabilir, böylece geleneksel antivirüs yazılımlarından kaçabilir.
EDR ve Antivirüslerden Kaçınma → Geleneksel dosya tabanlı analizler bu yöntemi algılamakta zorlanır.
Process Hollowing’e Karşı Güvenlik Önlemleri
Askıya Alınmış Süreçleri İzleme: CreateProcessA() ile oluşturulan suspended süreçleri takip edin.
Bellek Değişimlerini Algılama: ZwUnmapViewOfSection() veya VirtualAllocEx() gibi API çağrılarını analiz edin.
Davranışsal Analiz Kullanımı: Meşru süreçlerin olağandışı belleğe erişimlerini tespit edebilen güvenlik çözümleri kullanın.
Sonuç
Process Hollowing, saldırganların zararlı kodlarını güvenilir bir süreç içine gizlemelerine olanak tanıyan güçlü bir tekniktir. Bellekte gerçekleştiği için tespiti zordur ve güvenlik çözümlerini aşmak için sıklıkla kullanılır. Ancak, süreç izleme ve gelişmiş tehdit avcılığı teknikleri ile bu tür saldırıları tespit etmek mümkündür.
Process Doppelganging Nedir?
Process Doppelganging, Windows NTFS dosya sistemi işlemlerini (transactions) kullanarak zararlı kod enjekte etmeye yarayan bir saldırı tekniğidir.
Bu yöntem, saldırganlara zararlı yazılımlarını diskte iz bırakmadan yürütme imkanı sunar.
Process Doppelganging’in Temel Mantığı
Windows’un Transactional NTFS (TxF) özelliği, dosya işlemlerini geri alma (rollback) yeteneğine sahiptir.
Bir işlem (transaction) kapsamında yapılan dosya değişiklikleri tamamlanmazsa, sistem bu işlemi geri alır ve orijinal dosya bozulmadan kalır.
Bu teknik kullanılarak, zararlı kod bellekte çalıştırılır ancak disk üzerinde asla kalıcı hale getirilmez.
Process Doppelganging Adımları
Doppelganging saldırısı 4 temel adımdan oluşur:
1. Transact – Zararlı Kodu NTFS İşlemine Dahil Etme
Öncelikle, meşru bir dosya oluşturulur ve bu dosya bir NTFS işlemi (transaction) içinde açılır.
Daha sonra, bu dosya üzerine zararlı yük (payload) yazılır.
Ancak, bu işlem henüz disk üzerinde kalıcı hale getirilmez.
Win32 API: CreateTransaction() → Yeni bir NTFS işlemi başlatır.

Win32 API: CreateFileTransactedA() → İşlem kapsamında geçici bir dosya oluşturur.

2. Load – Belleğe Yükleme ve Yürütülebilir Bölüm Oluşturma
Zararlı kod disk üzerinde görünmeden belleğe yüklenir.
Bellek içerisinde yeni bir bölüm (section) oluşturularak, zararlı kod yürütülebilir hale getirilir.
NT API: NtCreateSection() → Bellekte yeni bir yürütülebilir bölüm oluşturur.

3. Rollback – İşlemi Geri Alma (Zararlı Kodun Diskten Silinmesi)
Disk üzerinde herhangi bir iz bırakmamak için NTFS işlemi geri alınır.
Bu, zararlı kodun disk üzerinde asla kayıtlı kalmamasını sağlar.
Win32 API: RollbackTransaction() → NTFS işlemini geri alarak yapılan değişiklikleri diskten siler.

4. Animate – Zararlı Süreci Bellekten Çalıştırma
Son aşamada, daha önce belleğe yüklenen zararlı kod çalıştırılır.
Bu işlem için yeni bir süreç (process) ve iş parçacığı (thread) oluşturulur.
Böylece zararlı yazılım hiçbir zaman disk üzerinde bulunmadan bellekte çalıştırılmış olur.
NT API: NtCreateProcessEx() → Bellekteki zararlı kodu çalıştıracak yeni bir süreç oluşturur.

NT API: NtCreateThreadEx() → Zararlı kodu çalıştırmak için yeni bir iş parçacığı başlatır.

Process Doppelganging’in Avantajları
Diskte İz Bırakmaz → Zararlı kod diske hiç yazılmadan çalıştırıldığı için geleneksel antivirüs programları tarafından tespit edilmesi zorlaşır.
Meşru Görünüm → Bellekte çalışan zararlı yazılım, Windows sistem süreçleri gibi davranabilir.
EDR ve Antivirüsleri Atlama → Dosya tabanlı tarama yapan güvenlik yazılımlarına karşı etkili bir yöntemdir.
Process Doppelganging’e Karşı Güvenlik Önlemleri
NTFS Transaction Çağrılarını İzleme → CreateTransaction(), CreateFileTransactedA(), RollbackTransaction() çağrılarını takip edin.
Bellek Analizi Yapma → NtCreateSection() ve NtCreateProcessEx() kullanımı izlenmelidir.
Davranışsal Analiz Kullanımı → Bellekte çalışan süreçleri anormal bellek hareketlerine karşı denetleyen güvenlik çözümleri devreye alınmalıdır.
Sonuç
Process Doppelganging, Windows’un NTFS işlem sistemini kullanarak zararlı yazılım çalıştırmaya imkan tanıyan gelişmiş bir tekniktir.
Zararlı kod disk üzerinde hiçbir zaman kalıcı hale gelmez, tamamen bellekte çalıştırılır.
Bu nedenle, geleneksel antivirüs programları bu yöntemi tespit etmekte zorlanır.
Güvenlik çözümlerinin bu tür bellek tabanlı saldırılara karşı gelişmiş analiz mekanizmalarına sahip olması gereklidir.
Windows Defender’ı Devre Dışı Bırakarak Algılamadan Kaçınma
Saldırganlar, Process Doppelganging yöntemini daha etkili hale getirmek için Microsoft Defender’ı devre dışı bırakabilir.
Bunu Grup İlkesi (Group Policy) ayarlarını değiştirerek yapmak mümkündür:
Adımlar:
Başlat Menüsü > “gpedit.msc” yazarak Yerel Grup İlkesi Düzenleyicisi’ni (Local Group Policy Editor) açın.
️ Bilgisayar Yapılandırması (Computer Configuration) → Yönetim Şablonları (Administrative Templates) → Windows Bileşenleri (Windows Components) → Microsoft Defender Antivirus bölümüne gidin.
“Microsoft Defender Antivirus’ü Kapat” (Turn off Microsoft Defender Antivirus) ayarını “Etkin” (Enabled) olarak değiştirin.
Alternatif Yöntem:
Windows Defender, Kayıt Defteri (Registry Editor) üzerinden de devre dışı bırakılabilir.
Ancak, modern sistemlerde Defender’ın devre dışı bırakılması Tamper Protection (Manipülasyon Koruması) nedeniyle kısıtlanabilir.
Sonuç
Windows Defender, Process Doppelganging gibi saldırıları uzaktan iş parçacığı (remote thread) izleme mekanizmasıyla tespit etmeye çalışır.
Ancak, saldırganlar Windows Defender’ı devre dışı bırakarak veya tespit mekanizmalarını atlatacak farklı yöntemler kullanarak bu engelleri aşabilir.
Bu yüzden, Process Doppelganging saldırılarına karşı yalnızca antivirüs çözümlerine güvenmek yeterli değildir – ek güvenlik mekanizmaları da devreye alınmalıdır.
Örnek Bir Process Doppelganging Kodu:githubda
Transacted Hollowing Nedir?
Transacted Hollowing, Windows’un NTFS Transactional (TxF) mekanizmasını kullanarak zararlı bir süreci meşru bir işlem gibi gizleme tekniğidir.
Bu teknik, NTFS işlemleri (transactions) sayesinde disk üzerinde hiçbir iz bırakmadan çalıştırılabilir.Process doppelganging ile process hollowing’in karışımıdır.
Transacted Hollowing Nasıl Çalışır?
Windows’un Transactional NTFS (TxF) özelliği, dosya işlemlerini atomik bir şekilde yönetmeye olanak tanır.
Bu sistemde bir işlem başlatılır ve eğer tamamlanamazsa, yapılan tüm değişiklikler otomatik olarak geri alınır (rollback).
Saldırganlar, bu mekanizmayı kullanarak şu adımları uygular:
- Meşru bir dosyayı NTFS işlemi içinde açar veya oluşturur.
- Bu dosyanın içeriğini zararlı bir yürütülebilir dosya (payload) ile değiştirir.
- Zararlı dosyadan bellek bölümü (section) oluşturur ve sürece yükler.
- İşlemi geri alır (rollback) – böylece disk üzerinde zararlı dosyanın izi kalmaz.
- Yeni bir hedef süreç oluşturur ve zararlı kodu hedef sürece enjekte eder.
- Hedef sürecin giriş noktası zararlı kodun giriş noktasıyla değiştirilir ve süreç çalıştırılır.
Bu yöntem, disk tabanlı tehdit avlama sistemlerini (file-based detection) atlatmada oldukça etkili bir tekniktir.
Transacted Hollowing Adımları
1. NTFS Transaction Nesnesi Oluşturma
Öncelikle, bir NTFS işlemi (transaction object) oluşturulur.
Bu, dosya işlemlerinin atomik olmasını sağlar ve geri alınabilmesine imkan tanır.
Win32 API: CreateTransaction() – Yeni bir NTFS işlemi başlatır.

2. Hedef Dosyayı Açma veya Oluşturma
NTFS işlemi içinde hedef dosya açılır veya yeni bir dosya oluşturulur.
Saldırgan, bu işlemi kullanarak zararlı yürütülebilir dosyayı (payload) işlemin içine yerleştirir.
Win32 API: CreateFileTransactedA() – Bir NTFS işlemi içinde yeni bir dosya açar veya oluşturur.

3. Bellek Bölümü (Image Section) Oluşturma
Zararlı dosyadan bir bellek bölümü (image section) oluşturulur.
Bu, zararlı kodun bellek içinde bir yürütülebilir bölüme taşınmasını sağlar.
NT API: NtCreateSection() – Bir bellek bölümü oluşturarak hedef sürece aktarımı mümkün kılar.

4. NTFS İşlemini Geri Alma (Rollback)
Bu noktada, NTFS işlemi geri alınır.
Böylece zararlı dosya disk üzerinde hiçbir zaman gerçekten var olmamış gibi görünür.
Win32 API: RollbackTransaction() – NTFS işlemi iptal edilerek yapılan değişiklikler geri alınır.

5. Hedef Süreci Askıya Alınmış Modda (Suspended Mode) Oluşturma
Yeni bir hedef süreç oluşturulur, ancak bu süreç askıya alınmış modda (suspended mode) çalıştırılır.
Böylece, süreç çalıştırılmadan önce içine zararlı kod enjekte edilebilir.
Win32 API: CreateProcessA() – Yeni bir süreç oluşturur ve askıya alınmış (suspended) başlatır.

6. Bellek Bölümünü Hedef Sürece Eşleme
Daha önce oluşturulan bellek bölümü, hedef sürecin belleğine eşlenir.
NT API: NtMapViewOfSection() – Bellek bölümünü hedef sürece haritalar.

7. Giriş Noktasını (Entrypoint) Güncelleme
Hedef sürecin giriş noktası (entrypoint), zararlı kodun giriş noktası ile değiştirilir.
Bu, sürecin zararlı kodu çalıştırmasını sağlar.
Win32 API: GetThreadContext() – Hedef sürecin mevcut yürütme bağlamını alır.

Win32 API: SetThreadContext() – Hedef sürecin yürütme bağlamını değiştirerek yeni giriş noktasını ayarlar.

8. PEB İçindeki Image Base Adresini Güncelleme
Süreçlerin PEB (Process Environment Block) içinde kayıtlı olan Image Base Address değeri güncellenerek,
yeni haritalanan belleğin sürecin asıl koduymuş gibi görünmesi sağlanır.
NT API: NtQueryInformationProcess() – Hedef sürecin bilgilerini çeker.

Win32 API: WriteProcessMemory() – Belleğe yazma işlemi gerçekleştirir.

9. Askıya Alınmış Süreci Devam Ettirme
Son olarak, hedef sürecin askıya alınmış ana iş parçacığı (thread) devam ettirilir.
Bu, sürecin artık zararlı kodu çalıştırmasına neden olur.
NT API: NtResumeThread() – Askıya alınmış iş parçacığını devam ettirir.

Transacted Hollowing’in Avantajları
Disk Üzerinde İz Bırakmaz: Dosya işlemi geri alındığından zararlı yürütülebilir dosya hiçbir zaman disk üzerinde gerçekten var olmaz.
Antivirüs ve EDR Algılamalarını Atlama: Geleneksel antivirüs çözümleri, disk tabanlı taramalara dayandığından bu yöntemi algılamakta zorlanır.
Bellek Manipülasyonu ile Çalışma: Sürecin bellek bölümleri değiştirilerek zararlı kod yürütülebilir.
Transacted Hollowing’e Karşı Güvenlik Önlemleri
NTFS İşlemlerini İzleme: CreateTransaction(), CreateFileTransactedA(), RollbackTransaction() API çağrılarının kullanımını takip etmek.
Davranışsal Analiz Kullanımı: Şüpheli bellek haritalama (NtMapViewOfSection()) ve giriş noktası değiştirme (SetThreadContext()) işlemlerini analiz etmek.
EDR ve Memory Scanning Çözümleri: Yalnızca disk tabanlı tespitler değil, bellek taramaları da yapılmalıdır.
Sonuç
Transacted Hollowing, Transactional NTFS (TxF) kullanarak zararlı kodları disk üzerinde iz bırakmadan çalıştıran güçlü bir saldırı tekniğidir.
Bu yöntem, geleneksel antivirüs çözümlerini atlatmak için tasarlanmıştır ve saldırganlar tarafından gizlilik sağlamak amacıyla sıkça kullanılmaktadır.
Buna karşı koymak için gelişmiş bellek analizi ve işlem izleme teknikleri uygulanmalıdır.
Process Herpaderping Nedir?
Process Herpaderping, disk üzerinde görünen dosya ile bellekte yürütülen dosyanın farklı olmasını sağlayan bir gizleme tekniğidir.
Bu yöntem, dosya tabanlı güvenlik çözümlerini atlatmak ve zararlı yazılımın algılanmasını zorlaştırmak amacıyla kullanılır.
Process Herpaderping Nasıl Çalışır?
Bu teknikte, belleğe yüklenen yürütülebilir dosya ile disk üzerindeki dosya arasındaki fark oluşturularak antivirüsler ve güvenlik yazılımları kandırılır.
- Disk üzerinde geçici bir dosya (temp file) oluşturulur.
- Bu dosyanın içine zararlı kod (payload) yazılır.
- Bu dosyadan bellek içinde bir imaj bölümü (image section) oluşturulur.
- Belleğe yüklenen kod ile aynı anda, diskteki dosya değiştirilir.
- Son olarak, süreç başlatılır ve zararlı kod yürütülür.
Bu yöntem sayesinde, güvenlik yazılımları diskte bulunan dosyayı analiz etse bile, aslında bellekte farklı bir kod çalıştığı için saldırıyı algılamak oldukça zorlaşır.
Process Herpaderping Adımları
1. Geçici (Decoy) Dosya Oluşturma
İlk adımda, saldırganın kullanacağı sahte bir dosya oluşturulur.
Bu dosya saldırıyı gizlemek için kullanılacaktır.
Win32 API: CreateFileA() – Disk üzerinde yeni bir geçici dosya oluşturur.

2. Zararlı Kodu Geçici Dosyaya Yazma
Geçici dosyanın içine zararlı kod (payload) yazılır.
Ancak, dosya kapatılmaz çünkü daha sonra değiştirilecektir.
Win32 API: WriteFile() – Zararlı kodu dosyaya yazar.

3. Bellek İçin Image Section Oluşturma
Zararlı kodun yazıldığı dosyadan bir image section oluşturulur.
Bu, kodun bellekte yürütülmeye hazır hale getirilmesini sağlar.
NT API: NtCreateSection() – Bellek içinde yeni bir yürütülebilir bölüm oluşturur.

4. Yeni Süreç (Process) Oluşturma
Az önce oluşturulan image section kullanılarak yeni bir süreç oluşturulur.
Bu süreç, saldırganın zararlı kodunu bellekte çalıştırmak için kullanılacaktır.
NT API: NtCreateProcessEx() – Yeni bir süreç oluşturur.

5. Geçici Dosyanın İçeriğini Değiştirme
Süreç bellekte oluşturulduktan sonra, disk üzerindeki geçici dosyanın içeriği değiştirilir.
Bu, diskteki dosyanın analiz edilmesini zorlaştırarak saldırının gizlenmesini sağlar.
Win32 API: SetFilePointer() – Dosya içinde değişiklik yapılacak noktayı belirler.

Win32 API: WriteFile() – Yeni içeriği dosyaya yazar.

6. Süreç Parametrelerini Ayarlama
Oluşturulan süreç için gerekli olan parametreler bellekte ayarlanır.
Bu adım, sürecin düzgün bir şekilde çalışmasını sağlar.
NT API: RtlCreateProcessParametersEx() – Sürecin çalışması için gerekli parametreleri oluşturur.

7. Yeni İş Parçacığı (Thread) Oluşturma
Son olarak, sürecin içinde zararlı kodun çalışmasını sağlayan yeni bir iş parçacığı (thread) oluşturulur.
Bu iş parçacığı, saldırının başarılı olmasını sağlar.
NT API: NtCreateThreadEx() – Hedef sürecin içinde yeni bir iş parçacığı oluşturur.

8. Geçici Dosya Tanıtıcısını (Handle) Kapatma
Geçici dosyanın işlemle bağlantısı kesilir ve dosya kapatılır.
Win32 API: CloseHandle() – Açık dosya tanıtıcısını kapatır.

Process Herpaderping’in Avantajları
Antivirüs ve EDR Tespitlerinden Kaçınma: Disk üzerinde analiz edilen dosya ile bellekte yürütülen dosya farklı olduğu için geleneksel güvenlik önlemleri başarısız olur.
Disk Üzerinde İz Bırakmaz: Zararlı kod disk üzerinde farklı bir içerikle gizlendiği için, güvenlik çözümlerinin fark etmesi zorlaşır.
Davranışsal Tespit Mekanizmalarına Karşı Etkili: Kodun yürütülmeden önce değiştirilmesi, birçok güvenlik çözümünün yanlış analiz yapmasına neden olur.
Process Herpaderping’e Karşı Güvenlik Önlemleri
Dosya ve Bellek Eşleşmelerini İzleme: NtCreateSection() ve NtCreateProcessEx() çağrılarının kullanımını analiz etmek.
Davranışsal Anormallikleri Tespit Etme: Disk üzerindeki dosya ile bellek içeriğinin uyuşmadığı durumları tespit etmek için gelişmiş tehdit avlama çözümleri kullanmak.
EDR Çözümleri ile Bellek Analizi: Disk üzerindeki analiz yerine bellekte yürütülen kodu inceleyen güvenlik çözümleri kullanmak.
Sonuç
Process Herpaderping, disk tabanlı güvenlik çözümlerini atlatmak için geliştirilen etkili bir saldırı tekniğidir.
Bu yöntem sayesinde, zararlı kod bellekte farklı bir şekilde yürütülürken, disk üzerinde tamamen farklı bir dosya bulunur.
Güvenlik çözümlerinin bu saldırıya karşı korunabilmesi için gelişmiş bellek analiz araçları ve EDR sistemleri kullanılması gerekmektedir.
Process Ghosting Nedir?
Process Ghosting, Process Doppelganging tekniğine benzeyen ancak farklı bir yaklaşım kullanan bir saldırı yöntemidir.
Bu teknik, disk üzerinde tamamen silinmiş gibi görünen bir dosyayı bellek içinde çalıştırarak güvenlik yazılımlarını kandırmayı amaçlar.
Process Ghosting Nasıl Çalışır?
- Saldırgan, hedef sisteme sahte bir dosya oluşturur.
- Bu dosya, Windows API kullanılarak “silinmek üzere işaretlenir” (delete-pending state).
- Dosyanın içine zararlı kod (payload) yazılır.
- Dosya tamamen kaybolmuş gibi görünse de, bellek içinde yürütülebilir bir imaj bölümü (image section) oluşturulur.
- Disk üzerindeki dosya artık erişilemez olsa da, bellek içindeki kod zararlı süreci başlatmak için kullanılır.
Bu yöntem sayesinde güvenlik yazılımları disk üzerinde analiz yapamaz, çünkü dosya artık sistem tarafından bile “var olmayan” bir hale getirilmiştir.
Process Ghosting Adımları
1. Geçici (Dummy) Dosya Oluşturma
İlk adımda, saldırganın kullanacağı boş bir dosya oluşturulur.
Win32 API: CreateFileA() – Disk üzerinde yeni bir dummy dosya oluşturur.

2. Dosyayı “Silinmek Üzere İşaretleme”
Bu dosya “delete-pending” durumuna getirilerek, antivirüs yazılımlarının dosyayı analiz etmesi veya silmesi engellenir.
NT API: NtSetInformationFile() – Dosyayı silinmek üzere işaretler.
Kullanılan bilgi sınıfı: FileDispositionInformation

3. Zararlı Kodu Dosyaya Yazma
Silinmek üzere işaretlenmiş dosyanın içine zararlı kod (payload) yazılır.
Win32 API: WriteFile() – Zararlı kodu dosyaya yazar.

4. Bellek İçin Image Section Oluşturma
Zararlı kodu içeren dosya kullanılarak bellekte yürütülebilir bir imaj bölümü oluşturulur.
Bu sayede dosya disk üzerinden tamamen kaybolsa bile, bellek içinde çalıştırılabilir bir alan yaratılmış olur.
NT API: NtCreateSection() – Bellek içinde yeni bir yürütülebilir bölüm oluşturur.

5. Dosya Tanıtıcısını (Handle) Kapatma
Silinmek üzere işaretlenmiş olan dosya sistem tarafından tamamen görünmez hale gelir ve saldırgan dosyanın bağlantısını keserek gizlenmeyi tamamlar.
Win32 API: CloseHandle() – Açık dosya tanıtıcısını kapatır.

6. Yeni Süreç (Process) Oluşturma
Silinmiş dosyanın içeriğinden oluşturulan bellek imajı kullanılarak zararlı bir süreç başlatılır.
NT API: NtCreateProcessEx() – Yeni bir süreç oluşturur.

7. Süreç Parametrelerini Güncelleme
Oluşturulan sürecin gerekli parametreleri bellekte güncellenir ve süreç çalışmaya hazır hale getirilir.
NT API: RtlCreateProcessParametersEx() – Sürecin parametrelerini oluşturur.

8. Yeni İş Parçacığı (Thread) Oluşturma
Son olarak, oluşturulan sürecin içinde zararlı kodun çalışmasını sağlayan yeni bir iş parçacığı başlatılır.
NT API: NtCreateThreadEx() – Hedef sürecin içinde yeni bir iş parçacığı oluşturur.

Process Ghosting’in Avantajları
Antivirüs ve EDR Sistemlerinden Kaçınma: Disk üzerinde analiz edilebilecek bir dosya kalmadığı için saldırının tespit edilmesi zorlaşır.
Güvenlik Yazılımlarını Kandırma: Dosya sistemde yokmuş gibi görünse de, bellek içinde yürütülebilir olarak kalır.
Adli Analiz Sürecini Zorlaştırma: Zararlı yazılımın çalıştırıldığına dair disk üzerinde herhangi bir iz bulunmaz.
Process Ghosting’e Karşı Güvenlik Önlemleri
Silinmek Üzere İşaretlenen Dosyaları İzleme: NtSetInformationFile() çağrılarının güvenlik çözümleri tarafından izlenmesi gerekir.
Disk ve Bellek İçeriğinin Uyuşmazlığını Analiz Etme: Disk üzerinde olmayan ancak bellek içinde çalışan süreçleri tespit eden EDR sistemleri kullanılmalıdır.
Davranışsal Analiz ve Tehdit Avcılığı: Geleneksel antivirüs çözümleri yerine, olay tabanlı tehdit avcılığı teknikleri kullanılmalıdır.
Sonuç
Process Ghosting, güvenlik çözümlerini atlatmak için disk üzerindeki zararlı dosyanın tamamen yok edilmesini sağlayan bir tekniktir.
Bu yöntem, saldırganlara zararlı yazılımı çalıştırırken aynı zamanda disk üzerinde iz bırakmama avantajı sunar.
Buna karşı korunmak için davranışsal analiz ve bellek içi süreç izleme çözümlerinin uygulanması gerekmektedir.