在 Linux 中使用审计来跟踪系统更改和未经授权的访问

Linux 2.6内核能够记录系统调用和文件访问等事件。然后,管理员可以查看这些日志,以确定可能的安全漏洞,例如登录尝试失败或者用户无法访问系统文件。此功能称为Linux审计系统。

确保机器中安装了审计包

# rpm -qa | grep audit

如果没有安装,在 Red Hat 机器上可以使用下面命令安装:

# yum install audit

跟踪任何目录或者文件(访问和更改)

Linux 审计系统还允许管理员查看文件和目录。
如果监视被放置在文件或者目录上,则会记录成功和失败的操作,例如打开和执行文件或者目录。

创建审计规则

# vi /etc/audit/audit.rules
# Feel free to add below this line. See auditctl man page
-w /home/jack/test -k TEST
-w : To ad a watch for the given file or directory
-k : To assign a key which makes things simpler while generating report logs

重启审计服务

# /etc/init.d/auditd restart
Stopping auditd:                                           [  OK  ]
Starting auditd:                                           [  OK  ]

现在我们将尝试访问该文件并进行一些更改以交叉验证我们的审计日志。

我将作为不同的用户登录

# su - jack
$cd test
$pwd
/home/jack/test
$touch myfile
$ls

现在让我们检查审计日志。
(这是我的日志文件的一部分)

# cat /var/log/audit/audit.log | grep TEST
type=SYSCALL msg=audit(1367571999.615:46623): syscall=229 success=no exit=-61 a0=bfa2d2b0 a1=abdafc a2=bfa2d25c a3=14 items=1 ppid=11639 pid=11750 auid=500 uid=500 gid=501 euid=500 suid=500 fsuid=500 egid=501 sgid=501 fsgid=501 tty=pts3 ses=7643 comm="ls" exe="/bin/ls" key="TEST"

现在,正如我们所见,我们可以从日志中获取所有必需的信息,但它看起来非常混乱,我们必须进行大量dig才能从这些日志中获取一些有用的信息。
现在,另一种更简单、更干净的方法是使用 aureport

# aureport -k -i | grep TEST
Key Report
===============================================
# date time key success exe auid event
===============================================
108. 05/03/2013 14:39:46 TEST yes /bin/touch jack 46629
109. 05/03/2013 14:39:59 TEST yes /bin/ls jack 46633

如我们所见,用户 jack 成功尝试访问 test 目录,并且还列出了使用的命令。

跟踪所有登录尝试

此命令将显示来自主机 IP 地址的所有成功登录的用户。

# aureport -au -i --success
Authentication Report
============================================
# date time acct host term exe success event
============================================
1. 10/12/2013 17:56:50 root ? :0 /usr/libexec/gdm-session-worker yes 19
 2. 10/12/2013 18:07:10 root 10.10.10.54 ssh /usr/sbin/sshd yes 41
3. 10/12/2013 18:07:10 root 10.10.10.40 ssh /usr/sbin/sshd yes 44
4. 10/15/2013 10:45:10 root 10.10.10.67 ssh /usr/sbin/sshd yes 481
5. 10/15/2013 10:45:10 root 10.10.10.234 ssh /usr/sbin/sshd yes 484
6. 10/15/2013 10:47:49 root 10.10.10.34 ssh /usr/sbin/sshd yes 498
7. 10/15/2013 10:47:49 root 10.10.10.67 ssh /usr/sbin/sshd yes 501

此命令将显示所有失败的登录尝试

# aureport -au -i --failed
Authentication Report
============================================
# date time acct host term exe success event
============================================
1. 03/26/2013 14:25:33 root 10.10.10.40 ssh /usr/sbin/sshd no 7256
2. 03/26/2013 14:25:33 root 10.10.10.40 ssh /usr/sbin/sshd no 7257
3. 03/26/2013 14:25:38 root 10.10.10.40 ssh /usr/sbin/sshd no 7258
4. 03/26/2013 14:25:38 root 10.10.10.40 ssh /usr/sbin/sshd no 7259

跟踪用户的所有事件

这里 501 是用户“jack”的 uid,我们可以使用如下所示的 id 命令进行检查

