排查/proc/net网络后门的关键是发现“有连接却无对应pid”的异常,即套接字存在但进程归属被剥离;需从端口监听孤儿、tcp/udp inode断联、raw socket异常、unix socket及netlink非常规路径四方面入手。

排查/proc/net下的网络后门,关键不是翻文件,而是发现“有连接却没进程”的异常——这类破绽说明套接字被恶意程序创建后刻意剥离了进程归属。
查监听端口有没有“孤儿”
正常服务监听端口时,必定关联一个运行中的进程。若端口存在但查不到归属PID,就高度可疑:
- 同时运行
ss -tunlp和netstat -tunlp,对比输出。如果某个端口在ss中显示 PID/Program,但在netstat中只显示-或空白,说明netstat很可能被 LD_PRELOAD 劫持,ss更可信 - 重点盯非标准端口(如 31337、4444、5555)和高编号端口(>60000),尤其绑定在
0.0.0.0或公网 IP 上的监听项 - 对可疑端口执行
lsof -i :PORT,若返回can't identify protocol或完全无 PID 输出,就要进入/proc/net手动追踪
核对 TCP/UDP inode 是否“断联”
/proc/net/tcp 和 /proc/net/udp 每行末尾的 inode 是唯一索引,恶意程序无法隐藏这个数字,但可能让进程本身不可见:
- 提取所有唯一 inode:
awk 'NR>1 {print $10}' /proc/net/tcp | sort -u - 遍历全部进程 fd 目录,查找软链接指向
socket:[INODE]的条目:for pid in /proc/[0-9]*; do [ -d "$pid/fd" ] && ls -l "$pid/fd/" 2>/dev/null | grep -q "socket:\[$inode\]" && echo "Found in $pid"; done - 若某个 inode 出现在
/proc/net/tcp中,却在所有/proc/*/fd/下都找不到匹配项,这就是强信号:连接存在,但进程被抹除了
盯紧 raw socket 和 packet 类型连接
普通服务极少使用原始套接字,而后门常依赖它绕过防火墙与常规监控:
- 执行
cat /proc/net/packet,关注type列为0003(PACKET_RX_RING)或0002(PACKET_TX_RING)的条目 - 检查
uid列是否为非 0(即非 root 创建),再确认该 UID 对应的进程在ps aux中是否完全不可见 - 结合
lsof -i输出,若/proc/net/packet里有记录,但lsof没列出任何进程使用 raw socket,就要立即深入调查
顺手扫一眼 unix socket 和 netlink
部分后门通过 Unix domain socket 或 netlink 与内核通信,不走网络协议栈,但也留有痕迹:
- 查看
/proc/net/unix的path列,留意非常规路径,如/tmp/.sock、/dev/shm/.ctl;再用find /tmp /dev/shm -name "*sock*" -o -name "*.ctl"反查对应文件是否存在 -
/proc/net/netlink正常情况下只有内核和极少数系统服务(如 systemd、NetworkManager)会占用。若出现多个未知 UID 条目,或数量明显异常,需结合ss -xlnp进一步比对











