zoukankan      html  css  js  c++  java
  • Proj THUDBFuzz Paper Reading: VulSeeker-Pro: Enhanced Semantic Learning Based Binary Vulnerablity Seeker with Emulation

    Abstract

    Learning based clone detection
    优点: 某种程度上解决了传统dynamic search approach和static search approach存在的高time overhead的问题
    缺点:精度受限,在工业使用中往往需要人工检查TopM search results

    本文工作:
    提出工具VulSeeker-Pro

    • 特点:在语义学习后端集成了function semantic emulation(函数语义仿真)
    • 优点:解决了需要人工检查的问题
    • 步骤:
      1. 使用基于predictor的semantic learning来快速预测top-M candidate function,这些function是最可能使得target binary产生漏洞的
      2. 将这些topM candidates放入emulation engine,再获取topN candidate functions
      这里,semantic learning起到了快速筛选作用,而emulation则实现了dynamic trace generation。
      效果:搜索精度提升,time overhead少
      实验:
      对象:6个工业软件,15个已知CVE
      结果:精度明显更高
      具体结果:
    • 在45次搜索中,top1中有40次真漏洞,top5则是43次
    • 比Gemini的精度高出12.33倍和2.58倍
    • 只需要多花大概0.22秒

    1. Introduction

    意义:使用第三方库+代码未打补丁使得漏洞容易传播,加上二进制程序不易获得->code clone detection
    已有工作:

    • clone-based tech,fuzzing在跨平台软件上表现不好
    • 传统clone-based vulnerability search approaches可分为
      1. 静态: 通过分析控制流图(control flow graphs)来识别漏洞对应的二进制代码
      - 缺点:当编译配置不同时,尽管功能相同,cfg可能会有很大差别
      2. 动态:监控程序的runtime traces,并执行equivalence checking between two traces(这里的2traces从何而来)以克服编译配置不同的问题
      - 优点:受到编译配置影响小
      - 缺点:非常耗时,不实用
    • Semantic Learning: 基于学习的方法将低级指令特征转换为高级语义特征
      1. Genius:
      - 用spectral clustering来训练codebook,再通过测量(二分图匹配算法)指定function和codebook之间的语义相似性来detect clone
      - 效果:对于工业应用还不够高
      2. Gemini
      - 沿着function的CFG拓扑结构传递基本块特征
      - deep learning
      - 效果:更强大的函数语义和更高的搜索精度
      - 缺点:假阳太多

    两个重要因素:

    1. 高搜索精度:不应该受到编译配置影响
    2. 低time overhead

    本文: VulSeeker-Pro
    基于语义学习的漏洞搜索工具,后端集成了函数语义仿真

    基于学习的漏洞搜索

    1. Genius
    2. Gemini
    3. VulDeePecker: code gadgets + biLSTM,不再人工定义features

    基于语义计算的漏洞搜索

    执行二进制漏洞搜索实际上是在处理语义相似性检测问题。不过,该方法慢

    1. Bingo: selective inlining + length variant partial trace -> 比对函数语义;function models ->计算函数语义进而检测漏洞
    2. Binsim: 计算aligned system calls-> 更好解决code obfuscation(代码混淆)的问题; dynamic slicing + 最弱的precondition calculation->检测两条执行轨迹的fine-grained semantic
    3. CACompare: 提取semantic signature 同时 模拟执行

    本文不同

    两阶段

    3. Design


    主要模块:

    1. semantic learning predictor
    2. emulation engine
      目标:检测目标二进制程序是否包含类似已知漏洞的函数

    3.1 Semantic Learning Predictor

    Key: embedding vector of function semantics

    1. Feature Extraction:
      1. 用IDA Pro反编译,得到汇编代码
      2. 用IDA Python提取汇编代码的CFG
      3. 提取Genius中提到的6个块间特征和2个块内特征
    2. Semantic Learning
      • Tensorflow,为了公平用Gemini模型
      • DNN, T次迭代(e.g T=5),考虑的是在当前basic block之前可能被执行的代码,aggregation用到的是点特征加和
    3. Similarity Calculation
      • cos距离

    3.2 Emulation Engine

    1. Argument Recognition
      • function arguments包括register argument和stack args。
      • 主要基于汇编
      • 前3个参数一般都存在EAX, EDX和ECX,可被IDA pro的伪代码模块处理
      • 每个函数都会有个stack pointer指向stack start position
      • 当使用IDApython时,若一个stack address在这个start pos之外,那么这就是个stack argument
    2. Function Emulation
      1. 生成随机数列,为两个function(target binary和已知漏洞的)分配相同随机数列
      2. 使用pyVEX将汇编转为VEX-IR,更易操作
      3. 记录dynamic execution trace,称为semantic signature
        • 如果调用其他函数,会试图也模拟这个函数并记下来
          - solves the predictive barrier of function inlining to the semantic learning approach(为何与inline有关?一个inline,另一个可能没有)
        • 如果遇到unknown memory reference,分配默认值
        • signature包含input values, output values, comparison opcodes/operands, library function calls
    3. Reordering Calculation
      • 用Jaccard相似度系数算距离

    4. Results

    实验环境:机器环境,GPU,系统,predictor模型,hyper pars的值
    Benchmark: CVE网站选15个漏洞,6个广用程序,GCC4.8.4编译O0-O3四个优化级别,O3中的weak code为源。共计45个实验

    4.1 Accuracy

    4.2 Time Efficiency

    5. Discussion

    • 认为工程师更喜欢不需要手动识别的工具
    • TODO: 增加来自多个二进制程序的离散样本来增强泛化能力
    • 需要防止过度拟合
    • 从x86转到其他架构不难

    6. Conclusion

  • 相关阅读:
    【转载】 NumPy之:数据类型对象dtype
    在深度学习的视觉VISION领域数据预处理的魔法常数magic constant、黄金数值的复现: mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]
    关于Numpy数据类型对象(dtype)使用详解
    【转载】 大端模式和小端模式的区别是什么?
    在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式
    【转载】 解决 sudo echo x > 时的 Permission denied错误
    Javascript高级程序设计第二版前三章基本数据等笔记
    冒号课堂§3.4:事件驱动
    理解 JavaScript 闭包
    Browser clientX scrollLeft clientLeft
  • 原文地址:https://www.cnblogs.com/xuesu/p/14214130.html
Copyright © 2011-2022 走看看