# id jack
uid=501(jack) gid=501(TESTusers) groups=501(TESTusers)
# ausearch -ui 501 --interpret
---
type=USER_LOGIN msg=audit(01/27/14 22:30:06.451:798782) : user pid=9755 uid=root auid=jack msg='uid=jack exe=/usr/sbin/sshd (hostname=server1.example.com, addr=210.12.324.154, terminal=/dev/pts/5 res=success)'
---
type=USER_LOGIN msg=audit(01/27/14 22:34:25.079:798813) : user pid=10101 uid=root auid=jack msg='uid=jack exe=/usr/sbin/sshd (hostname=server1.example.com, addr=210.12.324.154, terminal=/dev/pts/6 res=success)'
---
type=USER_LOGIN msg=audit(01/28/14 05:44:48.722:801728) : user pid=6623 uid=root auid=jack msg='uid=jack exe=/usr/sbin/sshd (hostname=server1.example.com, addr=210.12.324.154, terminal=/dev/pts/7 res=success)'
---

跟踪特定日期和时间的所有事件

# ausearch -ui 501 --start 02/01/14 00:00:00 --end 02/02/14 00:00:00
---
time->Fri Jan 31 23:43:18 2014
type=USER_LOGIN msg=audit(1391229798.400:838010): user pid=3615 uid=0 auid=501 msg='uid=501: exe="/usr/sbin/sshd" (hostname=server1.example.com, addr=210.12.324.154, terminal=/dev/pts/4 res=success)'
---
time->Sat Nov  1 01:16:43 2014
type=USER_LOGIN msg=audit(1391235403.305:838649): user pid=10238 uid=0 auid=501 msg='uid=501: exe="/usr/sbin/sshd" (hostname=server1.example.com, addr=210.12.324.154, terminal=/dev/pts/4 res=success)'

跟踪与帐户修改相关的所有事件

# aureport -m
Account Modifications Report
=================================================
# date time auid addr term exe acct success event
=================================================
1. 05/03/2013 13:52:39 0 ? pts/1 /usr/sbin/useradd jack yes 46449
2. 05/03/2013 13:52:39 0 ? pts/1 /usr/sbin/useradd ? yes 46451
3. 05/03/2013 13:52:39 0 ? pts/1 /usr/sbin/useradd ? yes 46452
4. 05/03/2013 13:52:47 0 ? pts/1 /usr/bin/passwd jack yes 46473
5. 05/03/2013 13:52:47 0 ? pts/1 /usr/bin/passwd ? yes 46474

列出所有审计报告

# aureport
Summary Report
======================
Range of time in logs: 10/12/2012 17:44:28.795 - 05/03/2013 14:56:20.388
Selected time for report: 10/12/2012 17:44:28 - 05/03/2013 14:56:20.388
Number of changes in configuration: 17
Number of changes to accounts, groups, or roles: 5
Number of logins: 27
Number of failed logins: 3
Number of authentications: 59
Number of failed authentications: 4
Number of users: 3
Number of terminals: 14
Number of host names: 3
Number of executables: 20
Number of files: 12
Number of AVC's: 1
Number of MAC events: 8
Number of failed syscalls: 29
Number of anomaly events: 2
Number of responses to anomaly events: 0
Number of crypto events: 567
Number of keys: 3
Number of process IDs: 7294
Number of events: 47522

要以更易读的格式生成结果,例如将 UID 替换为它们映射到的用户名,还可以使用 -i 选项:

# aureport - -i

要显示每个日志的开始和停止时间,请添加 -t 选项:

# aureport - -i -t

要仅显示失败的事件,请使用 --failed;请注意,此选项以两个破折号为前缀,而不是一个:

# aureport - -i --failed

要仅显示成功事件,请使用 --success;请注意,此选项以两个破折号为前缀,而不是一个:

# aureport - -i --success

要从非默认日志文件生成报告,请使用 -if 选项指定它:

# aureport - -i -if /var/log/audit/audit.log.1

列出可用于审计的所有可用标志

# aureport --help

列出所有规则

# auditctl -l
LIST_RULES: exit,always dir=/home/jack/test (0x11) key=TEST
日期:2020-06-02 22:18:42 来源:oir作者:oir