服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

[系统安全] 四十五.恶意软件分析 (2)静态分析Capa经典工具批量提取特征和ATT&CK技战术

日期: 来源:娜璋AI安全之家收集编辑:eastmount

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

前文详细介绍恶意代码静态分析经典工具Capa的基础用法,它是FireEye团队开源的工具,旨在自动化提取样本的高级静态特征,快速挖掘样本的恶意行为。这篇文章将详细讲解Capa批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。此外,Capa支持IDA插件操作,方便安全人员快速定位恶意代码,能与ATT&CK框架和MBC映射。基础性文章,希望对您有帮助,如果存在错误或不足之处,请海涵。且看且珍惜。


文章目录:

  • 一.恶意软件分析与Capa四.总结


        • 1.静态特征

        • 2.动态特征

        • 3.Capa简介

  • 二.批量提取静态特征

        • 1.数据集描述

        • 2.文件遍历

        • 3.CAPA批量提取静态特征

        • 4.超时判定


  • 三.提取Json文件API特征和ATT&CK技战术

    • 1.读取单个Json文件内容

    • 2.Json格式分析

    • 3.利用jsonsearch提取ATT&CK特征

    • 4.利用jsonsearch提取API特征

    • 5.文件存储


  • 四.总结


作者的github资源:

  • 逆向分析:


        • https://github.com/eastmountyxz/

          SystemSecurity-ReverseAnalysis

  • 网络安全:

    • https://github.com/eastmountyxz/

      NetworkSecuritySelf-study



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


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


一.恶意软件分析与Capa

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

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

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

  • 安全厂商沙箱


3.Capa简介

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等。


二.批量提取静态特征

在使用Capa提取静态特征过程中,通常会遇到一个问题——如何利用Capa批量提取恶意软件的静态特征。

1.数据集描述

假设存在如下图所示的数据集,利用capa.exe提取的结果将存储在result文件夹中。

  • dataset:

  • result:

  • capa.exe


2.文件遍历

假设数据集“dataset”中存在不同组织的恶意软件,我们首先要解决的是遍历文件并提取一个恶意软件的静态特征,其关键代码如下:

#coding: utf-8#By:Eastmount CSDN 2023-03-14import os
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\dataset"apt_name = ['AAAA','BBBB','CCCC','DDDD']i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name) files = getAllFiles(file_name)
#创建输出文件夹 write_path = r"D:\capa\result" write_name = write_path + "\\" + str(apt_name[i]) print(write_name) if not os.path.exists(write_name): os.mkdir(write_name)
#循环提取静态特征 for name in files: peName = file_name + "\\" + name print(peName) name = os.path.splitext(name)[0] jsonName = write_name + "\\" + name + ".json" print(jsonName) break i += 1 break

输出结果如下所示,成功定位需要静态分析的样本,并创建要生成的目标Json文件。此时尚未分析恶意软件,生成的json文件为空。

  • 目标文件:D:\cape\dataset\APTXX\02ddd…9ff.bin

  • 生成文件:D:\cape\dataset\APTXX\02ddd…9ff.json


3.CAPA批量提取静态特征

接着定义函数提取静态特征,关键函数如下:

def runCAPA(peName,jsonName):    cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName    print(cmd)    os.system(cmd)

如果需要暂停则构建的CMD命令为:

cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName + " & cmd"

尝试提取一个样本的特征,比如HGZ木马。

查看对应的json文件,内容如下:

格式化显示Json文件。

自此,成功利用CAPA提取一个样本的静态特征,下图显示ATT&CK和关键API特征。

此时的代码如下,能批量提取恶意软件的静态特征并生成对应的Json文件。

#coding: utf-8#By:Eastmount CSDN 2023-03-14import os
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
def runCAPA(peName,jsonName): #cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName + " & cmd" cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName print(cmd) os.system(cmd)
apt_path = r"D:\capa\dataset"apt_name = ['AAAA','BBBB','CCCC','DDDD']i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name) files = getAllFiles(file_name)
#创建输出文件夹 write_path = r"D:\capa\result" write_name = write_path + "\\" + str(apt_name[i]) print(write_name) if not os.path.exists(write_name): os.mkdir(write_name)
#循环提取静态特征 for name in files: peName = file_name + "\\" + name print(peName) name = os.path.splitext(name)[0] jsonName = write_name + "\\" + name + ".json" print(jsonName) runCAPA(peName,jsonName) i += 1

4.超时判定

然而,某些文件由于过大或格式错误,会导致分析过长或卡主。因此需要构建超时判定。

