Windows/AD ve Linux Log Hardening (Ödeme Kuruluşu) – Bölüm 3

Merhaba

Seri: SOC Analistleri İçin Log İzleme Rehberi (Ödeme Kuruluşları)

  1. Log İzleme Temelleri
  2. Mevzuat, Retention ve Silme Yasağı
  3. Windows/AD ve Linux Hardening (Bu Yazı)
  4. Uygulama ve Veritabanı Katmanı
  5. Ağ Katmanı (Firewall/IDS-IPS/WAF/DDoS)
  6. Container ve Kubernetes
  7. Bulut (AWS/Azure/GCP)
  8. 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 2 kritiktir. 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ırgan ile 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ı kurumlar SUSPEND seç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 , destructive logrotate hepsi 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. SELECT iş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ünmeli
  • auditctl -l çıktısı → tüm PCI kuralları listelenmeli
  • /etc/audit/auditd.confmax_log_file_action=KEEP_LOGS , disk_full_action=HALT
  • lsattr /var/log/audit/audit.log-----a---------- (append-only)
  • sudoreplay -l çıktısı → ayrıcalıklı oturum kaydı örneği
  • aide --check gü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 2 kapalı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.

 

 

Bir yanıt yazın

Başa Dön