auditd能精准捕获socket、connect、bind、accept等网络系统调用,结合进程上下文识别后门外连行为;需配置永久规则并用ausearch分析日志定位异常连接。

Auditd 本身不直接记录网络连接或套接字通信内容(如 IP、端口、协议),但它能精准捕获创建网络套接字的系统调用——这是识别后门木马主动外连行为的关键突破口。攻击者启动恶意进程时,必须调用 socket()、connect()、bind() 等系统调用来建立通信通道,这些调用可被 auditd 在内核层拦截并打上完整上下文(谁执行、哪个程序、何时调用、参数是什么)。
要有效利用 auditd 发现后门通信行为,重点不是“监听端口”,而是“揪出异常进程发起的网络建连动作”。
监控关键网络系统调用
需针对以下核心系统调用设置规则,覆盖 TCP/UDP 客户端连接(后门常用)和可疑服务端绑定(隐蔽监听):
-
socket:创建套接字(指定协议族 AF_INET/AF_INET6、类型 SOCK_STREAM/SOCK_DGRAM) -
connect:主动连接远程地址(最典型后门外连行为) -
bind:绑定本地地址端口(可能用于隐藏监听) -
accept:接受入站连接(配合 bind 使用,需结合上下文判断)
命令示例(x86_64 架构):
sudo auditctl -a always,exit -F arch=b64 -S socket,connect,bind,accept -k net_socket_create
若需兼容 32 位进程(如部分旧木马或容器环境),额外添加:
sudo auditctl -a always,exit -F arch=b32 -S socket,connect,bind,accept -k net_socket_create
⚠️ 注意:
-a always,exit表示在系统调用退出时记录,此时参数已确定,可捕获到目标地址、端口等关键信息;仅用-a always,entry无法获取完整参数。
补充监控高风险网络相关程序
单纯监控系统调用会产生大量日志,建议叠加对已知高危路径的执行监控,缩小排查范围:
- 监控非常规位置启动网络工具:
sudo auditctl -w /tmp/ -p x -k tmp_exec sudo auditctl -w /dev/shm/ -p x -k shm_exec
- 监控敏感网络命令的非预期使用:
sudo auditctl -w /usr/bin/curl -p x -k curl_exec sudo auditctl -w /usr/bin/wget -p x -k wget_exec sudo auditctl -w /usr/bin/nc -p x -k nc_exec sudo auditctl -w /usr/bin/nmap -p x -k nmap_exec
这类规则能快速定位“不该出现的地方跑出了网络行为”。
日志分析:快速定位可疑外连
auditd 原生日志是结构化事件,需用 ausearch 提取关键字段:
-
查看最近 1 小时所有
connect调用及目标地址:sudo ausearch -m connect -ts recent --raw | aureport -f -i
-
搜索带外网 IP 的
connect行为(排除 127.0.0.1/::1、内网段):sudo ausearch -m connect --raw | awk -F'comm="|dest=' '{if($2 && $2 !~ /^127\.|^10\.|^172\.(1[6-9]|2[0-9]|3[0-1])\.|^192\.168\./) print}' | aureport -f -i -
结合进程路径与 UID 过滤异常主体(如非 root 用户执行 connect):
sudo ausearch -m connect -ui 0 --raw | aureport -f -i # 只看 root 进程 sudo ausearch -m connect -ui 1000 --raw | aureport -f -i # 查看普通用户 UID 1000 的连接
每条记录中 comm= 是进程名,exe= 是绝对路径,auid= 是原始登录用户 ID,saddr= 和 daddr= 是源/目的地址,dport= 是目标端口——这些足够还原一次外连是否可疑。
规则持久化与生产建议
临时规则重启即失效,务必写入永久配置:
-
创建规则文件:
echo "-a always,exit -F arch=b64 -S socket,connect,bind,accept -k net_socket_create" | sudo tee /etc/audit/rules.d/20-net-socket.rules echo "-w /tmp/ -p x -k tmp_exec" | sudo tee -a /etc/audit/rules.d/20-net-socket.rules
-
加载全部规则:
sudo augenrules --load
-
验证加载成功:
sudo auditctl -l | grep net_socket_create
检查日志是否写入
/var/log/audit/audit.log,并确认auditd.conf中max_log_file和num_logs设置合理(建议max_log_file = 100,num_logs = 5),避免日志被轮转覆盖。
不复杂但容易忽略











