update readme.md
本项目针对开源操作系统的漏洞进行聚类分析与自动化检测,构建了一个高质量、多维度的漏洞基准数据集,涵盖syzbot漏洞报告与git.kernel修复提交的完整信息。结合错误类型与模块标签开展聚类质量分析与新漏洞归类评估,最终基于语法节点相似性分析与抽象语法树对比,识别出高风险潜在漏洞函数,构建风险函数数据集。在此基础上,提出完整的自动化漏洞检测流程,针对高风险目标文件以及目标函数,涵盖代码插桩、路径分析、输入生成及AFLGo模糊测试,实现对开源操作系统潜在漏洞的高效检测与验证。
分模块进行编译,首先编译typm 需要工具包括:clang,cmake
代码位于./typm中,基于类型的依赖分析部分实现代码,基于论文TyPM: Type-based dependence analysis for program modularization中开源项目typm 项目依赖于LLVM15.0.0版本的commite758b77161a7 运行build-llvm.sh构建指定版本LLVM。 直接在typm目录下编译
$ ./build-llvm.sh # 首先更新 Makefile,确保指向已构建 LLVM 的路径正确无误 $ make # 现在,你可以在 `build/lib/` 中找到可执行文件`kanalyzer`。 $ ./build/lib/kalalyzer @bc.list
代码位于./cluster中
1_get_baseline_data:利用python爬虫在漏洞数据库网站上获取漏洞基准数据集
#获得漏洞条目信息 python get.py #获得每条漏洞的随机5个报告 python get_report.py #获得每条漏洞的随机5个报告(如果上一个脚本有些漏洞信息因网络为未获取,可以用这个修补) python get_report2.py #获得每条漏洞的修复diff python get_diff_p1.py #获得每条漏洞的修复diff(如果上一个脚本有些漏洞信息因网络为未获取,可以用这个修补) python get_diff_p12.py #整理数据 python get_diff_p2.py python get_patch.py python get_patch2.py python get_diff_p3.py #最终获得记录文件report4_data.json
2_get_features_cluster:漏洞聚类
#使用不同的序列特征提取算法,在漏洞数据集的call stack一项上提取序列特征,保存相似度矩阵到numpy文件里 python matrix_*.py #通过cluster_*.ipynb,使用不同的聚类算法,根据漏洞数据集的call stack、修复位置、漏洞类型三种特征进行聚类划分
3_get_val_data:利用python爬虫在漏洞数据库网站上获取未修复的漏洞数据集,作为漏洞划分的验证集对比依据,方法与1_get_baseline_data里面类似
4_get_val_eval:验证聚类质量
#使用不同的序列特征提取算法,在漏洞数据集的call stack一项上提取序列特征,保存相似度矩阵到numpy文件里 python matrix_*.py #通过cluster_*.ipynb,聚类验证集数据,并与漏洞基准数据集划分划分做对比,验证质量
代码位于./dectection中
1_prepare:事前准备
#编译aflgo工具命令 ./build_aflgo.sh #编译linux内核的命令,需要用bear获取编译参数 ./build_linux_wllvm_bear.sh #提取linux内核的ast并保存在文件中(仅包含指定模块) python get_ast_required.py #提取linux内核的ast并保存在文件中(包含所有模块) python get_ast_global.py
2_match:
#根据漏洞划分以及模块划分,判断潜在漏洞高风险语法节点 #zl.ipynb #module2aflgo.ipynb #最终获得记录文件2dict.txt
3_get_main:
#修改你自己的api密钥、借用llm帮助,为每个函数生成模糊测试入口文件 python llm.py #最终获得若干个main_*.c入口文件和in_*.c输入文件
4_start_fuzz:
#根据bear得到的编译命令以及编译出来的linux内核,自动生成模糊测试一键式的bash文件 python gen_sh.py #gen_stubs.py会自动调用 #最终获得脚本build.sh #运行得到的bash文件即可进行fuzz ./build.sh
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
面向开源操作系统的定向模糊测试框架开发与漏洞挖掘
本项目针对开源操作系统的漏洞进行聚类分析与自动化检测,构建了一个高质量、多维度的漏洞基准数据集,涵盖syzbot漏洞报告与git.kernel修复提交的完整信息。结合错误类型与模块标签开展聚类质量分析与新漏洞归类评估,最终基于语法节点相似性分析与抽象语法树对比,识别出高风险潜在漏洞函数,构建风险函数数据集。在此基础上,提出完整的自动化漏洞检测流程,针对高风险目标文件以及目标函数,涵盖代码插桩、路径分析、输入生成及AFLGo模糊测试,实现对开源操作系统潜在漏洞的高效检测与验证。
How to use
分模块进行编译,首先编译typm 需要工具包括:clang,cmake
基于类型和接口特征的内核组件模块化划分方法
代码位于./typm中,基于类型的依赖分析部分实现代码,基于论文TyPM: Type-based dependence analysis for program modularization中开源项目typm 项目依赖于LLVM15.0.0版本的commite758b77161a7 运行build-llvm.sh构建指定版本LLVM。 直接在typm目录下编译
基于在线漏洞数据库的漏洞数据划分方法
代码位于./cluster中
1_get_baseline_data:利用python爬虫在漏洞数据库网站上获取漏洞基准数据集
2_get_features_cluster:漏洞聚类
3_get_val_data:利用python爬虫在漏洞数据库网站上获取未修复的漏洞数据集,作为漏洞划分的验证集对比依据,方法与1_get_baseline_data里面类似
4_get_val_eval:验证聚类质量
基于漏洞划分和模块划分的aflgo模糊测试方法
代码位于./dectection中
1_prepare:事前准备
2_match:
3_get_main:
4_start_fuzz: