Güvenlik Olayı Sonrası Linux Sistem Analizi (Forensics)
Sabah 03:47’de telefonun çalması, hiçbir sistem yöneticisinin görmek istemediği bir senaryonun başlangıcıdır. “Sunucularda garip bir şeyler oluyor” mesajıyla uyanmak ve ardından sisteme bağlandığında tanımadığın processleri, beklenmedik network trafiğini ve değiştirilmiş dosyaları görmek… İşte bu yazı tam olarak bu anın hemen sonrasında ne yapman gerektiğini anlatıyor.
Linux forensics, yani adli sistem analizi, bir güvenlik olayı yaşandıktan sonra sistemde ne olduğunu, nasıl olduğunu ve kimin yaptığını ortaya çıkarmaya çalışma sürecidir. Bu süreç hem delilleri korumayı hem de sistemi anlamayı içerir. Yanlış bir adım, değerli delillerin kaybolmasına yol açabilir. O yüzden metodoloji her şeyden önce gelir.
İlk Müdahale: Paniklemeden Önce Yapman Gerekenler
Sisteme ilk bağlandığında içgüdüsel tepkin muhtemelen “her şeyi kapatayım ve yeniden başlatayım” olacaktır. Bunu kesinlikle yapma. Yeniden başlatma, RAM’deki kritik verileri, aktif network bağlantılarını ve çalışan processlerin bilgilerini siler. Bunların tamamı saldırganı tespit etmende hayati önem taşır.
İlk yapman gereken şey sistemi izole etmek. Network kablosunu fiziksel olarak çekmek yerine firewall kurallarıyla izole etmeyi tercih et, çünkü fiziksel izolasyon sırasında da önemli loglar kaybolabilir.
# Sistemi network seviyesinde izole et
iptables -I INPUT -j DROP
iptables -I OUTPUT -j DROP
iptables -I FORWARD -j DROP
# Sadece kendi analiz IP'ne izin ver
iptables -I INPUT -s 192.168.1.50 -j ACCEPT
iptables -I OUTPUT -d 192.168.1.50 -j ACCEPT
Ardından hemen bir analiz notu dosyası aç ve her yaptığın komutu, her bulduğun şeyi zaman damgasıyla kaydet. Bu hem senin için referans hem de ileride hukuki süreç gerekirse delil zinciri oluşturur.
Uçucu Verileri Topla: Önce RAM, Sonra Her Şey
Forensics dünyasında “volatility order” yani uçuculuk sırası denen bir kavram var. En çabuk kaybolan verilerden başlayarak toplamalısın. RAM içeriği, aktif bağlantılar, çalışan processler bunların başında gelir.
# Sistem bilgilerini hemen kaydet
date >> /tmp/incident_notes.txt
uname -a >> /tmp/incident_notes.txt
uptime >> /tmp/incident_notes.txt
who >> /tmp/incident_notes.txt
w >> /tmp/incident_notes.txt
last | head -50 >> /tmp/incident_notes.txt
# Aktif network bağlantıları - kritik!
ss -tulpn >> /tmp/incident_notes.txt
netstat -tulpn >> /tmp/incident_notes.txt
netstat -an >> /tmp/incident_notes.txt
# ARP tablosu (iç ağda lateral movement için önemli)
arp -a >> /tmp/incident_notes.txt
ip neigh >> /tmp/incident_notes.txt
Aktif network bağlantılarına baktığında beklenmedik bir port dinleniyor mu, dışarıya garip IP’lere bağlantı gidiyor mu, bunları not et. Gerçek bir senaryoda karşılaştığım vakalardan birinde, saldırgan 443 portunu HTTPS trafiği gibi göstermek için kullanmış ama hedef IP bir Tor exit node’uydu. Bu detay ancak bağlantıları dikkatli inceleyince ortaya çıktı.
# Çalışan processleri detaylıca al
ps auxf >> /tmp/incident_notes.txt
ps -eo pid,ppid,user,cmd,lstart >> /tmp/incident_notes.txt
# Process'lerin açık dosyaları
lsof -n >> /tmp/incident_notes.txt 2>&1
# Belirli bir şüpheli process'i incele (PID yerine gerçek numarayı yaz)
ls -la /proc/1337/
cat /proc/1337/cmdline
cat /proc/1337/environ
ls -la /proc/1337/fd/
Kullanıcı ve Yetki Analizi
Saldırganlar genellikle ya var olan bir kullanıcıyı ele geçirir ya da yeni kullanıcılar oluşturur. Sistem kullanıcılarını mutlaka incele.
# Kullanıcı listesi ve son eklenenler
cat /etc/passwd
cat /etc/shadow
cat /etc/sudoers
cat /etc/sudoers.d/*
# UID 0 olan kullanıcılar (root yetkisi olan)
awk -F: '($3 == 0) {print}' /etc/passwd
# Son 7 günde değiştirilmiş kullanıcı dosyaları
find /home -mtime -7 -type f 2>/dev/null
find /root -mtime -7 -type f 2>/dev/null
# SSH authorized keys kontrolü
find / -name "authorized_keys" 2>/dev/null -exec cat {} ;
Gerçek bir vakada, saldırgan /etc/passwd dosyasına support:x:0:0::/root:/bin/bash şeklinde bir satır eklemiş ve bu kullanıcıya root yetkisi vermişti. Gözden kaçması çok kolay, özellikle dosyanın sonuna değil ortasına eklenirse.
Log Analizi: Hikayeyi Geri Sar
Loglar, olayın kronolojisini oluşturmanda en kritik kaynaktır. Ama dikkat et, sofistike saldırganlar log temizler. Yine de her zaman izler kalır.
# Auth loglarını incele
grep -i "failed" /var/log/auth.log | tail -100
grep -i "accepted" /var/log/auth.log | tail -50
grep -i "sudo" /var/log/auth.log | tail -50
# Brute force girişimleri
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# Başarılı SSH girişleri
grep "Accepted" /var/log/auth.log | awk '{print $11, $13}'
# Syslog genel inceleme
tail -500 /var/log/syslog
tail -500 /var/log/messages
# Cron job logları (persistence mekanizması için)
cat /var/log/cron
grep -i cron /var/log/syslog
# Systemd journal ile daha detaylı log analizi
journalctl --since "2024-01-15 00:00:00" --until "2024-01-15 23:59:59"
journalctl -u ssh --since "yesterday"
journalctl -p err --since "1 week ago"
# Silinmiş logları kontrol et (log rotasyon geçmişi)
ls -la /var/log/
zcat /var/log/auth.log.2.gz | grep "Accepted"
Dosya Sistemi Analizi: Değişen Şeyleri Bul
Saldırganlar sisteme girdikten sonra bir şeyler bırakır, bir şeyleri değiştirir. Bu değişiklikleri tespit etmek analiz sürecinin önemli bir parçasıdır.
# Son 24-48 saatte değiştirilmiş dosyalar
find / -mtime -1 -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null | head -100
# SUID/SGID dosyaları - bunlar privilege escalation için kullanılır
find / -type f ( -perm -4000 -o -perm -2000 ) 2>/dev/null
# Olmaması gereken yerlerde çalıştırılabilir dosyalar
find /tmp /var/tmp /dev/shm -type f -executable 2>/dev/null
find /tmp /var/tmp /dev/shm -name "*.sh" -o -name "*.py" -o -name "*.pl" 2>/dev/null
# Gizli dosyalar (nokta ile başlayan)
find / -name ".*" -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null | grep -v ".pyc"
Şüpheli bir dosya bulduğunda hash’ini al ve VirusTotal’e gönder ya da bilinen kötücül yazılım hash veritabanlarıyla karşılaştır.
# Şüpheli dosyanın hash'ini al
md5sum /tmp/suspicious_file
sha256sum /tmp/suspicious_file
# Dosya türünü anla
file /tmp/suspicious_file
strings /tmp/suspicious_file | head -50
# Dosyanın hangi processtan geldiğini bul
lsof /tmp/suspicious_file
fuser /tmp/suspicious_file
Ağ Trafiği Analizi
Eğer sisteme tcpdump ya da Wireshark benzeri araçlar kuruluysa veya kurabiliyorsan, aktif trafiği yakala. Bu saldırganın hala sistemde aktif olup olmadığını ve nereyle iletişim kurduğunu gösterir.
# Kısa süreli trafik yakalama
tcpdump -i eth0 -w /tmp/capture.pcap -c 1000
# Belirli IP'nin trafiğini izle
tcpdump -i eth0 host 185.220.101.45 -w /tmp/suspicious_traffic.pcap
# DNS sorgularını izle (data exfiltration için DNS tünelleme kullanılıyor olabilir)
tcpdump -i eth0 port 53 -A
# Şüpheli portları izle
tcpdump -i eth0 port not 80 and port not 443 and port not 22
DNS sorgularını özellikle incele. DNS tünelleme, bir saldırganın güvenlik duvarlarını aşarak veri çekme yöntemlerinden biridir. Çok uzun subdomain isimleri veya yüksek frekanslı DNS sorguları bu tekniğin işaretidir.
Persistence Mekanizmalarını Tespit Et
Saldırganlar sisteme erişimi kaybetmemek için çeşitli persistence teknikleri kullanır. Bunları temizlemeden sistemi güvende saymak mümkün değil.
# Crontab'ları kontele et
crontab -l
crontab -u root -l
ls -la /etc/cron*
cat /etc/crontab
for user in $(cut -f1 -d: /etc/passwd); do echo "=== $user ==="; crontab -u $user -l 2>/dev/null; done
# Systemd servisleri
systemctl list-units --type=service
systemctl list-unit-files | grep enabled
ls -la /etc/systemd/system/
ls -la /lib/systemd/system/
# Şüpheli servis dosyasını incele
cat /etc/systemd/system/suspicious_service.service
# Init.d scriptleri (eski sistemlerde)
ls -la /etc/init.d/
ls -la /etc/rc*.d/
# Bash startup dosyaları
cat /root/.bashrc
cat /root/.bash_profile
cat /home/*/.bashrc
cat /etc/profile
cat /etc/profile.d/*.sh
# LD_PRELOAD hijacking kontrolü
cat /etc/ld.so.preload
env | grep LD_
Bir keresinde, saldırgan /etc/profile.d/ dizinine update-check.sh adında bir dosya koymuştu. İsim meşru bir sistem scripti gibi görünüyordu ama içeriği her kullanıcı oturumu açıldığında bir reverse shell başlatıyordu. Bu tür isimlendirme hileleri çok yaygın.
Kernel ve Rootkit Analizi
Rootkit’ler, kernel seviyesinde gizlenebilir ve standart araçlarla tespit edilemez. Bu yüzden hem kernel modüllerini hem de sistem çağrılarını incelemelisin.
# Yüklü kernel modülleri
lsmod
cat /proc/modules
# Olağandışı kernel modüllerini ara
lsmod | grep -v "^Module" | awk '{print $1}' > /tmp/loaded_modules.txt
# Rootkit taraması için chkrootkit ve rkhunter
chkrootkit
rkhunter --check --skip-keypress
# /proc üzerinden process gizleme kontrolü
# Eğer ps ile görünen PID sayısı /proc'takinden azsa rootkit şüphesi var
ls /proc | grep "^[0-9]" | wc -l
ps aux | wc -l
Eğer rootkit şüphesi güçlüyse, sistemi açık tutarken temiz bir live CD veya network boot ile analiz yapmayı düşün. Çünkü rootkit’ler ls, ps, netstat gibi temel araçları da değiştirmiş olabilir. Kendi araçlarını ve shell’ini güvenilir bir kaynaktan çalıştırmak kritik önem taşır.
Disk İmajı Al: Delilleri Koru
Analiz tamamlanmadan önce disk imajı almak, delillerin korunması açısından şarttır. Bu imaj hem yedek hem de ileride daha derin offline analiz için kullanılabilir.
# dd ile disk imajı al
dd if=/dev/sda of=/mnt/external/disk_image.dd bs=4M conv=sync,noerror status=progress
# Hash ile bütünlük doğrula
sha256sum /dev/sda > /mnt/external/disk_image.sha256
sha256sum /mnt/external/disk_image.dd >> /mnt/external/disk_image.sha256
# dcfldd kullanıyorsan (hash'i otomatik alır)
dcfldd if=/dev/sda of=/mnt/external/disk_image.dd hash=sha256 hashlog=/mnt/external/hash.log
# Sadece belirli bir partition imajı
dd if=/dev/sda1 of=/mnt/external/partition1.dd bs=4M status=progress
İmaj alma sırasında kaynak diski asla değiştirme. Read-only mount kullan ve imajı her zaman harici bir diske veya ağ üzerinden güvenli bir konuma yaz.
Olayın Zaman Çizelgesini Oluştur
Topladığın tüm verileri bir araya getirip kronolojik sırayla dizmen gerekiyor. Bu zaman çizelgesi hem analizi tamamlamana hem de raporlamaya yardımcı olur.
# Timeline oluşturmak için log2timeline/plaso kullan
log2timeline.py timeline.plaso /mnt/disk_image/
# Sonuçları filtrele
psort.py -o l2tcsv timeline.plaso "date > '2024-01-15 00:00:00'" > timeline.csv
# Basit bir timeline için mactime (The Sleuth Kit)
fls -r -m / /mnt/disk_image/ > bodyfile.txt
mactime -b bodyfile.txt -d "2024-01-15" > timeline.txt
Manuel olarak da yapabilirsin. Auth loglarındaki timestamp’ler, dosya değiştirme zamanları, cron job çalışma zamanları ve network log zaman damgaları bir araya getirildiğinde genellikle net bir tablo ortaya çıkar.
Rapor Yazma ve Eskalasyon
Analiz tamamlandıktan sonra bulgularını belgelemen gerekiyor. Teknik ve teknik olmayan okuyuculara hitap eden iki ayrı özet hazırlamak iyi bir pratiktir.
Raporunda şunlar mutlaka yer almalı:
- Olay özeti: Ne oldu, ne zaman tespit edildi, etki kapsamı nedir
- İlk giriş noktası: Saldırgan sisteme nasıl girdi (brute force, zafiyetten yararlanma, kimlik bilgisi çalma)
- Lateral movement: Sistemde nasıl yayıldı, hangi hesapları kullandı
- Persistence mekanizmaları: Sisteme kalıcı erişim için ne kurdu
- Exfiltration: Veri çalındıysa ne çalındı, nereye gönderildi
- Etkilenen sistemler: Sadece bu sunucu mu, başka sistemlere geçildi mi
- Temizleme adımları: Ne yapıldı, ne yapılması gerekiyor
- Öneriler: Benzer olayların önlenmesi için ne yapılmalı
Temizleme ve Hardening
Analiz tamamlandıktan sonra sistemi temizlemek ve güvenliği artırmak gerekiyor. Ama dikkat et, temizleme öncesi tüm delillerin kopyalandığından emin ol.
# Şüpheli kullanıcıları kaldır
userdel -r suspicious_user
# Yetkisiz SSH anahtarlarını temizle
# /root/.ssh/authorized_keys içindeki yetkisiz anahtarları sil
# Şüpheli cron job'ları kaldır
crontab -r -u suspicious_user
rm /etc/cron.d/suspicious_cron
# Saldırgan tarafından eklenen servis'i devre dışı bırak
systemctl stop malicious_service
systemctl disable malicious_service
rm /etc/systemd/system/malicious_service.service
systemctl daemon-reload
# Tüm kullanıcıların şifrelerini sıfırla
passwd root
passwd other_user
# Açık olan backdoor portunu kapat
iptables -A INPUT -p tcp --dport 31337 -j DROP
Temizleme sonrası sistemi restore etmek yerine yeniden kurmayı ciddi ciddi değerlendirmelisin. Rootkit varsa, her köşeyi temizlediğinden hiçbir zaman %100 emin olamazsın. “Nuke and pave” yani sıfırdan kurulum, çoğu zaman en güvenli yoldur.
Sonuç
Güvenlik olayı sonrası sistem analizi, hem teknik bilgi hem de metodoloji disiplini gerektiren bir süreçtir. En önemli kuralı tekrar vurgulayayım: panikle hareket etme, önce delilleri koru. Yeniden başlatmak, dosyaları silmek, logsuz komutlar çalıştırmak, bunların hepsi analizi zorlaştırır ve bazen imkansız kılar.
Pratik tavsiyem şu: Bu tür bir olay yaşamadan önce hazırlıklı ol. Sistemlerinize düzenli log gönderimi ayarla, bir SIEM çözümü kullan, disk imajı alma prosedürünü önceden prova et, temel forensics araçlarının kurulu olduğu bir USB hazırla. Kriz anında hazır prosedürlerin olması saatlerce zaman kazandırır.
Son olarak, yasal boyutu unutma. Eğer saldırı dışarıdan geliyorsa ve hukuki işlem düşünülüyorsa, delil zinciri çok önemlidir. Bir adım bile yanlış atılırsa o delil mahkemede kabul görmeyebilir. Şüpheli durumlarda bir dijital forensics uzmanı veya hukuk danışmanı ile iletişime geç.
Her güvenlik olayı acı vericidir ama her olaydan öğrenilen dersler sistemi daha güçlü kılar. Dokümantasyonu iyi tut, öğrendiklerini ekiple paylaş ve bir dahaki sefere daha hazırlıklı ol.
