[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

admin 2023年6月6日01:08:46评论19 views字数 12397阅读41分19秒阅读模式

最近真的太忙了,天天打仗一样,感谢大家的支持和关注,继续加油!该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起奋斗~

前文详细介绍Cape沙箱批量分析,通过调用Python脚本文件submit.py来实施批量处理。这篇文章将讲解如何将Cape沙箱分析结果Report报告的API序列批量提取,主要是提取Json文件的内容并存储至指定位置。基础性文章,希望对您有帮助,如果存在错误或不足之处,还请海涵。且看且珍惜!

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

通常批量分析的结果如下图所示,每个样本对应一个文件夹,并且Reports文件夹中具有四个文件,它们对应样本沙箱分析的结果。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

文章目录:

  • 一.恶意软件分析

    • 1.静态特征

    • 2.动态特征

  • 二.Cuckoo和Cape沙箱简介

    • 1.Cuckoo沙箱简介

    • 2.Cape沙箱简介

    • 3.Cape原理

  • 三.Cape沙箱识别单样本特征

    • 1.启动沙箱关键步骤

    • 2.样本分析

  • 四.Python批量提取Report报告

    • 1.分析结果

    • 2.文件批量提取

  • 五.Python提取Json文件API特征和时间序列

  • 六.总结


作者的github资源:

  • 逆向分析:

    • https://github.com/eastmountyxz/

      SystemSecurity-ReverseAnalysis

  • 网络安全:

    • https://github.com/eastmountyxz/

    • NetworkSecuritySelf-study

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

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解


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

一.恶意软件分析

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

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

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
    – https://capev2.readthedocs.io/en/latest/

  • 安全厂商沙箱


二.Cuckoo和Cape沙箱简介

1.Cuckoo沙箱简介

Cuckoo Sandbox 是一个开源的自动恶意软件分析系统,并且是经典的沙箱分析工具。Cuckoo沙箱将在几秒钟内为您提供一些详细的分析结果,概述该文件在隔离环境中执行时的情况。不像在线VirusTotal、VirusShare、微步、AnyRun、Hybrid等在线沙箱,Cuckoo可以实现本地安装和离地分析,其定制化和可控程度更高。

  • https://github.com/cuckoosandbox/cuckoo

Cuckoo Sandbox始于2010年蜜网计划中的谷歌Summer of Code项目,它最初是由Claudio“nex”Guarnieri设计和开发的。在2010年夏天开启该工作之后,第一个测试版于2011年2月5日发布,这是Cuckoo第一次公开发布。2011年3月,在谷歌Code Summer of 2011期间,Cuckoo再次被选为蜜网项目的支持项目,在此期间Dario Fernandes加入了该项目并扩展了其功能。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

Cuckoo Sandbox started as a Google Summer of Code project in 2010 within The Honeynet Project. It was originally designed and developed by Claudio “nex” Guarnieri, who is still the main developer and coordinates all efforts from joined developers and contributors.


2.Cape沙箱简介

CAPE Sandbox 是一款用于自动分析可疑文件或恶意软件的开源系统,它使用自定义组件来监视在隔离环境中运行的恶意进程的行为。CAPE来源于Cuckoo Sandbox,目的是添加自动恶意软件解包和配置提取——因此它的名字是一个缩写“配置和有效载荷提取(Config And Payload Extraction)”。自动解包允许基于Yara签名的分类,以补充网络(Suricata)和行为(API)签名。于2016年诞生。

  • https://github.com/kevoreilly/CAPEv2

  • https://capesandbox.com

CAPE Sandbox is an Open Source software for automating analysis of suspicious files. To do so it makes use of custom components that monitor the behavior of the malicious processes while running in an isolated environment.

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

CAPE被用来自动运行和分析文件,并收集全面的分析结果,概述恶意软件在孤立的Windows操作系统中运行时的行为。它可以检测以下类型的结果:

  • 由恶意软件生成的所有进程执行的win32 API调用的痕迹。

  • 恶意软件在执行过程中创建、删除和下载的文件。

  • 恶意软件进程的内存转储。

  • PCAP格式的网络流量跟踪。

  • 在执行恶意软件期间截取的Windows桌面截图。

  • 机器的全内存转储。

由于CAPE的模块化设计,它既可以作为独立的应用程序使用,也可以集成到更大的框架中。它可以用来分析:

  • Generic Windows executables

  • DLL files

  • PDF documents

  • Microsoft Office documents

  • URLs and HTML files

  • PHP scripts

  • CPL files

  • Visual Basic (VB) scripts

  • ZIP files

  • Java JAR

  • Python files

  • Almost anything else

虽然CAPE沙箱的配置和有效载荷提取是最初声明的目标,但CAPE调试器的首要目标是:为了从任意恶意软件家族中提取配置文件或解压缩有效负载,而不依赖进程转储(迟早会被坏人破坏),指令级别的监视和控制是必要的。CAPE中的新调试器遵循最大化使用处理器硬件和最小化使用Windows调试接口的原则,允许通过Yara签名或API调用在引爆期间以编程方式设置硬件断点,从入口点偷偷地检测和操纵恶意软件。这允许捕获指令跟踪,或执行操作,如控制流操作或转储内存区域。

调试器允许CAPE在其原始功能之外继续发展,这些功能现在包括了动态反规避绕过。由于现代恶意软件通常试图在沙箱中逃避分析,例如通过使用定时陷阱来进行虚拟化或API钩子检测,CAPE允许开发动态对策,结合调试器在Yara签名中的动作,来检测隐藏的恶意软件,并执行控制流程操作,迫使样品完全引爆或跳过规避动作。CAPE的动态旁路越来越多,其中包括:

  • Guloader

  • Ursnif

  • Dridex

  • Zloader

  • Formbook

  • BuerLoader

  • Pafish

CAPE利用了许多恶意软件技术或行为,允许未打包的有效载荷捕获,这些行为将导致捕获注入、提取或解压缩的有效载荷,以便进一步分析。此外,CAPE自动为每个进程创建一个进程转储,或者在DLL的情况下,为内存中的DLL模块映像创建一个进程转储。

推荐读者学习官方文档:

  • https://capev2.readthedocs.io/en/latest/

  • https://capev2.readthedocs.io/en/latest/usage/submit.html

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解


3.Cape原理

CAPE Sandbox由处理样本执行和分析的中央管理软件组成。每个分析都在一个全新的、孤立的虚拟机中启动。CAPE的基础结构由一台主机(管理软件)和一些Guest机器(用于分析的虚拟机)组成。主机Host运行管理整个分析过程的沙盒核心组件,而Guest是安全执行和分析恶意软件样本的隔离环境。

CAPE的主要架构如下图所示:

  • 推荐的设置是GNU/Linux (Ubuntu LTS最好)作为主机,Windows 7作为客户。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解


三.Cape沙箱识别单样本特征

1.启动沙箱关键步骤

第一步,安装VMware虚拟机并载入Cape环境镜像。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

第二步,按照四个关键步骤启动Cape沙箱。

  • (1)在任意文件夹中运行"sudo virtualbox",现在已经安装了一个Win7 X64专业版虚拟机。

  • (2)进入/opt/CAPEv2/文件夹,运行"sudo python3 cuckoo.py"。

  • (3) 在/opt/CAPEv2/文件夹下运行"sudo python3 utils/process.py -p7 auto",参数代表优先级划分,输入多个样本时,沙箱会优先运行高优先级样本。

  • (4)在/opt/CAPEv2/web目录下(由于环境依赖的问题,必须由指向该文件夹的shell运行该命令),运行"sudo python3 manage.py runserver 127.0.0.1:8088"(该虚拟机的8080端口已被占用,端口可自己指定)。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解


2.样本分析

在虚拟机的火狐中打开127.0.0.1:8088,在submit页面提交样本即可。

再次强调
在恶意软件分析中,一定要做好本机保护,包括在虚拟机隔离环境中进行分析,甚至需要断网防止沙箱逃逸。同时,本人坚决反对渗透和破坏行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护。这里仅是分享恶意软件分析背后的原理,更好地进行防护。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

运行结如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

点击控制面板的“Recent”查看分析结果。由图可知,本文分析的结果已产生,同时有之前提交的两个样本。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

对应的分析结果如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

此时会遇到一个问题:在做恶意软件分析过程中,通常会遇到大量的恶意软件。如果手动添加其过程极其繁琐并且耗时,如何解决该问题呢?


四.Python批量提取Report报告

1.分析结果

假设存在某个APT组织的样本分析结果,如下图所示,每个文件夹对应一个样本,其命名序号为样本在Cape沙箱中的分析顺序,比如“203”。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

每个文件夹中的内容如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

当Cape分析完成,所有的分析都存储在storage/analyses/目录下,该目录位于一个子目录下,该子目录以增量数字ID命名,该数字ID表示数据库中的分析任务。

.
|-- analysis.conf
|-- analysis.log
|-- binary
|-- dump.pcap
|-- memory.dmp
|-- files
| |-- 1234567890
| `-- dropped.exe
|-- logs
| |-- 1232.raw
| |-- 1540.raw
| `-- 1118.raw
|-- reports
| |-- report.html
| |-- report.json
| |-- report.maec-4.0.1.xml
| `-- report.metadata.xml
`-- shots
|-- 0001.jpg
|-- 0002.jpg
|-- 0003.jpg
`-- 0004.jpg

2.文件批量提取

本文的目标是将每个Report文件夹中的两个报告提取出来,并利用样本的MD5值命名,从而为第五部分API特征提取提供帮助。

  • report.html
  • report.json

需要提取如下图所示的MD5值来命名文件。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

关键代码如下:

"target": {
"category": "file",
"file": {
"name": "033ad372890****ffc827fbac.bin",
"path": "/opt/CAPEv2/storage/binaries/26f5e813e34c05cd1e55****c24e58546e60",
"guest_paths": null,
"size": 70803,
"crc32": "12BCC81F",
"md5": "033ad372890****0ffc827fbac",
"sha1": "03b084e2c1c039****81d5f7d60eae",
"sha256": "26f5e813e34c05cd1e5532****416232c24e58546e60",
"sha512": "644860affd840d140198cea****bed41cca7887faebc",
"ssdeep": "1536:GiA3gHfirellrelGrzB/QhoCDW+4oDCdYH****3gHfirezre8/aDCdFoBjRaUnq",
"type": "Microsoft Word 2007+",
"yara": [],
"cape_yara": [],
"clamav": []
}
},

下面是提取文件名称的Python代码。json提取所利用的扩展包为JsonSearch,在前文中有相关描述。

首先,定位report.json文件位置并分析Json文件的关键Key和Value值。

#coding:utf-8#By:Eastmount CSDN 2023-04-10import csvimport reimport osimport jsonfrom jsonsearch import JsonSearch
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
#-------------------------1.判断指定文件-----------------------------aptname = "AAAA"filenames = getAllFiles(aptname)#['203', '204', ...,'277', '278']
i = 0count = 0 #样本数量while i<len(filenames): #判断该文件夹中是否存在reports件夹 eg:Aggah277reports filename = aptname + "\" + filenames[i] + "\reports" print(filename) if os.path.exists(filename): #report.html report.json report.pdf summary-report.html for n in os.listdir(filename): if n=="report.json": #----------------------2.提取MD5名称------------------ jsonfile = filename + "\report.json" print(jsonfile) with open(jsonfile) as fp: data = json.load(fp) print(data.keys()) count += 1 i += 1 print("Cape沙箱成功提取样本特征数量:", count)

输出结果如下图所示,

  • dict_keys([‘statistics’, ‘CAPE’, ‘info’, ‘behavior’, ‘curtain’, ‘debug’, ‘deduplicated_shots’, ‘dropped’, ‘network’, ‘procdump’, ‘static’, ‘strings’, ‘suricata’, ‘target’, ‘procmemory’, ‘malfamily_tag’, ‘signatures’, ‘malscore’, ‘ttps’])

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

其次,定位target标签中的name位置,提取文件对应的md5值,并对文件进行重新命名,复制到指定文件夹中。

#coding:utf-8#By:Eastmount CSDN 2023-04-10import csvimport reimport osimport jsonfrom jsonsearch import JsonSearchimport shutil
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
#-------------------------1.判断指定文件-----------------------------aptname = "AAAA"writename = aptname + "-Result"filenames = getAllFiles(aptname)#['203', '204', ...,'277', '278']
i = 0count = 0 #样本数量while i<len(filenames): #判断该文件夹中是否存在reports件夹 eg:Aggah277reports filename = aptname + "\" + filenames[i] + "\reports" print(filename) if os.path.exists(filename): #report.html report.json report.pdf summary-report.html for n in os.listdir(filename): if n=="report.json": #----------------------2.提取MD5名称------------------ jsonfile = filename + "\report.json" htmlfile = filename + "\report.html" print(jsonfile) with open(jsonfile) as fp: data = json.load(fp) #print(data.keys()) target = data["target"] #print(target) #查找name对应的值 jsondata = JsonSearch(object=target,mode='j') name = jsondata.search_all_value(key='name') md5 = name[0].split(".")[0] print(md5) #fb41ec1ea500beae2a7d5d373ebb906b.bin #-----------------3.文件写入-------------------- if not os.path.exists(writename): os.mkdir(writename) fname = writename + "\" + md5 + ".json" shutil.copy(jsonfile, fname) fname = writename + "\" + md5 + ".html" shutil.copy(htmlfile, fname) count += 1 i += 1 print("Cape沙箱成功提取样本特征数量:", count)

运行结果如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

最后,我们需要将每个Json文件的API特征提取到执行CSV数据集中。


五.Python提取Json文件API特征和时间序列

首先,我们在VS Code中下载一个折叠解析Json的工具,显示report.json的结果如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

其中,API特征位于“behavior”->“calls”处,接着提取“api”特征。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

接着,撰写代码提取Json文件的API特征,利用JsonSearch库实现,并且部分特征为空值,如下图所示。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

完整代码如下:

#coding:utf-8#By:Eastmount CSDN 2023-04-10import csvimport reimport osimport jsonfrom jsonsearch import JsonSearchimport shutil
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt = "AAAA"aptname = apt + "-Result"filenames = getAllFiles(aptname)print(len(filenames))
writename = apt + "_result.csv"fw = open(writename, mode="w", newline="")writer = csv.writer(fw)writer.writerow(['no', 'apt', 'md5', 'api'])
i = 0while i<len(filenames): #打开json文件 name = aptname + "\" + filenames[i] print(name) api_str = "" md5 = filenames[i].split(".")[0] with open(name, encoding='utf-8') as fp: #特征解析 data = json.load(fp) behavior = data["behavior"] jsondata = JsonSearch(object=behavior, mode='j') api = jsondata.search_all_value(key="api") print("特征数量:", len(api)) print(api)
#特征存储 k = 0 while k<len(api): value = str(api[k]) api_str += value + ";" k += 1 else: print("提取成功") #print(api_str) i += 1 #文件存储 writer.writerow([str(i), apt, md5, api_str]) print("------------------------------nn")fw.close()

输出结果如下图所示:

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解


六.总结

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

2023年4月10日,终于完成阶段性工作,凌晨迫不及待来写一篇博客,纪念下,感恩下!娜璋白首。

  • 一.恶意软件分析

    • 1.静态特征

    • 2.动态特征

  • 二.Cuckoo和Cape沙箱简介

    • 1.Cuckoo沙箱简介

    • 2.Cape沙箱简介

    • 3.Cape原理

  • 三.Cape沙箱识别单样本特征

    • 1.启动沙箱关键步骤

    • 2.样本分析

  • 四.Python批量提取Report报告

    • 1.分析结果

    • 2.文件批量提取

  • 五.Python提取Json文件API特征和时间序列

  • 六.总结

提问:

  • 在真实样本中,恶意软件会被加壳和混淆处理,常用脱壳工具为Unipack。那么,大家可以思考下,CAPA提取的API特征都是恶意软件中均执行的吗?同时,这些关键特征是否都被提取呢?

  • 请大家思考静态特征和动态特征各自的优缺点。

  • CAPE沙箱如何实现批量提取,同时如何定制化规则呢?

  • CAPE沙箱如何捕获的API特征,通过HOOK机制吗?还有哪些可以优化的地方呢?

  • CAPE沙箱究竟能检测逃逸性、高隐蔽的恶意软件吗?尤其APT攻击的样本。

  • 如何撰写代码提取Json中所需特征,比如常见的API。

  • CAPA是经典的静态特征提取工具,那么如何提取动态特征呢?动态特征在恶意软件检测中又扮演什么角色?

  • 个人感觉静态分析和动态分析是很多年都在研究的内容,目前会与深度学习结合。那么,未来的方法将如何创新呢?怎么更好地自动化识别恶意软件行为,并且批量识别且更少依赖专家知识。

三月应该是今年最忙碌的一个月了,好多事情。希望一切顺利,更希望四月后能沉下心来读论文和写论文,继续加油,只争朝夕。

[系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解

感谢大家的支持和关注。继续加油!感恩,娜璋白首。

(By:Eastmount 2023-04-12 夜于火星)


参考文章如下,感谢这些大佬。

  • [1] https://github.com/cuckoosandbox/cuckoo

  • [2] https://github.com/kevoreilly/CAPEv2

  • [3] https://capesandbox.com

  • [4] https://capev2.readthedocs.io/en/latest/

  • [5] https://capev2.readthedocs.io/en/latest/usage/submit.html

  • [6] Cuckoo变种-CAPE简介 - Threathunter

前文回顾(下面的超链接可以点击喔):

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月6日01:08:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [系统安全] 四十八.恶意软件分析 (5)Cape沙箱分析结果Report报告的API序列批量提取详解http://cn-sec.com/archives/1767864.html

发表评论

匿名网友 填写信息