恶意代码整体分析流程总结

基础静态分析

静态分析一般是看导入函数与字符串,可以通过IDA查看;具体节的内容可以通过PEview查看;资源节可以通过Resource-Hackintg查看;可以通过PEiD查看。

一、关于导入函数

这里要仔细看看WinAPI总结,里面会把学习过程中用到的常见API进行总结,包括该函数的类别与具体功能、参数。

在具体分析过程中不需要记住这些api的实现细节,而是要分门别类的记忆这些API的作用,也就是说当看到某一个或者某一类敏感API时能够大体推测出其在整个恶意代码攻击流程中的哪一块。、

打开一个恶意软件的导入表后,从以下几个方面进行分析:

  1. 文件方面的API:搜索file字符串

    一般该类API都是使用在恶意代码的启动与持久化方面,比如将某些恶意载荷保存为一个已有文件或者修改原有文件实现特洛伊木马化。

    具体API名字可以参见WinAPI总结。

  2. 注册表方面的API:搜索reg字符串

    一般该类API都是使用在启动和持久化方面,比如一些自启动目录、一些主动加载的DLL路径。

    具体API名字可以参见WinAPI总结。

  3. 进程方面的API:搜索procmodule或者thread字符串

    一般该类API使用在进程注入、替换方面,特别是与一些内存申请、写入API结合。

    具体API名字可以参见WinAPI总结。

  4. 资源节方面的API:搜到resource字符串

    一般该类API使用在恶意载荷的存储,后续通过这些API进行导出、执行。

    具体API名字可以参见WinAPI总结。

  5. 网络方面的API

    后续写

  6. 反制措施方面的API:反沙箱、反虚拟机、反汇编、反调试。

  7. 路径方面的API:搜索get字符串

    这部分API一般与系统文件的修改有关。

  8. 加密方面的API:搜索key、crypt、Cert、CP字符串

    这部分API顾名思义,就是用于加密的,可能恶意软件会使用一些标准加密算法,就会导入一些常见的加密函数

  9. 核心行为方面的API

    这部分要与恶意软件分类结合,每一类恶意功能比如窃密、挖矿、勒索、后门等都会有一些常见的API,这也是识别特征之一。

二、关于字符串

当使用string.exe或者ida获取某恶意软件的字符串时,可以从以下几个方面进行猜测:

  1. xxx.dll:包括一些知名的dll,比如kernel32、user32、ntdll这些,一般不用管;其次一些系统dll,比如psapi这些一般要关注其调用了哪些api;最后时一些自定义的dll,一般可以猜测是恶意载荷所在。
  2. 目录、路径:包括一些注册表目录,一定要看看有哪些注册表操作,是不是自启动、该目录的作用是什么;其次一些系统目录比如system32、temp等,就要考虑是不是有对这些路径下文件的修改。
  3. 函数名:在字符串里出现的函数名一般是使用getprocaddress调用的,动态加载。
  4. 加解密相干的字符串:比如base64的索引集、一些加密算法使用的特征字符串,比如SSL
  5. url、网络连接:候补。

基础动态分析

基础的动态分析一般是使用行为监控工具捕获该恶意文件的行为,包括文件操作、网络通信、注册表操作、进程操作等。

推荐使用的工具包括:

  • 火绒剑、Procmon:比较全面的过滤与监控工具
  • regshot:注册表对比工具,可以更加细致的给出注册表的改变
  • wirshark:网络监控工具,用于捕获与分析数据包
  • 各类沙箱:一般使用微步云沙箱、VT或者公司专用沙箱等

在虚拟隔离环境下,运行恶意样本并进行恶意行为的监控与记录。

这一步是承上启下的一步,承接上一步基础静态分析推断的恶意功能,对其进行验证;同时为下一步具体的代码分析提供切入点

一般恶意样本的代码都是比较复杂的,涉及的函数与调用关系很难一眼理清。所以,通过基础静态分析获取的关键API和字符串进行交叉引用,通过基础动态分析获取的恶意行为进行函数功能推测等,都可以帮助我们快速、高效的完成整个分析与处置过程。

源码分析

这部分是整个分析过程的关键,也是耗费时间和精力最多的地方。