设置超时判定的方法很多,本文主要利用func_timeout实现。其安装命令如下:

  • pip install func_timeout

此时的完整代码如下:

#By:Eastmount CSDN 2023-03-14#coding: utf-8import osimport timefrom func_timeout import func_timeoutfrom func_timeout import FunctionTimedOutfrom multiprocessing import Process
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
def runCAPA(peName,jsonName): #cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName + " & cmd" cmd = "cd D://capa & capa.exe -vv " + str(peName) + " -j > " + jsonName print(cmd) os.system(cmd)
#超时判定def mytest(peName,jsonName): runCAPA(peName,jsonName) apt_path = r"D:\capa\dataset"apt_name = ['AAAA','BBBB','CCCC','DDDD']i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name) files = getAllFiles(file_name)
#创建输出文件夹 write_path = r"D:\capa\result" write_name = write_path + "\\" + str(apt_name[i]) print(write_name) if not os.path.exists(write_name): os.mkdir(write_name)
#循环提取静态特征 for name in files: peName = file_name + "\\" + name print(peName) name = os.path.splitext(name)[0] jsonName = write_name + "\\" + name + ".json" print(jsonName) #超时判定 try: func_timeout(10, mytest, args=(peName,jsonName, )) except FunctionTimedOut as e: print(e) print('子程序超时') print("-----------------------------\n\n") i += 1 break

运行结果如下图所示,样本较多时可以利用该方式提取静态特征。注意,该方法可能存在不足之处,还请读者自己完善和修改。


三.提取Json文件API特征和ATT&CK技战术

接下来,我们需要提取Json文件中的关键特征,常见的特征即:

  • API函数特征

  • ATT&CK技战术

1.读取单个Json文件内容

关键代码如下所示:

  • 02d9xxxxxxxe9ff.json

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport json
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
files = getAllFiles(file_name) for name in files: jsonName = file_name + "\\" + str(name) print(jsonName)
#打开json文件 with open(jsonName) as fp: data = json.load(fp) print(data)
break i += 1 break

输出结果如下图所示:


2.Json格式分析

Capa工具生成的Json文件主要由meta和rules两大块内容组织,其中,静态行为及API特征在rules部分。接下来尝试解析Json文件。

print(data.keys())# dict_keys(['meta', 'rules'])

该部分的关键代码如下:

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport json
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
files = getAllFiles(file_name) for name in files: jsonName = file_name + "\\" + str(name) print(jsonName)
#打开json文件 with open(jsonName) as fp: data = json.load(fp) #print(data) print(data.keys()) #dict_keys(['meta', 'rules']) #包含meta和rules两大块内容 静态行为及API在rules部分
#提取ATT&CK特征 behavior = data["rules"] print(behavior)
break i += 1 break

输出结果如下图所示:

对应于Json文件内容,共包括34个API特征。如下图所示:

同时该样本存在8个ATT&CK攻击行为,当然也有缺失的情况。

Capa匹配规则及参数解析:
(1) namespace:表示命名空间,即匹配规则文件的位置;
(2) authors:提供规则的作者,读者可以尝试构建适用于研究领域的规则;
(3) attack包括战术(tactic)、技术(technique)、子技术(subtechnique)和序号,与ATT&CK框架对应。

逃逸行为如下图所示:

此时大家会遇到一个问题:
Json是经典的数据格式,但如果想要提取Json数据中的某个键内容,就必须要一层层往递归下去才能拿到,如果层次非常多的话,将会非常的麻烦。比如随意编写的JSON内容,想要提取某个值会非常困难,在获取请求的数据时,数组内容的数据可能会不同,无法准确定位到底是哪个目录,如果后期目录修改,甚至需要重新修改操作目录。那么,如何解决呢?本文利用Jsonsearch来提取制定键值内容。

  • 推荐文献:python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)


3.利用jsonsearch提取ATT&CK特征

首先,安装jsonsearch。

  • pip install jsonsearch

jsonsearch的具体实现过程请读者自行学习,本文仅给出提取ATT&CK和API关键特征的重要代码,如下所示:

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport jsonfrom jsonsearch import JsonSearch
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
files = getAllFiles(file_name) for name in files: jsonName = file_name + "\\" + str(name) print(jsonName)
#打开json文件 with open(jsonName) as fp: data = json.load(fp) #print(data) print(data.keys()) #dict_keys(['meta', 'rules']) #包含meta和rules两大块内容 静态行为及API在rules部分
#提取ATT&CK特征 behavior = data["rules"] print(behavior)
#查找attack对应的所有值 jsondata = JsonSearch(object=behavior, mode='j') attack = jsondata.search_all_value(key='attack') print(attack) print(len(attack))
for n in attack: if len(n)>0: print(n,type(n))
break i += 1 break

