Centos7系统安全审计

1 Centos7审计配置

通过auditd,系统审核允许系统管理员监视其系统这样他们就可以检测到未经授权的数据访问或修改。

默认情况下,auditd将审核SELinux AVC拒绝、系统登录、帐户修改和身份验证事件。事件将记录到 /var/log/audit/audit.log

2 audit使用

2.1 配置文件

auditctl : 即时控制审计守护进程的行为的工具,比如如添加规则等等

aureport : 查看和生成审计报告的工具

ausearch : 查找审计事件的工具

auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中

autrace : 一个用于跟踪进程的命令

  • /etc/audit/auditd.conf
  • /etc/audit/rules.d/audit.rules
  • /etc/audit/audit.rules # 根据/etc/audit/rules.d/audit.rules自动生成

2.1.1 auditd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 是否记录本地事件,如果设为no,只记录来自网络的事件
local_events = yes
write_logs = yes
# 日志文件
log_file = /var/log/audit/audit.log
log_group = root
log_format = RAW
# 日志文件刷新方式,可选的选项有:
# NONE:不做特别处理
# INCREMENTAL:用freq选项的值确定多长时间发生一次向磁盘的刷新
# DATA:审计数据和日志文件是同步的
# SYNC:写日志文件时,数据和元数据是同步的
flush = INCREMENTAL_ASYNC
freq = 50
# 日志文件最大8MB
max_log_file = 8
# 日志文件数量
num_logs = 5
# 进程优先级(-4),ps axl | grep auditd 可查
priority_boost = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
# 当log文件达到max_log_file设定大小后的动作。可选的动作有:
# IGNORE:忽略max_log_file设置的限制,继续写log文件
# SYSLOG:向syslog中写入一条warning
# SUSPEND:auditd不再写log文件,但是auditd继续运行
# ROTATE:分多个log文件,一个log文件达到上限后在创建一个新的不同名字的log文件
max_log_file_action = ROTATE
# log_file文件所在的分区空闲空间少于这个设定的值时,触发相应的动作,单位是MB
space_left = 75
# space_left设定被触发时的动作。可选动作有:
# IGNORE, SYSLOG, SUSPEND:与前面max_log_file_action相似
# SINGLE:audit进程会将系统模式变为单用户模式
# HALT:audit进程将会触发系统关机
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
# 磁盘满后触发的动作
disk_full_action = SUSPEND
# 磁盘错误触发的动作
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no

2.2 常用命令

1
2
3
4
5
/*查看规则*/
auditctl -l

/*查看命令帮助*/
auditctl -h
1
2
3
4
5
auditctl -w /data -p rwxa
/*监控/data目录
-w path : 指定要监控的路径
-p : 指定触发审计的文件/目录的访问权限
rwxa : 指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(attr)*/

永久保存审计规则

1
2
3
4
vi /etc/audit/rules.d/audit.rules
例如将-w /data/ -p rwxa加入到最后一行
service auditd restart
auditctl -l

3 配置开机启动

1
systemctl enable  auditd

4 配置规则

规则类型可分为:

  1. 控制规则:控制audit系统的规则;
  2. 文件系统规则:也可以认为是文件监控,可以监控一个特定文件或者一个路径。
  3. 系统调用规则:可以记录特定程序的系统调用。

4.1 控制规则

-b 设置在内核中audit缓冲空间的最大值。

-f 这个选项来决定内核如何处理critical erros:0=silent 1=printk 2=panic.默认值为1。

-e 设置使能标志,设置为0,为关闭了audit,设置为1,则开启audit;当设置为2时,表示锁定,一般在设置完其他规则后最后设置,防止其他人修改规则;任何修改规则的行为都会被拒绝,并且记录审计日志,只有当重启系统后,这个使能标志才可以被修改。

4.2 文件系统规则

1
auditctl -w path -p permissions -k key_name
  • -w : 目录或者文件路径
  • -p: 描述文件系统监视将触发的权限访问类型,r=读取,w=写入,x=执行,a=属性更改。
  • -k: 设置审核规则的筛选关键字

4.3 系统调用规则