具体操作即通过IDA或者其他反汇编工具获取恶意样本的汇编代码与伪代码,进而分析上述恶意功能的具体代码实现。同时可以结合OD、x64dbg等调试器进行动态调试,获取实时运行结果。

具体的分析方法与技巧很多,这里不再赘述,只给出一个提醒:不要陷入繁琐的代码细节,要从宏观把握函数功能

这一步的最终目的是从代码层次落实恶意功能,补充完善沙箱分析结果,为后续具体的样本处置提供依据。

报告输出

概述

利用简短的一段话说清楚样本来源、判别结果、执行流程、具体恶意功能,一般是分析完毕后再写,帮助客户了解基本信息。

给个示例

1
(样本来源)近日,XX同事工作主机疑似被植入恶意程序导致个人微信被攻击者控制滥用,(判别结果)经研判分析,确认工作主机被植入“游蛇”木马(又称银狐、谷堕)。(执行流程)该木马初始组件为虚假WPS安装包文件“wps一键安装 (1).exe”,该组件运行后会在受害者主机中创建一个名为“八幺二八幺二”的已安装软件信息,该软件不具备可执行文件,且附带一个卸载程序。卸载程序执行后会删除不必要的木马文件、初始组件、个人文档视频图片等文件夹。(恶意功能)最终载荷为修改后的gh0st远控木马,通过创建计划任务进行持久化驻留。截至分析时,C2仍存活,但已失去控制功能(上线包无响应)。

下面分析过程以单一样本为例,如果样本存在文件释放、替换的功能,新的样本也可以按照如下步骤进行。

样本标签:

给出该样本的基础信息,包括文件名、哈希值、处理器架构、文件大小、文件格式、时间戳、数字签名等,可以通过沙箱直接获取。

给个示例:

image-20231106105629720

基础静态分析-恶意功能推测

见上部分,写报告注意给出具体解释,衔接好各个部分。

这里注意要描述下源文件的基础信息,比如文件名、文件类型、文件图标等,可以提供截图。因为很多恶意代码比如钓鱼邮件会进行混淆。

基础动态分析–恶意功能监控

见上部分,一定还要全面监控。

  • 文件方面记录好文件修改、替换、删除、移动、创建情况,对于涉及的文件要进行具体分析。
  • 注册表方面注意自启动项目,一般会作为持久化操作的一项,提供执行后截图。
  • 网络方面记录好请求情况,包括目的ip、域名、协议类型、具体数据等
  • 进程方面记录好进程树,包括产生的子进程、运行的cmd,设置的定时任务等
  • 计划任务方面一定要注意,一般挖矿会设置定时访问矿池。

这部分一般与沙箱结合,查缺补漏。同时与威胁情报结合,判别域名、IP的情况。

源码分析—恶意功能落实

从源码入手,选择初始函数或者导入表敏感函数为切入点,分析恶意功能的具体实现。

熟悉恶意代码的攻击流程与实现手法,比如隐蔽启动的方式(线程注入、进程注入等)、持久化操作(注册表、服务、特洛伊木马化等)、核心载荷启动、恶意功能执行(挖矿、勒索、远控、感染等)

要学会画流程图,理清各个函数之间的调用关系,这很重要。


上部分即为单样本分析流程,子文件可以参照分析。

补充-ATT&CK体系

关于威胁框架的介绍可以看博客文章。ATT&CK 攻击链。

通过ATTCK框架进行恶意代码行为映射,规范化报告的同时可以借鉴处置方法。

样本处置

木马\病毒落地排查与清除

再次列出落地文件、注册表项目、计划任务、网络侧请求等,并给出对应的处置措施。

文件要进行删除和恢复、进程要进行终止、注册表项和计划任务要进行清除、网络侧要进行ip封禁与防火墙策略配置。

通过日志审计等方式清理样本涉及的后渗透木马或工具。

IOCs提取

对于涉及到的文件哈希、IP地址、域名等进行统计记录,可以作为检测的一环。

规则编写

根据样本分析结果进行检测规则的编写,比如YARA规则、AVL规则等,可以进一步提高检测准确性。

安全加固

修复已知漏洞、加强员工意识培训、定期更换强密码等

写在最后:上述流程梳理只是针对恶意样本分析,后续会继续介绍流量行为分析流程。上述内容会不断改进。