[系统安全] 四十四.恶意软件分析 (1)静态分析Capa经典工具的基本用法万字详解

一颗小胡椒2023-03-13 09:18:23

希望这些基础原理能更好地帮助大家做好防御和保护,基础性文章,希望对您有所帮助。作者作为网络安全的小白,分享一些自学基础教程给大家,主要是在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!

文章目录:

  • 一.恶意软件分析
  • 1.静态特征
  • 2.动态特征
  • 二.Capa简介
  • 1.基础知识
  • 2.CAPA原理详解
  • 三.Capa基本用法
  • 1.静态特征提取
  • 2.特征分析
  • 四.Capa文件存储及ATT&CK映射
  • 1.特征提取
  • 2.文件存储

  • 五.批量提取PE文件静态特征
  • 六.总结

作者的github资源:

  • 逆向分析:
  • https://github.com/eastmountyxz/
  • SystemSecurity-ReverseAnalysis
  • 网络安全:
  • https://github.com/eastmountyxz/
  • NetworkSecuritySelf-study


作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。(参考文献见后)

一.恶意软件分析

恶意软件或恶意代码分析通常包括静态分析和动态分析。特征种类如果按照恶意代码是否在用户环境或仿真环境中运行,可以划分为静态特征和动态特征。

那么,如何提取恶意软件的静态特征或动态特征呢? 因此,第一部分将简要介绍静态特征和动态特征。

1.静态特征

没有真实运行的特征,通常包括:

  • 字节码
  • :二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理
  • IAT表
  • :PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关
  • Android权限表
  • :如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息
  • 可打印字符
  • :将二进制代码转换为ASCII码,进行相关统计
  • IDA反汇编跳转块
  • :IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据
  • 常用API函数
  • 恶意软件图像化

静态特征提取方式:

  • CAPA
  • – https://github.com/mandiant/capa
  • IDA Pro
  • 安全厂商沙箱

2.动态特征

相当于静态特征更耗时,它要真正去执行代码。通常包括:

– API调用关系:比较明显的特征,调用了哪些API,表述对应的功能

– 控制流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类

– 数据流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类

动态特征提取方式:

  • Cuckoo
  • – https://github.com/cuckoosandbox/cuckoo
  • CAPE
  • – https://github.com/kevoreilly/CAPEv2
  • 安全厂商沙箱

二.Capa简介

1.基础知识

Capa是FireEye(Mandiant)公司开源的静态分析工具,旨在检测和识别恶意软件的高级静态行为,同时支持IDA插件操作和安装服务及HTTP通信,方便安全人员快速定位恶意代码,且能与ATT&CK框架和MBC映射。

通常能分析的样本格式:

  • PE文件
  • ELF文
  • .NET模块
  • ShellCode文件

下载地址:

  • https://github.com/mandiant/capa
  • https://github.com/fireeye/capa

该工具运行结果如下所示,它能有效反映恶意软件在ATT&CK框架中的技战术特点,比如:DEFENSE EVASION、DISCOVERY、EXECUTION、EXFILTRATION、PERSISTENCE等。

(1)安装方式一

安装过程主要是从Github中下载文件,该文件夹中报告Capa规则,即capa-rules子项目路径下包含了所有类型的检测规则。下载好后,使用命令安装:

  • pip install -e [path_to_capa]

CAPA规则读者可以尝试编写自适应规则,也可以参考开源大佬们的分享,如下图所示(参考systemino老师)。

CAPA规则的编写格式如下,第一个红框meta用于描述该规则的描述信息,第二个红框features就是用于匹配的逻辑规则,类似于yara,支持的类型有:api、string、bytes、mnemonic等。
识别结果如下图所示,比如识别出Lazarus组织的Dtrack后门。

(2)安装方式二

另一方面可以下载可执行程序,直接运行。下载地址如下:

  • https://github.com/mandiant/capa/releases

下载成功之后如下图所示,直接在CMD或PowerShell中运行即可。

(3)安装方式三

在IDA中通过插件的方式使用(支持IDA7.2及以上版本),IDA打开样本后,点击File->Script File加载ida_capa_explorer.py脚本。该部分建议从事恶意软件分析的童鞋或技术人员深入研究。


2.CAPA原理详解

CAPA原理知识推荐大家学习FireEye的相关原文介绍。地址如下:

  • capa: Automatically Identify Malware Capabilities

