远控木马落地后的代理隧道与出网链分析

远控木马落地后的代理隧道与出网链分析

很多应急事件里,攻击者真正稳定控制一台主机之后,做的第一件事并不是马上导数据,而是先把“路打通”。这条路可能是一个 FRP 反向代理、一个 Chisel 隧道、一个 SSH 动态转发、一个 SOCKS 代理,甚至只是伪装成业务流量的长连接远控通道。只要出网链建立成功,这台主机就会迅速从“受害机”变成“前置代理节点”或“长期跳板”。

前面已经补过 隐蔽C2流量分析与TLS隧道剥离.md,那篇重点是流量行为和 TLS 特征。本文则更偏主机与事件分析,回答的是:木马落地后,它是如何把控制通道搭起来的,这条通道依赖了什么工具、什么配置、什么守护方式,以及它如何支撑后续横向和出网。


0x01 代理隧道分析要回答什么

在远控或后门事件里,建议优先回答四个问题:

  1. 攻击者是如何把控制流量引出去的? 是直连 C2、反向代理、动态隧道,还是复用正常业务端口。
  2. 隧道是临时的还是稳定的? 是一次性工具、周期回连,还是带守护和重连机制的长期通道。
  3. 这条通道承载了什么后续行为? 是仅用于回连,还是已经支撑横向、代理转发、文件传输。
  4. 控制路径的边界在哪里? 终点是公网 VPS、CDN、跳板,还是另一台已被控内网主机。

只有把“工具、配置、连接、结果”串起来,才能真正说明这是一条出网链,而不是一条普通业务连接。


0x02 远控落地后常见的出网方式

1. 直接回连型

最直接的方式是木马自身直接向外建立长连接。

常见表现:

  • 固定目标 IP 或域名
  • 周期性心跳
  • 长连接保活
  • 出站方向单一但持续

这类通常更容易在流量上被发现,但如果攻击者用了高信誉域名或 TLS 包装,识别难度会提升。

2. 代理 / 隧道型

攻击者更常见的做法是单独部署隧道工具,例如:

  • frpc
  • nps / npc
  • chisel
  • socat
  • lcx
  • ssh -D / ssh -R
  • 本地或远程 SOCKS 代理

其优势在于:

  • 能转发内网协议
  • 可把被控主机变成跳板
  • 工具小巧,便于重命名和伪装

3. 业务复用型

例如:

  • 复用 4438053
  • 伪装成 WebSocket、HTTPS、更新服务
  • 混入正常代理或云服务

这类更难用“端口异常”直接识别,必须结合进程、父子关系、文件落地和通信节奏来判断。


0x03 代理隧道在主机上的典型落地痕迹

代理链的关键不只是网络连接本身,还包括工具和配置落地。

1. 可执行文件与脚本

重点关注:

  • /tmp, /var/tmp, /dev/shm
  • %TEMP%, %ProgramData%, %AppData%
  • 用户目录隐藏文件
  • 伪装成系统组件的文件名

常见伪装方式:

  • systemd-update
  • dbus-service
  • svchost.exe
  • nginx-helper
  • agent

2. 配置文件

很多代理工具会单独落配置,例如:

  • frpc.ini, frpc.toml
  • config.json
  • client.yaml
  • 自定义 .conf.ini

这些配置往往直接暴露:

  • 服务端地址
  • 认证 token
  • 转发端口
  • 本地映射对象
  • 自动重连参数

如果拿到配置文件,通常就能快速判断攻击者打算把哪些内网服务暴露出去。

3. 持久化与守护机制

稳定出网链通常不会只靠一个手工启动的程序,还会配合:

  • 计划任务
  • systemd 服务
  • Run 键
  • Supervisor / 守护脚本
  • nohup, screen, tmux

这也意味着代理隧道分析必须和此前的 自启动项计划任务与服务持久化分析.md 一起看。


0x04 如何从连接行为判断这不是普通业务流量

1. 连接节奏异常稳定

典型信号:

  • 固定间隔回连
  • 断线后立即重连
  • 包长相对稳定
  • 长时间仅和少数外部地址通信

这类现象在业务程序中也会出现,但若出现在异常进程上,危险性就显著上升。

2. 主机角色与出站对象不匹配

