İçeriğe atla
0 XP 0
12 dkderinleşmeyle 13 dk60 XP6 etkinlik

Ağ bağlantıları ve enjeksiyon izleri

Bu derste
  • Bellek dökümünden komuta bağlantısını netscan ile bulmayı, sürece kadar izlemeyi ve malfind ile enjekte kodu yakalamayı öğren.
  • Bu derste netscan çıktısından 203.0.113.19 adresine giden C2 bağlantısını bulacaksın.
  • Sonra malfind ile başka sürecin içine yerleştirilmiş kodu yakalayacaksın.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Bir makinenin dışarıyla konuşması olayın en görünür ayağıdır. Bellek, açık bağlantıları ve kapanmış bağlantıların izini bir süre saklar. Bu derste fin-pc12 dökümündeki tek bir vakayı uçtan uca izleyeceksin.

Önce netscan çıktısından dışarı giden komuta (C2) bağlantısını bulacaksın. Sonra o bağlantıyı açan süreci ve ebeveynini çıkaracaksın. Ardından saldırganın kodunu meşru bir sürecin belleğine nasıl yerleştirdiğini göreceksin.

malfind ile enjekte bölgeyi bulacak, dosyaya dökecek ve içindeki adresi kanıta bağlayacaksın. Bağlantıyı bulmak işin yarısıdır, öbür yarısı onu açan kodun nereden geldiğini göstermektir.

Bağlantıyı okumak

windows.netscan eklentisi bellekteki soket ve bağlantı yapılarını imzadan tarar. Çıktıda protokol, yerel adres ve port, uzak adres ve port, bağlantı durumu, süreç kimliği, sahibi ve oluşturulma saati durur. Kapanmış bağlantılar da listeye düşer, çünkü yapıları bellekte bir süre daha kalır.

Analiz kuralı basittir: uzak adresi tanıyor musun ve o süreç ağa çıkmalı mı? notepad.exe 443 numaralı porttan dışarı bağlanıyorsa cevap hayırdır. Yönü de belirlersin.

Dışarı giden bağlantı çoğu zaman komuta kanalıdır. Dinleyen bir port ise açılmış bir arka kapı olabilir.

$ vol -f fin-pc12.raw windows.netscan
Proto  LocalAddr    LocalPort  ForeignAddr   ForeignPort  State        PID   Owner           Created
TCPv4  10.20.30.61  49871      203.0.113.19  443          ESTABLISHED  4980  svcupd.exe      2026-09-14 03:02:44
TCPv4  10.20.30.61  49604      10.20.30.10   445          ESTABLISHED  4412  powershell.exe  2026-09-14 03:07:18
TCPv4  10.20.30.61  49220      192.0.2.80    443          CLOSED       3188  WINWORD.EXE     2026-09-14 02:58:03
TCPv4  10.20.30.61  49588      203.0.113.19  443          CLOSED       -     -               2026-09-14 02:59:30
TCPv4  0.0.0.0      4444       0.0.0.0       0            LISTENING    5120  rundll32.exe    2026-09-14 03:09:15
İlk satır dışarı giden C2 kanalıdır. İkinci satır iç ağda 445 portuna yanal harekettir. Son satırda pslist'ten gizlenen rundll32.exe bir port dinliyor.

Satırları tek tek oku. svcupd.exe, 203.0.113.19 adresine 443 portundan bağlanmış. Adres iç ağa ait değil ve süreç geçici klasörden çalışıyor, ikisi birlikte güçlü bir işarettir. powershell.exe, 10.20.30.10 makinesinin 445 portuna bağlanmış.

Dosya paylaşımı üzerinden yanal hareketin klasik izidir. WINWORD satırı kapanmış bir bağlantıdır, belgenin açıldığı dakikaya denk gelir. Sahibi boş satır da aynı C2 adresine gidiyor. Onu açan süreç çoktan kapanmış, yani ilk aşama da bu adresle konuşmuş.

Son satır en ilginç olanı. pslist'ten gizlenen rundll32.exe 4444 portunu dinliyor. netscan sahibi bağlı listeden değil soket yapısından okuduğu için gizlenen süreci de ele verir.

Created sütununu olay çizelgesine taşırsın. Bağlantı saatlerini süreçlerin başlangıç saatleriyle yan yana koyarsın. Bu dökümde sıra şöyle: 02:58'de belge ağa çıkıyor, 02:59'da ilk aşama C2 adresine bağlanıp kapanıyor. 03:02'de svcupd.exe kanalı açıyor, 03:07'de PowerShell iç ağa uzanıyor.

03:09'da gizli rundll32.exe port dinlemeye başlıyor. Beş satır, saldırının ilk on bir dakikasını anlatıyor. Saatleri UTC olarak yazar, güvenlik duvarı kayıtlarıyla karşılaştırırken saat farkını hesaba katarsın.