(1)提出问题

在分析程序是否恶意、它们在攻击期间所扮演的角色、潜在功能和攻击作者的意图时,通常需要经验丰富的逆向工程师来完成。恶意软件专家可以快速对未知二进制文件进行分类,以获取初步见解并知道后续分析。然后,经验不足的分析师较难区分正常和恶意样本,并且字符串、FLOSS或PE查看器等常用工具显示的细节级别较低,较难分析恶意软件的行为特点。

(2)恶意软件分类

以某个恶意软件为例,下图展示文件的字符串和导入表信息。通过这些信息,逆向工程师可以利用字符串和导入API函数猜测程序的功能,但仅限于此。

  • 该程序可能会创建互斥锁、启动进程、网络通信(可能与IP地址127.26.152.13通信)。
  • Winsock(WS2_32)导入会联想到网络功能,但此处没有名称,可能是按照序号导入。

动态分析可以进一步挖掘该程序的其它功能。然而,沙盒报告或动态分析工具仅限于从执行代码路径中捕获行为,譬如连接命令和控制(C2)服务器后触发的功能,通常不建议使用实时互联网连接来分析恶意软件。因此,我们需要对它进行逆向分析,如下图所示,利用IDA Pro对程序的主要功能进行反编译。尽管我们使用反编译而不是反汇编来简化描述过程,但这两种表示具有相似的概念。

了解编程和Windows API后,我们可以发现恶意软件具备如下功能:

  • 创建互斥锁以确保只有一个实例在运行
  • 创建一个 TCP 套接字,由常量 2 = AF_INET、1 = SOCK_STREAM 和 6 = IPPROTO_TCP 表示
  • 连接IP地址 26.152.13.80,端口为127
  • 发送和接收数据
  • 将接收到的数据与字符串睡眠和可执行文件进行比较
  • 创建新流程

尽管并非每个代码路径都可以在每次运行时执行,但可以说该恶意软件具有执行这些行为的能力。此外,通过结合各个结论,可以推断该恶意软件是一个后门,可以运行由硬编码的 C2 服务器指定的任意程序。这一高级别结论使我们能够确定调查范围并决定如何应对威胁。

(3)自动识别能力

当然,恶意软件分析很少这么简单。意图识别需要通过包含数百或数千个函数的二进制文件进行传播。此外,逆向工程具有相当陡峭的学习曲线,需要对许多低级概念(如汇编语言和操作系统内部)有扎实的理解。

但是,通过足够的练习,我们可以简单地从 API 调用、字符串、常量和其他功能的重复模式中识别程序中的功能。CAPA证明了一些关键分析结论实际上是可以自动识别的。该工具提供了一种通用而灵活的方法来编纂专业知识并将其提供给整个安全社区。当您运行CAPA时,它会将特征和模式识别为人类的力量,从而产生可以推动后续调查步骤的高级结论。例如,当CAPA识别出未加密的HTTP通信功能时,这可能是您需要到代理日志或其他网络实施跟踪的提示。

下图是CAPA的功能介绍,该表格显示此示例中所有已识别的功能。

  • 左侧的每个条目都描述一个功能
  • 右侧的关联命名空间有助于对相关功能进行分组

CAPA可以非常出色地描述先前讨论的所有程序功能。

通过实验发现,CAPA经常能够提供令人惊讶的好结果,这也是FireEye希望CAPA能够识别恶意软件功能的追求。下图显示CAPA对“创建TCP套接字”结论的具体输出。由图可知,我们可以通过CAPA检查二进制文件并发现相关特征的确切位置。此外,我们可以利用语法规则推测它们低级功能的逻辑树组成。

(4)CAPA原理

CAPA由两个主要组件组成,这些主要组件通过算法对未知程序进行分类。

  • 首先,代码分析引擎从文件中提取功能。 如字符串、反汇编和控制流。
  • 其次,逻辑引擎查找以通用规则格式表示的特征组合。 当逻辑引擎找到匹配项时,CAPA会报告规则描述的功能。

