Auditd je mimořádně výkonný monitorovací nástroj. Jak může potvrdit každý, kdo se na to někdy podíval, použitelnost je primární slabinou. Nastavení něčeho, jako je auditované, vyžaduje hodně dost hloubkového přemýšlení o tom,co přesně to vyžaduje audit konkrétního systému. V otázce jste se rozhodli pro webový server jako náš vzorový systém, což je dobré, protože je specifický.
Pro argumentaci předpokládejme, že existuje formální rozdělení mezi testovacími/vývojářskými webovými servery a produkčními webovými servery, kde weboví vývojáři dělají veškerou svou práci na testovacích/vývojářských systémech a změny produkčního prostředí se provádějí v řízeném nasazení.
Takže když vytvoříme tyto poměrně velké předpoklady a zaměříme se na produkční systém, můžeme se pustit do práce. Když se podíváme na auditované doporučení v benchmarku CIS pro RHEL5, můžeme začít sestavovat následující navrhovanou sadu pravidel:
-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
To způsobí, že se protokoly vypíší vždy, když se ukončí systémová volání rmdir, unlink, stime nebo setrlimit. To by nám mělo dát vědět, pokud se někdo pokusí smazat soubory nebo poskakovat s dobou. Nastavili jsme také specifické sledování souborů pro soubory, které definují skupiny, uživatele, hesla a sudo přístup. Místo sledování systémových volání pro každý z těchto protokolů auditu bude zapsán pokaždé, když jeden z těchto souborů bude:
- otevřené v režimech O_WRONLY nebo O_RDWR
- atribut je změněn
Protože jsme již učinili předpoklad, že mluvíme o produkčním webovém serveru, doporučil bych přidat řádek:
-w /var/www -p wa
To bude rekurzivně sledovat všechny soubory pod /var/www
adresářový strom.
Nyní vidíme důvod dříve vysloveného předpokladu „řízeného prostředí“. Mezi monitorováním všech souborů v kořenovém adresáři webu, stejně jako všech událostí odpojení nebo rmdir, to může být ve vývojovém prostředí neúměrně hlučné. Pokud dokážeme předvídat změny souborového systému, například během údržby nebo událostí nasazení, můžeme tento šum rozumněji odfiltrovat.
Sloučením toho všeho do jediného koherentního souboru bychom chtěli /etc/audit/audit.rules
vypadat jako
# 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
Aktualizace:Tento článek je pěkným vysvětlením auditovaných pravidel a uvádí příklady pro každou událost, kterou byste mohli chtít protokolovat:
HOWTO_configure_the_auditing_of_the_system_auditd
Podívejte se na hlášení o chybě zde:
https://github.com/gds-operations/puppet-auditd/pull/1
Poskytují velmi dlouhý příklad souboru, který obsahuje mnoho důležitých změn, které by mohly být v systému provedeny. Pro usnadnění zkopírováno níže (s drobnými úpravami):
## 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
Přistupuješ k otázce poněkud špatně. Musíte se rozhodnout, co chcete protokolovat, a zjistit, jak to protokolovat. Generování hromady souborů protokolu je skvělé, ale pokud se na ně nikdy nepodíváte nebo nevíte, co hledáte, plýtvá to časem a prostorem.
Při rozhodování o tom, co protokolovat, musíte určit, jaké chování vás zajímá, a poté zjistit, jak tuto aktivitu zaznamenat. Dobrým způsobem, jak s tím začít, by bylo přečíst si o AppArmor a prostudovat manuálovou stránku auditctl. pak se naučte programovat pro Unix a zjistěte, jaká systémová volání jsou k dispozici, a identifikujte volání, která mohou být zajímavá. Je to opravdu velký podnik. Vím, že je to trochu hloupá odpověď a neposkytuje "zde je skript shellu, který zaznamená vše, na čem vám záleží na vašem serveru" - ale důvod, proč tyto odpovědi neexistují, je, že každá situace je jiná takže není možné dát odpověď „jedna velikost vyhovuje většině“.
Na (nepochybně velkém) místě, kde pracuji, máme celý tým lidí, kteří se věnují pouze systémovému logování – nemluvě o různých adminských a bezpečnostních týmech, které přispívají. Toto není malé téma. :/