Bu tabloyu okurken iki hatadan kaçınırsın. Birincisi CLOSED satırı etkin bağlantı saymaktır. Kapanmış bir satır geçmişi anlatır, o anki trafiği değil.

İkincisi bağlantı yokluğunu temizlik sanmaktır. Zararlı yazılım yalnız belirli aralıklarla bağlanıyor olabilir.

Döküm iki bağlantı arasındaki dakikada alınmışsa kanal boş görünür. Bu durumda ipucunu süreç ağacında, komut satırında ve bellekteki dizelerde ararsın. Uzak adresi tek başına yargılamak da hatadır. Bulut ve içerik dağıtım hizmetleri aynı adresi birçok müşteriyle paylaşır, o yüzden adresi hep süreçle birlikte okursun.

Etkinlik 1 / 6

netscan çıktısında incelenmesi gereken satırları işaretle.

Şüpheli satırlara tıkla. Birden fazla olabilir.

Bağlantıdan sürece, süreçten enjekte koda

Bağlantının süreç kimliği 4980. Ağaçta bu sürecin ebeveyni 4412 numaralı powershell.exe, onun ebeveyni de WINWORD.EXE. Saatler de tutuyor: belge 02:58'de ağa çıkmış, C2 bağlantısı 03:02'de açılmış.

Zincir burada bitmez. Saldırgan çoğu zaman kendi süreciyle yetinmez.

explorer.exe ya da svchost.exe gibi meşru bir sürecin belleğine kod yazar ve o kodu orada çalıştırır. Buna süreç enjeksiyonu denir. Böylece zararlı, yıllardır çalışan tanıdık bir sürecin adı altında saklanır. svcupd.exe kapatılsa bile enjekte kod çalışmaya devam edebilir.

Enjekte bölgeyi bulmak için bellek düzenini bilmen gerekir. Windows her sürecin belleğini VAD adı verilen bir ağaçta izler ve her bölgeye bir koruma bayrağı verir. Diskteki bir dosyadan eşlenen kod, dosyaya bağlı (image) bir bölgede durur.

Enjekte kod ise hiçbir dosyaya bağlı olmayan özel (private) belleğe yazılır. Çalışabilmesi için de bölge hem yazılabilir hem çalıştırılabilir olur. Normal kodda bu ikisi yan yana durmaz. malfind tam olarak bu birleşimi arar ve bulduğu bölgenin ilk baytlarını da gösterir.

$ vol -f fin-pc12.raw windows.malware.malfind --pid 1204
PID   Process       Start VPN   End VPN     Tag   Protection              PrivateMemory  Notes
1204  explorer.exe  0x1f2a0000  0x1f2b3fff  VadS  PAGE_EXECUTE_READWRITE  1              MZ header

4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00  MZ..............
b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00  ........@.......
Özel bellek, yazılabilir ve çalıştırılabilir koruma, başta MZ başlığı: üçü yan yana durursa enjeksiyon güçlü ihtimaldir.

Satırı sütun sütun oku. Tag değeri VadS, bölgenin özel bellek için ayrıldığını söyler. PrivateMemory 1 aynı şeyi doğrular: bölge bir dosyaya bağlı değil. Protection sütunu PAGE_EXECUTE_READWRITE, yani bölge hem yazılabilir hem çalıştırılabilir.

Notes sütunundaki MZ header, bölgenin ilk iki baytının 4d 5a olduğunu gösterir. Bu iki bayt her Windows çalıştırılabilirinin başında durur. Yani explorer.exe'nin belleğinde, diskte karşılığı olmayan tam bir program var.

Bir not: malfind güncel Volatility 3'te windows.malware.malfind adına taşındı. Eski windows.malfind adı şimdilik çalışır, ama yeni adı gösteren bir uyarı basar ve kaldırılması planlanmıştır.

Derinleş:VAD ağacı ve bellek koruma bayrakları

Windows bir sürecin sanal adres alanını Virtual Address Descriptor (VAD) adı verilen dengeli bir ağaçta izler. Her düğüm bir bellek bölgesini ve o bölgenin nereden geldiğini tanımlar. Bir bölge ya bir dosyadan eşlenir ya da hiçbir dosyaya bağlı olmayan özel bellektir. Diskteki bir çalıştırılabilirden yüklenen kod, image türünde ve başlangıçta PAGE_EXECUTE_WRITECOPY korumalı bir bölgede durur.

İşletim sistemi yüklü modüllere çalıştırma iznini böyle verir. malfind önce koruma bayrağına bakar: bölge hem yazılabilir hem çalıştırılabilir mi? Sonra kaynağına bakar: bölge ya özel bellektir ya da dosyaya bağlı olduğu hâlde beklenen WRITECOPY dışında bir koruma taşır.

