如何通过Auditd在Linux系统上监控所有网络套接字创建活动以检测木马反弹连接?
- 内容介绍
- 文章标签
- 相关推荐
本文共计827个文字,预计阅读时间需要4分钟。
`auditd` 本身不直接记录日志,但能监控网络连接建立。这类应用层行为作为,但能捕获创建 Socket 的关键系统调用(如 socket()、connect()、bind()),这是识别反弹 Shell 和隐蔽通信的最底层、最可靠的切入点。
明确监控目标:盯住 execve + socket 相关系统调用
反弹 Shell 的本质是:恶意进程先被启动(execve),再主动调用 socket() 和 connect() 去连外网。auditd 无法记录 TCP 握手包,但能精准抓到这两个动作的发起者和参数。
- execve:所有新进程的起点,包括 bash -i、python -c 'import socket' 等反弹命令
- socket:创建套接字,是网络通信的第一步
- connect:向外发起连接,反弹 Shell 的标志性动作
- sendto / write(可选):后续发送命令或数据,用于确认是否真有通信
配置高精度审计规则(推荐写入 /etc/audit/rules.d/socket.rules)
避免用 -w 监控目录,而是用 -a 规则直接挂钩系统调用,减少日志噪音:
- auditctl -a always,exit -F arch=b64 -S socket,connect,execve -k net_socket_spawn(x86_64 系统)
- auditctl -a always,exit -F arch=b32 -S socket,connect,execve -k net_socket_spawn(兼容 32 位调用)
- 加 -F uid!=0 可排除 root 自身运维操作(按需)
- 规则生效后,用 auditctl -l 确认已加载
快速定位可疑反弹行为的日志分析方法
不要手动翻 audit.log,用 ausearch 针对性提取:
- ausearch -k net_socket_spawn -m execve,socket,connect --start today | aureport -f -i:汇总今日所有触发该规则的进程路径和参数
- ausearch -m connect -i --start recent | grep -E "(tcp|192\.168|10\.)":筛选出 connect 调用,并排除内网地址(聚焦外连)
- 重点看 exe=(执行文件)、comm=(命令名)、cwd=(工作目录)、key=(你设的关键词)字段——异常路径(如 /tmp/.X11-unix/)、非常规命令名(如 “sh1”、“a”)、空 cwd 或 /dev/shm 下启动,都是高危信号
配合其他手段交叉验证,避免漏报
auditd 捕获的是“意图”,不是“结果”。需结合网络层证据确认是否真建立了连接:
- 发现可疑 execve + connect 日志后,立即运行:ss -tunap | grep $(pidof suspicious_proc) 查其当前连接
- 用 lsof -p PID -i 看该进程打开的所有网络 fd,确认目标 IP 和端口
- 检查对应进程的启动参数:cat /proc/PID/cmdline | tr '\0' ' ',常能直接看到反弹地址(如 /dev/tcp/xxx:443)
- 若进程已退出,auditd 日志中的 exe 和 comm 就是唯一线索,务必保留原始日志并及时归档
本文共计827个文字,预计阅读时间需要4分钟。
`auditd` 本身不直接记录日志,但能监控网络连接建立。这类应用层行为作为,但能捕获创建 Socket 的关键系统调用(如 socket()、connect()、bind()),这是识别反弹 Shell 和隐蔽通信的最底层、最可靠的切入点。
明确监控目标:盯住 execve + socket 相关系统调用
反弹 Shell 的本质是:恶意进程先被启动(execve),再主动调用 socket() 和 connect() 去连外网。auditd 无法记录 TCP 握手包,但能精准抓到这两个动作的发起者和参数。
- execve:所有新进程的起点,包括 bash -i、python -c 'import socket' 等反弹命令
- socket:创建套接字,是网络通信的第一步
- connect:向外发起连接,反弹 Shell 的标志性动作
- sendto / write(可选):后续发送命令或数据,用于确认是否真有通信
配置高精度审计规则(推荐写入 /etc/audit/rules.d/socket.rules)
避免用 -w 监控目录,而是用 -a 规则直接挂钩系统调用,减少日志噪音:
- auditctl -a always,exit -F arch=b64 -S socket,connect,execve -k net_socket_spawn(x86_64 系统)
- auditctl -a always,exit -F arch=b32 -S socket,connect,execve -k net_socket_spawn(兼容 32 位调用)
- 加 -F uid!=0 可排除 root 自身运维操作(按需)
- 规则生效后,用 auditctl -l 确认已加载
快速定位可疑反弹行为的日志分析方法
不要手动翻 audit.log,用 ausearch 针对性提取:
- ausearch -k net_socket_spawn -m execve,socket,connect --start today | aureport -f -i:汇总今日所有触发该规则的进程路径和参数
- ausearch -m connect -i --start recent | grep -E "(tcp|192\.168|10\.)":筛选出 connect 调用,并排除内网地址(聚焦外连)
- 重点看 exe=(执行文件)、comm=(命令名)、cwd=(工作目录)、key=(你设的关键词)字段——异常路径(如 /tmp/.X11-unix/)、非常规命令名(如 “sh1”、“a”)、空 cwd 或 /dev/shm 下启动,都是高危信号
配合其他手段交叉验证,避免漏报
auditd 捕获的是“意图”,不是“结果”。需结合网络层证据确认是否真建立了连接:
- 发现可疑 execve + connect 日志后,立即运行:ss -tunap | grep $(pidof suspicious_proc) 查其当前连接
- 用 lsof -p PID -i 看该进程打开的所有网络 fd,确认目标 IP 和端口
- 检查对应进程的启动参数:cat /proc/PID/cmdline | tr '\0' ' ',常能直接看到反弹地址(如 /dev/tcp/xxx:443)
- 若进程已退出,auditd 日志中的 exe 和 comm 就是唯一线索,务必保留原始日志并及时归档