1
auditctl -a [list,action|action,list] -S [Syscall name or number|all] -F field=value -k key_name
  • -a: action和list 明确一个事件被记录。action可以为always或者never,list明确出对应的匹配过滤,list可以为:task,exit,user,exclude,filesystem。
  • -S: system_call 明确出系统调用的名字,几个系统调用可以写在一个规则里,如-S xxx -S xxx。系统调用的名字可以在/usr/include/asm/unistd_64.h文件中找到。
  • -F: field=value 作为附加选项,修改规则以匹配特定架构、GroupID,ProcessID等的事件。具体有哪些字段,可以参考man linux https://linux.die.net/man/8/auditctl

5 配置实例

5.1 记录系统的日期和时间的修改

vim /etc/audit/rules.d/audit.rules

1
2
3
4
5
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k timechange
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change

5.2 记录用户和组的修改事件

1
2
3
4
5
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

5.3 记录网络环境修改时间

1
2
3
4
5
6
7
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a always,exit -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale
-w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale
-w /etc/sysconfig/network -p wa -k system-locale
-w /etc/sysconfig/network-scripts/ -p wa -k system-locale

5.4 记录登录和登出事件

1
2
-w /var/log/lastlog -p wa -k logins
-w /var/run/faillock/ -p wa -k logins

5.5 记录会话启动事件

1
2
3
-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k logins
-w /var/log/btmp -p wa -k logins

文件/var/run/utmp跟踪当前登录的所有用户。所有审计记录都将用标识符“session”标记, 可以用who命令读取

/var/log/wtmp文件跟踪登录、注销、关机和重新启动事件。

文件/var/log/btmp跟踪失败的登录尝试,可以通过输入命令 ‘/usr/bin/last-f /var/log/btmp’ 读取。所有审核记录都将被标记为标识符“logins”

5.6 监视对文件权限、属性、所有权和组的更改

1
2
3
4
5
6
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod

在所有情况下,审核记录将只为非系统用户id(auid>=1000)并将忽略守护进程事件(auid=4294967295)。

所有审计记录用标识符“perm_mod”标记

5.7 记录未授权文件访问尝试

1
2
3
4
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access

5.8 确保收集使用特权命令

监视特权程序(那些在执行时设置了setuid和/或setgid位的程序)以确定没有权限的用户是否正在运行这些命令。

通过下面命令

1
2
3
4
 find / -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk
'{print \
"-a always,exit -F path=" $1 " -F perm=x -F auid>=1000 -F auid!=4294967295 \
-k privileged" }'

得到记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -F auid!=4294967295  -k privileged
-a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/write -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/ssh-agent -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/netreport -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/usernetctl -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/lib/polkit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/libexec/utempter/utempter -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/libexec/dbus-1/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
-a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged

5.9 收集成功挂载磁盘事件

1
2
-a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mount

在所有情况下,审核记录将只为非系统用户id(auid>=1000)并将忽略守护进程事件(auid=4294967295)。

所有审计记录用标识符“mount”和“mounts”标记

5.10 确保收集用户的文件删除事件

1
2
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete

在所有情况下,审核记录将只为非系统用户id(auid>=1000)并将忽略守护进程事件(auid=4294967295)。

所有审计记录用标识符“delete”标记

5.11 确保收集对系统管理范围(sudoers)的更改

1
2
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d/ -p wa -k scope

5.12 监视sudo日志文件

如果系统已正确配置为禁用su命令并强制所有管理员必须先登录,然后使用sudo执行特权命令,

然后所有管理员命令将被记录到/var/log/sudo.log文件.

每当执行命令时,审核事件将被触发为/var/log/sudo.log文件将打开文件进行写入,并执行管理命令将写入日志。

1
-w /var/log/sudo.log -p wa -k actions

5.13 确保收集内核模块加载和卸载

1
2
3
4
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

5.14 确保审核配置是不可变的

审核规则不能使用auditctl修改。设置标志“-e2“强制将审核置于不可变模式。进行审核更改只能对系统重新启动。

1
-e 2

6 参考

https://cloud.tencent.com/developer/article/1653503

https://www.cnblogs.com/zydev/p/13086818.html

auditctl(8) - Linux man page (die.net)

-------------本文结束感谢您的阅读-------------

本文标题:Centos7系统安全审计

文章作者:OperationMAN

发布时间:2022年01月14日 - 17:01

最后更新:2022年03月31日 - 16:03

原始链接:https://kxinter.gitee.io/2022/01/14/Centos7系统安全审计/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!