原文链接:恶意软件分析 (1)静态分析Capa经典工具的基本用法万字详解
一.恶意软件分析
恶意软件或恶意代码分析通常包括静态分析和动态分析。特征种类如果按照恶意代码是否在用户环境或仿真环境中运行,可以划分为静态特征和动态特征。 那么,如何提取恶意软件的静态特征或动态特征呢? 因此,第一部分将简要介绍静态特征和动态特征。 1.静态特征没有真实运行的特征,通常包括: - 字节码
:二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理 - IAT表
:PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关 - Android权限表
:如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息 - 可打印字符
:将二进制代码转换为ASCII码,进行相关统计 - IDA反汇编跳转块
:IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据 - 常用API函数
- 恶意软件图像化
静态特征提取方式: 2.动态特征相当于静态特征更耗时,它要真正去执行代码。通常包括:
– API调用关系:比较明显的特征,调用了哪些API,表述对应的功能
– 控制流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类
– 数据流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类 动态特征提取方式: 二.Capa简介1.基础知识Capa是FireEye(Mandiant)公司开源的静态分析工具,旨在检测和识别恶意软件的高级静态行为,同时支持IDA插件操作和安装服务及HTTP通信,方便安全人员快速定位恶意代码,且能与ATT&CK框架和MBC映射。 通常能分析的样本格式: PE文件 ELF文 .NET模块 ShellCode文件
下载地址:
该工具运行结果如下所示,它能有效反映恶意软件在ATT&CK框架中的技战术特点,比如:DEFENSE EVASION、DISCOVERY、EXECUTION、EXFILTRATION、PERSISTENCE等。
(1)安装方式一
安装过程主要是从Github中下载文件,该文件夹中报告Capa规则,即capa-rules子项目路径下包含了所有类型的检测规则。下载好后,使用命令安装: CAPA规则读者可以尝试编写自适应规则,也可以参考开源大佬们的分享,如下图所示(参考systemino老师)。
CAPA规则的编写格式如下,第一个红框meta用于描述该规则的描述信息,第二个红框features就是用于匹配的逻辑规则,类似于yara,支持的类型有:api、string、bytes、mnemonic等。
识别结果如下图所示,比如识别出Lazarus组织的Dtrack后门。
(2)安装方式二
另一方面可以下载可执行程序,直接运行。下载地址如下:
下载成功之后如下图所示,直接在CMD或PowerShell中运行即可。
(3)安装方式三
在IDA中通过插件的方式使用(支持IDA7.2及以上版本),IDA打开样本后,点击File->Script File加载ida_capa_explorer.py脚本。该部分建议从事恶意软件分析的童鞋或技术人员深入研究。 2.CAPA原理详解CAPA原理知识推荐大家学习FireEye的相关原文介绍。地址如下:
(1)提出问题
在分析程序是否恶意、它们在攻击期间所扮演的角色、潜在功能和攻击作者的意图时,通常需要经验丰富的逆向工程师来完成。恶意软件专家可以快速对未知二进制文件进行分类,以获取初步见解并知道后续分析。然后,经验不足的分析师较难区分正常和恶意样本,并且字符串、FLOSS或PE查看器等常用工具显示的细节级别较低,较难分析恶意软件的行为特点。 (2)恶意软件分类
以某个恶意软件为例,下图展示文件的字符串和导入表信息。通过这些信息,逆向工程师可以利用字符串和导入API函数猜测程序的功能,但仅限于此。
动态分析可以进一步挖掘该程序的其它功能。然而,沙盒报告或动态分析工具仅限于从执行代码路径中捕获行为,譬如连接命令和控制(C2)服务器后触发的功能,通常不建议使用实时互联网连接来分析恶意软件。因此,我们需要对它进行逆向分析,如下图所示,利用IDA Pro对程序的主要功能进行反编译。尽管我们使用反编译而不是反汇编来简化描述过程,但这两种表示具有相似的概念。
了解编程和Windows API后,我们可以发现恶意软件具备如下功能: 尽管并非每个代码路径都可以在每次运行时执行,但可以说该恶意软件具有执行这些行为的能力。此外,通过结合各个结论,可以推断该恶意软件是一个后门,可以运行由硬编码的 C2 服务器指定的任意程序。这一高级别结论使我们能够确定调查范围并决定如何应对威胁。 (3)自动识别能力
当然,恶意软件分析很少这么简单。意图识别需要通过包含数百或数千个函数的二进制文件进行传播。此外,逆向工程具有相当陡峭的学习曲线,需要对许多低级概念(如汇编语言和操作系统内部)有扎实的理解。 但是,通过足够的练习,我们可以简单地从 API 调用、字符串、常量和其他功能的重复模式中识别程序中的功能。CAPA证明了一些关键分析结论实际上是可以自动识别的。该工具提供了一种通用而灵活的方法来编纂专业知识并将其提供给整个安全社区。当您运行CAPA时,它会将特征和模式识别为人类的力量,从而产生可以推动后续调查步骤的高级结论。例如,当CAPA识别出未加密的HTTP通信功能时,这可能是您需要到代理日志或其他网络实施跟踪的提示。 下图是CAPA的功能介绍,该表格显示此示例中所有已识别的功能。 左侧的每个条目都描述一个功能 右侧的关联命名空间有助于对相关功能进行分组
CAPA可以非常出色地描述先前讨论的所有程序功能。 通过实验发现,CAPA经常能够提供令人惊讶的好结果,这也是FireEye希望CAPA能够识别恶意软件功能的追求。下图显示CAPA对“创建TCP套接字”结论的具体输出。由图可知,我们可以通过CAPA检查二进制文件并发现相关特征的确切位置。此外,我们可以利用语法规则推测它们低级功能的逻辑树组成。 (4)CAPA原理
CAPA由两个主要组件组成,这些主要组件通过算法对未知程序进行分类。 代码分析引擎从程序中提取低级功能。所有特征都与人类可能识别的内容一致(如字符串或数字),并使CAPA能够解释其工作。这些功能通常分为两大类:
由于高级分析可以区分程序中的函数和其他范围,因此CAPA可以在适当的详细级别应用其逻辑。例如,当不相关的API用于不同的函数时,它不会混淆,因为CAPA规则可以指定它们应该与每个函数独立匹配。 在设计CAPA 时考虑了灵活且可扩展的特征提取。可以轻松集成其他代码分析后端。目前,CAPA独立版本依赖于分析框架。如果您使用的是IDA Pro,您还可以使用 IDA Python 后端运行CAPA。请注意,有时代码分析引擎之间的差异可能会导致不同的功能集,从而导致不同的结果。幸运的是,这在实践中通常不是一个严重的问题。 (5)CAPA规则
CAPA规则使用结构化的功能组合来描述可以在程序中实现的功能。如果所有必需的功能都存在,CAPA会得出程序包含的功能。 - CAPA规则是包含元数据和语句树以表达其逻辑的YAML文档。除此之外,规则语言还支持逻辑运算符和计数。
在下图所示,“创建 TCP 套接字”规则表示,数字 6、1 和 2以及对API函数套接字或WSA Socket的调用必须存在于单个基本块的范围内。基本块在非常低的级别对汇编代码进行分组,使其成为匹配紧密相关的代码段的理想场所。除了在基本块中,CAPA还支持函数和文件级别的匹配。函数作用域将反汇编函数中的所有功能绑定在一起,而文件作用域包含整个文件中的所有功能。
下图突出显示了使CAPA 能够向其用户显示高级、有意义的结果的规则元数据。规则名称描述标识的功能,而命名空间将其与技术或分析类别相关联。我们已经在CAPA输出的功能表中看到了名称和命名空间。元数据部分还可以包含作者或示例等字段。我们使用示例来引用文件和偏移量,从而知道存在一种功能,支持对每个规则进行单元测试和验证。此外,CAPA规则是现实世界恶意软件中行为的绝佳文档,因此请随时保留副本作为参考。 在以后的文章中,我们将讨论其他元信息,包括CAPA对ATT&CK和恶意软件行为目录框架的支持。 CAPA原理总结:
提取样本的导入函数、字符串、汇编码,然后循环遍历规则进行匹配,实质上就是将逆向时手工筛选高危恶意代码的工作自动化。当然,对于一些高度混淆后的样本,建议先解混淆后再使用CAPA进行分析。
三.Capa基本用法常用用法指令如下: - To identify capabilities in a program run capa and specify the input file:
- $ capa suspicious.exe
- capa supports Windows PE files (EXE, DLL, SYS) and shellcode.
- To run capa on a shellcode file you must explicitly specify the file format
- and architecture, for example to analyze 32-bit shellcode:
- $ capa -f sc32 shellcode.bin
- To obtain detailed information on identified capabilities, capa supports
- two additional verbosity levels. To get the most detailed output on where
- and why capa matched on rules use the very verbose option:
- $ capa -vv suspicious.exe
- If you only want to focus on specific rules you can use the tag option
- to filter on fields in the rule meta section:
- $ capa -t "create TCP socket" suspicious.exe
- Display capa’s help to see all supported options and consolidate the documentation:
- $ capa -h
复制代码
注意:在进行恶意软件分析工作中,一定要做好隔离防护,在虚拟机中隔离环境下分析。某些APT样本甚至一定做好防护。 1.静态特征提取第一步:在capa工具所在文件夹打开CMD。 第二步:查看capa工具的基本用法。 capa.exe -h常见指令如下: -v, --verbose enable verbose result document (no effect with --json) -vv, --vverbose enable very verbose result document (no effect with --json) -r RULES, --rules RULES -j, --json emit JSON instead of text、
- D:\capa>capa.exe -h
- usage: capa.exe [-h] [--version] [-v] [-vv] [-d] [-q] [--color {auto,always,never}]
- [-f {auto,pe,dotnet,elf,sc32,sc64,freeze}] [-b {vivisect}] [-r RULES] [-s SIGNATURES] [-t TAG] [-j]
- sample
- The FLARE team's open-source tool to identify capabilities in executable files.
- positional arguments:
- sample path to sample to analyze
- optional arguments:
- -h, --help show this help message and exit
- --version show program's version number and exit
- -v, --verbose enable verbose result document (no effect with --json)
- -vv, --vverbose enable very verbose result document (no effect with --json)
- -d, --debug enable debugging output on STDERR
- -q, --quiet disable all output but errors
- --color {auto,always,never}
- enable ANSI color codes in results, default: only during interactive session
- -f {auto,pe,dotnet,elf,sc32,sc64,freeze}, --format {auto,pe,dotnet,elf,sc32,sc64,freeze}
- select sample format, auto: (default) detect file type automatically, pe: Windows PE file,
- dotnet: .NET PE file, elf: Executable and Linkable Format, sc32: 32-bit shellcode, sc64:
- 64-bit shellcode, freeze: features previously frozen by capa
- -b {vivisect}, --backend {vivisect}
- select the backend to use
- -r RULES, --rules RULES
- path to rule file or directory, use embedded rules by default
- -s SIGNATURES, --signatures SIGNATURES
- path to .sig/.pat file or directory used to identify library functions, use embedded
- signatures by default
- -t TAG, --tag TAG filter on rule meta field values
- -j, --json emit JSON instead of text
- By default, capa uses a default set of embedded rules.
- You can see the rule set here:
- https://github.com/mandiant/capa-rules
- To provide your own rule set, use the `-r` flag:
- capa --rules /path/to/rules suspicious.exe
- capa -r /path/to/rules suspicious.exe
- examples:
- identify capabilities in a binary
- capa suspicious.exe
- identify capabilities in 32-bit shellcode, see `-f` for all supported formats
- capa -f sc32 shellcode.bin
- report match locations
- capa -v suspicious.exe
- report all feature match details
- capa -vv suspicious.exe
- filter rules by meta fields, e.g. rule name or namespace
- capa -t "create TCP socket" suspicious.exe
复制代码
第三步:提取HGZ木马的静态特征。 report all feature match details
输出结果如下图所示:
Icon资源信息如下:
2.特征分析下面对特征进行简要分析。其中,namespace表示匹配具体规则的位置,包括ATT&CK映射和MBC映射。 反调试和混淆检测: 截屏操作捕获: 异或处理: 文件及目录操作:
Hook操作: 键盘操作: 互斥量操作: 操作系统检查操作:
Windows进程创建操作:
寄存器操作:
服务操作:
四.Capa文件存储及ATT&CK同理,我们利用CAPA工具对WannaCry蠕虫进行静态分析,并介绍文件存储和ATT&CK映射。 1.特征提取WannaCry蠕虫分析如下图所示:
分析结果如下图所示,都是WannaCry蠕虫的静态行为。
2.文件存储同时,将提取的特征存储至本地文件中。关键代码如下: capa.exe -vv wannacry -j
存储至json文件命令如下: capa.exe -vv wannacry -j > wcry.json显示结果如下图所示,可以会用VS Code格式化显示Json文件。 提取的API特征如下图所示,我们如果在做静态分析时,撰写规则提取这些API函数即可。 ATT&CK映射如下图所示,对应T1543,其功能为持久化操作。
number表示指令执行对应的数字,详见CAPA原理解释部分。 在JSON文件中对应的ATT&CK如下图所示:
MBC框架如下图所示:
五.批量提取PE文件静态特征最后,尽管CAPA能自动化提取恶意软件的静态特征,但在真实场景中,每天会产生海量的恶意软件。如何批量提取恶意软件的静态特征尤为重要,因此,这里给出一个简答的思路。 通过IDA Pro调用CAPA提取 通过Python撰写代码执行CAPA.exe提取 通过PowerShell执行CAPA.exe提取
其中,Python执行CMD命令的关键代码如下: import oscmd = "winver"print(os.system(cmd))比如查看Winver。 执行CAPA分析代码如下: import oscmd = "cd D://capa & capa.exe -vv hgz-attack(木马) & cmd"os.system(cmd) #cmd防止关闭输出结果如下图所示: 最后,添加个循环遍历文件的操作即可,再将提取的Json特征存储至指定目录。
六.总结写到这里这篇文章就介绍介绍,希望对您有所帮助。忙碌的三月,真的很忙,项目本子论文毕业,等忙完后好好写几篇安全博客,感谢支持和陪伴,尤其是家人的鼓励和支持, 继续加油!
三.Capa基本用法
四.Capa文件存储及ATT&CK映射
五.批量提取PE文件静态特征 六.总结
提问: 在真实样本中,恶意软件会被加壳和混淆处理,常用脱壳工具为Unipack。那么,大家可以思考下,CAPA提取的API特征都是恶意软件中均执行的吗?同时,这些关键特征是否都被提取呢? CAPA是经典的静态特征提取工具,那么如何提取动态特征呢?动态特征在恶意软件检测中又扮演什么角色? 请大家思考静态特征和动态特征各自的优缺点。 如何撰写代码提取Json中所需特征,比如常见的API。 CAPA能提取ATT&CK和MBC两种映射,那么,它们有什么作用呢?大家可以思考。 个人感觉静态分析和动态分析是很多年都在研究的内容,目前会与深度学习结合。那么,未来的方法将如何创新呢?怎么更好地自动化识别恶意软件行为,并且批量识别且更少依赖专家知识。
|