目录
目录README.md

面向开源操作系统的定向模糊测试框架开发与漏洞挖掘

本项目针对开源操作系统的漏洞进行聚类分析与自动化检测,构建了一个高质量、多维度的漏洞基准数据集,涵盖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目录下编译

    $ ./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,聚类验证集数据,并与漏洞基准数据集划分划分做对比,验证质量

基于漏洞划分和模块划分的aflgo模糊测试方法

代码位于./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
关于
89.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号