=Start=
缘由:
在我们使用Linux作为自己的服务器时,安全防护是一个不得不要考虑的问题。为了避免别人盗取我们的数据,我们需要时刻关注它。安全防护包括很多东西,审计是其中之一。
在Linux系统上有一个叫 auditd 的审计工具。这个工具在大多数Linux操作系统中是默认安装的。那么auditd 是什么?该如何使用呢?下面我们开始介绍。
正文:
参考解答:
- 控制规则 — 允许审计系统的行为和它的一些被修改的配置。
- 文件系统规则 — 也被称为文件监视,允许审计读写特定文件或者进入特定目录的操作。
- 系统调用规则 — 允许记录任何指定程序所做的系统调用。
/etc/audit/audit.rules
文件中进行持久化。以下两个部分总结了定义审计规则的两个方法(auditctl和audit.rules):一、使用 auditctl 实用程序来定义审核规则
注意
所有与审核服务交互的命令以及审核日志文件都需要 root 特权。作为 root 用户确保您执行这些命令。auditctl
命令允许您控制审核系统的基本功能并且限定规则来决定哪些审核项目要记录。
定义控制规则(-b/-f/-e/-r/-s/-l/-D)
-b
-
在 Kernel 中设定最大数量的已存在的审核缓冲区,例如:
~]# auditctl -b 8192
-f
-
当追踪重要错误时设定所要完成的行动,例如:
~]# auditctl -f 2
以上配置触发 kernel panic 以防重要错误。 -e
-
启动或者禁用审核系统或者锁定它的配置,例如:
~]# auditctl -e 2
以上命令锁定审核配置。 -r
-
设定每秒生成信息的速率,例如:
~]# auditctl -r 0
以上配置在生成信息方面不设定限制速率。 -s
-
报告审核系统状态,例如:
~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
-
列出所有当前装载的审核规则,例如:
~]# auditctl -l LIST_RULES: exit,always watch=/etc/localtime perm=wa key=time-change LIST_RULES: exit,always watch=/etc/group perm=wa key=identity LIST_RULES: exit,always watch=/etc/passwd perm=wa key=identity LIST_RULES: exit,always watch=/etc/gshadow perm=wa key=identity
-D
-
删除所有当前装载的审核规则,例如:
~]# auditctl -D No rules
定义文件系统规则(-w/-p)
定义文件系统规则,使用以下语法:
auditctl -w path_to_file -p permissions -k key_name
-
path_to_file 是审核过的文件或者目录;
-
permissions 是被记录的权限:
-
r
— 读取文件或者目录。 -
w
— 写入文件或者目录。 -
x
— 运行文件或者目录。 -
a
— 改变在文件或者目录中的属性。
-
-
key_name 是可选字符串,可帮助您判定哪个规则或者哪组规则生成特定的日志项。
举例:为了定义所有的输写访问权限以及在/etc/passwd
文件中每个属性更改的规则,执行以下命令:~]# auditctl -w /etc/passwd -p wa -k passwd_changes
请注意以下字符串-k
选项是任意的。为了定义记录所有输写访问权限,以及在/etc/selinux/
目录中所有文件属性更改的规则,执行以下命令:~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
为了定义可以记录执行/sbin/insmod
命令的规则,在 Linux Kernel 中插入模块,执行以下命令:~]# auditctl -w /sbin/insmod -p x -k module_insertion
定义系统调用规则(-a/-S/-F)
为了定义系统调用规则,使用以下语法:
auditctl -a action,filter -S system_call -F 输入栏=value -k key_name
-
action 以及 filter 详细说明某个事件何时被记录。 action 可能是
always
(经常是)或者never
(从不是)其中之一。 filter 详细说明哪个 Kernel 规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过滤器:task
、exit
、user
以及exclude
。如果想要更多有关这些过滤器的信息,请参考〈第 5.1 节 “审核系统架构”〉的开始部分。 -
system_call 通过它的名字详细说明系统调用。所有的系统调用都可以在
/usr/include/asm/unistd_64.h
文件中找到。许多系统调用都能形成一个规则,每个都在-S
选项之后详细说明。 -
field=value 详细说明其他选项,进一步修改规则来与以特定架构、组 ID、进程 ID和其他内容为基础的事件相匹配。为了列出完整可用的输入栏类型和它们的数值,请参考 auditctl(8) 手册页。
-
key_name 是可选字符串,可帮助您判定哪个规则或者哪组规则生成特定的日志项。
举例:为了定义创造日志项 的规则,每次通过程序使用系统调用adjtimex
或者settimeofday
。当系统使用 64 位架构,请执行以下命令:~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
为了定义创造日志项的规则,每次由 ID 是 500 或更大的系统用户删除或者重命名文件时,使用(-F auid!=4294967295
选项排除没有设定登录 UID的用户),执行以下命令:~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
使用系统调用语法来定义文件系统也是有可能的。对于-w /etc/shadow -p wa
文件系统规则来说,以下命令为模拟的系统调用创造了规则:~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa
二、在 /etc/audit/audit.rules 文件中定义持久化的审计规则和控制
/etc/audit/audit.rules
文件中。这个文件使用相同的 auditctl
命令行语法来详细说明规则。任何在 # 之后的空行或者文本(#
)可以忽略。auditctl
指令可以被用来读取来自指定文件的规则,使用 -R
选项(augenrules脚本其实就是封装的auditctl命令-R选项),例如:~]# auditctl -R /usr/share/doc/audit-version/stig.rules
定义控制规则
文件可以只包括以下的控制规则,修改审核系统的行为: -b
、-D
、-e
、-f
、或者 -r
。
举例. 在 audit.rules
中控制规则。
# Delete all previous rules -D # Set buffer size -b 8192 # Make the configuration immutable -- reboot is required to change audit rules (-e选项这一行必须放在文件的最后) -e 2 # Panic when a failure occurs -f 2 # Generate at most 100 audit messages per second -r 100
定义文件系统和系统调用规则
使用 auditctl
语法定义文件系统和系统调用原则。在〈第 5.5.1 节 “使用 auditctl 实用程序来定义审核规则”〉中的例子可以用以下规则文件来表示:
举例. 在 audit.rules
中的文件系统和系统调用规则
-w /etc/passwd -p wa -k passwd_changes -w /etc/selinux/ -p wa -k selinux_changes -w /sbin/insmod -p x -k module_insertion -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
预配置规则文件
/usr/share/doc/audit-version/
目录中, 根据不同的认证标准 audit 软件包提供一组预配置规则文件:/etc/audit/audit.rules
并且复制您所选择的有关 /etc/audit/audit.rules
文件的配置文件:~]# cp /etc/audit/audit.rules /etc/audit/audit.rules_backup ~]# cp /usr/share/doc/audit-version/stig.rules /etc/audit/audit.rules
参考链接:
How To Use the Linux Auditing System on CentOS 7 #需要详细研读
https://www.digitalocean.com/community/tutorials/how-to-use-the-linux-auditing-system-on-centos-7
如何使用Linux审核系统在CentOS 7
https://www.howtoing.com/how-to-use-the-linux-auditing-system-on-centos-7/
如何写在CentOS 7自定义系统审核规则
https://www.howtoing.com/how-to-write-custom-system-audit-rules-on-centos-7/
7.9. Configuring PAM for Auditing
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sec-Configuring_PAM_for_Auditing.html
linux服务之audit
http://www.cnblogs.com/createyuan/p/3861149.html
Finding the source of signals on Linux with strace, auditd, or systemtap
https://www.ibm.com/developerworks/community/blogs/aimsupport/entry/Finding_the_source_of_signals_on_Linux_with_strace_auditd_or_Systemtap?lang=en
How to use audit to monitor a specific SYSCALL?
https://access.redhat.com/solutions/36278
=END=
《 “CentOS下audit的使用” 》 有 11 条评论
auditd的主要配置文件有两个,一个是/etc/sysconfig/auditd, 另一个是/etc/audit/auditd.conf。
/etc/sysconfig/auditd => 配置auditd运行时的环境
/etc/audit/auditd.conf => 配置auditd运行时的功能,格式val = value。
`
/etc/audit/auditd.conf – 守护进程auditd的配置文件(configuration file for audit daemon)
/etc/audit/audit.rules – auditd在启动时加载的审计规则文件(audit rules to be loaded at startup)
/etc/audit/rules.d/ – 用于存放需通过augenrules命令编译的独立审计规则文件的目录(directory holding individual sets of rules to be compiled into one file by augenrules)
`
http://blog.chinaunix.net/uid-20786165-id-3167391.html
http://www.man7.org/linux/man-pages/man8/auditd.8.html
http://www.man7.org/linux/man-pages/man8/auditctl.8.html
http://www.man7.org/linux/man-pages/man8/augenrules.8.html
`
# vim /etc/sysconfig/auditd
USE_AUGENRULES=”no” #将no改为yes就会把/etc/audit/rules.d/目录下的.rules文件调用augenrules命令编译至/etc/audit/audit.rules文件中并即时生效
# man auditd.conf
# vim /etc/audit/auditd.conf
priority_boost = 4 #设置auditd的优先启动级,默认是4,具有较高的优先级启动,0的话是正常顺序启动
flush = INCREMENTAL
freq = 20
#flush 的可选值为 none(日志不写到磁盘) / incremental(日志写到磁盘,freq指定多少记录开始写到磁盘) / data(保持部分数据和磁盘的一直同步) / sync(每次记录都写到磁盘)。
#freq 和 incremental 可选值一起使用,表示多少条记录一组写到磁盘。
disp_qos = lossy
#disp_qos选项设定auditd和dispatcher之间通信是阻塞式(lossless)的还是非阻塞式(lossy)的,默认是非阻塞式的缓冲区大小为128k
`
使用syslog/rsyslog来管理audit日志
http://debugo.com/auditd/
使用audit dispatching来配置,audispd的配置文件是/etc/audisp/audisp.conf
为了让audispd能够把日志发送到syslog,需要在syslog插件的配置文件/etc/audisp/plugins.d/syslog.conf中设置active = yes.
将auditd日志发送到远程rsyslog服务器的方法
http://serverfault.com/questions/202044/sending-audit-logs-to-syslog-server
https://linux.die.net/man/8/audispd
https://linux.die.net/man/8/audisp-remote
https://linux.die.net/man/5/audisp-remote.conf
`
# tree /etc/audisp/
/etc/audisp/
├── audispd.conf
└── plugins.d
├── af_unix.conf
└── syslog.conf
`
https://unix.stackexchange.com/questions/304260/how-to-send-audit-logs-with-audisp-remote-and-receive-them-with-netcat
开源的轻量级监控工具Monit
http://vinc.top/2017/09/06/%E5%BC%80%E6%BA%90%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7monit/
https://github.com/arnaudsj/monit
https://mmonit.com/monit/
`
系统监控:进程状态,系统负载,cpu负载,内存占用等。
进程监控:monit可以监控守护进程,当被监控进程异常退出时,可以自动被拉起。
文件系统:Monit可以监控本地文件、目录、文件系统的变化,包括时间戳、校验值、大小的变化。例如,可以监控文件sha1以及md5的值,来监控文件是否发生变化
网络监控:monit可以监控网络连接,支持TCP、UDP、Unix domain sockets以及HTTP、SMTP等。
`
Linux服务器命令监控辅助脚本,ElasticSearch + Logstash + Kibana + Redis + Auditd
https://github.com/Mosuan/AuditdPy
Linux下如何使用 auditd 监控文件变动?
https://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
https://serverfault.com/questions/297443/how-to-monitor-file-directory-changes
How to monitor permission, ownership or any other change to a particular directory or file
https://access.redhat.com/solutions/10107
HOW TO USE AUDITD TO TRACK FILE CHANGES
http://g33kinfo.com/info/archives/3374
How to monitor file access on Linux with auditd
http://xmodulo.com/how-to-monitor-file-access-on-linux.html
Auditd – auditctl rule to monitor dir only (not all sub dir and files etc..)
https://stackoverflow.com/questions/19031898/auditd-auditctl-rule-to-monitor-dir-only-not-all-sub-dir-and-files-etc
Monitoring Linux File access, Changes and Data Modifications
https://linux-audit.com/monitoring-linux-file-access-changes-and-modifications/
`
# auditctl -w /etc/sysctl.conf -p a -k kernel #监控内核配置文件的属性变动情况
# auditctl -w /etc/passwd -p rwa -k password-file #监控passwd文件的读、写、熟悉变化
`
auditd-attack – 映射到 MITRE ATT&CK 框架中的 Linux 安全审计规则
https://github.com/bfuzzy/auditd-attack
利用Azure安全中心可以提前检测到Linux受到的攻击
http://www.4hou.com/web/14685.html
https://paper.tuisec.win/detail/cd7868dc66f3d07
a PoC for Linux to get around agents that log commands being executed, without root privilege. Linux低权限模糊化执行的程序名和参数,避开基于execve系统调用监控的命令日志
https://github.com/360-A-Team/ptrace
动态追踪技术漫谈
https://segmentfault.com/a/1190000021756730
`
什么是动态追踪
动态追踪的优点
DTrace 与 SystemTap
SystemTap 在生产上的应用
火焰图
方法论
知识就是力量
开源与调试符号
Linux 内核的支持
硬件追踪
死亡进程的遗骸分析
传统的调试技术
凌乱的调试世界
OpenResty XRay
了解更多
鸣谢
关于作者
译文
`
https://blog.openresty.com.cn/cn/dynamic-tracing/