代码分析引擎从程序中提取低级功能。所有特征都与人类可能识别的内容一致(如字符串或数字),并使CAPA能够解释其工作。这些功能通常分为两大类:

  • 文件特征:文件特征是从原始文件数据及其结构中提取的,例如 PE 文件头。这是滚动整个文件时可能会注意到的信息。除了上面讨论的字符串和导入的 API 之外,还包括导出的函数和节名称。
  • 反汇编特征:反汇编特征是从文件的高级静态分析中提取的,这意味着反汇编和重建控制流。下图显示了选定的反汇编功能,包括API调用、指令助记符、数字和字符串引用。

由于高级分析可以区分程序中的函数和其他范围,因此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 -husage: 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

  • capa -vv suspicious.exe

输出结果如下图所示:

Icon资源信息如下:


2.特征分析

下面对特征进行简要分析。其中,namespace表示匹配具体规则的位置,包括ATT&CK映射和MBC映射。

反调试和混淆检测:

截屏操作捕获:

异或处理:

文件及目录操作:

Hook操作:

键盘操作:

互斥量操作:

操作系统检查操作:

Windows进程创建操作:

寄存器操作:

服务操作:


四.Capa文件存储及ATT&CK

同理,我们利用CAPA工具对WannaCry蠕虫进行静态分析,并介绍文件存储和ATT&CK映射。

1.特征提取

WannaCry蠕虫分析如下图所示:

  • capa.exe -vv 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特征存储至指定目录。


六.总结

写到这里这篇文章就介绍介绍,希望对您有所帮助。忙碌的三月,真的很忙,项目本子论文毕业,等忙完后好好写几篇安全博客,感谢支持和陪伴,尤其是家人的鼓励和支持, 继续加油!

软件静态分析
本作品采用《CC 协议》,转载必须注明作者和本文链接
因为程序肯定是病毒,我就不上传杀毒网去查杀了。正常我们在分析一个未知恶意程序的时候,流程都是要先上传杀毒网看看。 用PEID进行查壳,显示未加壳,程序采用Delphi语言开发。
对付勒索软件的方法主要以预防和响应为主。但是,检测勒索软件对于保护企业组织同样重要。不过此项检测手段需要依赖于针对勒索软件构建的威胁情报体系,不断增扩展名、可疑字符串等。研究人员已针对勒索软件扩展名整理出众多列表,包括附有常见勒索软件扩展名的列表。不过此项检测手段也仅针对已知的勒索软件,对于勒索软件的变种防护能力较差。此外,安全人员要始终假设勒索攻击会成功。
臭名昭著的LOCKBIT 2.0勒索软件组织在过去几个月非常活跃,与该勒索软件相关联的威胁参与者 (TA) 使用勒索软件即服务 (RaaS) 业务模型。
例如,木马病毒、勒索程序、系统漏洞等安全威胁给人们带来了巨大的经济损失,引发隐私泄露等安全问题。HMM-CBOW行为模型是王焱济在 2019 年提出的一种改进型序列行为模型。图 3 HMM-CBOW 行为模型HMM-CBOW 行为模型主要对软件运行过程中的系统调用序列、参数及返回值等进行细粒度的刻画,将序列进一步划分为方便存储、处理与查找的若干不同长度的短序列。
美国空军研发恶意文件检测软件Whiddler,并通过签署专利许可协议将该软件转让给私营部门。
XXE如何理解? 它是可扩展标记语言 ( XML) 用于存储和传输数据。 通常始于异步JavaScript和XML技术(ajax技术):网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面。 目前JSON的使用比XML更加普遍JSON和XML都被用于在Ajax模型中的XML技术
软件漏洞分析简述
2022-07-18 07:08:06
然后电脑坏了,借了一台win11的,凑合着用吧。第一处我们直接看一下他写的waf. 逻辑比较简单,利用正则,所有通过 GET 传参得到的参数经过verify_str函数调用inject_check_sql函数进行参数检查过滤,如果匹配黑名单,就退出。但是又有test_input函数进行限制。可以看到$web_urls会被放入数据库语句执行,由于$web_urls获取没有经过过滤函数,所以可以
如果要选择一款企业级静态源代码安全扫描工具,那么Gartner 2021应用程序安全测试 (AST) 魔力象限,就可以给我们在产品选型提供很重要的参考。 本文整理的是一份商业静态源代码分析工具的清单,收集国内外主流的SAST工具,以了解产品的方向和动态。
近日,微软发布“安全供应链消费框架(Secure Supply Chain Consumption Framework,简称S2C2F)”1.1版本。
一颗小胡椒
暂无描述