简单的示例 auditd 配置?

信息安全 linux 身份证 审计
2021-08-29 14:21:14

在对Linux 命令日志的回答中建议使用Auditd ?

Ubuntu 上的默认安装似乎几乎没有记录任何内容。它附带了几个示例(capp.rules、nispom.rules、stig.rules),但尚不清楚每个示例的性能影响是什么,也不清楚每个示例最适合哪种环境或假设。

在 Web 服务器上部署 auditd 的最佳起点是什么?这将包括一个 audit.rules 文件、启用将审计日志流实时发送到远程计算机的设置,以及用于查看已记录内容的最简单的工具。

接下来,典型的台式机怎么样?

更新:dannysauer 指出,为了安全起见,从目标开始很重要,我同意。但我的主要目的是引发对该工具使用的一些更有用的解释,并查看它的实际工作示例,以及性能和存储影响等。如果已经存在并且我错过了它,请指出它. 如果没有,我建议为更常见的场景之一创建一个示例(例如,一个简单的 Web 服务器,运行您选择的堆栈),其中目标可能是在闯入的情况下保留信息以提供帮助追溯以找出渗透的开始位置。如果有一个更适合或可实现的目标用于例如没有大量 IT 人员的小型企业,那也会有所帮助。

3个回答

Auditd 是一个非常强大的监控工具。任何看过它的人都可以证明,可用性是主要弱点。设置诸如 auditd 之类的东西需要非常深入地思考究竟 是什么 需要在相关特定系统上进行审计。在问题中,您决定将 Web 服务器作为我们的示例系统,这很好,因为它是特定的。

为了便于讨论,我们假设测试/开发 Web 服务器和生产 Web 服务器之间存在正式划分,其中 Web 开发人员在测试/开发系统上完成所有工作,而对生产环境的更改是在受控部署中完成的。

因此,做出这些相当大的假设,并专注于生产系统,我们就可以开始工作了。查看 RHEL5 的 CIS 基准中的 auditd 建议, 我们可以开始构建以下建议的规则集:

-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

这将导致在 rmdir、unlink、stime 或 setrlimit 系统调用退出时写出日志。这应该让我们知道是否有人试图删除文件或与时俱进。我们还在定义组、用户、密码和 sudo 访问的文件上设置了特定的文件监视。每次这些文件之一为以下任一文件时,都会写入审计日志,而不是查看每个系统调用:

  1. 以 O_WRONLY 或 O_RDWR 模式打开
  2. 一个属性被改变

由于我们已经假设我们正在谈论生产 Web 服务器,我建议添加以下行:

-w /var/www -p wa

这将递归地监视/var/www目录树下的所有文件。

现在我们可以看到之前做出的“受控环境”假设的原因。在监视 Web 根目录中的所有文件以及所有 unlink 或 rmdir 事件之间,这在开发环境中可能会非常嘈杂。如果我们可以预测文件系统的变化,例如在维护窗口或部署事件期间,我们可以更合理地过滤掉这种噪音。

将所有这些组合成一个单一的、连贯的文件,我们希望/etc/audit/audit.rules看起来像

# 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

更新:这篇文章很好地解释了 auditd 规则,并为您可能要记录的每个事件提供了示例:

HOWTO_configure_the_auditing_of_the_system_auditd


在此处查看错误报告:

https://github.com/gds-operations/puppet-auditd/pull/1

他们提供了一个很长的示例文件,其中包含可能对系统进行的许多重要更改。为方便起见,复制如下(稍作修改):

## 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

你在某种程度上以错误的方式接近这个问题。您需要确定要记录的内容,并了解如何记录。生成一堆日志文件很酷,但是如果您从不查看它们或不知道您在寻找什么,那只会浪费时间和空间。

在决定记录什么时,您需要确定您关心的行为是什么,然后找出如何记录该活动。开始执行此操作的一个好方法是阅读AppArmor并仔细阅读auditctl手册页。然后通过学习为 Unix 编程来了解可用的系统调用,并确定可能感兴趣的调用。这真的是一项相当大的事业。我知道这是一个油嘴滑舌的答案,并且没有提供“这是一个 shell 脚本,它将记录您在服务器上关心的所有内容” - 但这些答案不存在的原因是,每种情况都不同所以不可能给出“一刀切”的答案。

在我工作的(当然很大)地方,我们有一整个团队,他们只致力于系统日志记录——更不用说做出贡献的各种管理和安全团队了。这不是一个小话题。:/