跳转到帖子

逆向木马远控实战:从异常外联到持久化与内存配置提取

精选回复

发布于

背景

在一次已授权的内网攻防复盘中,终端检测平台发现一台 Windows 服务器周期性访问境外 VPS。连接每 60 秒出现一次,目标端口为 443,但流量不符合正常 TLS 握手特征。主机上没有对应业务,也没有计划任务变更记录。

这类事件不能只按“封禁 IP、删除文件”处理。远控木马通常同时具备持久化、进程注入、配置加密和备用通信地址。本文以防守侧逆向流程为主线,说明如何在隔离环境中确认载荷行为、提取远控配置,并结合日志验证影响范围。所有操作应限定在授权环境和隔离分析网络中。

问题定位:先固定证据,再处理主机

发现异常外联后,优先隔离网络,不要立即结束进程或删除样本。结束进程会丢失解密后的配置、注入代码和套接字信息,直接删除文件则可能破坏时间线。

  • 记录主机名、登录用户、IP、EDR 告警时间和目标地址。
  • 保存进程树、网络连接、服务、计划任务和自启动项。
  • 采集可疑文件、内存镜像及相关 Windows 事件日志。
  • 对证据计算 SHA-256,并记录采集时间和工具版本。
$case = "C:\IR\case-2025-01"
New-Item -ItemType Directory -Force $case | Out-Null

Get-CimInstance Win32_Process |
  Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine |
  Export-Csv "$case\process.csv" -NoTypeInformation -Encoding UTF8

Get-NetTCPConnection |
  Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess |
  Export-Csv "$case\network.csv" -NoTypeInformation -Encoding UTF8

Get-ScheduledTask |
  Select-Object TaskPath,TaskName,State |
  Export-Csv "$case\tasks.csv" -NoTypeInformation -Encoding UTF8

Get-CimInstance Win32_Service |
  Select-Object Name,State,StartMode,PathName |
  Export-Csv "$case\services.csv" -NoTypeInformation -Encoding UTF8

reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /s > "$case\run-hkcu.txt"
reg.exe query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /s > "$case\run-hklm.txt"
wevtutil epl System "$case\System.evtx"
wevtutil epl Security "$case\Security.evtx"
wevtutil epl Microsoft-Windows-Sysmon/Operational "$case\Sysmon.evtx"
Get-FileHash "C:\ProgramData\WinUpdate\update.exe" -Algorithm SHA256 |
  Format-List | Out-File "$case\sample.sha256"
采集动作本身会改变访问时间和部分日志。条件允许时,应由 EDR 远程取证或可信应急介质执行,并同步记录操作日志。

技术分析:从静态特征判断样本结构

先在隔离虚拟机中完成基础静态分析。不要双击运行样本,也不要把样本上传到非授权的公共分析平台,因为样本可能包含企业域名、内网地址或受保护数据。

第一步检查 PE 头、节区、导入表和数字签名。远控载荷常见异常包括:节区熵值较高、入口点落在非常规节区、导入函数很少、存在可写可执行节区,或者签名存在但校验失败。

# Linux 分析机示例
sha256sum update.exe
file update.exe
python3 -m pefile update.exe
strings -a -n 6 update.exe | head -n 200
floss update.exe > floss-strings.txt

# 检查签名与基本元数据(Windows Sysinternals)
sigcheck64.exe -a -h -i update.exe

如果导入表只保留 LoadLibrary、GetProcAddress、VirtualAlloc 一类函数,同时字符串很少,通常意味着 API 动态解析或加壳。此时不要仅依据杀毒名称判断家族,应继续确认入口点解包逻辑和最终落地模块。

观察点可能含义验证方法
高熵节区压缩、加密或封装资源比较节区熵、入口点和内存映射
RWX 内存解包代码或注入载荷调试器内存映射、EDR 内存事件
动态解析 API隐藏网络、注入相关导入跟踪 GetProcAddress 返回值
固定周期外联心跳或任务轮询抓包并计算连接时间间隔
伪装系统路径持久化及可信名称滥用核对签名、父进程和真实安装来源

动态分析:定位解包、配置和远控通信

动态分析环境应关闭共享剪贴板、共享目录和宿主机网络桥接。网络侧可以使用 INetSim 或 FakeNet-NG 模拟 DNS、HTTP 和 TCP 服务,避免样本连接真实控制端。

使用 x64dbg 或 WinDbg 时,可以重点观察 VirtualAlloc、VirtualProtect、WriteProcessMemory、CreateRemoteThread、WinHttpConnect、InternetConnect 和 connect。若样本先申请可写内存,写入大量数据,再改成可执行权限,应在权限切换后转储该区域,而不是只分析磁盘上的壳。

# WinDbg 示例:记录常见内存与网络 API 调用
bp kernel32!VirtualAlloc
bp kernel32!VirtualProtect
bp kernel32!WriteProcessMemory
bp kernel32!CreateRemoteThread
bp ws2_32!connect
bp winhttp!WinHttpConnect
g

# PowerShell 查看进程加载模块与连接归属
Get-Process -Id 4120 -Module |
  Select-Object ModuleName,FileName,FileVersionInfo
Get-NetTCPConnection -OwningProcess 4120

配置提取通常有三个切入点:

  • 在资源段或高熵数据段中搜索加密块,跟踪其交叉引用。
  • 在网络连接函数前回溯参数构造过程,识别域名、端口、URI 和客户端标识。
  • 在解密函数返回后转储缓冲区,避免先完整还原自定义加密算法。

例如,在 connect 调用前观察 sockaddr 结构,可以直接得到目标 IP 和端口;若使用 WinHTTP,则检查 WinHttpConnect 的服务器名称和端口参数。对于多组备用地址,应全部提取,不能只封禁告警中出现的单个 IP。

