[ 当你的才华还撑不起你的野心时,那你就应该静下心来学习。]
大家好,我是【WeiyiGeek/唯一极客】一个正在向全栈工程师(SecDevOps)前进的技术爱好者
作者微信:WeiyiGeeker
公众号/知识星球:全栈工程师修炼指南
主页博客: 【 https://weiyigeek.top 】- 为者常成,行者常至。
0x00.实践在 Linux 系统快速搭建 audit 审计服务及日志转发
描述:此章节作者立足于网络安全等级保护
以及安全运维工作
的需要,从收集、归纳、实践三个部分开始,主要包括等保主机安全审计日志规则
以及Linux各主流操作系统(kylinOS V10 SP3、Ubuntu、Rocky
)快速搭建audit审计服务,作者花费大量时间精力,帮助各位运维看友可以快速为企业中各业务服务器加上审计服务,以保证等保合规要求,以及安全审计的需要,希望大家多多支持,也希望此文能够切实的帮助到正在做这方面的朋友。
此处,在学习实践之前,简单复习一下一些基础知识。
什么是Linux审计服务系统?
Linux 审计系统提供了一种方式来跟踪系统上与安全相关的信息。根据预配置的规则,审计会生成日志条目,来尽可能多地记录系统上所发生的事件的相关信息。对于关键任务环境而言至关重要,可用来确定安全策略的违反者及其所执行的操作。审计不会为您的系统提供额外的安全,而是用于发现系统上使用的安全策略的违规。可以通过其他安全措施(如 SELinux)进一步防止这些违规。
Linux 系统 audit 审计服务介绍?
Linux Audit 是 Linux 操作系统上的一个功能,它允许系统管理员跟踪和监视系统上发生的各种事件和行为。这些事件包括文件和目录的访问、用户登录和注销、进程创建和终止,以及许多其他系统活动。Linux Audit 可以帮助管理员检测安全事件、审计系统配置和行为,并提供了对系统的更全面的可见性和控制。
Linux Audit 的主要优点包括:
安全性: Linux Audit 可以帮助管理员检测和响应安全事件,提高系统的安全性。
可追溯性: 通过审计日志,管理员可以追踪系统上发生的各种事件,包括用户活动、进程行为等,从而更好地了解系统的运行情况。
合规性: 对于需要符合特定法规或标准的组织来说,如PCI DSS、HIPAA等,Linux Audit 提供了必要的审计功能,以确保系统的合规性。
总之,Linux Audit 是 Linux 系统上一个重要的安全功能,通过记录和监视系统上发生的各种事件,可以帮助管理员提高系统的安全性、可追溯性和合规性。
Linux 系统 audit 相关工具程序有那些?
Linux 用户空间审计系统由 auditd、auditctl、aureport、audispd、ausearch 和 autrace 等应用程序组成,下面作者依次简单介绍。
-
auditd
:audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log。 -
auditctl
: 即时控制审计守护进程的行为的工具,如添加规则等。aureport
: 查看和生成审计报告的工具。ausearch
: 查找审计事件的工具auditspd
: 转发事件通知给其他应用程序,而不是写入到审计日志文件中。autrace
: 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。
Linux Audit 的主要组件包括以下几个方面:
-
Auditd 服务
: Auditd 是 Linux Audit 的核心组件,它是一个守护进程,负责收集系统上发生的各种事件,并将其记录到审计日志中。管理员可以通过配置 audit.rules 文件来定义需要监视的事件类型和规则。 -
Auditctl 命令
: Auditctl 是与 Auditd 服务交互的命令行工具。管理员可以使用 auditctl 命令动态地配置审计规则、启用或禁用审计功能,以及查询审计日志等。 -
审计规则
: 管理员可以通过编辑 audit.rules 文件来定义审计规则,以指定要监视的事件类型、记录方式、日志路径等。这些规则可以根据需要进行定制,以满足特定的安全需求。 -
审计日志
: 审计日志是记录 Linux 系统上发生的各种事件的文件。管理员可以使用工具如 ausearch、ausearch-dump 等来分析和检索审计日志,以了解系统的行为和事件发生情况。
简述 audit 和 syslog 日志系统之间的关系?
-
audit 审计系统:主要用来记录安全信息,用于对系统安全事件的追溯,其可以记录内核信息,包括文件的读写,权限的改变等。
-
syslog 日志系统:主要用来记录系统中的各种信息,如硬件警报和软件日志等,由于 syslog 属于应用层,没办法记录太多信息。
更多基础知识,可参考下述文章。
Linux 中 audit 审计相关命令使用实践,可参考作者发布的《Linux 命令 | 每日一学,Audit 安全审计相关工具》文章。
Linux 中 rsyslog 日志服务器搭建部署,可参考作者发布的《【网安合规】Rsyslog 开源日志服务器 - 快速收集企业网络日志,合规利器!》文章。
温馨提示:作者最近开通的知识星球,全栈系列从门到实践教程将会逐步同步到星球内(实时更新),加入星球将获得作者在安全、运维、开发(Sec、Ops、Dev)中的所有学习实践笔记,和问题答疑以及远程技术支持,希望大家多多支持!
实践效果展示,以 Ubuntu、Rocky Linux 9 系统为例。
在 rsyslog 远程日志服务器查看从Ubuntu接收到 audit的 审计日志
在 Grafana 可视化平台查看使用 Loki 从Ubuntu采集到的 auditd 审核日志
RockyLinux9系统auditd审计日志转发查看图
等保合规主机审计规则
描述:前面介绍 audit 相关审计工具的语法与使用示例,立足于等保主机安全合规要求,作者将抽取企业中的 Linux 操作系统里面配置的 audit 相关规则,进行实践触发规则并记录对应触发对象日志。
温馨提示:不同的操作系统、不同的 auditd 版本,在审计规则中有可能调用名称,以及参数有所差异,此时以实际的auditd版本的帮助文档为准。
1.记录修改系统日期和时间信息的事件,并使用标识符 “policy-time” 标记记录
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-a always,exit -F arch=b64 -S adjtimex,settimeofday -k policy-time
-a always,exit -F arch=b32 -S adjtimex,settimeofday,stime -k policy-time
-a always,exit -F arch=b32 -S clock_settime -F a0=0x0 -F key=policy-time
-a always,exit -F arch=b64 -S clock_settime -F a0=0x0 -F key=policy-time
-w /etc/localtime -p wa -F key=policy-time
EOF
温馨提示:为规则打审计事件标签由两种方式,一种是使用 -k <lable>
,一种是使用 -F key=<lable>
。
2.记录对用户和组的修改的事件
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-w /etc/group -p wa -k policy-identity
-w /etc/passwd -p wa -k policy-identity
-w /etc/gshadow -p wa -k policy-identity
-w /etc/shadow -p wa -k policy-identity
-w /etc/security/opasswd -p wa -k policy-identity
EOF
3.记录对网络环境或影响系统调用的事件
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-a always,exit -F dir=/etc/NetworkManager/ -F perm=wa -F key=policy-network
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k policy-locale
-a always,exit -F arch=b32 -S sethostname -S setdomainname -k policy-locale
-w /etc/resolv.conf -p wa -k policy-locale
-w /etc/hosts -p wa -k policy-locale
-w /etc/hostname -p wa -k policy-locale
-w /etc/issue -p wa -k policy-locale
-w /etc/issue.net -p wa -k policy-locale
-a always,exit -F dir=/etc/selinux/ -F perm=wa -F key=policy-selinux
EOF
# rhel、CentOS、KylinOS
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-w /etc/sysconfig/network -p wa -k policy-network-rhel
-w /etc/sysconfig/network-scripts/ -p wa -k policy-network-rhel
EOF
# debian、Ubuntu
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-w /etc/networks -p wa -k policy-network-debian
-w /etc/netplan/ -p wa -k policy-network-debian
EOF
4.记录用户登录和登出以及会话事件
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-w /var/log/tallylog -p wa -k policy-logins
-w /var/run/faillock/ -p wa -k policy-logins
-w /var/log/lastlog -p wa -k policy-logins
-w /var/run/utmp -p wa -k policy-session
-w /var/log/btmp -p wa -k policy-session
-w /var/log/wtmp -p wa -k policy-session
EOF
5.记录监视对文件权限、属性、所有权和组更改的事件
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-a always,exit -F arch=b32 -S chmod,fchmod,fchmodat -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
-a always,exit -F arch=b32 -S lchown,fchown,chown,fchownat -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
-a always,exit -F arch=b64 -S chown,fchown,lchown,fchownat -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
-a always,exit -F arch=b32 -S setxattr,lsetxattr,fsetxattr,removexattr,lremovexattr,fremovexattr -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
-a always,exit -F arch=b64 -S setxattr,lsetxattr,fsetxattr,removexattr,lremovexattr,fremovexattr -F auid>=1000 -F auid!=unset -F key=policy-perm_mod
EOF
6.记录未授权文件访问尝试的事件
tee -a /etc/audit/rules.d/audit.rules << 'EOF'
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=unset -F key=policy-access
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=unset -F key=policy-access
-a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=unset -F key=policy-access
-a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=unset -F key=policy-access
EOF
7.记录使用特权命令的事件
描述: 监视特权程序(那些在执行时设置了setuid和/或setgid位的程序)以确定没有权限的用户是否正在运行这些命令。
# 查找出系统中存在的特权文件
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>=1000 -k policy-privileged" }'
# 例如,
-a always,exit -F path=/usr/bin/fusermount -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/newgidmap -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/newuidmap -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/write -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/staprun -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/at -F perm=x -F auid>=1000 -k policy-privileged
-a always,exit -F path=/usr/bin/locate -F perm=x -F auid>=1000 -k policy-privileged
8.记录磁盘挂载情况事件(按需添加)