Bir gün production sunucunuzda beklenmedik bir dosya değişikliği fark ettiniz. Kim yaptı? Ne zaman yaptı? Hangi komutla yaptı? Eğer auditd kurulu değilse bu soruların cevabını bulmak neredeyse imkansız. Linux sistemlerde kullanıcı etkinliklerini denetlemek, hem güvenlik hem de uyumluluk açısından kritik bir gereksinim. Bu yazıda auditd ile kapsamlı bir denetim altyapısı nasıl kurulur, gerçek dünya senaryolarında nasıl kullanılır, bunu detaylıca ele alacağız.
auditd Nedir ve Neden Kullanmalıyız?
auditd, Linux çekirdeğinin audit alt sistemini yöneten kullanıcı alanı servisidir. Çekirdek seviyesinde sistem çağrılarını, dosya erişimlerini, kullanıcı girişlerini ve daha fazlasını kayıt altına alır. bash_history‘den farklı olarak auditd kullanıcı tarafından manipüle edilemez, çekirdek seviyesinde çalışır ve denetim kayıtlarını merkezi bir log dosyasına yazar.
Neden auditd tercih etmeliyiz?
- Çekirdek seviyesi izleme: Kullanıcılar logları silemez veya manipüle edemez
- PCI-DSS, HIPAA, SOX uyumluluğu: Düzenleyici gereksinimler için zorunlu
- Adli bilişim: Bir olay sonrasında tam audit trail oluşturma imkanı
- Gerçek zamanlı uyarı: Şüpheli aktiviteleri anında tespit etme
Kurulum ve Temel Yapılandırma
Paket Kurulumu
Çoğu dağıtımda auditd varsayılan olarak kurulu gelir, ancak gelmediği durumlarda:
# RHEL/CentOS/Rocky Linux
sudo dnf install audit audit-libs
# Debian/Ubuntu
sudo apt install auditd audispd-plugins
# Servisi başlat ve boot'ta otomatik başlamasını sağla
sudo systemctl enable --now auditd
# Servis durumunu kontrol et
sudo systemctl status auditd
Ana Yapılandırma Dosyası
auditd‘nin ana yapılandırması /etc/audit/auditd.conf dosyasında bulunur:
sudo cat /etc/audit/auditd.conf
Önemli parametreler:
- log_file: Log dosyasının yolu, varsayılan
/var/log/audit/audit.log - max_log_file: Tek log dosyasının maksimum boyutu (MB cinsinden)
- max_log_file_action: Log dolduğunda yapılacak işlem (
rotate,keep_logs,suspend) - num_logs: Rotation sırasında tutulacak log dosyası sayısı
- space_left: Disk alanı bu değerin altına düşünce uyarı gönder (MB)
- space_left_action: Disk dolduğunda yapılacak işlem (
email,suspend,single) - admin_space_left_action: Kritik disk durumunda alınacak aksiyon
Production ortam için önerilen temel yapılandırma:
sudo tee /etc/audit/auditd.conf > /dev/null <<'EOF'
log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL_ASYNC
freq = 50
num_logs = 10
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = HOSTNAME
max_log_file = 100
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG
admin_space_left = 100
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
EOF
Audit Kuralları: Temel Kavramlar
Audit kuralları /etc/audit/rules.d/ dizinindeki .rules uzantılı dosyalarda tanımlanır. Bu dosyalar sistem başlangıcında augenrules komutu tarafından derlenerek /etc/audit/audit.rules dosyasına aktarılır.
Kural Türleri
- -w (watch): Dosya veya dizin izleme kuralları
- -a (append): Sistem çağrısı bazlı kurallar
- -D: Tüm mevcut kuralları sil
- -b: Buffer boyutunu ayarla
- -e: Audit sisteminin modunu ayarla (0=devre dışı, 1=aktif, 2=kilitli)
Temel Kural Sözdizimi
# Dosya izleme kuralı
# -w: izlenecek yol, -p: izin türleri (r=read, w=write, x=execute, a=attribute)
# -k: kural için anahtar kelime (log filtreleme için)
-w /etc/passwd -p wa -k identity_changes
# Sistem çağrısı kuralı
# -a action,filter: aksiyon ve filtre
# -S: sistem çağrısı adı
# -F: filtre alanı
-a always,exit -F arch=b64 -S execve -k command_execution
Gerçek Dünya Senaryoları için Kapsamlı Kural Seti
Senaryo 1: Kimlik ve Yetki Değişikliklerini İzleme
Bir fintech şirketinde çalışıyorsunuz. Uyumluluk ekibi, /etc/passwd, /etc/shadow ve sudo yapılandırmalarındaki tüm değişikliklerin loglanmasını istiyor.
sudo tee /etc/audit/rules.d/10-identity.rules > /dev/null <<'EOF'
# Kullanıcı ve grup kimlik dosyaları
-w /etc/group -p wa -k identity_changes
-w /etc/passwd -p wa -k identity_changes
-w /etc/gshadow -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/security/opasswd -p wa -k identity_changes
# Sudo yapılandırması
-w /etc/sudoers -p wa -k sudo_changes
-w /etc/sudoers.d/ -p wa -k sudo_changes
# PAM yapılandırması
-w /etc/pam.d/ -p wa -k pam_changes
-w /etc/security/limits.conf -p wa -k pam_changes
EOF
Senaryo 2: Sistem Yönetimi Komutlarını İzleme
Bir e-ticaret platformunda birden fazla sysadmin çalışıyor. Hangi adminin ne zaman hangi kritik komutu çalıştırdığını takip etmeniz gerekiyor.
sudo tee /etc/audit/rules.d/20-admin-commands.rules > /dev/null <<'EOF'
# Ayrıcalıklı komutları izle
-a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=unset -k privileged_sudo
-a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=unset -k privileged_su
-a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=unset -k privileged_newgrp
# Kullanıcı yönetimi komutları
-a always,exit -F path=/usr/sbin/useradd -F perm=x -F auid>=1000 -F auid!=unset -k user_mgmt
-a always,exit -F path=/usr/sbin/userdel -F perm=x -F auid>=1000 -F auid!=unset -k user_mgmt
-a always,exit -F path=/usr/sbin/usermod -F perm=x -F auid>=1000 -F auid!=unset -k user_mgmt
-a always,exit -F path=/usr/sbin/groupadd -F perm=x -F auid>=1000 -F auid!=unset -k user_mgmt
-a always,exit -F path=/usr/sbin/groupdel -F perm=x -F auid>=1000 -F auid!=unset -k user_mgmt
# Şifre değişikliği
-a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=unset -k passwd_change
EOF
Senaryo 3: Kritik Sistem Dosyalarını İzleme
sudo tee /etc/audit/rules.d/30-system-files.rules > /dev/null <<'EOF'
# Ağ yapılandırması
-w /etc/hosts -p wa -k network_config
-w /etc/hostname -p wa -k network_config
-w /etc/resolv.conf -p wa -k network_config
-w /etc/sysconfig/network -p wa -k network_config
-w /etc/network/ -p wa -k network_config
# SSH yapılandırması
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/ssh/ -p wa -k ssh_keys
# Cron görevleri
-w /etc/cron.allow -p wa -k cron_changes
-w /etc/cron.deny -p wa -k cron_changes
-w /etc/cron.d/ -p wa -k cron_changes
-w /etc/cron.daily/ -p wa -k cron_changes
-w /etc/cron.hourly/ -p wa -k cron_changes
-w /etc/cron.monthly/ -p wa -k cron_changes
-w /etc/cron.weekly/ -p wa -k cron_changes
-w /etc/crontab -p wa -k cron_changes
-w /var/spool/cron/ -p wa -k cron_changes
# Kernel modülleri
-w /sbin/insmod -p x -k kernel_modules
-w /sbin/rmmod -p x -k kernel_modules
-w /sbin/modprobe -p x -k kernel_modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k kernel_modules
EOF
Senaryo 4: Dosya Silme ve Yetki Değişikliklerini İzleme
Bir saldırganın iz silmeye çalışabileceği veya yetkileri yükseltebileceği aktiviteleri yakalamak için:
sudo tee /etc/audit/rules.d/40-file-operations.rules > /dev/null <<'EOF'
# Dosya silme işlemleri (normal kullanıcılar için)
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=unset -k file_deletion
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=unset -k file_deletion
# setuid/setgid bit değişiklikleri
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=unset -k permission_changes
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=unset -k permission_changes
# Dosya sahipliği değişiklikleri
-a always,exit -F arch=b64 -S chown -S fchown -S lchown -S fchownat -F auid>=1000 -F auid!=unset -k ownership_changes
-a always,exit -F arch=b32 -S chown -S fchown -S lchown -S fchownat -F auid>=1000 -F auid!=unset -k ownership_changes
# Yetkisiz erişim denemeleri
-a always,exit -F arch=b64 -S creat -S open -S openat -F exit=-EACCES -F auid>=1000 -k unauthorized_access
-a always,exit -F arch=b64 -S creat -S open -S openat -F exit=-EPERM -F auid>=1000 -k unauthorized_access
EOF
Kuralları Yüklemek ve Doğrulamak
# Kuralları yeniden yükle
sudo augenrules --load
# veya kuralları manuel yükle
sudo auditctl -R /etc/audit/audit.rules
# Aktif kuralları listele
sudo auditctl -l
# Audit sisteminin durumunu kontrol et
sudo auditctl -s
# Kural sayısını doğrula
sudo auditctl -l | wc -l
Log Analizi: ausearch ve aureport
ausearch ile Hedefli Arama
ausearch, audit loglarında belirli kriterlere göre arama yapmanızı sağlar:
# Belirli bir anahtar kelimeye göre ara
sudo ausearch -k identity_changes
# Belirli bir kullanıcının aktivitelerini ara
sudo ausearch -ua ahmet
# Belirli bir zaman aralığında ara
sudo ausearch -ts today -k sudo_changes
sudo ausearch -ts "03/15/2024 09:00:00" -te "03/15/2024 18:00:00" -k file_deletion
# Başarısız giriş denemelerini ara
sudo ausearch -m USER_LOGIN -sv no
# Belirli bir süreçle ilgili kayıtlar
sudo ausearch -p 1234
# Okunabilir format ile çıktı al
sudo ausearch -k sudo_changes --interpret
# Son 1 saatin loglarını getir
sudo ausearch -ts recent -k user_mgmt
aureport ile Özet Raporlar
aureport, audit loglarından anlamlı özet raporlar üretir:
# Genel özet raporu
sudo aureport --summary
# Başarısız kimlik doğrulama raporu
sudo aureport -au -i --failed
# Komut yürütme raporu
sudo aureport -x --summary
# Dosya erişim raporu
sudo aureport -f -i
# Kullanıcı aktivite raporu
sudo aureport -u -i --summary
# Bugünün raporunu al
sudo aureport -ts today --summary
# En çok hata üreten hesaplar
sudo aureport --login --failed --summary -i
Pratik Log Okuma: audit.log Formatını Anlamak
Bir log kaydı şu şekilde görünür:
type=SYSCALL msg=audit(1710000000.123:456): arch=c000003e syscall=59 success=yes exit=0 a0=7f1234 a1=7f5678 a2=7f9abc a3=0 items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3 comm="useradd" exe="/usr/sbin/useradd" key="user_mgmt"
Bu kayıttaki önemli alanlar:
- auid: Asıl kullanıcı ID’si (sudo ile yükseltilmiş olsa bile orijinal kullanıcı)
- uid/euid: Efektif kullanıcı ID’si
- comm: Komut adı
- exe: Çalıştırılan programın tam yolu
- key: Kural tanımındaki -k değeri
- success: İşlemin başarılı olup olmadığı
- pid/ppid: Süreç ve üst süreç ID’leri
Otomatik Uyarı Sistemi Kurmak
Gerçek dünyada log okumak yeterli değil, kritik olaylar için anında uyarı almanız gerekir. audispd ve özel scriptler ile bu mümkün:
# Kritik olayları izleyen basit bir script
sudo tee /usr/local/bin/audit-alert.sh > /dev/null <<'EOF'
#!/bin/bash
LOG_FILE="/var/log/audit/audit.log"
ALERT_EMAIL="[email protected]"
LAST_CHECK_FILE="/tmp/audit_last_check"
# Son kontrol zamanından bu yana kritik olayları kontrol et
if [ -f "$LAST_CHECK_FILE" ]; then
LAST_CHECK=$(cat "$LAST_CHECK_FILE")
else
LAST_CHECK=$(date -d "1 hour ago" "+%m/%d/%Y %H:%M:%S")
fi
# Yeni kritik olayları ara
ALERTS=$(ausearch -ts "$LAST_CHECK" -k identity_changes -k sudo_changes -k user_mgmt 2>/dev/null)
if [ -n "$ALERTS" ]; then
echo "$ALERTS" | mail -s "[UYARI] Kritik Sistem Aktivitesi Tespit Edildi - $(hostname)" "$ALERT_EMAIL"
fi
# Son kontrol zamanını güncelle
date "+%m/%d/%Y %H:%M:%S" > "$LAST_CHECK_FILE"
EOF
sudo chmod +x /usr/local/bin/audit-alert.sh
# Cron ile her 15 dakikada bir çalıştır
echo "*/15 * * * * root /usr/local/bin/audit-alert.sh" | sudo tee /etc/cron.d/audit-alert
Belirli Bir Kullanıcıyı Detaylı İzleme
Bir çalışan hakkında şüphe oluştuğunda veya güvenlik olayı araştırırken belirli bir kullanıcının tüm aktivitelerini loglamak için:
# Belirli bir UID için tüm sistem çağrılarını logla
sudo auditctl -a always,exit -F arch=b64 -F uid=1005 -S all -k user_1005_full_audit
# Bu kullanıcının aktivitelerini gerçek zamanlı izle
sudo tail -f /var/log/audit/audit.log | grep -E "auid=1005|uid=1005"
# Bu kullanıcının bugünkü aktivite özeti
sudo ausearch -ua 1005 -ts today --interpret | grep -E "type=SYSCALL|type=USER_CMD"
Audit Kurallarını Kilitlemek
Production sistemlerde audit kurallarının yetkisiz kullanıcılar tarafından değiştirilmesini engellemek için:
# Kural dosyasının sonuna ekle - sistem yeniden başlayana kadar kurallar değiştirilemez
echo "-e 2" | sudo tee -a /etc/audit/rules.d/99-finalize.rules
# Mevcut kuralları kilitle (dikkatli ol, yeniden başlatma gerektirir)
sudo auditctl -e 2
# Kilitleme durumunu kontrol et
sudo auditctl -s | grep enabled
Log Rotation ve Arşivleme
Audit logları hızla büyüyebilir. Düzgün bir rotation ve arşivleme stratejisi şart:
# /etc/logrotate.d/audit dosyasını düzenle
sudo tee /etc/logrotate.d/audit > /dev/null <<'EOF'
/var/log/audit/audit.log {
daily
rotate 90
compress
delaycompress
missingok
notifempty
postrotate
/bin/kill -HUP $(cat /run/auditd.pid 2>/dev/null) 2>/dev/null || true
endscript
}
EOF
# Eski logları arşivle (örneğin 30 günden eski olanları)
sudo find /var/log/audit/ -name "audit.log.*" -mtime +30 -exec gzip {} ;
Uyumluluk için Hazır Kural Setleri
RHEL ve türevi sistemlerde CIS benchmark kuralları hazır gelir:
# Mevcut hazır kural setlerini listele
ls /usr/share/audit/sample-rules/
# CIS Level 2 kurallarını kopyala
sudo cp /usr/share/audit/sample-rules/30-stig.rules /etc/audit/rules.d/
sudo cp /usr/share/audit/sample-rules/31-privileged.rules /etc/audit/rules.d/
# Kuralları yeniden derle ve yükle
sudo augenrules --load
Performans Optimizasyonu
auditd yanlış yapılandırıldığında cidli performans sorunlarına yol açabilir:
- Aşırı kural sayısından kaçın: Her kural bir çekirdek kancası demektir, gerçekten ihtiyaç duyulan kuralları ekleyin
- arch filtresi kullanın: Her zaman
-F arch=b64ve-F arch=b32şeklinde mimari belirtin - auid filtresi ekleyin: Sistem süreçlerini dışlamak için
-F auid!=unsetkullanın - Exclude kuralları: Gürültülü ve gereksiz olayları hariç tut
# Gereksiz gürültülü olayları filtrele
sudo tee /etc/audit/rules.d/01-exclude.rules > /dev/null <<'EOF'
# Yüksek frekanslı, düşük değerli olayları hariç tut
-a never,exit -F arch=b64 -S getuid -S getgid -S getpid
-a never,exit -F arch=b64 -F uid=root -F auid=unset -S execve
-a never,exit -F arch=b64 -F dir=/proc -F msgtype=PATH
EOF
Sonuç
auditd, Linux sistemlerde kullanıcı etkinliklerini denetlemek için vazgeçilmez bir araçtır. Çekirdek seviyesinde çalışması sayesinde manipülasyona karşı dirençlidir ve düzgün yapılandırıldığında sisteminizde neler olduğunu tam anlamıyla görebilirsiniz.
Pratik tavsiyeler:
- Aşamalı başlayın: Her şeyi birden loglamaya çalışmak yerine kritik olaylardan başlayın
- Kuralları test edin: Yeni kural ekledikten sonra
ausearchile gerçekten çalışıp çalışmadığını doğrulayın - Log boyutunu izleyin:
/var/log/audit/dizini dolduğunda sistem durabiliyor, disk alertlerini kurun - Merkezi log toplayın: Logları uzak bir sunucuya
rsyslogveyaElasticsearchile gönderin; yerel loglar silinebilir - Düzenli rapor alın:
aureportçıktılarını haftalık mail ile yöneticilere gönderin - Kural setinizi belgeleyin: Her kuralın neden eklendiğini dokümante edin, 6 ay sonra nedenini hatırlamazsınız
auditd bir kez kurulup unutulan bir araç değildir. Logları düzenli gözden geçirmek, kural setlerini sistemin ihtiyaçlarına göre güncellemek ve anormal aktivitelere hızlı tepki vermek başarılı bir denetim altyapısının temel taşlarıdır. Bu yazıda ele aldığımız kurallar ve senaryolar, sağlam bir başlangıç noktası oluşturuyor; kendi ortamınıza göre özelleştirmeyi ihmal etmeyin.