内存取证:确认注入和真实执行载荷

远控木马常把最终载荷注入 explorer.exe、svchost.exe 或浏览器进程。仅查看磁盘样本会遗漏内存中的实际模块。获得内存镜像后,可以使用 Volatility 3 对比进程、网络和可执行内存区域。

python3 vol.py -f host.raw windows.info
python3 vol.py -f host.raw windows.pslist
python3 vol.py -f host.raw windows.pstree
python3 vol.py -f host.raw windows.cmdline
python3 vol.py -f host.raw windows.netscan
python3 vol.py -f host.raw windows.malfind
python3 vol.py -f host.raw windows.dlllist --pid 4120
python3 vol.py -f host.raw windows.handles --pid 4120

分析时重点关注:

  • 父子进程关系是否符合正常启动路径,例如 Office 进程启动脚本解释器或 rundll32。
  • 进程映像路径与进程名称是否匹配,是否存在从用户可写目录启动的“系统进程”。
  • 私有内存中是否存在 MZ/PE 头、可执行权限或明显代码段。
  • 网络连接所属 PID 是否与磁盘上的合法程序不一致。
  • 线程起始地址是否落在未映射模块的私有内存区域。

malfind 命中不等于恶意,浏览器和 JIT 运行时也会产生可执行私有内存。应结合线程起点、区域内容、进程签名和网络行为交叉判断。

日志还原:验证持久化与横向影响

逆向结果需要回到日志中验证。例如样本中出现服务安装、计划任务和 PowerShell 下载能力,应在 Sysmon、Security 和任务计划日志中寻找对应证据。

  • Sysmon 事件 1:进程创建和完整命令行。
  • Sysmon 事件 3:网络连接,需预先启用。
  • Sysmon 事件 7:模块加载,建议针对高风险目录过滤采集。
  • Sysmon 事件 10:进程访问,可辅助识别注入行为。
  • Sysmon 事件 11:文件创建。
  • Sysmon 事件 12、13、14:注册表对象和值变更。
  • System 7045:新服务安装。
  • Security 4698:计划任务创建。
  • PowerShell 4104:脚本块日志。
# 查询新服务、计划任务和 PowerShell 脚本块
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} |
  Select-Object TimeCreated,Id,Message

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4698} |
  Select-Object TimeCreated,Id,Message

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

# 在 Sysmon 中围绕样本路径查询事件
Get-WinEvent -LogName 'Microsoft-Windows-Sysmon/Operational' |
  Where-Object { $_.Message -match 'ProgramData\\WinUpdate|update\.exe' } |
  Select-Object TimeCreated,Id,Message

如果远控样本具备凭据访问或横向执行能力,还应检查 4624、4625、4648、4672、4688,以及目标主机上的 7045、4698。时间线要统一时区,并同时记录首次落地、首次执行、首次外联、持久化建立和账号活动。

检测规则与关键配置

检测不宜只依赖文件哈希和 IP。哈希容易变化,控制端也可能快速迁移。更稳定的规则应组合路径、父进程、签名状态、持久化位置和网络周期。

title: Suspicious Executable Persistence From User Writable Directory
status: experimental
logsource:
  product: windows
  category: process_creation
detection:
  path:
    Image|contains:
      - '\\AppData\\'
      - '\\ProgramData\\'
      - '\\Users\\Public\\'
  parent:
    ParentImage|endswith:
      - '\\schtasks.exe'
      - '\\services.exe'
      - '\\wscript.exe'
  suspicious_name:
    Image|endswith:
      - '\\svchost.exe'
      - '\\winupdate.exe'
      - '\\runtimebroker.exe'
  condition: path and (parent or suspicious_name)
falsepositives:
  - Legitimate enterprise software installed under ProgramData
level: high

该规则必须结合资产基线调优。ProgramData 并非天然恶意目录,应补充签名验证、软件分发记录和父进程白名单,避免直接用于自动阻断。

风险处置与修复建议

  • 隔离而非断电:优先通过 EDR 网络隔离保留主机运行状态;只有确认存在持续破坏或数据外传时才升级处置。
  • 清理完整持久化链:同时检查服务、任务计划、Run 键、WMI 永久事件订阅、启动目录和侧加载目录。
  • 轮换受影响凭据:包括交互登录账号、服务账号、浏览器保存凭据、API 密钥和已登录会话令牌。轮换应在可信终端完成。
  • 控制权限边界:移除本地管理员冗余授权,限制服务账号交互登录,启用 Windows Defender Credential Guard,并使用 LAPS 管理本地管理员密码。
  • 补齐日志:启用进程命令行审计、PowerShell 脚本块日志和合理裁剪后的 Sysmon 规则,保证日志集中传输,避免主机失陷后被一并删除。
  • 重建高风险主机:若已确认内核级组件、凭据全面暴露或无法证明清理完整,应从可信镜像重建,而不是继续手工删除文件。
  • 扩大排查范围:根据域名、证书、URI、互斥体、服务名、计划任务名和行为特征检索全网,不要只使用单一样本哈希。

总结

远控木马分析的核心不是给样本贴家族标签,而是回答四个问题:它如何进入、如何维持、如何通信、获得了什么权限。有效流程应把磁盘静态分析、隔离动态调试、内存取证和日志时间线结合起来。处置时既要保留证据,也要覆盖备用控制端、注入进程、持久化项和已暴露凭据,最后将逆向得到的稳定行为转化为可持续的检测规则。

服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意
逆向分析与样本观察示意图
逆向分析、样本行为与调试流程示意

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

最近浏览 0

  • 没有会员查看此页面。