新手排查隐蔽后门关键是揪出“有连接、没主人”的TCP套接字:先用awk筛选/proc/net/tcp中LISTEN(0A)或ESTABLISHED(01)状态的非常规端口,再通过inode反查/proc/*/fd/确认是否失联,失联即强异常信号。

新手排查隐蔽后门,关键不是找“陌生端口”,而是揪出“有连接、没主人”的 TCP 套接字——/proc/net/tcp 是内核直接暴露的原始连接快照,绕过所有用户态劫持,是发现后门最可靠的起点。
先定位可疑监听行(LISTEN 状态)
正常服务监听时,必然处于 LISTEN(状态码 0A),且绑定地址不能只看 IP,更要盯住端口是否非常规:
- 运行
awk '$4 == "0A" {print $2, $4}' /proc/net/tcp,提取所有本地监听项;第 2 列格式如0100007F:0016,冒号后 4 位是端口(十六进制) - 把端口转成十进制快速识别:比如
0016 → 22(标准 SSH),7A69 → 31337(经典后门端口),C366 → 50022(伪装 SSH) - 重点标记那些绑定在
00000000:XXXX(即 0.0.0.0)或公网 IP 上、且端口号不在常见服务列表(如 22/80/443/3306/5432)中的条目
查 inode 是否“失联”——后门最硬的证据
每行末尾第 10 列是 inode 号,它是套接字在内核中的唯一身份证。恶意进程可以隐藏名字,但无法抹掉这个数字,更难让它不关联任何进程:
- 提取全部唯一 inode:
awk 'NR>1 {print $10}' /proc/net/tcp | sort -u - 对每个 inode,反向搜索归属进程:
find /proc/[0-9]*/fd/ -lname "socket:[INODE]" 2>/dev/null(把 INODE 替换为实际数字) - 若某 inode 出现在 /proc/net/tcp 中,却在所有 /proc/*/fd/ 下都找不到软链接,说明该监听套接字没有对应用户态进程——极大概率是内核模块级后门、rootkit 或已 fork 后关闭了监听 fd 的恶意程序
抓 ESTABLISHED 连接里的异常流量
有些后门不长期监听,而是建立一次性的反向连接或维持隐蔽长连。这时要看 ESTABLISHED(状态码 01)行中是否藏有线索:
- 过滤非标端口上的活跃连接:
awk '$4 == "01" && substr($2, length($2)-3) ~ /^(7A69|C366|08AE)$/ {print $2, $3}' /proc/net/tcp(示例含 31337、50022、2222) - $3 是对端地址+端口(如
0100007F:0016),可解析真实 IP:printf "%d.%d.%d.%d\n" 0x01 0x00 0x00 0x7F→127.0.0.1 - 若发现大量来自同一低信誉 IP 的 ESTABLISHED 连接,且 ss -tunlp 查不到对应监听者,说明可能正被远程控制,或通信通道已绕过常规 socket 生命周期管理
顺手验证是否被 LD_PRELOAD 劫持
很多后门会污染环境变量,让 netstat、lsof 等工具失效。用 ss 和 /proc/net/tcp 输出交叉比对,能快速判断工具是否可信:
- 执行
ss -tuln | grep :31337,若显示 PID 但netstat -tuln | grep :31337显示空白或 “-”,netstat 很可能被劫持 - 再查
lsof -i :31337,若返回can't identify protocol或无输出,基本确认该端口存在但被刻意隔离在用户态工具之外 - 此时必须回归 /proc/net/tcp + inode 反查,这是唯一绕不开的真相来源

















