82、恶意软件分析(二):动态分析(沙箱、行为监控、网络模拟)

动态分析,说白了就是把恶意软件真的跑起来,看它到底干了什么。静态分析就像看一个人的简历,动态分析则是直接观察他的行为。我个人觉得,这两者缺一不可。

你可能会问:为什么不直接静态分析到底?嗯,我遇到过不少样本,代码被混淆得亲妈都不认识,静态分析根本无从下手。这时候,动态分析就成了救命稻草。

沙箱:给恶意软件一个“假家”

沙箱是动态分析的基础设施。它的核心思想很简单:给恶意软件一个隔离的环境,让它以为自己真的在目标机器上运行,实际上它的一举一动都被监控着。

我常用的沙箱方案有几种:

  • Cuckoo Sandbox:开源界的经典,支持Windows、Linux、Android。我早期做分析时基本靠它。
  • FireEye:商业方案,检测能力强,但价格不菲。
  • 自建沙箱:用VirtualBox或VMware配合API监控脚本。适合定制化需求。

核心要点:沙箱不是万能的。恶意软件会检测是否在虚拟机中运行。比如检查注册表、进程列表、硬件信息等。我曾经遇到一个样本,它检测到Cuckoo的默认用户名“Cuckoo”就直接退出。所以,定制化沙箱环境很重要。

行为监控:看它到底干了什么

行为监控是动态分析的核心。我们需要监控以下几类行为:

  1. 文件系统操作:创建、删除、修改文件。恶意软件常会在%TEMP%或%APPDATA%目录下释放文件。
  2. 注册表操作:写入启动项、修改系统设置。这是持久化的常见手段。
  3. 进程操作:创建新进程、注入代码、结束进程。很多恶意软件会注入到explorer.exe中。
  4. 网络操作:连接C2服务器、下载payload、上传数据。

我常用的监控工具有:

工具 监控范围 个人评价
Process Monitor 文件、注册表、进程 Windows下最全的监控工具,没有之一
API Monitor API调用 可以拦截到具体函数参数,适合深度分析
Wireshark 网络流量 网络分析必备,配合过滤规则使用
FakeNet 网络模拟 模拟网络服务,让恶意软件以为连上了C2

个人技巧:我习惯先跑一次Process Monitor,记录所有操作。然后根据可疑操作,再用API Monitor深入分析。这样效率最高。

网络模拟:让恶意软件“开口说话”

很多恶意软件需要连接C2服务器才能完全激活。如果不模拟网络环境,它可能什么都不做。网络模拟的目的就是让恶意软件以为它成功连接到了C2。

我常用的网络模拟方案:

  • FakeNet-NG:开源工具,可以模拟DNS、HTTP、HTTPS等服务。我经常用它来捕获恶意软件的请求。
  • INetSim:Linux下的网络模拟工具,功能更全,但配置稍复杂。
  • 自建模拟服务:用Python写一个简单的HTTP服务器,返回伪造的响应。

举个例子,我曾经分析一个勒索软件。它连接C2获取加密密钥。我用FakeNet模拟了一个HTTP服务器,返回了一个伪造的密钥。结果勒索软件真的开始加密文件了。嗯,虽然有点危险,但确实拿到了完整的加密流程。

警告:网络模拟有风险。如果恶意软件真的连接到了真实C2,可能会造成数据泄露。务必在完全隔离的网络环境中操作。我一般会在沙箱内再套一层网络隔离,双重保险。

动态分析的核心流程

我总结了一套动态分析的流程,你可以参考:

  1. 准备环境:配置沙箱、安装监控工具、设置网络模拟。
  2. 基线快照:记录系统初始状态(文件、注册表、进程)。
  3. 运行样本:在沙箱中执行恶意软件。
  4. 监控记录:实时记录所有行为。
  5. 分析结果:对比基线,找出变化。
  6. 深入分析:对可疑行为进行API级别的跟踪。

这套流程我用了很多年,基本没出过问题。当然,遇到特别狡猾的样本,可能需要反复调整环境。

知识体系图

下面这张图展示了动态分析的核心知识结构。我把它画出来,方便你理解各个模块之间的关系。

动态分析 沙箱环境 行为监控 网络模拟 Cuckoo / FireEye / 自建 环境检测与反检测 文件 / 注册表 / 进程 API调用监控 FakeNet / INetSim 模拟DNS/HTTP/HTTPS 分析流程:准备 → 基线 → 运行 → 监控 → 分析 三者协同工作,缺一不可

避坑指南

做动态分析这么多年,我踩过不少坑。分享几个给你:

  • 环境检测:恶意软件会检测是否在虚拟机中。我曾经遇到一个样本,它检查硬盘序列号,发现是虚拟硬盘就直接退出。解决办法是修改虚拟机配置文件,让硬件信息更接近真实机器。
  • 时间延迟:有些恶意软件会等待一段时间再执行恶意行为。我习惯让沙箱运行至少30分钟,甚至更久。
  • 网络模拟不完整:如果模拟的服务不完整,恶意软件可能无法完全激活。比如它需要HTTPS,而你只模拟了HTTP。这时候需要仔细分析它的网络请求,然后补全模拟服务。

我的习惯:每次分析前,我都会先跑一遍干净的基线记录。这样对比起来一目了然。另外,我会保留每次分析的日志,方便后续回溯。

动态分析是一门实践性很强的技术。光看书没用,得动手。我建议你从Cuckoo Sandbox开始,搭一个简单的环境,然后找一些公开的恶意软件样本练手。嗯,注意安全,别在真实机器上跑。

公众号:蓝海资料掘金营,微信deep3321