例如:

  • 数据库主机频繁连外网 VPS
  • DMZ Web 主机持续连一个非业务域名
  • 办公网终端对外建立持久端口映射

“谁在连、连到哪里、是不是这台机器该干的事”,比“端口是不是 443”更重要。

3. 出站之后带来新的内网暴露

这是代理工具与普通木马很不一样的地方。它们的目标常常不是“拿回控”,而是:

  • 把内网 3389 暴露给公网
  • 把 SSH 暴露出去
  • 把数据库转发给外部
  • 把 SMB、WinRM、HTTP 管理面带出网

这类行为一旦发生,事件影响面会大幅升级。


0x05 四类高价值代理链证据

1. 进程链

重点看:

  • 谁拉起了隧道程序
  • 父进程是否来自 cmd, powershell, bash, sh
  • 是否由服务、任务、脚本自动拉起

如果你看到:

  1. 木马落地
  2. 解压释放 frpc
  3. 通过计划任务持续启动

那就已经基本形成完整的出网链。

2. 配置链

配置文件的高价值字段包括:

  • server_addr
  • server_port
  • token
  • type = tcp/http/stcp
  • local_ip, local_port
  • remote_port

这些字段能直接帮助你判断:

  • 哪个公网节点是控制端
  • 哪些本地服务被映射
  • 是否存在多条代理规则

3. 网络链

重点看:

  • 外联目标是否固定
  • 本地监听是否新增
  • 本地是否存在新的转发端口
  • 同时出现入站与出站双向桥接

4. 行为链

继续观察隧道建立后是否紧接着发生:

  • SSH / RDP 登录
  • SMB 共享访问
  • 数据库连接
  • 文件上传或下载

如果有,说明隧道已经被真正用于后续攻击活动,而不是“仅存在一个工具文件”。


0x06 两类典型事件场景

场景一:Web 服务器被打成内网代理

典型链条:

  1. WebShell 或 RCE 拿到主机
  2. 下载 frpc / chisel
  3. 配置映射内网 SSH 或数据库端口
  4. 建立稳定回连
  5. 以此对内网继续横向

这类场景和 WebShell落地与文件时间线分析.md 高度相关。

场景二:办公终端被控后搭建反向通道

典型链条:

  1. 钓鱼样本上线
  2. 释放代理工具
  3. 周期性回连公网节点
  4. 通过该终端继续访问内网敏感系统

这类场景往往是横向前置准备,真正危险的是其后续的身份复用和内网扩展。


0x07 与 TLS C2 分析的边界

这篇和 隐蔽C2流量分析与TLS隧道剥离.md 的侧重点不同:

  • 那篇重点是网络侧的行为特征、JA3、TLS 解密
  • 这篇重点是主机侧的工具落地、配置、守护、映射与攻击用途

两者合在一起,才能完整回答“为什么这条加密流量危险,以及它到底把什么带了出去”。


0x08 公开案例与现场命令

1. 案例一:Cisco AsyncOS 0-day 后被投放 ReverseSSH 与 Chisel

一个非常适合落地到“代理隧道分析”专题的公开案例,是 Cisco 在 2025 年披露的 AsyncOS 设备被攻击事件:

  • 攻击者利用高危漏洞拿到设备 root 权限
  • 随后投放 ReverseSSH(AquaTunnel)和 Chisel
  • 同时投放日志清理工具 AquaPurge
  • 再用轻量级后门 AquaShell 被动接收命令

这个案例的重点不是“有个后门”,而是已经非常明确地说明:攻击者在拿到系统后第一时间部署了隧道和日志清理组件。

公开来源:

2. 案例二:政府目标中使用 FRP / 反向代理维持长期控制

Unit 42 在 2026 年公开的 CL-UNK-1068 活动中,明确提到攻击者使用了 Fast Reverse Proxy 相关能力,并把反向代理作为长期潜伏和横向活动的一部分。

这类案例说明,代理隧道不是“附带工具”,而是高级攻击里的基础设施组件。

公开来源:

3. Linux 现场排查命令模板

如果怀疑 Linux 主机被部署了 frpcchiselsocatssh -R/-D 一类工具,可以直接先跑下面这组:

