Merhaba
Seri: SOC Analistleri İçin Log İzleme Rehberi (Ödeme Kuruluşları)
- Log İzleme Temelleri
- Mevzuat, Retention ve Silme Yasağı
- Windows/AD ve Linux Hardening (Bu Yazı)
- Uygulama ve Veritabanı Katmanı
- Ağ Katmanı (Firewall/IDS-IPS/WAF/DDoS)
- Container ve Kubernetes
- Bulut (AWS/Azure/GCP)
- XDR/EDR ve Bütünsel Korelasyon
Ön Not – Kapsam ve Amaç
Bu seri, kritik logları izlemeyi ve anlamayı öğretmek amacıyla yazılmıştır. Odak noktası tek tek ürünler değil, sürecin kendisidir: hangi olayın neden önemli olduğu, nasıl toplandığı, korele edildiği ve korunduğu.
Metindeki donanım, yazılım ve uygulama örnekleri (ürün adları, Event ID’ler, konfigürasyon parametreleri, komutlar) versiyona, sürüme ve yıllara göre değişiklik gösterebilir. Bir ayarın adı değişebilir, bir ürün yaşam döngüsünü tamamlayabilir, yeni bir alternatif ortaya çıkabilir. Bu nedenle örnekleri birebir kopyalanacak reçeteler olarak değil, mantığı kavramak için birer illüstrasyon olarak okuyun; kendi ortamınıza uygularken ilgili üreticinin güncel dokümantasyonunu esas alın.
Aynı şekilde, “Ödeme Kuruluşları İçin PCI DSS, HIPAA ve Türkiye Mevzuatı Bağlamında” hazırlanan bölümler de yürürlükteki düzenlemelere dayanır ve mevzuat değiştikçe güncellenmesi gerekir. PCI DSS sürümleri, TCMB tebliğleri, KVKK/MASAK düzenlemeleri ve retention süreleri zaman içinde değişebilir. Bu rehber hukuki veya denetim danışmanlığı yerine geçmez; nihai uygulama için kurumunuzun uyumluluk ekibine, QSA’sına ve güncel resmi mevzuata başvurun.
Kısacası: amaç, süreci ve mantığı anlamaktır. Örnekler bugünün fotoğrafıdır; ilke ise kalıcıdır.
Serinin üçüncü bölümü. Mevzuat ve retention çerçevesini kurduktan sonra işin teknik tarafına iniyoruz: Windows/Active Directory ve Linux sunucularında PCI DSS uyumlu log hardening. Kritik Event ID’ler (4728 , 1102 , 4719…), Advanced Audit Policy, Linux auditd kural seti, journald sealing, silme yasağının katmanlı teknik zorlaması ve SIEM korelasyon kuralları.
4.13. Linux auditd – Zorunlu Kural Seti (PCI DSS 10.2.1.x)
Windows tarafını GPO ve Advanced Audit Policy ile ele aldık. Linux tarafında ise varsayılan kurulum PCI DSS uyumlu değildir: auditd kuruludur ama boş kuralla gelir, e 2 (immutable) kapalıdır ve loglar rotate edilip silinir. Aşağıdaki konfigürasyon uygulanmadan hiçbir Linux sunucu ödeme kuruluşu denetiminden geçemez.
/etc/audit/rules.d/pci-dss.rules (Özet – Kritik Bloklar):
## ---- Temel Ayarlar ----
-D # Mevcut kuralları temizle
-b 8192 # Buffer (yüksek trafik için)
-f 1 # Failure mode: 1=printk, 2=panic (kritik sistemde 2)
## 10.2.1.5 - Kimlik doğrulama bilgisi değişimi (Windows 4720/4722/4725/4726/4738)
-w /etc/passwd -p wa -k pci_identity
-w /etc/shadow -p wa -k pci_identity
-w /etc/gshadow -p wa -k pci_identity
-w /usr/sbin/useradd -p x -k pci_user_mgmt
-w /usr/sbin/usermod -p x -k pci_user_mgmt
-w /usr/sbin/userdel -p x -k pci_user_mgmt
-w /usr/sbin/groupadd -p x -k pci_group_mgmt
-w /usr/sbin/groupdel -p x -k pci_group_mgmt
-w /usr/bin/gpasswd -p x -k pci_group_mgmt
-w /usr/bin/passwd -p x -k pci_passwd
## 10.2.1.2 - Root/admin işlemleri (Windows 4672)
-w /etc/sudoers -p wa -k pci_privilege
-w /etc/sudoers.d/ -p wa -k pci_privilege
-w /usr/bin/sudo -p x -k pci_privilege
-w /bin/su -p x -k pci_privilege
-a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid -F auid>=1000 -F auid!=4294967295 -k pci_privesc
## Process oluşturma (Windows 4688)
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=4294967295 -k pci_exec
-a always,exit -F arch=b32 -S execve -F auid>=1000 -F auid!=4294967295 -k pci_exec
## 10.2.1.1 - CHD (kart verisi) erişimi ← YOL KENDİ ORTAMINA GÖRE
-w /var/lib/pgsql/data/ -p rwa -k pci_chd_access
-w /opt/payment/data/ -p rwa -k pci_chd_access
## 10.2.1.3 + 10.2.1.6 - Audit log erişimi ve audit servisi (Windows 1102/4719)
-w /var/log/audit/ -p wra -k pci_audit_access
-w /etc/audit/ -p wa -k pci_audit_config
-w /usr/sbin/auditctl -p x -k pci_audit_tools
-w /var/log/secure -p wa -k pci_log_tamper
-w /var/log/messages -p wa -k pci_log_tamper
-w /var/log/wtmp -p wa -k pci_session
-w /var/log/btmp -p wa -k pci_session
## 10.2.1.7 - Nesne silme + izin değişimi (Windows 4670)
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k pci_delete
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F auid>=1000 -F auid!=4294967295 -k pci_perm_mod
-a always,exit -F arch=b64 -S chown,fchown,fchownat,lchown -F auid>=1000 -F auid!=4294967295 -k pci_perm_mod
## Zaman değişimi (PCI 10.6), kernel modül (rootkit), firewall, exfil araçları
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k pci_time_change
-a always,exit -F arch=b64 -S init_module,delete_module,finit_module -k pci_module
-w /usr/bin/scp -p x -k pci_exfil
-w /usr/bin/nc -p x -k pci_exfil
-w /usr/bin/curl -p x -k pci_exfil
## 🔒 KURALLARI KİLİTLE - PCI DSS 10.3.2 (EN SONA!)
-e 2
-e 2kritiktir. Audit kurallarını immutable yapar; değiştirmek için reboot gerekir. PCI DSS 10.3.2 (“loglar değiştirilmeye karşı korunmalı”) ve ödeme kuruluşu silme yasağı için zorunludur.olmadan saldırganile tüm kuralları anında siler.
auditd Ana Konfigürasyonu –/etc/audit/auditd.conf
log_format = ENRICHED # UID→isim çözümlemesi (SIEM için kritik)
max_log_file = 100 # MB
max_log_file_action = KEEP_LOGS # 🔴 ROTATE DEĞİL - log KAYBEDİLMEZ
space_left_action = EMAIL
admin_space_left_action = SINGLE # 🔴 Tek kullanıcı moduna geç
disk_full_action = HALT # 🔴 Log yazılamıyorsa SİSTEM DURSUN
disk_error_action = HALT
name_format = HOSTNAME # SIEM'de kaynak ayrımı
disk_full_action = HALTödeme kuruluşu için doğru ayardır: “Log yazamıyorsam işlem yapmam.” “Availability > Auditability” tercihi denetimde savunulamaz. (Bazı kurumlarSUSPENDseçer bu bir risk kabulüdür ve dokümante edilmelidir.)
4.14. Linux Log Bütünlüğü ve Silme Yasağı – Katmanlı Savunma
Bölüm 4.7’deki silme yasağı ilkesinin Linux’taki teknik uygulaması, on katmanlı bir savunma olarak kurgulanır:
| Katman | Kontrol | Komut / Ayar |
|---|---|---|
| 1. Dosya sistemi | Append-only attribute | chattr +a /var/log/audit/audit.log |
| 2. Kernel capability | chattr -a engelle |
CapabilityBoundingSet=~CAP_LINUX_IMMUTABLE |
| 3. auditd | Kuralları kilitle | -e 2 (reboot gerektirir) |
| 4. auditd | Rotate yerine sakla | max_log_file_action = KEEP_LOGS |
| 5. auditd | Disk dolarsa dur | disk_full_action = HALT |
| 6. SELinux | MAC ile log koruma | auditd_log_t domain |
| 7. Remote forward | Anında dışa yaz | rsyslog TLS + disk-assisted queue |
| 8. Object store | WORM arşiv | S3/MinIO Object Lock Compliance Mode |
| 9. Zaman damgası | NEZD | Günlük log paketinin SHA-256’sı → KamuSM zaman damgası |
| 10. FIM | Değişiklik tespiti | AIDE / Wazuh – günlük |
Append-only ile Pratik Uygulama:
# Log dosyasını append-only yap (root bile üzerine yazamaz, sadece ekleyebilir)
chattr +a /var/log/audit/audit.log
chattr +a /var/log/secure
# Kontrol
lsattr /var/log/audit/audit.log
# -----a---------- /var/log/audit/audit.log
chattr -a yapabilmek için CAP_LINUX_IMMUTABLE capability’si gerekir. Bunu boundary set’ten kaldırarak root’un bile append-only flag’i kaldırmasını engelleyebilirsiniz (reboot’a kadar).
Ödeme kuruluşu ilkesi: Retention süresi (10 yıl) içinde silme YASAKTIR ve teknik olarak da imkansız hale getirilmelidir.
rm,shred,truncate,journalctl --vacuum, destructivelogrotatehepsi loglanır ve P1 alarm üretir.
systemd-journald – Kriptografik Sealing (FSS):
[Journal]
Storage=persistent
Seal=yes # 🔴 Forward Secure Sealing - tahrifat tespiti
ForwardToSyslog=yes # rsyslog → SIEM
Audit=yes
# FSS anahtarı üret (verification key'i Vault gibi ayrı/güvenli yerde sakla)
journalctl --setup-keys --interval=15min
# Bütünlük doğrulama
journalctl --verify --verify-key=
FSS, log’un geçmişe dönük değiştirildiğini kriptografik olarak kanıtlar – QSA denetiminde güçlü bir kanıttır.
AIDE (File Integrity Monitoring – PCI DSS 10.3.4 / 11.5)
/etc/passwd , /etc/shadow , /etc/sudoers , /etc/audit , /bin , /usr/sbin gibi kritik yollar için hash tabanlı bütünlük izlemesi yapılır:
aide --init && mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# Günlük cron
0 3 * * * /usr/sbin/aide --check | mail -s "AIDE FIM $(hostname)" [email protected]
🔴 AIDE veritabanı (
aide.db.gz) mutlaka read-only/offline medyada tutulmalıdır. Aksi halde saldırgan, dosyaları değiştirdikten sonra veritabanını da güncelleyerek izini gizler. Alternatifler: Wazuh (syscheck + auditd entegrasyonu, SIEM’e native), Tripwire, Osquery + FIM.
4.15. Sudo Session Recording (CyberArk PAM Tamamlayıcısı)
/etc/sudoers.d/pci-iolog:
Defaults log_input, log_output
Defaults iolog_dir=/var/log/sudo-io/%{user}
Defaults iolog_file=%{seq}
Defaults use_pty # 🔴 Kritik: pty escape engelle
Defaults requiretty
sudoreplay -l # Oturumları listele
sudoreplay -l user baki # Kullanıcıya göre filtrele
sudoreplay 000001 # Terminal oturumunu birebir izle
Bu, PCI DSS 10.2.1.2 (“admin yetkisiyle yapılan tüm işlemler”) için en güçlü kanıttır ve QSA denetiminde yüksek değer görür. CyberArk PAM ile birlikte iki katmanlı ayrıcalıklı erişim izlenebilirliği sağlar.
4.16. Linux Log Forwarding – TLS ile Merkezileştirme
Log, kaynakta bırakılamaz; PCI DSS 4.2.1 gereği transport TLS ile şifreli olmalıdır. Kritik nokta: local + remote çift kayıt. Log yalnızca SIEM’e gönderilip local’de silinmemeli local kopya adli inceleme için append-only (chattr +a) tutulur.
/etc/rsyslog.d/90-siem.conf (Özet):
global(
DefaultNetstreamDriver="gtls"
DefaultNetstreamDriverCAFile="/etc/pki/rsyslog/ca.pem"
DefaultNetstreamDriverCertFile="/etc/pki/rsyslog/cert.pem"
DefaultNetstreamDriverKeyFile="/etc/pki/rsyslog/key.pem"
)
# Disk-assisted queue - log KAYBI OLMAZ (ödeme kuruluşu için kritik)
main_queue(
queue.type="LinkedList"
queue.filename="siem_fwd"
queue.spoolDirectory="/var/spool/rsyslog"
queue.maxdiskspace="5g"
queue.saveonshutdown="on"
)
# auditd loglarını da al ve TLS ile SIEM'e gönder
module(load="imfile")
input(type="imfile" File="/var/log/audit/audit.log" Tag="auditd" Facility="local6")
*.* action(type="omfwd" target="siem.example.local" port="6514" protocol="tcp"
StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name"
action.resumeRetryCount="-1")
Alternatif olarak auditd’nin native audisp-remote eklentisi kullanılabilir; disk_full_action = halt ile “log gönderilemiyorsa dur” prensibi burada da geçerlidir.
4.17. Veritabanı Katmanı – İleri Bölüme Not
Veritabanı logging’i tek başına geniş bir konu olduğu için, PostgreSQL / SQL Server / MySQL konfigürasyonlarını, silme yasağının DB katmanındaki teknik zorlamasını ve DB’ye özgü SIEM kurallarını Bölüm 4.31–4.38‘de ayrı olarak ele alıyorum.
Burada yalnızca temel ilkeyi vurgulayalım. Çünkü denetimde en sık duyulan yanlış savunma budur:
🔴 “Transaction log tutuyoruz, PCI DSS Requirement 10 karşılandı.” – Yanlış. Transaction log (WAL / redo / .ldf) recovery içindir; kim neyi okudu bilgisini içermez.
SELECTişlemi WAL’a yazılmaz. PCI DSS 10.2.1.1 (“kart sahibi verisine her erişim”) yalnızca native audit ile karşılanır: pgaudit, SQL Server Audit veya MySQL Enterprise Audit / MariaDB Audit Plugin.
4.18. Container / Kubernetes – İleri Bölüme Not
RKE2/Kubernetes ortamı API audit policy, admission control, secret encryption, container log toplama ve K8s’e özgü silme yasağı tek başına kapsamlı bir konudur. Bunu Bölüm 4.50–4.61‘de ayrı olarak ele alıyorum.
Burada yalnızca temel ilkeyi vurgulayalım. Çünkü denetimde en sık duyulan yanlış savunma budur:
🔴 “Pod loglarını topluyoruz, PCI DSS 10 karşılandı.” Yanlış. Pod stdout = uygulama logudur. Kubernetes API audit log ise kim cluster’da ne yaptı sorusunun cevabıdır bu, Windows Security Event Log muadilidir ve zorunludur. İkisi tamamen farklı şeylerdir.
4.19. Linux SIEM Korelasyon Kuralları (Ek)
Bölüm 4.8’deki Windows/AD kurallarını Linux tarafıyla tamamlıyoruz.
🔴 P1 – Anında Alarm
Kural L1 – Ayrıcalıklı Gruba Üye Eklendi (Windows 4728 Muadili)
key="pci_group_mgmt" AND op="add-user-to-group"
AND grp IN ("root","wheel","sudo","adm","docker","lxd","shadow","disk")
→ P1: SOC + IT Müdürü. CyberArk oturum kaydı ile eşleştir.
→ MITRE: T1098 (Account Manipulation)
Kural L2 – Log/Audit Dosyası Silme veya Truncate 🔴🔴
key="pci_log_tamper" OR key="pci_audit_access"
AND (syscall IN (87,263,82,264) # unlink, unlinkat, rename, renameat
OR (syscall=257 AND flags CONTAINS O_TRUNC))
OR comm IN ("shred","wipe")
OR cmd MATCHES "journalctl.*--vacuum|>\s*/var/log/"
→ P1 KRİTİK: Host izole et. Anti-forensics.
→ MITRE: T1070.002 (Clear Linux System Logs)
→ ⚠️ ÖDEME KURULUŞUNDA SİLME KESİNLİKLE YASAK - otomatik olay bildirimi tetikler
Kural L3 – Audit Servisi Durduruldu / Kural Silindi (Windows 4719/1100 Muadili)
type=CONFIG_CHANGE AND (audit_enabled=0 OR op="remove_rule")
OR cmd MATCHES "auditctl\s+-[De]|systemctl\s+stop\s+auditd|systemctl\s+stop\s+rsyslog"
→ P1: PCI DSS 10.7 - Kritik güvenlik kontrolü arızası
→ MITRE: T1562.001 / T1562.012 (Disable Linux Audit System)
Kural L5 – SSH Authorized Key Eklendi (Persistence)
path MATCHES ".ssh/authorized_keys"
AND syscall IN (257,2,82) # openat/open (write), rename
AND auid != 0
→ MITRE: T1098.004 (SSH Authorized Keys)
Kural L6 – Container Escape / Docker Privilege Escalation
key="pci_exec"
AND cmd MATCHES "docker\s+run.*(--privileged|-v\s+/:/|--pid=host|--net=host)"
OR cmd MATCHES "nsenter|chroot\s+/host"
→ RKE2/K8s ortamında kritik
→ MITRE: T1611 (Escape to Host)
Kural L7 – Reverse Shell / C2
key="pci_exec"
AND cmd MATCHES "bash\s+-i\s+>&\s*/dev/tcp/|nc\s+.*-e\s*/bin/|/dev/tcp/"
→ MITRE: T1059.004
🟠 P2 – Aynı Gün
Kural L9 – SSH Brute Force / Password Spray
"Failed password" OR "Invalid user"
COUNT >= 10 in 5 dakika BY same src_ip
OR COUNT DISTINCT user >= 15 in 15 dk BY same src_ip
→ MITRE: T1110
Kural L11 – Sudoers Dosyası Değiştirildi
key="pci_privilege" AND path IN ("/etc/sudoers","/etc/sudoers.d/*")
→ Change Management ticket ile eşleştir. Yoksa → uyumsuzluk bulgusu.
Kural L12 – CHD Dosyasına Anormal Erişim
key="pci_chd_access" AND auid NOT IN (approved_service_accounts)
→ PCI DSS 10.2.1.1 - kart verisine her bireysel erişim
Kural L14 – Veri Sızıntısı Aracı Kullanımı
key="pci_exfil" AND dst_ip NOT IN (internal_networks)
AND process IN ("scp","rsync","curl","wget","nc")
→ DLP ile korelasyon
Kural L15 – Zaman Değiştirme (PCI 10.6 ihlali)
key="pci_time_change" OR key="pci_time"
→ NTP manipülasyonu = log korelasyonunu bozma girişimi
→ MITRE: T1070.006 (Timestomp)
4.20. Linux Denetim Hazırlığı – Kanıt Listesi
auditctl -sçıktısı →enabled 2(immutable) görünmeliauditctl -lçıktısı → tüm PCI kuralları listelenmeli/etc/audit/auditd.conf→max_log_file_action=KEEP_LOGS,disk_full_action=HALTlsattr /var/log/audit/audit.log→-----a----------(append-only)sudoreplay -lçıktısı → ayrıcalıklı oturum kaydı örneğiaide --checkgünlük raporu (min. 3 aylık)journalctl --verify→ sealing (FSS) doğrulaması- rsyslog TLS sertifika + disk-assisted queue konfigürasyonu
chronyc sources/timedatectl→ NTP senkron kanıtı (PCI 10.6)- PostgreSQL:
SHOW pgaudit.log;+\dp payment.transactions(DELETE yetkisi yok) - SIEM’de örnek Linux olaylarının görüldüğünün uçtan uca kanıtı
4.21. Windows vs. Linux – Log Yeteneği Karşılaştırması
| Yetenek | Windows | Linux |
|---|---|---|
| Merkezi audit | Security Event Log | auditd (audit.log) |
| Yapılandırılmış format | EVTX (XML) | auditd (key=value), journald (JSON) |
| Politika kilitleme | GPO (tenant-enforced) | -e 2 (reboot gerektirir) |
| Log immutability | WEF + WORM arşiv | chattr +a + CAP_LINUX_IMMUTABLE drop |
| Kriptografik bütünlük | (native yok) | journald Seal=yes (FSS) ✅ |
| Komut satırı yakalama | GPO: Include command line (4688) | auditd execve (type=EXECVE) |
| Ayrıcalıklı oturum kaydı | PAM ürünü gerekir (CyberArk) | sudo log_output native ✅ |
| Log dolduğunda | Overwrite (varsayılan) | disk_full_action=HALT ✅ |
| Ayrıcalıklı grup | Domain Admins, Enterprise Admins | root, wheel, sudo, docker, lxd |
| FIM | 3rd party | AIDE native ✅ |
Kritik uyarı: Linux varsayılan kurulumda PCI DSS uyumlu değildir. auditd kuruludur ama boş kuralla gelir,
-e 2kapalıdır, loglar rotate edilip silinir. Bölüm 4.13–4.14’teki konfigürasyon uygulanmadan hiçbir Linux sunucu ödeme kuruluşu denetiminden geçemez.