auditctl –d 删除一条规则
auditctl –D 删除所有规则
auditctl –w 指定要审计的文件或目录路径
auditctl –p[r|w|x|a] 和-w一起使用指定触发审计的文件/目录的访问权限
rwxa : 指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(改变在文件或者目录中的属性)
auditctl –k 指定别名,方便下次审计时可以根据该名字进行调用,并查看相关的信息
auditctl –s 查看auditd服务状态
auditctl -e 设置使能标志
设置为0,关闭audit,设置为1,开启audit;当设置为2时,表示锁定,一般在设置完其他规则后最后设置,防止其他人修改规则;任何修改规则的行为都会被拒绝,并且记录审计日志,只有当重启系统后,这个使能标志才可以被修改。
主要结论:
1,通过 ausearch -k quanyi | aureport -x
打印出审计的报表,如图:
2,根据最后一列的审计事件的ID对应事件的详细过程
比如:第十八个审计事件的id:1292585然后根据这个事件通过
ausearch -a 1292585
搜索出对应事件的详细过程,分析这个过程即可
auditd是监听目录下的文件操作
你可以通过auditd配置你要监听的目录,之后对这个目录下的操作会记录到autitd的日志中
这里先不讲如何去配置auditd,这里讲如何去分析auditd日志
首先我们创建文件也好,删除文件也好,都是由进程帮我们去执行的
linux内核提供接口,可以查询进程对文件的操作
autitd记录的就是文件操作时涉及到的数据记录下来
所以只要分析日志就可以判断出是谁对哪个文件进行了什么操作
本文只分享分析方法,这里就讲得粗糙些
这里给出两个例子,一个是知道登录时的bash进程id,另一个是不知道
在这两种情况下如何去分析日志
为什么要知道bash进程id?
- 因为登录服务器后,输入的命令都是通过这个bash进程传递linux去执行
- 也就是说你登录服务器后所有运行的命令都是bash这个进程的子进程
- 所以只要分析bash这个进程的子进程进行了什么样的操作就可以知道用户执行了什么操作
确认下auditd的配置,查以看出他监控了/opt/context/EPG目录
# 新建一个规则 auditctl -w /opt/context/EPG -p wa -k watchdata # 查看我们新建的规则 auditctl -l -w /opt/context/EPG -p wa -k watchdata
没什么特殊配置,就是监听了/opt/context/EPG这个目录,并配置了key为watchdata(方便我们查看日志)
我们先登录服务器
可以看到日志/var/log/audit/audit.log中记录了以下信息
type=CRYPTO_KEY_USER msg=audit(1614316640.869:11712): pid=16275 uid=0 auid=0 ses=1249 msg='op=destroy kind=server fp=SHA256:f3:c7:dd:6e:c4:cf:6e:ac:b6:ab:ea:ad:c4:36:b8:26:a9:bd:b2:69:27:8d:44:8b:5c:9e:e8:ab:4d:e6:1e:da direction=? spid=16275 suid=0 exe="/usr/sbin/sshd" hostname=fcg-1 addr=? terminal=pts/3 res=success'UID="root" AUID="root" SUID="root" type=CRYPTO_KEY_USER msg=audit(1614316640.869:11713): pid=16275 uid=0 auid=0 ses=1249 msg='op=destroy kind=server fp=SHA256:62:ed:84:c4:f5:a1:ac:cd:eb:fa:ca:68:81:87:21:9e:fe:e4:ff:92:e3:f5:fa:53:4f:3e:38:58:a2:74:a1:91 direction=? spid=16275 suid=0 exe="/usr/sbin/sshd" hostname=fcg-1 addr=? terminal=pts/3 res=success'UID="root" AUID="root" SUID="root" type=CRYPTO_KEY_USER msg=audit(1614316640.869:11714): pid=16275 uid=0 auid=0 ses=1249 msg='op=destroy kind=server fp=SHA256:0d:30:33:d2:2d:9d:37:e3:19:45:71:e4:fa:5d:b9:59:89:a1:2b:61:68:c4:1f:88:89:51:53:a5:81:5f:a4:1f direction=? spid=16275 suid=0 exe="/usr/sbin/sshd" hostname=fcg-1 addr=? terminal=pts/3 res=success'UID="root" AUID="root" SUID="root" type=USER_LOGIN msg=audit(1614316640.869:11715): pid=16275 uid=0 auid=0 ses=1249 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=10.0.6.58 addr=10.0.6.58 terminal=/dev/pts/3 res=success'UID="root" AUID="root" ID="root" type=USER_START msg=audit(1614316640.869:11716): pid=16275 uid=0 auid=0 ses=1249 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=10.0.6.58 addr=10.0.6.58 terminal=/dev/pts/3 res=success'UID="root" AUID="root" ID="root" type=CRED_REFR msg=audit(1614316640.870:11717): pid=16275 uid=0 auid=0 ses=1249 msg='op=PAM:setcred grantors=pam_unix acct="root" exe="/usr/sbin/sshd" hostname=10.0.6.58 addr=10.0.6.58 terminal=ssh res=success'UID="root" AUID="root"
可以看出我登录后分配给我们bash的pid为16275
也可以用ps -ef | fgrep bash命令确认
接着我们在/opt/context/EPG目录下创建一个文件
cd /opt/context/EPG touch 1
由于我知道了我的bash的pid为16275
那么touch这个命令的ppid就应该为16275
再根据这个ppid去查看的日志
fgrep 'ppid=16275' auditd.log type=SYSCALL msg=audit(1614316646.189:11718): arch=c000003e syscall=2 success=yes exit=3 a0=7fffe0a9a883 a1=941 a2=1b6 a3=7fffe0a982a0 items=2 ppid=16275 pid=16298 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts3 ses=1249 comm="touch" exe="/usr/bin/touch" key="watchdata"ARCH=x86_64 SYSCALL=open AUID="root" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root" type=CWD msg=audit(1614316646.189:11718): cwd="/opt/context/EPG" type=PATH msg=audit(1614316646.189:11718): item=0 name="/opt/context/EPG" inode=67221298 dev=fd:00 mode=040750 ouid=0 ogid=0 rdev=00:00 objtype=PARENT cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0OUID="root" OGID="root" type=PATH msg=audit(1614316646.189:11718): item=1 name="1" inode=67222049 dev=fd:00 mode=0100640 ouid=0 ogid=0 rdev=00:00 objtype=CREATE cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0OUID="root" OGID="root" type=PROCTITLE msg=audit(1614316646.189:11718): proctitle=746F7563680031
可以从日志中看关键字,从以下3个关键字中,我们可以推算出有人在/opt/context/EPG目录下,创建了一个文件1,再分析地细致一点,你可以发现是root用户创建了文件1
cwd="/opt/context/EPG" name="1" objtype=CREATE
如何我们不知道bash进程id
那么思路就是先分析所有的命令,找出可疑的bash进程id,然后再根据bash进程id去分析日志
# 查看方法1,根据-f 文件 ausearch -f /opt/context/EPG | fgrep comm # 查看方法2,根据-k 关键字 # 我们在做监控的时候定义了关键字-k watchdata,所以可以 ausearch -k watchdata | fgrep comm # 找到可疑的记录(要用肉眼去找),比如下面这条 # 为什么我会认为他可疑,因为他执行了/usr/bin/touch这个命令 # 这里要结合实际情况去找了,要看经验了 type=SYSCALL msg=audit(1614316646.189:11718): arch=c000003e syscall=2 success=yes exit=3 a0=7fffe0a9a883 a1=941 a2=1b6 a3=7fffe0a982a0 items=2 ppid=16275 pid=16298 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts3 ses=1249 comm="touch" exe="/usr/bin/touch" key="watchdata"
上面显示audit的id为11718
根据id查看他的行为
ausearch -a 11718 ---- time->Fri Feb 26 13:17:26 2021 type=PROCTITLE msg=audit(1614316646.189:11718): proctitle=746F7563680031 type=PATH msg=audit(1614316646.189:11718): item=1 name="1" inode=67222049 dev=fd:00 mode=0100640 ouid=0 ogid=0 rdev=00:00 objtype=CREATE cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0 type=PATH msg=audit(1614316646.189:11718): item=0 name="/opt/context/EPG" inode=67221298 dev=fd:00 mode=040750 ouid=0 ogid=0 rdev=00:00 objtype=PARENT cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0 type=CWD msg=audit(1614316646.189:11718): cwd="/opt/context/EPG" type=SYSCALL msg=audit(1614316646.189:11718): arch=c000003e syscall=2 success=yes exit=3 a0=7fffe0a9a883 a1=941 a2=1b6 a3=7fffe0a982a0 items=2 ppid=16275 pid=16298 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts3 ses=1249 comm="touch" exe="/usr/bin/touch" key="watchdata"
可以通过通过以下关键字判断出有人在/opt/context/EPG目录下通过touch命令新建了一个文件
name="1" objtype=CREATE cwd="/opt/context/EPG" exe="/usr/bin/touch"
而那个人的命令所在的父进程ppid=16275
你也可以找到ses=1249这个字段,这个晚点解释
我们要去看看16275是哪个登录者的bash
fgrep ' pid=16275 ' /var/log/audit/audit.log | fgrep USER_LOGIN type=USER_LOGIN msg=audit(1614316640.869:11715): pid=16275 uid=0 auid=0 ses=1249 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=10.0.6.58 addr=10.0.6.58 terminal=/dev/pts/3 res=success'UID="root" AUID="root" ID="root"
我们可以看现登录者的ip是10.0.6.58
这样我们就知道了有人从10.0.6.58登录了服务器并在/opt/context/EPG目录下通过touch命令新建了一个文件1
上述为比较原始的方法,查看的是原始日志,比较适合新手
接下来稍微介绍一点进阶的统计方法
因为我们之前定义了watchdata这个关键字,因此我们可以用关键字去查找
ausearch -k watchdata | aureport -x 99. 02/26/2021 13:17:26 /usr/bin/touch pts3 ? 0 11718
是不是比之前稍微直观一点,同样找到11718
我们的目标是找ses,aureport没有可以帮我们提取ses的接口
这里我们目测提炼
ausearch -a 11718 # 找到ses=1249,去分析下这个用户的行为 # 所有用户的行为全部都罗列了出来 fgrep ses=1249 /var/log/audit/audit.log | aureport -x Executable Report ==================================== # date time exe term host auid event ==================================== 1. 02/26/2021 13:16:36 /usr/sbin/sshd ssh 10.0.6.58 0 11705 2. 02/26/2021 13:16:36 /usr/sbin/sshd pts/2 fcg-1 0 11706 3. 02/26/2021 13:16:36 /usr/sbin/sshd pts/2 fcg-1 0 11707 4. 02/26/2021 13:16:36 /usr/sbin/sshd pts/2 fcg-1 0 11708 5. 02/26/2021 13:16:36 /usr/sbin/sshd /dev/pts/2 10.0.6.58 0 11709 6. 02/26/2021 13:16:36 /usr/sbin/sshd /dev/pts/2 10.0.6.58 0 11710 7. 02/26/2021 13:16:36 /usr/sbin/sshd ssh 10.0.6.58 0 11711 8. 02/26/2021 13:17:20 /usr/sbin/sshd pts/3 fcg-1 0 11712 9. 02/26/2021 13:17:20 /usr/sbin/sshd pts/3 fcg-1 0 11713 10. 02/26/2021 13:17:20 /usr/sbin/sshd pts/3 fcg-1 0 11714 11. 02/26/2021 13:17:20 /usr/sbin/sshd /dev/pts/3 10.0.6.58 0 11715 12. 02/26/2021 13:17:20 /usr/sbin/sshd /dev/pts/3 10.0.6.58 0 11716 13. 02/26/2021 13:17:20 /usr/sbin/sshd ssh 10.0.6.58 0 11717 14. 02/26/2021 13:17:26 /usr/bin/touch pts3 ? 0 11718
看第一条,我们知道了这个用户(10.0.6.58)
看最后一行,我们知道了这个用户执行了/usr/bin/touch
是不是更直观更快
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!