İki koşul birlikte tutarsa bölgeyi raporlar. Güncel sürüm, yazılamayan ama çalıştırılabilen bir bölgede sonradan değiştirilmiş sayfa bulursa onu da işaretler. windows.malware.hollowprocesses ise tersinden bakar.

Sürecin ana çalıştırılabilirini taşıyan bölgenin beklenen WRITECOPY korumasını taşıyıp taşımadığını denetler. PEB'deki taban adresinin, süreç yapısındaki bölüm adresiyle aynı olup olmadığına da bakar. İçi boşaltılmış bir süreçte bu değerlerden en az biri bozulur.

Etkinlik 2 / 6

malfind eklentisi bellekte öncelikle neyi arar?

Tek bir eklenti yeterli değildir. Bağlantıdan sürece, süreçten ebeveyne, oradan da enjekte koda giden bir zincir kurarsın. Her adım bir öncekini doğrular. netscan satırı süreç kimliğini verir, pstree o sürecin nereden doğduğunu söyler.

cmdline çağrılan komutu gösterir, malfind kodun nereye saklandığını bulur. Zincirin son halkası örneği dosyaya döküp mühürlemektir. Özeti alınmamış bir örnek, analiz ekibine devredilemez. Zincirde bir halka kopuksa, örneğin süreç kapanmış ve cmdline boş dönmüşse, bunu da not eder ve bir sonraki halkaya geçersin.

Etkinlik 3 / 6

C2 bağlantısını kaynağına kadar izleme adımlarını sırala.

Sürükleyip doğru sıraya koy.

Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.

  • 1malfind ile süreçte enjekte kod ara
  • 2cmdline ile çağrılan tam komutu oku
  • 3Bulunan bölgeyi dosyaya dökerek özetini al
  • 4netscan ile dış adrese giden bağlantıyı bul
  • 5Bağlantının süreç kimliğini not et
  • 6pstree ile o sürecin ebeveynini çıkar

Enjeksiyon türleri ve yanlış pozitifler

Enjeksiyon tek bir teknik değildir ve her türü bellekte farklı iz bırakır. Klasik DLL enjeksiyonunda yabancı bir kitaplık diskten sürece yüklenir. Bölge bir dosyaya bağlıdır, bu yüzden onu malfind değil dlllist ve ldrmodules yakalar.

Yansıtıcı yüklemede kod bir dosyadan geçmeden belleğe kurulur. Bölge özel bellekte durur ve malfind onu çoğu zaman MZ başlığından tanır.

Süreç içini boşaltmada saldırgan meşru bir programı askıda başlatır, belleğini boşaltır ve kendi kodunu yazar. Bunu windows.malware.hollowprocesses bulur. İş parçacığı yönlendirmede bir iş parçacığı dosyaya ait olmayan bir adresten başlar. windows.malware.suspicious_threads bu başlangıç adresini denetler.

malfind yanlış pozitif de üretir. .NET uygulamaları ve tarayıcılar gibi anlık derleyici (JIT) kullanan programlar çalışırken kod üretir. Bu yüzden onlarda da yazılabilir ve çalıştırılabilir bölgeler görebilirsin.

Bazı hata ayıklayıcılar ve oyun koruma katmanları da aynı deseni kurar. Tersi de olur: MZ başlığı olmayan bir bölge temiz değildir.

Kabuk kodu doğrudan makine komutlarıyla başlar ve başlık taşımaz. O yüzden başlıksız bölgeyi atlamaz, döküp içeriğine bakarsın. Önceliği bağlam belirler: bölgenin sahibi olan süreç, ağ bağlantısı ve süreç ağacı birlikte okunur.

Türü ayırt etmek temizliği de belirler. Klasik DLL enjeksiyonunda diskte bir DLL dosyası vardır ve kaldırılması gerekir. Yansıtıcı yüklemede diskte dosya yoktur, ama kodu her açılışta yeniden yükleyen bir kalıcılık kaydı çoğu zaman vardır.

İçi boşaltılmış süreçte diskteki meşru dosya sağlamdır, sorun yalnız bellektedir. Bu yüzden rapora yalnız 'enjeksiyon bulundu' yazmazsın. Türünü, kaynağını ve kodun yeniden yüklenme yolunu da yazarsın, çünkü kurtarma ekibi buna göre çalışır.

Etkinlik 4 / 6

malfind iki süreçte yazılabilir ve çalıştırılabilir bölge buldu. Hangisini önce incelersin?

Önce kodu oku, sonra çıktıyı seç.

PID   Process       Protection              PrivateMemory  Notes
1204  explorer.exe  PAGE_EXECUTE_READWRITE  1              MZ header
2204  chrome.exe    PAGE_EXECUTE_READWRITE  1