输出结果如下所示:

[ [{'parts': ['Defense Evasion', 'Obfuscated Files or Information'], 'tactic': 'Defense Evasion', 'technique': 'Obfuscated Files or Information', 'subtechnique': '', 'id': 'T1027'}],  [],  [],   [{'parts': ['Execution', 'Shared Modules'], 'tactic': 'Execution', 'technique': 'Shared Modules', 'subtechnique': '', 'id': 'T1129'}],   [],   [],   [],   [] ]

接着我们还需要提取ATT&CK对应的四部分内容,包括战术(tactic)、技术(technique)、子技术(subtechnique)和序号。

最后分别提取tactic、technique和id内容,并存储至指定列表中。完整代码如下所示:

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport jsonfrom jsonsearch import JsonSearch
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
apt_list = [] #组织名称pe_md5_list = [] #恶意软件文件名称tactic_list = [] #攻击ATT&CK框架Tactictechnique_list = [] #攻击ATT&CK框架Techniqueid_list = [] #攻击ATT&CK框架类别
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
apt_list.append("AAAA") files = getAllFiles(file_name) for name in files: jsonName = file_name + "\\" + str(name) print(jsonName) pe_md5_list.append(jsonName)
#打开json文件 with open(jsonName) as fp: data = json.load(fp) #print(data) print(data.keys()) #dict_keys(['meta', 'rules']) #包含meta和rules两大块内容 静态行为及API在rules部分
#提取ATT&CK特征 behavior = data["rules"] print(behavior)
#查找attack对应的所有值 jsondata = JsonSearch(object=behavior, mode='j') attack = jsondata.search_all_value(key='attack') print(attack) print(len(attack))
#提取tactic、technique和id tactic_str = "" technique_str = "" id_str = "" for n in attack: if len(n)>0: #print(n,type(n)) value = n[0] print(value,type(value)) tactic_str += str(value['tactic']) + ";" technique_str += str(value['technique']) + ";" id_str += str(value['id']) + ";" else: print("over!!!") print(tactic_str, technique_str, id_str) tactic_list.append(tactic_str) technique_list.append(technique_str) id_list.append(id_str) break i += 1 break

输出结果如下图所示,8个对应上图查询的ATT&CK数字一致,并且存在空值情况。

dict_keys(['meta', 'rules'])[[{'parts': ['Defense Evasion', 'Obfuscated Files or Information'], 'tactic': 'Defense Evasion',  'technique': 'Obfuscated Files or Information', 'subtechnique': '', 'id': 'T1027'}], [], [],  [{'parts': ['Execution', 'Shared Modules'], 'tactic': 'Execution', 'technique':  'Shared Modules', 'subtechnique': '', 'id': 'T1129'}], [], [], [], []]
8{'parts': ['Defense Evasion', 'Obfuscated Files or Information'], 'tactic': 'Defense Evasion', 'technique': 'Obfuscated Files or Information', 'subtechnique': '', 'id': 'T1027'} <class 'dict'>{'parts': ['Execution', 'Shared Modules'], 'tactic': 'Execution', 'technique': 'Shared Modules', 'subtechnique': '', 'id': 'T1129'} <class 'dict'>over!!!Defense Evasion;Execution; Obfuscated Files or Information;Shared Modules; T1027;T1129;

4.利用jsonsearch提取API特征

同样的方法提取恶意软件的API特征,第一个api也是位于rules位置,即通过CAPA工具的规则匹配提取关键静态特征。

需要注意,api位于子节点下面的内容,直接用下列代码返回空值。

jsondata = JsonSearch(object=behavior, mode='j')api = jsondata.search_all_value(key='api')print(api)print(len(api))

通过“matches”来匹配。

关键代码如下:

jsondata = JsonSearch(object=behavior, mode='j')api = jsondata.search_all_value(key='matches')

但返回内容仍然有较多的键值迭代。

因此,作者直接对其进行字符串匹配处理。

#采用关键词匹配#'node': {'feature': {'type': 'api', 'api': 'CreateFile'}, 'type': 'feature'}api = str(api)print(api)start = api.find("'api':")api_lin = api[start+8:]end = api_lin.find("'},")print(api_lin[:end])

输出结果如下图所示:

完整代码如下所示:

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport jsonfrom jsonsearch import JsonSearch
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
apt_list = [] #组织名称pe_md5_list = [] #恶意软件文件名称tactic_list = [] #攻击ATT&CK框架Tactictechnique_list = [] #攻击ATT&CK框架Techniqueid_list = [] #攻击ATT&CK框架类别api_list = [] #恶意软件关键API行为特征
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
apt_list.append("AAAA") files = getAllFiles(file_name) for name in files: jsonName = file_name + "\\" + str(name) print(jsonName) pe_md5_list.append(jsonName)
#打开json文件 with open(jsonName) as fp: data = json.load(fp) #print(data) print(data.keys()) #dict_keys(['meta', 'rules']) #包含meta和rules两大块内容 静态行为及API在rules部分
#提取ATT&CK特征 behavior = data["rules"] #print(behavior)
#查找attack对应的所有值 jsondata = JsonSearch(object=behavior, mode='j') attack = jsondata.search_all_value(key='attack') print(attack) print(len(attack))
#------------------提取tactic、technique和id----------------- tactic_str = "" technique_str = "" id_str = "" for n in attack: if len(n)>0: #print(n,type(n)) value = n[0] print(value,type(value)) tactic_str += str(value['tactic']) + ";" technique_str += str(value['technique']) + ";" id_str += str(value['id']) + ";" else: print("over attack!!!\n")
#--------------------提取API特征 子节点----------------------- jsondata = JsonSearch(object=behavior, mode='j') api = jsondata.search_all_value(key='matches') #print(len(api))
#采用关键词匹配 #'node': {'feature': {'type': 'api', 'api': 'CreateFile'}, 'type': 'feature'} api = str(api) api_str = "" print(api) count = 0 while len(api)>0: start = api.find("'api':") if start<0: break else: api_lin = api[start+8:] api = api_lin end = api_lin.find("'},") api_feature = api_lin[:end] api_str += api_feature + ";" count += 1 else: print("over api!!!\n")
print(tactic_str, technique_str, id_str) tactic_list.append(tactic_str) technique_list.append(technique_str) id_list.append(id_str) print(api_str) print("API特征个数:", count) api_list.append(api_str) print("----------------------------------\n\n") break i += 1 break

最终输出结果如下所示:

Defense Evasion;Execution; Obfuscated Files or Information;Shared Modules; T1027;T1129;
CreateFile;CreateFileEx;IoCreateFile;IoCreateFileEx;ZwOpenFile;ZwCreateFile;NtOpenFile;NtCreateFile;fopen;fopen64;fdopen;freopen;open;openat;LoadLibrary;strcmp;kernel32.GetTickCount;API特征个数: 17

5.文件存储

调用CSV实现文件存储,最终代码如下:

#coding:utf-8#By:Eastmount CSDN 2023-03-14import osimport jsonfrom jsonsearch import JsonSearchimport csv
def getAllFiles(targetDir): listFiles = os.listdir(targetDir) return listFiles
apt_path = r"D:\capa\result"apt_name = ['AAAA']
apt_list = [] #组织名称pe_md5_list = [] #恶意软件文件名称tactic_list = [] #攻击ATT&CK框架Tactictechnique_list = [] #攻击ATT&CK框架Techniqueid_list = [] #攻击ATT&CK框架类别api_list = [] #恶意软件关键API行为特征
i = 0while i<len(apt_name): file_name = apt_path + "\\" + str(apt_name[i]) print(file_name)
apt_list.append("AAAA") files = getAllFiles(file_name)
fw = open('aaaa_result.csv', mode='w', newline="") writer = csv.writer(fw) writer.writerow(['no', 'apt', 'md5', 'tactic', 'technique', 'tid', 'api']) no = 1 for name in files: jsonName = file_name + "\\" + str(name) print(jsonName) pe_md5_list.append(jsonName) #打开json文件 with open(jsonName) as fp: data = json.load(fp) #print(data) print(data.keys()) #dict_keys(['meta', 'rules']) #包含meta和rules两大块内容 静态行为及API在rules部分
#提取ATT&CK特征 behavior = data["rules"] #print(behavior)
#查找attack对应的所有值 jsondata = JsonSearch(object=behavior, mode='j') attack = jsondata.search_all_value(key='attack') print(attack) print(len(attack))
#------------------提取tactic、technique和id----------------- tactic_str = "" technique_str = "" id_str = "" for n in attack: if len(n)>0: #print(n,type(n)) value = n[0] print(value,type(value)) tactic_str += str(value['tactic']) + ";" technique_str += str(value['technique']) + ";" id_str += str(value['id']) + ";" else: print("over attack!!!\n")
#--------------------提取API特征 子节点----------------------- jsondata = JsonSearch(object=behavior, mode='j') api = jsondata.search_all_value(key='matches') #print(len(api))
#采用关键词匹配 #'node': {'feature': {'type': 'api', 'api': 'CreateFile'}, 'type': 'feature'} api = str(api) api_str = "" print(api) count = 0 while len(api)>0: start = api.find("'api':") if start<0: break else: api_lin = api[start+8:] api = api_lin end = api_lin.find("'},") api_feature = api_lin[:end] api_str += api_feature + ";" count += 1 else: print("over api!!!\n")
print(tactic_str, technique_str, id_str) tactic_list.append(tactic_str) technique_list.append(technique_str) id_list.append(id_str) print(api_str) print("API特征个数:", count) api_list.append(api_str) print("----------------------------------\n\n")
#--------------------------文件存储-------------------------- writer.writerow([str(no), "AAAA", str(name), tactic_str, technique_str, id_str, api_str]) no += 1 if no>5: break i += 1 break#结束fw.close()

