首页/安全/取证与溯源速查/ss 连接与进程归属
Linux 取证135 条

ss 连接与进程归属

ss 取代 netstat 成为主流连接查看工具:-t 看 TCP、-u 看 UDP、-p 带进程、-n 不做名称解析,可一次得到“谁连了哪里”。

取证与溯源速查安全更新于 2026-10-13

ss 的作用

ss 是 iproute2 套件里的套接字统计工具,从内核的 socket 表读取信息,取代 netstat 成为主流连接查看工具。-t 看 TCP、-u 看 UDP、-n 不做名称解析、-a 含监听与已建立、-p 附带进程与文件描述符,一次就能得到「谁连了哪里、属于哪个进程」。在取证现场,它是把网络行为与主机进程对应起来的关键一条命令,属于易失性数据,重启或连接关闭后就看不到。

基本信息

适用平台Linux(iproute2,内核 2.6 以上普遍可用)
常用组合ss -tunap、ss -lntp、ss -tnp state established、ss -s
过滤语法state 后接状态,括号内可用 sport/dport/src/dst 条件
进程信息显示进程需要 root 或具备相应权限,否则只看到自身进程
替代关系netstat 已废弃,参数含义相近但 ss 性能更好
输出内容本地地址、对端地址、状态、队列、进程与 fd

典型使用场景

  • 现场固定外联证据:哪个进程正在连哪个外部 IP 与端口
  • 排查监听后门:找出非业务端口上的 LISTEN 进程
  • 确认反弹 shell:ESTAB 状态下进程为 shell 类程序
  • 统计连接数与状态分布,判断是否处于扫描或拒绝服务压力下
  • 核对服务是否按预期绑定在指定地址(0.0.0.0 与 127.0.0.1 差异)
  • 与日志互补:短连接日志里有、ss 里已消失,说明是瞬时行为

现场采集

现场采集
# 全量快照:TCP/UDP、不解析名称、带进程,落盘一份带时间戳的记录
ss -tunap | tee /evidence/ss_$(date -u +%Y%m%dT%H%M%SZ).txt
# 只看处于已建立状态、且与 22 端口相关的连接
ss -tnp state established '( sport = :22 )'
# 列出所有监听端口及其进程(排查异常监听)
ss -lntp
# 只显示非本地回环的已建立外联,便于筛可疑目标
ss -tnp state established | grep -v '127.0.0.1' | grep -v '::1'
# 汇总各状态数量与套接字总览
ss -s; ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn

输出逐列读法

列含义判读要点
State套接字状态LISTEN 为本地监听;ESTAB 已建立;TIME-WAIT 是刚结束的连接
Recv-Q/Send-Q接收与发送队列字节数长期非零说明对端处理不过来或连接异常
Local Address:Port本地地址与端口0.0.0.0 表示监听全部网卡,风险高于仅监听 127.0.0.1
Peer Address:Port对端地址与端口外联证据的核心字段,逐一记录并做情报核对
users:(("name",pid=,fd=))占用该套接字的进程名、PID 与文件描述符进程名可被伪造,需用 /proc/<pid>/exe 与 cmdline 复核
非 root 运行 ss 只能看到自身进程的 socket 归属,现场采集务必用 root,否则 -p 列会出现大量空白,容易被误判为「没有进程」。
ss 只反映采样那一瞬间。对短连接与快速外联(心跳、单次下载),需要多点采样或改用抓包与 NetFlow 等持续性来源补齐。

易错点

  • 只采集一次就下结论:瞬时工具会漏掉已经关闭的连接,需连续采样并与其他来源互补
  • 以 root 之外的身份执行,-p 看不到进程归属,误判为系统中没有相关进程
  • 直接采信 users 字段里的进程名,实际进程名可以伪造,必须回查 /proc/<pid>/exe 与启动参数
  • 只关注监听端口而忽略已建立的外联,反弹 shell 通常没有监听方向
  • 把 127.0.0.1 上的监听当成安全:本机其他进程或代理可经它对外提供服务

数据来源与参考

  • man 8 ss(iproute2)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