Kodu doğrulamak ve savunma

Şüpheli bölgeyi bulduğunda onu dosyaya döker ve mühürlersin. malfind eklentisine --dump verirsen her bölge ayrı bir dosyaya yazılır. Dosyanın özetini alır, sonra içindeki okunabilir dizelere bakarsın. Alan adı, kullanıcı ajanı ve hata mesajı gibi dizeler çoğu zaman yapılandırmayı doğrudan verir.

Bulduğun göstergeyi bütün bellekte de ararsın. windows.vadyarascan bir YARA kuralını ya da tek bir dizeyi bütün süreçlerin belleğinde tarar. Böylece aynı göstergeyi taşıyan başka bir süreç varsa onu da yakalarsın.

$ vol -f fin-pc12.raw windows.malware.malfind --pid 1204 --dump
PID   Process       Start VPN   Protection              File output
1204  explorer.exe  0x1f2a0000  PAGE_EXECUTE_READWRITE  pid.1204.vad.0x1f2a0000-0x1f2b3fff.dmp

$ sha256sum pid.1204.vad.0x1f2a0000-0x1f2b3fff.dmp
2f91c4a87b0d35e6ac128f4d70b9e35a1c6d820fb47e93a05d1c7826b4f09e3d  pid.1204.vad.0x1f2a0000-0x1f2b3fff.dmp
$ strings -a pid.1204.vad.0x1f2a0000-0x1f2b3fff.dmp | grep -E 'http|Mozilla'
http://cdn-guncelleme.example/gate.php
Mozilla/5.0 (Windows NT 10.0; Win64; x64)

$ vol -f fin-pc12.raw windows.vadyarascan --yara-string "cdn-guncelleme.example"
PID   ImageFileName  Rule  Component  Value
1204  explorer.exe   r1    $a         63 64 6e 2d 67 75 6e 63 ...
4980  svcupd.exe     r1    $a         63 64 6e 2d 67 75 6e 63 ...
Döktüğün bölgenin özeti ve dizeleri kanıt olur. vadyarascan aynı göstergeyi taşıyan iki süreç buldu.

Çıktıyı adım adım oku. Dökülen dosyanın adı süreç kimliğini ve bölgenin başlangıç ile bitiş adresini taşır. Özet, örneği analiz ekibine devrederken kimliğidir.

strings çıktısında bir adres ve bir tarayıcı kimliği çıktı. Zararlı, C2 sunucusuna sıradan bir tarayıcı gibi görünerek bağlanıyor.

vadyarascan aynı alan adını hem explorer.exe hem svcupd.exe belleğinde buldu. Bu da enjekte kodun svcupd.exe'den geldiğini destekler. Linux dökümünde aynı zinciri linux.sockstat, linux.pstree ve linux.malware.malfind ile kurarsın. Mantık aynıdır, yalnız eklenti adları değişir.

Bulguyu kanıt düzeyine çıkaran şey ikinci bir kaynaktır. Bellekte gördüğün bağlantı güvenlik duvarı ya da vekil sunucu kaydında da görünmelidir. İki kaynağın saatleri örtüşürse gösterge sağlamlaşır.

Kanalı kapatma kararını ekiple birlikte verirsin. Bağlantıyı hemen kesmek saldırganı uyarabilir, kimi olayda izlemeyi sürdürmek daha çok kanıt toplatır. Savunmada Sysmon üç olayla bu tekniği yakalar.

8 numaralı olay başka bir süreçte iş parçacığı açılmasını kaydeder. 10 numaralı olay bir sürecin başka bir sürecin belleğine erişmesini gösterir. 25 numaralı olay ise süreç görüntüsünün kurcalanmasını yakalar. EDR ürünleri de belleği düzenli tarar.

Etkinlik 5 / 6

Volatility 3'te ağ bağlantılarını tarayan eklenti: windows.____

netscan çıktısında bulduğun bağlantı, olayı kanıtlamak için tek başına yeterli değildir. Bağlantıyı açan kodun nereden geldiğini malfind ile doğrularsın. İki eklentinin birlikte çalışması, tek eklentinin verdiğinden çok daha güçlü bir kanıt zinciri kurar.

Zincirin sağlamlığı enjekte bölgenin doğasına dayanır. Kabuk kodu ya da yansıtıcı yüklenen kod özel belleğe yazılır. Diskte ona karşılık gelen bir dosya olmadığı için dosya tarayan bir antivirüs onu çoğu zaman göremez.

Etkinlik 6 / 6

Doğru mu, yanlış mı?

Kabuk kodu ya da yansıtıcı yüklemeyle yapılan enjeksiyonda kullanılan bellek bölgesi, diskte karşılık gelen bir dosyaya sahip olmaz.

Bu derste bir hata mı gördün? Bildir