rzpawig/Analysis-and-Enhancement-of-Graph-Based-Techniques-for-Malware-Detection

GitHub: rzpawig/Analysis-and-Enhancement-of-Graph-Based-Techniques-for-Malware-Detection

一个学术研究项目,通过控制流图分析和多种图神经网络模型实现恶意软件检测,并提供检测结果的可解释性分析。

Stars: 2 | Forks: 0

# 复现用于恶意软件检测的基于图技术的分析与增强 Pipeline 指南 ## 描述 这是一个学术研究项目,通过控制流图分析、GNN 模型/基于图的模型增强,以及基于 [https://github.com/GriffinUNB/On-the-Consistency-of-GNN-Explanations-for-Malware-Detection/blob/main/datasets/BODMAS/map.csv](https://github.com/GriffinUNB/On-the-Consistency-of-GNN-Explanations-for-Malware-Detection) 代码的数据与应用安全可解释性方法,探索基于图的恶意软件检测。为了清晰和可用性,原作者的许多说明被保留了下来。他们的描述将使用引号标出。为了补充和增强原始代码库,我们实现并测试了其他基于图的模型,例如 GIN、GraphTransformer、EdgeCNN 和 DGCNN。 ## 引用 原始仓库取自 https://www.sciencedirect.com/science/article/abs/pii/S0020025525007364 H. Shokouhinejad, G. Higgins, R. Razavi-Far, H. Mohammadian, A. Ghorbani. "On the Consistency of GNN Explanations for Malware Detection," Information Sciences, Dec 2025. ## TLDR ``` $ git clone https://github.com/rzpawig/Analysis-and-Enhancement-of-Graph-Based-Techniques-for-Malware-Detection ~/Project $ cd ~/Project ./INSTALL cd src ./run normalizing ./run sampling Download CFGs (See Pre-Execution) ./run generating post_gen_conf.json (See README in src for more information on config file) ./run embedding post_gen_conf.json # wait until tmux session is done tmux ls # 'no server running on /tmp/tmux-1003/default' means your good to go ./run training post_gen_conf.json ./run explaining post_gen_conf.json ``` "我们的数据集可以在此处下载:[用于恶意软件分析的 CIC 动态生成图 (CIC-DGG-2025)](https://www.unb.ca/cic/datasets/cic-dgg-2025.html),请参阅 [测试](#testing) 部分以获取更多信息。" ## 环境 ``` Python Virtual Environment Python : 3.10.20 OS : Ubuntu 22.04.3 LTS ``` ## 作者介绍 "在本文档中,我们介绍了动态 pipeline 的技术实现及其各个阶段(如下所示),以将恶意和良性的 PE x86 二进制文件处理和转换为图。我们还介绍了相关的基于图的机器学习检测和可解释性的实现。 在这里,我们以高/中层次的抽象来描述此过程。有关较低层次的技术描述,请查阅文档字符串(用于 python 函数)和内联注释。如果某些目录特别复杂或可能需要抽象的标准化,它们会有自己的 `README.md` 文件来描述目录的内容。" ## 安装 创建一个名为 'Project' 的文件夹 `cd Project` ``` $ git clone https://github.com/rzpawig/Analysis-and-Enhancement-of-Graph-Based-Techniques-for-Malware-Detection ~/Project ``` 请在 3.10.20 版本中创建一个 Python 虚拟环境,并在 Linux 机器上运行 `Project/INSTALL` 脚本以安装必要的依赖项。 ## 预执行 要运行 pipeline,您必须从 [用于恶意软件分析的 CIC 动态生成图 (CIC-DGG-2025)](https://www.unb.ca/cic/datasets/cic-dgg-2025.html) 下载 cfgs,并将它们放置在 `~/Project/data/dynamic/cfgs` 中。您可以通过运行 download_cfgs.py 来下载 cfgs。 这**必须**在生成阶段之前完成。 1. 在浏览器中通过 [用于恶意软件分析的 CIC 动态生成图 (CIC-DGG-2025)](https://www.unb.ca/cic/datasets/cic-dgg-2025.html) 提交表单 2. 导出该站点的 cookies 使用像 Get cookies.txt LOCALLY 这样的浏览器扩展或其他 cookies.txt 导出器。 为以下网址导出 cookies:cicresearch.ca 将文件保存为:cookies.txt 将其移动到 WSL 中: 创建以下文件夹 mkdir -p ~/Project/data/dynamic ~/Project/data/dynamic/cookies.txt 保存 cookies.txt 后,运行 download_cfgs.py 以获取必要的 cfgs。 注意:根据您的 PC 配置和网络情况,这将需要 1-3 小时。 您可以选择只下载特定的 cfgs。 ## 执行 要运行 pipeline,请使用带有适当标志的 `Project/src/run` 脚本,或者不使用任何选项运行以查看帮助选项。此脚本将单独运行 pipeline 的每个阶段。 执行顺序为: 1. ./run normalizing 2. ./run sampling 3. 下载 CFGs(参见预执行) 4. ./run generating post_gen_conf.json 5. ./run training post_gen_conf.json(有关更多信息,请参见 training 文件夹) 6. ./run explaining post_gen_conf.json "重要提示,对于生成和嵌入模块,请通过运行 `tmux ls` 并观察类似于 `no server running on /tmp/tmux-1005/default` 的会话输出,来确保 tmux 会话已完成后再进入下一阶段;或者这通常也是一个好习惯,使用 `tmux attach` 查看会话的输出。按下 `Ctrl + b`,随后迅速按下 `n` 以在会话中的窗口之间切换。要脱离 tmux,请按下 `Ctrl + b`,随后迅速按下 `d`。或者,您可以运行 `top` 来查看该进程是否在后台运行且具有高使用率,低使用率可能表示存在问题。 如果在会话的任何窗口中观察到错误,请再次使用 `Ctrl + b` 随后迅速按下 `d` 脱离会话,然后运行 `tmux kill-server`。运行 `tmux ls` 后,您将看到 `no server running on /tmp/tmux-1005/default`,此时可以开始诊断问题。 如果您选择使用 tmux,有许多教程和参考资料可供查阅,这里提供的是[我的](https://youtu.be/eZeOmVoKIgU?si=IzVksUMvVt_ahTm0&t=1751)。我们使用此工具的原因是它在此目的上非常用户友好,并且如果在远程机器上运行,它可以在意外的客户端断开连接后幸存下来。" ## 数据集架构 ### 标准化 "虽然不显式属于 pipeline 的一部分,但预处理或数据集标准化阶段极其重要,并在 `Project/datasets/README.md` 中进行了详细讨论。但是,主要目标只是让所有包含恶意和良性二进制文件及标签的数据集在被采样之前实现标准化。这是在数据集附近完成的,而不是在 pipeline 代码中,以便标准化给定数据集的复杂性始终与数据本身保持一致。此外,虽然我们不包含原始数据集,但我们提供了标准化它们所需的代码。请查阅数据集的 README 以获取更多信息。" ### 测试 在此仓库中,原作者仅包含来自 `Project/datasets/Test` 中 DikeDataset 的大约 40 个良性二进制样本,以证明我们的 pipeline 可以端到端地工作(即,包括 cfg 生成),并且因为他们不希望任何人无意中处理可执行的恶意软件,无论是否进行了虚拟化/容器化。因此,要端到端地全面复现这项工作,将需要来自 [DikeDataset](https://github.com/iosifache/DikeDataset)、[PE Malware Machine Learning Dataset](https://practicalsecurityanalytics.com/pe-malware-machine-learning-dataset) 和 [BODMAS](https://whyisyoung.github.io/BODMAS/) 数据集的原始二进制可执行样本。 要在生成后端到端地复现 pipeline,您必须从 [用于恶意软件分析的 CIC 动态生成图 (CIC-DGG-2025)](https://www.unb.ca/cic/datasets/cic-dgg-2025.html) 下载 cfgs,并将它们放置在 `~/Project/data/dynamic/cfgs` 中。 "此外,我们在项目根目录的文件中包含了一个 `weights` 文件,其中包含我们的模型和解释器的权重,以及有关如何加载它们的示例。" ## Pipeline 架构 ### 采样 "采样模块是 pipeline 的第一阶段。它负责将包含在各种数据集中的数据进行子集化,并提供清晰的样本,形成更小的、更易于管理且符合我们采样要求的数据集。在我们的工作中,我们将这些要求定义为二进制文件的架构,我们使用正则表达式从作为数据集标准化阶段一部分运行的标准 Linux 核心实用程序 `file` 命令的输出中进行匹配。 此外,采样模块将带有采样数据所需信息的配置 JSON 文件作为输入。该模块输出一个映射文件(到配置文件中指定的目标位置),该文件包含源二进制文件的路径、标签以及进一步处理步骤的目标位置。示例在 `Project/src/conf.json` 中给出。" ### 生成 "图生成模块负责生成给定二进制文件的控制流图 (CFG)。作为输入,该模块接收一个配置文件(与采样模块相同的文件 `conf.json`),其中包括最初从采样模块输出的映射文件的位置。映射文件包含描述应从何处检索源二进制文件以及应将目标对象发送到何处的信息。 重要提示,用于生成 CFG 的库会输出一个 SINGLE 对象,该对象包含二进制文件的 CFG,并将其与其他信息一起输出到单个文件中。对象内的两个图均存储为 Networkx 图。该模块还包含一个 `Project/src/1_generating/run` 脚本,帮助管理模块的执行。该模块面临的一个主要挑战是,如果进程超出系统内存限制,`Project/src/1_generating/cfg.py` 脚本经常会被操作系统杀死。当时间有限且需要一次生成多个样本时,这尤其棘手。这是整个 pipeline 中常见的挑战。遗憾的是,我们发现 python joblib 模块并不能解决这个问题。这是因为如果一个派生的子进程被杀死,其余的也会被杀死。为了解决这个问题,我们使用了终端多路复用器 (tmux) 解决方案,并将每个隔离的进程包装在一个无限循环中。该循环仅在程序成功终止时才会跳出。所有进程都读取并写入同一个文本文件,以确定接下来要处理的二进制文件,该文件可在定义生成输出位置的 `cfg_visited.txt` 中找到。任何错误也会记录在 err.txt 中,以了解哪些样本失败了。 我们鼓励在这种情况下使用 tmux,但它也可以选择替换为 Linux 中基本的内置 `&` 和作业控制。" **建议**:原作者为他们的 pipeline 使用了完整的数据集,但在我们的学术项目中,我们只使用了 300 个良性和 300 个恶意软件样本。您将需要创建一个脚本来选择特定样本及其关联的 cfgs。因此,必须修改 ~Project/data/dynamic 中的 map.csv 文件,使其仅包含选定的样本。 ### 嵌入 "嵌入模块遵循与图生成模块类似的高级模式。作为输入,它接收一个配置文件和一个映射文件,从中读取要应用的嵌入、读取输入图的位置以及写入输出图的位置。它还使用与图生成模块类似的脚本运行多个嵌入过程,该脚本使用 tmux 来应对前面提到的挑战。与图生成模块类似,嵌入模块将已访问的嵌入输出到文本文件 `ebd_visited.txt` 以跟踪进度。 嵌入模块与其他模块的主要区别在于使用了从配置文件动态加载的子模块来执行嵌入。 这些子模块连同其他必要数据(如模型权重)存储在 `Project/src/3_embedding/embeddings` 中,旨在成为一个合适的抽象层,只需接收一个包含 CFG Networkx 图的 angr 对象,并输出一个带有适当嵌入的 PyTorch Geometric (PyG) Data 图。 重要提示,嵌入模块输出的 Data 图与用于生成它的嵌入方法使用的 Networkx 图是同构的。唯一改变的是图的格式和在子模块中处理期间被更改为嵌入的节点属性。此外,在模块中还附加了诸如真实标签和节点位置等其他信息到对象上。" ### 训练 "在训练模块中,我们根据先前模块生成的指定图来训练模型。训练模块被设计得尽可能模块化,并遵循动态导入模型类及所有其他输入作为实验一部分的相同模式。训练模块从配置文件接收输入,从中读取应运行的实验。" 使用的默认训练模型是 ~src/4_training/models 文件夹中的 GCN.py。作者提供的其他模型包括 GATConv 和 GraphSAGE。作为我们对项目增强的一部分,我们实现了 GIN、GraphTransformer、EdgeCNN 和 DGCNN。它们可以在我们仓库的 models 文件夹中找到。 要更改用于训练的模型,您必须修改 post_gen_conf.json。~src/4_training 将包含一个 README.md,以获取有关如何正确配置 pipeline 训练部分的更多信息。 训练完成后,结果将被输出到两个 .csv 文件中,并将具有最佳权重的训练模型输出到 ~Project/results/AE/baseline/0 文件夹中。要重新训练,您必须重命名或删除 '0' 文件夹,才能再次运行训练模块。 "重要提示,训练模块依赖于在 `Project/src/4_training/dataset.py` 中指定的 PyTorch Dataset 对象的创建,该对象描述了如何将数据加载到 PyTorch Dataloader 中,以提供给模型进行训练和测试。在这里,一个主要的挑战是每次访问样本时,都必须首先从磁盘反序列化该样本。这是训练过程中的主要瓶颈,也是未来发展的一个重要领域。用于训练的模型也是使用配置文件从 `Project/src/4_training/models` 中指定的模型动态加载的。" ### 解释 "解释模块负责使用来自 PyG 的多种解释器(例如 GNNExplainer、PGExplainer、Captum (IntegratedGradients、Saliency 和 GuidedBackprop))解释给定模型对单个样本的预测。当然,这可以扩展到多个样本,正如我们在实现中所做的那样,但每个单独样本的实际解释是作为独立的过程发生的。不过,某些解释器,即 PG explainer,需要在给出解释之前进行训练。此外,与之前的模块不同,解释模块不依赖于配置或映射文件,而是仅接收适当的源、目标和包含模型权重与架构的实验目录。 一旦定义了模型并加载了权重,该模块就可以为指定源目录中的每个样本生成解释。每个输入样本都是嵌入模块生成的 PyG Data 对象。解释模块的每个输出都是一个 Networkx 图,其中每个节点都包含回其相应 CFG 图的引用索引。 此外,解释模块还包含一个一致性模块,可用于通过对样本进行扰动、测量它们的相似度,然后计算它们与原始模型的一致性来计算单个解释器的一致性我们包含了两种方法来考虑重要和不重要的子图,即贪婪的边/节点组合和 top-k 组合。 另外,我们还包含了计算 RankFusionExplainer 的选项。我们对 IntegratedGradients 和 GuidedBackprop 解释器的 RankFusionExplainer 输入进行了硬编码。这是因为输入需要在聚合之前确定解释器先前的性能。" **我们的重点**:为了简单起见,我们决定仅使用 GNNExplainer,因为解释过程需要的计算能力远远超过了我们的拥有量。运行 ./run explaining 后,解释器创建的图位于 ~Project\data\dynamic\exp 中。您可以在几分钟后终止该过程以获取一些图。我们创建了一个 python 脚本来绘制这些图,并分析模型是如何做出将文件分类为恶意软件或良性的决策的。它位于 src 文件夹中,名为 'draw_exp.py'。 运行 'draw_exp.py' ``` python draw_exp.py \ ~/Project/data/dynamic/exp/AE/9cd501f3-4d81-4be6-8c19-60400dcf0b9e.exp \ ~/Project/data/dynamic/exp/AE/9cd501f3-4d81-4be6-8c19-60400dcf0b9e.png ``` 您必须修改 .exp 文件,使其与您试图绘制的相应 .exp 文件相匹配。您可以将 .png 命名为任何名称,但为了清晰起见,我们使用了与原始 .exp 文件相同的名称。
标签:AMSI绕过, Apex, DGCNN, EdgeCNN, GIN, GNN可解释性, GraphTransformer, Python, 云安全监控, 人工智能安全, 代码分析, 凭据扫描, 凭证管理, 可解释机器学习, 合规性, 图分类, 图嵌入, 图机器学习, 图模型增强, 图神经网络, 图神经网络一致性, 威胁检测, 子域名暴力破解, 学术研究, 恶意代码分析, 控制流图, 数据与应用安全, 无后门, 机器学习, 深度学习, 特权检测, 网络安全, 自动化检测, 自定义DNS解析器, 逆向工具, 配置文件, 隐私保护, 静态分析