输出结果如下图所示:


四.总结

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

2023年3月20日,终于完成初稿,凌晨迫不及待来写一篇博客,纪念下,感恩下!娜璋白首。

  • 一.恶意软件分析与Capa四.总结


        • 1.静态特征

        • 2.动态特征

        • 3.Capa简介

  • 二.批量提取静态特征

        • 1.数据集描述

        • 2.文件遍历

        • 3.CAPA批量提取静态特征

        • 4.超时判定


  • 三.提取Json文件API特征和ATT&CK技战术

    • 1.读取单个Json文件内容

    • 2.Json格式分析

    • 3.利用jsonsearch提取ATT&CK特征

    • 4.利用jsonsearch提取API特征

    • 5.文件存储


  • 四.总结


提问:

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

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

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

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

  • CAPA能提取ATT&CK和MBC两种映射,那么,它们有什么作用呢?大家可以思考。

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

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

感谢大家的支持和关注。继续加油!

(By:Eastmount 2023-03-20 夜于武汉)


参考文献:

  • [1] https://github.com/mandiant/capa

  • [2] capa: Automatically Identify Malware Capabilities

  • [3] 自动化逆向辅助利器 – Capa工具介绍 - systemino

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

相关阅读

  • 《地球信息科学学报》2023年第3期佳文推介

  • 编 者 按今天为大家呈上2023年第25卷第3期刊文摘要。本期包括 “地球信息科学理论与方法” “地理空间分析综合应用””遥感科学与应用技术”3个栏目,共16篇文章。敬请阅读!
  • 《中国环境科学》2023年第3期目次

  • 大气污染与控制基于环流指数研究天津长序列细颗粒物大气污染气象条件演变规律蔡子颖, 韩素芹, 邱晓滨, 姚青, 汪靖, 樊文雁, 杨旭, 郝囝, 唐颖潇, 张敏上海海陆风分类特征、
  • 目标识别与检测之图片特征提取

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达来源:最机智的IT 终于又过了一个周末,有时间总结一下上上周的课设内容~ 前两周的课设主题是目标识别
  • 静态路由or动态路由,一个例子说明白!

  • 来源:中兴文档作者:中兴文档什么是路由?路由是指数据包在网络中经过的路径,即数据从一台设备到另一台设备选择经过的路。那么如何选路?分为两个派系:静态路由和动态路由。听起来还
  • 关于开展电力二次系统安全专项监管工作的通知

  • 国家能源局综合司关于开展电力二次系统安全专项监管工作的通知国能综通安全〔2023〕21号各省(自治区、直辖市)能源局,有关省(自治区、直辖市)及新疆生产建设兵团发展改革委,工业和

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 睡眠混淆绕过Windows CFG检测保护机制

  • 01CFG&kCFG‍‍‍‍‍‍‍‍控制流防护(CFG)及其在内核中的实现称为kCFG,是Microsoft的控制流完整性(CFI)版本。CFG的工作原理是检查在使用CFG编译的模块的应用程序内部的间接
  • 念好“战”字诀,研究生院拓展人才培养路径

  • “作为学员,能够直接参与重点项目,机会很难得!”军事科学院博士研究生东肃河兴奋地说。近日,东肃河经过4个月的集中教学,顺利进入到以科研实验为主的“第二培养阶段”,将跟随导师
  • Spring Boot + OpenAI 生成图像

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。ChatGPT 是由 OpenAI 开发的强大语言模型,可以用于生成类似人类的文本。OpenAI API 允许开发人员访问该模型并在其自己
  • Spring Boot 应用的新命令行界面:Just

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。作者 | Johan Janssen、译者 | 马可薇、策划 | 丁晓昀命令行工具 Just,无需任何配置即可自动加载有变动的源码、构建文