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
- 效果:更强大的函数语义和更高的搜索精度
- 缺点:假阳太多
两个重要因素:
- 高搜索精度:不应该受到编译配置影响
- 低time overhead
本文: VulSeeker-Pro
基于语义学习的漏洞搜索工具,后端集成了函数语义仿真
Related Work
基于学习的漏洞搜索
- Genius
- Gemini
- VulDeePecker: code gadgets + biLSTM,不再人工定义features
基于语义计算的漏洞搜索
执行二进制漏洞搜索实际上是在处理语义相似性检测问题。不过,该方法慢
- Bingo: selective inlining + length variant partial trace -> 比对函数语义;function models ->计算函数语义进而检测漏洞
- Binsim: 计算aligned system calls-> 更好解决code obfuscation(代码混淆)的问题; dynamic slicing + 最弱的precondition calculation->检测两条执行轨迹的fine-grained semantic
- CACompare: 提取semantic signature 同时 模拟执行
本文不同
两阶段
3. Design
主要模块:
- semantic learning predictor
- emulation engine
目标:检测目标二进制程序是否包含类似已知漏洞的函数
3.1 Semantic Learning Predictor
Key: embedding vector of function semantics
- Feature Extraction:
- 用IDA Pro反编译,得到汇编代码
- 用IDA Python提取汇编代码的CFG
- 提取Genius中提到的6个块间特征和2个块内特征
- Semantic Learning
- Tensorflow,为了公平用Gemini模型
- DNN, T次迭代(e.g T=5),考虑的是在当前basic block之前可能被执行的代码,aggregation用到的是点特征加和
- Similarity Calculation
- cos距离
3.2 Emulation Engine
- 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
- Function Emulation
- 生成随机数列,为两个function(target binary和已知漏洞的)分配相同随机数列
- 使用pyVEX将汇编转为VEX-IR,更易操作
- 记录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
- 如果调用其他函数,会试图也模拟这个函数并记下来
- 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转到其他架构不难
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)