Auditd adalah alat pemantauan yang sangat kuat. Seperti yang dapat dibuktikan oleh siapa pun yang pernah melihatnya, kegunaan adalah kelemahan utama. Menyiapkan sesuatu seperti auditd membutuhkan banyak pemikiran yang cukup mendalam tentangapa itu yang membutuhkan audit pada sistem spesifik yang dimaksud. Dalam pertanyaan Anda memutuskan server websebagai sistem contoh kami, yang bagus karena spesifik.
Demi argumen, mari kita asumsikan bahwa ada pembagian formal antara server web pengujian/dev dan server web produksi tempat pengembang web melakukan semua pekerjaan mereka pada sistem pengujian/dev dan perubahan pada lingkungan produksi dilakukan dalam penerapan terkontrol.
Jadi membuat asumsi yang agak besar itu, dan berfokus pada sistem produksi, kita bisa mulai bekerja. Melihat rekomendasi audit di tolok ukur CIS untuk RHEL5, kami dapat mulai menyusun aturan yang disarankan berikut:
-a exit,always -S unlink -S rmdir
-a exit,always -S stime.*
-a exit,always -S setrlimit.*
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow -p wa
-w /etc/sudoers -p wa
-b 1024
-e 2
Ini akan menyebabkan log ditulis setiap kali panggilan sistem rmdir, unlink, stime, atau setrlimit keluar. Ini harus memberi tahu kami jika ada yang mencoba menghapus file atau mengacak-acak waktu. Kami juga menyiapkan jam tangan file tertentu pada file yang menentukan grup, pengguna, kata sandi, dan akses sudo. Alih-alih melihat panggilan sistem untuk setiap log audit tersebut, log audit akan ditulis setiap kali salah satu dari file tersebut:
- dibuka dengan mode O_WRONLY atau O_RDWR
- sebuah atribut diubah
Karena kita telah membuat asumsi bahwa kita berbicara tentang server web produksi, saya akan merekomendasikan untuk menambahkan baris:
-w /var/www -p wa
Ini secara rekursif akan menonton semua file di bawah /var/www
pohon direktori.
Sekarang kita bisa melihat alasan asumsi "lingkungan terkendali" yang dibuat sebelumnya. Di antara memantau semua file di root web, serta semua acara unlink atau rmdir, ini bisa sangat bising di lingkungan pengembangan. Jika kami dapat mengantisipasi perubahan sistem file, seperti selama jendela pemeliharaan atau peristiwa penerapan, kami dapat memfilter derau ini secara lebih wajar.
Menggabungkan semua ini menjadi satu file yang koheren, kami ingin /etc/audit/audit.rules
agar terlihat seperti
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-a exit,always -S unlink -S rmdir
-a exit,always -S stime.*
-a exit,always -S setrlimit.*
-w /var/www -p wa
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow -p wa
-w /etc/sudoers -p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2
Pembaruan:Artikel ini adalah penjelasan yang bagus tentang aturan auditd dan memberikan contoh untuk setiap peristiwa yang mungkin ingin Anda catat:
HOWTO_configure_the_auditing_of_the_system_auditd
Lihat laporan bug di sini:
https://github.com/gds-operations/puppet-auditd/pull/1
Mereka memberikan contoh file yang sangat panjang yang berisi banyak perubahan penting yang mungkin dilakukan pada sistem. Disalin di bawah untuk kenyamanan (dengan sedikit modifikasi):
## Remove any existing rules
-D
## Buffer Size
## Feel free to increase this if the machine panic's
-b 8192
## Failure Mode
## Possible values are 0 (silent), 1 (printk, print a failure message),
## and 2 (panic, halt the system).
-f 1
## Audit the audit logs.
## successful and unsuccessful attempts to read information from the
## audit records; all modifications to the audit trail
-w /var/log/audit/ -k auditlog
## Auditd configuration
## modifications to audit configuration that occur while the audit
## collection functions are operating.
-w /etc/audit/ -p wa -k auditconfig
-w /etc/libaudit.conf -p wa -k auditconfig
-w /etc/audisp/ -p wa -k audispconfig
## Monitor for use of audit management tools
-w /sbin/auditctl -p x -k audittools
-w /sbin/auditd -p x -k audittools
## special files
-a exit,always -F arch=b32 -S mknod -S mknodat -k specialfiles
-a exit,always -F arch=b64 -S mknod -S mknodat -k specialfiles
## Mount operations
-a exit,always -F arch=b32 -S mount -S umount -S umount2 -k mount
-a exit,always -F arch=b64 -S mount -S umount2 -k mount
## changes to the time
##
-a exit,always -F arch=b32 -S adjtimex -S settimeofday -S stime -S clock_settime -k time
-a exit,always -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time
## Use stunnel
-w /usr/sbin/stunnel -p x -k stunnel
## cron configuration & scheduled jobs
-w /etc/cron.allow -p wa -k cron
-w /etc/cron.deny -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /etc/cron.monthly/ -p wa -k cron
-w /etc/cron.weekly/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron/crontabs/ -k cron
## user, group, password databases
-w /etc/group -p wa -k etcgroup
-w /etc/passwd -p wa -k etcpasswd
-w /etc/gshadow -k etcgroup
-w /etc/shadow -k etcpasswd
-w /etc/security/opasswd -k opasswd
## monitor usage of passwd
-w /usr/bin/passwd -p x -k passwd_modification
#Monitor for use of tools to change group identifiers
-w /usr/sbin/groupadd -p x -k group_modification
-w /usr/sbin/groupmod -p x -k group_modification
-w /usr/sbin/addgroup -p x -k group_modification
-w /usr/sbin/useradd -p x -k user_modification
-w /usr/sbin/usermod -p x -k user_modification
-w /usr/sbin/adduser -p x -k user_modification
## login configuration and information
-w /etc/login.defs -p wa -k login
-w /etc/securetty -p wa -k login
-w /var/log/faillog -p wa -k login
-w /var/log/lastlog -p wa -k login
-w /var/log/tallylog -p wa -k login
## network configuration
-w /etc/hosts -p wa -k hosts
-w /etc/network/ -p wa -k network
## system startup scripts
-w /etc/inittab -p wa -k init
-w /etc/init.d/ -p wa -k init
-w /etc/init/ -p wa -k init
## library search paths
-w /etc/ld.so.conf -p wa -k libpath
## local time zone
-w /etc/localtime -p wa -k localtime
## kernel parameters
-w /etc/sysctl.conf -p wa -k sysctl
## modprobe configuration
-w /etc/modprobe.conf -p wa -k modprobe
## pam configuration
-w /etc/pam.d/ -p wa -k pam
-w /etc/security/limits.conf -p wa -k pam
-w /etc/security/pam_env.conf -p wa -k pam
-w /etc/security/namespace.conf -p wa -k pam
-w /etc/security/namespace.init -p wa -k pam
## GDS specific secrets
-w /etc/puppet/ssl -p wa -k puppet_ssl
## postfix configuration
-w /etc/aliases -p wa -k mail
-w /etc/postfix/ -p wa -k mail
## ssh configuration
-w /etc/ssh/sshd_config -k sshd
## changes to hostname
-a exit,always -F arch=b32 -S sethostname -k hostname
-a exit,always -F arch=b64 -S sethostname -k hostname
## changes to issue
-w /etc/issue -p wa -k etcissue
-w /etc/issue.net -p wa -k etcissue
## this was to noisy currently.
# log all commands executed by an effective id of 0 aka root.
-a exit,always -F arch=b64 -F euid=0 -S execve -k rootcmd
-a exit,always -F arch=b32 -F euid=0 -S execve -k rootcmd
## Capture all failures to access on critical elements
-a exit,always -F arch=b64 -S open -F dir=/etc -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/bin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/sbin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/usr/bin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/usr/sbin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/var -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/home -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/srv -F success=0 -k unauthedfileacess
## Monitor for use of process ID change (switching accounts) applications
-w /bin/su -p x -k priv_esc
-w /usr/bin/sudo -p x -k priv_esc
-w /etc/sudoers -p rw -k priv_esc
## Monitor usage of commands to change power state
-w /sbin/shutdown -p x -k power
-w /sbin/poweroff -p x -k power
-w /sbin/reboot -p x -k power
-w /sbin/halt -p x -k power
## Make the configuration immutable
-e 2
Anda agak mendekati pertanyaan dengan cara yang salah. Anda perlu memutuskan apa yang ingin Anda catat, dan cari tahu cara mencatatnya. Membuat banyak file log memang keren, tetapi jika Anda tidak pernah melihatnya atau tidak tahu apa yang Anda cari, itu hanya membuang-buang waktu dan ruang.
Saat memutuskan apa yang akan dicatat, Anda perlu mengidentifikasi perilaku apa yang Anda pedulikan, lalu cari tahu cara mencatat aktivitas tersebut. Cara yang baik untuk mulai melakukan ini adalah dengan membaca tentang AppArmor dan membaca dengan teliti halaman manual auditctl. kemudian pelajari panggilan sistem apa yang tersedia dengan mempelajari program untuk Unix, dan identifikasi panggilan yang mungkin menarik. Ini benar-benar usaha yang cukup besar. Saya tahu ini sedikit jawaban yang fasih dan tidak memberikan "inilah skrip shell yang akan mencatat semua yang Anda pedulikan di server Anda" - tetapi alasan jawaban itu tidak ada adalah, yah, setiap situasi berbeda jadi tidak mungkin memberikan jawaban "satu ukuran paling cocok".
Di tempat (yang memang besar) tempat saya bekerja, kami memiliki seluruh tim yang berdedikasi hanya untuk pencatatan sistem - belum lagi berbagai admin dan tim keamanan yang berkontribusi. Ini bukan topik kecil. :/