# 查可疑进程
ps -ef | egrep 'frpc|frps|chisel|socat|reverse-ssh|ssh -D|ssh -R|nps|npc' | grep -v grep

# 查监听与对外连接
ss -antlp
ss -antp | egrep ':7000|:60022|:1080|:1081|:443|:80'

# 查配置文件
find / -type f \( -name "frpc.ini" -o -name "frpc.toml" -o -name "*chisel*" -o -name "*.yaml" -o -name "*.conf" \) 2>/dev/null

# 查 systemd / cron / nohup 守护
systemctl list-units --type=service | egrep 'frp|chisel|agent|proxy'
grep -RInE 'frpc|chisel|socat|ssh -D|ssh -R' /etc/systemd /etc/cron* /var/spool/cron 2>/dev/null
find /tmp /var/tmp /dev/shm /home /root -type f -mtime -7 -ls 2>/dev/null | egrep 'frp|chisel|agent|proxy'

如果找到了配置文件,优先看以下字段:

server_addr = x.x.x.x
server_port = 7000
token = your_token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 60022

只要类似字段出现,就说明这台主机很可能被用来向公网暴露本地服务。

4. Windows 现场排查命令模板

# 查可疑网络连接
Get-NetTCPConnection |
  Where-Object {$_.State -eq 'Established'} |
  Sort-Object RemoteAddress,RemotePort |
  Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess

# 将 PID 反查到进程名
Get-Process | Select-Object Id,ProcessName,Path

# 查可疑任务和服务
schtasks /query /fo LIST /v | findstr /i "frp chisel proxy tunnel ssh reverse"
sc query state= all | findstr /i "frp chisel proxy tunnel agent"

# 查 ProgramData、Temp、AppData 下近期可疑文件
Get-ChildItem "C:\ProgramData","$env:TEMP","$env:APPDATA" -Recurse -Force -ErrorAction SilentlyContinue |
  Where-Object {
    $_.Name -match 'frp|chisel|proxy|tunnel|agent|ssh'
  } |
  Select-Object FullName, LastWriteTime, Length

5. 一条可执行的分析流程

如果你在现场已经确认主机存在异常外联,建议按这个顺序继续:

  1. 先用 ss / Get-NetTCPConnection 定位稳定外联 PID
  2. 再用 Get-Processps -ef 找出进程路径与父进程
  3. 再查同目录下是否有 .ini/.toml/.yaml/.conf
  4. 接着查任务、服务、systemd、cron 是否负责守护
  5. 最后确认隧道建立后有没有支撑 SSH/RDP/SMB/DB 等后续攻击

这套流程能把“外联异常”收敛成真正可交付的隧道分析结果。


0x09 三个常见误区

1. 只看外联,不看本地映射

如果只知道主机连到了公网,但不知道它转发了本地哪个端口,就无法判断真正风险。

2. 只找木马,不找隧道配置

木马本身可能很隐蔽,但代理配置文件常常直接暴露整个出网链结构。

3. 只封公网 IP,不清理守护机制

如果后门仍在、任务仍在、配置仍在,攻击者很快就会换个节点重新连回。


0x0A 建议的交付结构

代理隧道事件建议整理为如下表格:

时间证据源事件关联对象结论
02:11:04文件落地释放代理工具/tmp/.sys/frpc出网组件落地
02:11:20配置文件映射内网端口127.0.0.1:22 -> remote 60022SSH 暴露计划明确
02:12:01进程日志启动隧道程序frpc -c frpc.ini隧道建立
02:12:18网络日志持续连接公网节点x.x.x.x:7000稳定回连
02:15:30后续行为公网通过该通道访问内网 SSH22/tcp通道被实际利用

0x0B 总结

远控木马事件里,真正让攻击者“站稳脚跟”的往往不是样本本身,而是样本背后的代理与隧道体系。只要这套出网链还在,攻击者就随时可以重新接管主机、继续横向、继续导数。

因此,分析这类事件时,不能只停留在“有个木马进程”或“有条可疑外联”。必须进一步说明:

  • 工具是什么
  • 配置是什么
  • 映射了什么
  • 如何守护
  • 隧道建立后又支撑了哪些攻击动作

当这些问题都被回答清楚时,一条模糊的“外联异常”才真正升级为一条可交付的出网控制链。