saddr字段本身不记录攻击源ip,仅表示sockaddr结构的内存地址;真实源ip应优先通过src字段判定,必要时结合type=sockaddr事件解析saddr(如0200开头为ipv4,取后4字节转点分十进制)。

SADDR字段本身不直接记录攻击源IP,它只表示系统调用中使用的套接字地址结构(struct sockaddr)的十六进制内存地址(如saddr=00000000000000000000000000000000),不是IP地址。真正能判定远程黑客发起源IP的是src字段(在type=SYSCALL或type=SOCKADDR事件中),而SADDR只是线索入口——需结合事件类型、协议栈解析和上下文联动才能还原真实IP。
一、先确认SADDR出现的事件类型和实际含义
常见含saddr=的日志行多出自网络相关系统调用(如connect、accept、sendto),但saddr值本身是原始二进制地址结构的内存快照,不可直接读取。关键要看它是否伴随type=SOCKADDR事件:
- 若日志中紧随
type=SYSCALL ... saddr=...后出现type=SOCKADDR saddr=02000D016F7F00000000000000000000,则该saddr可被解析 -
0200开头表示IPv4(AF_INET),后4字节为网络字节序IP(如0D016F7F→0x7F6F010D→127.1.103.13) -
0A00开头表示IPv6(AF_INET6),后续16字节需按IPv6格式反向解析 - 若只有
saddr=00000000...且无对应SOCKADDR事件,说明该地址未实际使用(如bind失败、未连接套接字),不能作为攻击源依据
二、优先看src字段——它才是源IP的权威来源
绝大多数真实攻击连接,在type=SYSCALL事件中会直接记录src=和dst=字段(auditd内核模块自动提取):
-
src=192.168.1.100:明确的客户端IP(注意:可能是NAT后的真实内网IP,也可能是代理出口) -
src=::1或src=127.0.0.1:本地环回,排除远程攻击 -
src=0.0.0.0或src=:::监听行为(bind),非连接发起,不能视为攻击源 - 务必同时检查
comm=(进程名)、exe=(执行路径)和key=(审计规则标签),确认该连接是否由异常进程触发(如comm="nc"+src=45.33.12.88+key=unusual_outbound)
三、实战中如何快速定位可疑远程IP
不要依赖手动解析saddr,而是用组合条件过滤高置信度攻击线索:
- 筛选外连行为:
ausearch -m SYSCALL -sc connect -i | grep "src=" | grep -v "src=127\|src=10\.\|src=172\.1[6-9]\|src=172\.2[0-9]\|src=172\.3[0-1]\|src=192\.168" - 关联登录上下文:对命中
src的事件,用aureport -f -i --start recent --key execve_tracking查该IP关联的进程执行链(如RDP爆破后立即connect到C2) - 注意时间戳对齐:同一
msg=audit(1717588800.123:456)编号下多个type=*事件属于同一次系统调用,SOCKADDR与SYSCALL必须匹配msg ID才有效 - 警惕IPv6伪装:
src=::ffff:192.168.1.100是IPv4映射地址,等价于192.168.1.100;而src=2001:db8::1需查是否属已知云厂商ASN段
四、当src缺失时,SADDR才是最后手段(需谨慎)
极少数情况(如内核模块绕过、audit规则未覆盖connect),src为空,此时才需解析saddr:
- 用
xxd -r -p将saddr十六进制转为二进制,再用Python脚本解析(示例):
python3 -c "import socket, struct; s=b'\x02\x00\x0d\x01o\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'; print(socket.inet_ntop(socket.AF_INET, s[4:8]))" → 输出127.103.1.13 - 仅对
type=SOCKADDR且saddr长度≥16字节(IPv4)或≥28字节(IPv6)的条目操作 - 解析结果必须与
comm、exe、uid交叉验证:若comm="sshd"但saddr解析出公网IP,大概率是合法登录;若comm="python3"且exe="/tmp/.X11-unix/py",则高度可疑










