排查网络后门需聚焦“有连接、没主人”的异常套接字:检查/proc/net/tcp、udp中存在但/proc/*/fd下无匹配inode的监听端口,关注非标端口、0.0.0.0绑定、raw socket(/proc/net/packet)、unix socket非常规路径及netlink异常uid条目。

排查隐藏在 /proc/net 下的网络后门,关键不是翻文件,而是揪出“有连接、没主人”的异常套接字——也就是监听或建立着连接,却找不到对应进程 PID 的情况。这类后门通常绕过 ps、netstat 等用户态工具,但逃不过内核通过 /proc/net/ 暴露的真实状态。
看监听端口有没有“孤儿”
正常服务监听端口,一定能在 ss -tunlp 中看到归属进程。如果某个端口在 ss 里显示 PID,但在 netstat -tunlp 中只显示 - 或空白,说明 netstat 很可能被 LD_PRELOAD 劫持了,ss 更可信。
- 重点检查非标准端口:31337、4444、5555、6010、1080、6666 等
- 特别留意绑定在
0.0.0.0或公网 IP 上的监听,而非仅限127.0.0.1 - 对可疑端口执行
lsof -i :PORT,若返回can't identify protocol或无任何 PID 输出,就要进入/proc/net手动查证
查 TCP/UDP inode 是否“失联”
/proc/net/tcp 和 /proc/net/udp 每行末尾的 inode 是唯一标识。恶意进程即使隐藏了名字,只要它建了 socket,这个 inode 就存在;但它若不暴露在 /proc/[PID]/fd 下,就暴露了“无主”本质。
- 提取所有 TCP inode:
awk 'NR>1 {print $10}' /proc/net/tcp | sort -u - 遍历所有进程 fd 目录,搜索匹配该 inode 的软链接:
for inode in $(awk 'NR>1 {print $10}' /proc/net/tcp | sort -u); do<br> for pid in /proc/[0-9]*; do<br> [ -d "$pid/fd" ] && ls -l "$pid/fd/" 2>/dev/null | grep -q "socket:\[$inode\]" && echo "inode $inode → $pid"; done;<br> done - 若某个 inode 在
/proc/net/tcp中存在,却在全部/proc/*/fd/下都找不到对应项,这就是强异常信号
盯紧 raw socket 和 packet 接口
普通服务极少用 raw socket,但后门常依赖它发包绕过防火墙和常规监控。关键线索藏在 /proc/net/packet:
- 执行
cat /proc/net/packet,关注type列为0003(RX_RING)或0002(TX_RING)的条目 - 检查
uid列是否为非 0(如 1001),且该 UID 对应的进程在ps -u 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、/var/run/.hidden - 反向验证:执行
find /tmp /dev/shm /var/run -name "*sock*" -o -name "*.ctl" 2>/dev/null,确认这些路径下是否真有对应文件 -
/proc/net/netlink正常系统一般只有少量条目(内核、systemd、udev 等),若出现大量 uid 非 0 的条目,需结合ps -u UID追踪











