auditd, olaydan sonra ortaya çıkan soruları yanıtlar: bu dosyayı kim değiştirdi, bu kullanıcı ne zaman oluşturuldu, bu süreç nereden başladı. Başka hiçbir araç onları yanıtlamaz — uygulama günlükleri o bilgiyi tutmaz ve kabuk geçmişini, onu bırakan kişi düzenler.
Zorluk şu ki paketi kurmak tek başına size hiçbir şey vermez. Varsayılan kural neredeyse yoktur, günlük yazılır ama özü itibarıyla boştur ve bu, mümkün olan en kötü anda keşfedilir — veriye ihtiyaç duyulduğunda ve veri olmadığında.
Kurulum
sudo apt install auditd audispd-plugins
sudo systemctl status auditd
Bir özellik: bazı sürümlerde auditd, systemctl restart üzerinden yeniden başlatılamaz — servis kendi komutuyla yönetilir. Kurallar şöyle yeniden okunur:
sudo augenrules --load
sudo auditctl -l
İkinci komut gerçekte neyin yüklü olduğunu gösterir. Dosyaların içeriğine değil, ona güvenin.
Kural kümesi
Kurallar /etc/audit/rules.d/ içine ayrı bir dosya olarak konur. Aşağıda kendini amorti eden asgari bir küme var: diski gömmeden, bir olay sırasında ortaya çıkan soruların çoğunu yanıtlar.
sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Kullanıcılar ve ayrıcalıklar
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges
## SSH erişimi
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys
## Zamanlanmış görevler
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
## Çekirdek modülleri
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules
## sudo ve su kullanımı
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load
Sözdizimi kısadır: -w izlenecek bir yoldur, -p wa yazmalara ve öznitelik değişikliklerine, -p x ise çalıştırmaya tepki vermek demektir, -k sonradan aramak için kullanılan anahtardır. Asıl kolaylık o anahtarlardır: onlar olmadan günlükte arama yapmak, bir gigabaytlık metni elemeye dönüşür.
O listede ne yok ve neden
Rehberler sık sık her execve çağrısının — yani her programın her başlatılmasının — kaydedilmesini önerir. Cazibesi anlaşılırdır: yapılanların eksiksiz bir resmi. Pratikte çalışan bir sunucuda bu, günde yüzlerce megabayt üretir, işlemcinin gözle görülür bir kısmını yer ve günlüğün gerekenden önce budanmasına yol açar. Bu düzeyde ayrıntı gerekiyorsa dar biçimde açın — tek bir kullanıcı için ya da bir soruşturma süresince.
Aynısı sitenin dizinini izlemek için de geçerlidir: oraya yazma süreklidir ve kural, günlüğü anlamsız olaylar akışına çevirir.
Okumak
Anahtara göre arayın, sayısal kimlikler adlara çözümlensin:
sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today
-i bayrağı okunabilirlik için şarttır: o olmadan kullanıcı adları ve sistem çağrıları yerine sayılar alırsınız. -ts dönemi sınırlar (today, recent ya da belirli bir tarih).
Bir dönem için özet:
sudo aureport --summary -i
sudo aureport --auth -i --failed
Bir olay kaydında üç alan ilgi çekicidir: oturumu başlatan kullanıcının kimliği auid, eylemin altında çalıştığı kimlik uid ve eylemi gerçekleştiren program exe. auid ile uid arasındaki fark, «tam olarak kim root oldu» sorusunun yanıtıdır: belirli bir kişinin auid değeriyle birlikte uid=0, oturum içinde kendini ne olarak tanıtmış olursa olsun suçluyu kesin biçimde adlandırır.
Disk
Boyut ayarları /etc/audit/auditd.conf içindedir:
max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG
disk_full_action değerine ayrıca bakın. Bazı yapılandırmalar disk dolduğunda sistemi durdurmayı varsayar — denetim gerekleri olan makinelerde gerekçelendirilebilen, bir web sunucusunda ise tamamen yersiz bir davranış. O değeri disk dolmadan önce kontrol edin.
Değiştirilemez kurallar
Kural dosyasının sonundaki -e 2 satırı, yeniden başlatmaya kadar kuralların değiştirilmesini yasaklar — root elde etmiş biri tarafından da. Bu, günlüğün değerini belirgin biçimde artırır: bir saldırgan makineyi yeniden başlatmadan izlemeyi kapatamaz ve yeniden başlatma kendi başına göze çarpar.
Madalyonun öteki yüzü açıktır: siz de kendi kurallarınızı yeniden başlatmadan değiştiremezsiniz. Kural kümesi oturduktan ve onunla bir ay yaşadıktan sonra açın.
Sıradan bir sunucuda neden uğraşmalı
auditd hiçbir şeyi engellemez. Değeri tam olarak bir kez ortaya çıkar — olayların sırası yeniden kurulması gerektiğinde ve veri ya vardır ya yoktur. Geriye dönük toplanamaz; kural kümesinin önceden yerleştirilip sonra kendi haline bırakılmasının nedeni budur.
Kurulumun doğru olduğunun pratik işareti: kural listesi boş değildir, günlük denetimsiz büyümez ve identity ile privileges anahtarlı olaylar ender görülür ve her biri açıklanabilir. Bunun tek sayfada nasıl göründüğü aşağıdaki demoda.