# 攻击路径关键逻辑步骤划分 **Repository Path**: guijiaping/attack-stages-division ## Basic Information - **Project Name**: 攻击路径关键逻辑步骤划分 - **Description**: 攻击路径关键逻辑步骤划分代码开发仓库 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-03-26 - **Last Updated**: 2024-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Readme ## I. Introduction This repository contains the implementation of the “Attack stage division” approach. ### 1.1 Embedding(.emb/deepwalk.py) ### 1.2 日志合并(./split/sort.ipynb的第一部分) 为了避免多个同名进程对划分结果产生较大影响,减少重排的时间消耗,对攻击中的相似节点进行合并。 - 攻击中出现很多相同进程名,但进程号不同的进程,他们有相似行为,若全部保留则增加攻击分析工作量且对进程划分产生一定的影响。 - 攻击中也存在许多单个进程有相同通信行为的套接字,也将其进行合并 #### 1.2.1 合并父子进程 对于fork或者clone产生的同名(或者相同cmdline)子进程,若满足以下条件之一将子进程与父进程合并。 1. 父进程与子进程是一对一关系,父进程只有一个子进程 2. 父进程有多个子进程,但是至多只有一个进程不是叶子节点 #### 1.2.2 合并相似进程与套接字 对于同名(或者相同cmdline)进程,如果 1. 其因果父节点相同 2. 子节点的类型相同(都是套接字或者文件),且和子节点的交互事件种类一致, 我们将该部分进程合并为同一个进程。 另外,对于与相同进程通信的套接字如果两个套接字的发送ip地址与接收ip地址都相同,且与进程之间交互的类型相同,将两个套接字合并。 ### 1.3 日志重排(./split/sort.ipynb的第二部分) 为了处理攻击中进程并行的情况,使用DFS方法在聚类时一定程度上引入空间特征。攻击日志以进程为中心,所以在重排日志时,首先对进程进行排序。 1. 首先删去与DFS无关的文件与套接字 2. 从根节点开始每次选择满足时间条件的时间最小的出边,作为下一跳 3. 在进行DFS时,对于类似 etc/\* 如果攻击未对该文件进行修改,从该类系统文件出发的边的优先级降低,若后续出现存在其他边与该边到达相同目的实体,优先考虑其他边作为DFS的路径。 相同实体日志重排:对于同一(套接字,进程)或者(文件,进程)的事件,在重排时,事件中最早事件的时间代指所有事件的时间。 ### 1.4 聚类划分(./split/split.py) ### 1.5 评估(./results/ACC.ipynb、./results/BLEU.ipynb) 评价指标:BLEU、ACC ## II. Running 文件目前分为三个部分 + emb/文件夹 node2vec生成日志嵌入方法 + split/文件夹 日志重排以及聚类方法 + result/文件夹 结果评估方法 运行前,先配置环境:`pip install requirements.txt`。整个运行流程见./Makefile。 ### 2.1 ./emb - ./emb/ori_log:存放Darpa原始数据,(.json) 运行:python deepwalk.py 会自动处理darpa数据中的cadets数据集格式进行预处理。 参数:修改 p,q参数即为node2vec方法 运行成功后,会在./emb/emb/下生成嵌入表示emb.json ### 2.2 ./split 目录: + data 数据 + attack_map.json 包含三个攻击图的文件 + emb__.json deepwalk嵌入(即第一步生成的文件) + map 储存划分后的图 + tmp_data 存储中间数据 + sort.ipynb 日志重排 + split.py 聚类划分(时间序列聚类) 运行: 1. sort.ipynb 顺序执行,其中修改att_name为不同case对不同攻击进行排序,支持['case1','case3','case4'] 2. python split.py 修改 att_name ,attpath可以对不同攻击进行划分 attpath为sort.ipynb输出的排序日志 ### 2.3 ./results 结果评估 + ACC 聚类准确率 + BLEU BLEU评价指标(自创)