本书第三章是动态分析的入门,对进行动态分析最基本的工具和方法进行了简述。

第三章 动态分析基础技术

1. 运行恶意代码

(1)使用恶意代码沙箱

沙箱是一种安全环境中运行不信任程序的安全机制。
  • 用作初始诊断:自动执行与分析
  • 缺点
    • 只能简单执行,无法输入控制指令。
    • 不能记录所有事件,只报告基本功能。
    • 沙箱环境与真实计算机环境的差异导致一些功能无法触发或表现有所不同。

(2)运行恶意代码

对于exe文件,我们可以直接双击运行。
对于dll文件该怎么办?
rundll32.exe程序
  • 所有的Windows中包含的程序,提供了运行dll的平台。

      C:\rundll32.exe DLL name, Export arguments
    
      - Export值必须是一个DLL文件导出函数表中的函数名或者序号。
    
  • 因为恶意的DLL文件通常在DLLMain(DLL入口点)执行他们的代码,因为无论什么时候被加载,DLLMain函数总会被执行,所以就可以通过rundll32.exe来加载DLL,动态的获取信息。

修改PE头部和扩展名
  • 使得Windows以一种可执行文件的方式加载DLL。

      从IMAGE_FILE_HEADER的特征域中擦除IMAGE_FILE_DLL(0x2000)标记
    

当看到一个ServiceMain函数,没有想Install或InstallService这样方便的导出函数,就需要手动的安装服务。
- 可以使用Windows系统下的sc命令,或者修改注册表为一个未使用服务进行手动安装,然后使用net start 启动服务。
- Windows服务的注册表项位于HKLM\SYSTEM\CurrentControlSet\Services。

2. 进程监视器(Process Monitor)

Windows下的高级监视工具,提供监控注册表、文件系统、网络、线程、进程和线程行为。
  • 结合了文件监视器FileMon和注册表监视器RegMon的功能。
  • 监控所有能捕获的系统调用 -> 容易耗尽内存
  • 通常不用于记录网络行为

(1)过滤

  • 可以只针对恶意代码或特定的系统调用设置过滤。

  • 常用的过滤选项:

      - ProcessName进程名过滤
      - PID进程号过滤
      - Options操作项过滤
      	- RegSetValue注册表键值修改操作
      	- CreateFile创建新文件操作(但是由于在监视器中打开文件操作也被归为此项,会过滤出很多条)
      	- WriteFile写文件操作
    
  • 注意,设置过滤器之后所有记录的事件仍然可用,过滤器仅用于显示过滤,所以设置过滤器并不能阻止监视器消耗太多内存。

(2)工具栏与事件信息

  • 工具栏按钮

    • 注册表:通过检查注册表变化,发现恶意程序对注册表的操作。
    • 文件系统:检查文件系统能显示恶意程序创建的所有文件,或它使用过的配置文件。
    • 进程行为:检查进程行为,关注是否启动了其它的进程。
    • 网络:识别网络连接能显示出恶意程序监听的任意端口。
  • 事件信息

    • 界面显示每个事件的不同信息
    • 双击行可以看到事件的详细信息

3. 进程浏览器(Process Explore)

(1)主要功能

  • 列出所有活跃的进程、被进程载入的DLL、各种进程属性和整体系统信息。
  • 杀死一个进程、退出用户登录、启动或激活进程。

(2)显示

  • 以树状结构显示所监视的系统执行进程

  • 颜色高亮标记含义

    • 服务:粉色
    • 进程:蓝色
    • 新进程:绿色(临时)
    • 被终止进程:红色(临时)

(3)其他功能

  • 双击进程名,可以查看相关的属性窗口。

    • Image标签:显示磁盘上可执行程序的路径。
      • verify:验证磁盘上的签名认证。
    • Threads标签:显示活跃的程序。
    • TCP/IP标签:活跃的连接和进程监听的端口。
    • Strings标签:可用于识别进程替换。

4. Regshot比较注册表快照

  • 先使用快照A记录第一次主次表内容,变化后再用快照B记录第二次注册表内容。

  • 进行比较与分析。

5. 模拟网络

(1)ApateDNS

查看恶意代码发送DNS请求的最快速方式
  • 在本机上通过监听UDP的53端口对用户指定的IP地址给出虚假的DNS相应。
    • 用指定的IP地址相应DNS查询请求。
    • 可以使用十六进制和ASCII码来显示所有接收到的请求。
  • 使用
    • 设置你想在DNS相应包中发出的IP地址,选择接口。
    • 开启服务:这将自动启动DNS服务,并修改DNS设置到localhost上(可修改)。
    • 运行待分析恶意代码,并观察窗口出现的DNS请求。

(2)Netcat

“TCP/IP协议栈瑞士军刀”,可以被用在支持端口扫描、隧道、代理、端口转发等的对外连接上。
  • 监听模式下,Netcat充当一个服务器。
  • 连接模式下,作为一个客户端。
  • 从标准输入得到数据进行网络传输,它得到的数据可以通过标准输出显示到屏幕上。
  • 使用Netcat监听80端口:C:\> nc -l -p 80
    • -l:监听。
    • -p:指明监听的端口。

6. wireshark数据包监听

Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。
  • Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

  • 界面:

7. INetSim

inetsim是基于Linux的一款模拟常见网络服务的软件,也可以说是专门为病毒分析开发的一个服务器。它可以提供大部分的网络协议和服务并且将它们很真实的模拟出来。
  • 安装注意:
    • inetsim的安装、配置和运行都需要root权限。
    • 安装完要把默认的回传地址改为本机的IP。
  • 伪装得像一个真正的服务器。
  • 可以记录所有的连入请求与连接。

8. 工具实践

9. 感想

  • 这一章的后半部分让我感觉有一个难度的提升,尤其是模拟网络的两个软件和INetSim的使用实在是很难理解,需要在实践中摸索总结出更多的方法和经验。