利用AI+大数据的方式分析恶意样本(三十)
作者:互联网
文章目录
DeepReflect: Discovering Malicious Functionality through Binary Reconstruction
佐治亚理工学院
开源:https://github.com/evandowning/deepreflect
abstract
Deep learning has continued to show promising results for malware classification. However, to identify key malicious behaviors, malware analysts are still tasked with reverse engineering unknown malware binaries using static analysis tools, which can take hours.
Although machine learning can be used to help identify important parts of a binary, supervised approaches are impractical due to the expense of acquiring a sufficiently large labeled dataset.
To increase the productivity of static reverse engineering, we propose xxx: a tool for localizing and identifying malware components within a malicious binary.
To localize malware components, we use an unsupervised deep neural network in a novel way, and classify the components through a semi-supervised cluster analysis, where analysts incrementally provide labels during their daily work flow.
The tool is practical since it requires no data labeling to train the localization model, and minimal/noninvasive labeling to train the classifier incrementally.
In our evaluaton with five malware analysts on over 26k malware samples, we found that xxx reduces the number of functions that an analyst needs to reverse engineer by 85% on average.
Our approach also detects 80% of the malware components compared to 43% when using a signature-based tool(CAPA). Furthermore, xxx performs better with our proposed autoencoder than SHAP. This is significant because SHAP, a state-of-the-art method, requires a labeled dataset and autoencoders do not.
introduction
xxx能做以下五个事情:
- 识别恶意软件中的恶意活动
- 聚类相关的恶意软件组件
- 将分析师的注意力集中在重要事情上
- 揭示对不同恶意软件之间共享行为的见解家族
- 处理涉及混淆的对抗性攻击
一般来讲现实中恶意软件分析师的工作流程:
- 首先询问VT及其他组织,以确定是否见过这个特定样本,然而并没有
- 在自定义沙箱中执行样本以了解动态行为,然而没有显示恶意行为或拒绝执行
- 尝试脱壳和静态逆向工程,以了解其潜在行为
- 在IDA或BinaryNinja中打开脱壳的样本后,被数千个函数淹没,尝试运行各种静态签名检测工具识别特定恶意组件,无济于事
- 逐个查看函数,通过API调用和字符串过滤以尝试了解行为
xxx通过控制流图CFG和API调用的组合来识别这些具有相同行为的函数
样本通过该工具脱壳:
https://github.com/unipacker/unipacker
两个步骤:
- ROI检测,检测是通过AE执行的
- ROI注释,注释是通过聚类并标记执行的
首先作者定义的恶意行为的含义,We generate our ground-truth based on identifying core components of our malware’s source code.使用恶意软件核心组件的源代码生成ground-truth,例如C&C,拒绝服务,垃圾邮件,键盘记录,远程服务等。这些都可以通过MITRE ATT&CK框架轻松描述,旨在标准化术语和行为描述。
但是存在一种情况,通常能观察到在野恶意软件存在低级函数无法归因为高级描述,例如恶意软件可能会出于很多种不同的原因修改注册表项,但确定为什么修改会变得很困难,只能进行粗略标记。
An ensemble of autoencoders for online network intrusion detection. 2018 NDSS
A unified approach to interpreting model predictions. 2017
为了在二进制样本中定位恶意行为,特征必须一对一的映射回原样本,因此作者将每个二进制文件表示为一个m*c的矩阵,该矩阵使用c个特征来捕获前m个基本块以总结活动。c特征使用ACFG属性控制流图。选择ACFG特征是假设二进制在多个平台和编译器中保持一致
将m设置为20k个基本块,是因为95&的数据集样本具有20k或者更少的基本块,将c设置为18个特征:
- 结构特征2个,每个基本块的后代数量和Betweennesss score,可以描述不同功能的控制流结构,比如网络通信:连接 发送 接受 或文件加密: 查找文件 打开 读取 加密 写入 关闭。
- 算术指令3个,每个基本块中基本数学,逻辑运算,位移指令的数量,这些特征可表示如何为更高级别的行为执行数学运算,函数与数字交互,例如加密函数可能包含大量异或指令,混淆函数可能包含逻辑和位移操作的组合
- 转移指令3个,每个基本块内堆栈操作,寄存器操作和端口操作的数量,这些特征可表示如何为更高级别的行为执行传输操作,如何与函数内其余数据交互,可表示更复杂的逻辑和数据操作,例如去混淆/解密可能设计更多move-related指令,C&C逻辑设计更多堆栈相关指令
- API类别10个,文件系统、注册表、网络、DLL、对象、进程、服务、同步、系统信息、时间。调用不同类型API可执行不同类型功能。
自动编码器使用U-Net模型,U-Net的优点是其在编码器和解码器之间有跳过连接,样本可以使用它跳过某些特征的压缩以在x’中保持更高的保真度。
Convolutional networks for biomedical image segmentation
AE的目的是最小化重建损失,损失是输入和输出之间的公共L2损失。一旦经过训练,任何超过LMSE的ROI都会被突出显示,后续进行聚类。
使用PCA降维18到5,然后使用HDBSCAN算法聚类,HDBSCAN可以识别非凸集群与kmeans不同,并且可以自动选择集群密度的最佳超参数,与DBSCAN不同
https://github.com/scikit-learn-contrib/hdbscan
evolution
白样本收集地址:
https://download.cnet.com/windows/
UniPacker脱壳后又进一步过滤了没有没有有效起始地址且导入表大小为0的Pe的文件,使用sha256进行重复数据删除,仅接受小于3个引擎报毒的正常样本。
BinaryNinja进行反汇编提取特征,并根据基本块地址对每个特征向量排序。
对比工具:
- SHAP:A unified approach to interpreting model predictions
- CAPA:https://github.com/fireeye/capa
- FunctionSimSearch:https://github.com/googleprojectzero/functionsimsearch
对比结果:横线为80%的TPR
生成了22469个簇,最大的簇包含6321个函数,最小的簇包含5个。又59340个噪声点,
描述聚类质量存在问题,相同功能的却被聚在不同簇中,分析了3个case,主要是因为小地方存在差异,聚类算法过于敏感。
False positives exist in all security solutions.误报会出现在所有安全产品中。
作者又讨论了三个假阴性的案例,在恶意软件中很常用的CaptureVideo函数对受害者计算机进行增量截图,这些调用被混淆了;getcdkeys函数从受害者主机收集视频游戏安装密钥并将其发送到攻击者的C&C服务器,良性样本中也出现这种情况;DDOSAttack函数,可能是被遗漏,使用guilt by association启发式方法。
使用LLVM进行混淆,继续测试性能。
Obfuscator-LLVM – Software Protection for the Masses.
suggestion
这篇文章整体读下来,工作量很大,内容很详实。
标签:malware,函数,AI,恶意软件,样本,恶意,基本块,https 来源: https://blog.csdn.net/AcSuccess/article/details/118890121