版本识别论文阅读
V1SCAN: Discovering 1-day Vulnerabilities in Reused C/C++ Open-source Software Components Using Code Classification Techniques
检测复用c/c++组件带来的1day。目前有基于版本和基于代码的方法,基于代码的方法在代码修改后复用的场景下,检测结果可能会带来大量误报和漏报。
本文结合了这两类方法
BCSD论文阅读
基本块
Improving Cross-Platform Binary Analysis using Representation Learning via Graph Alignment
Patch Based Vulnerability Matching for Binary Programs
工具名称:BinXray
实验
比较的工具:
Semantics-Based Obfuscation-Resilient Binary Code Similarity Comparison with Applications to Software and Algorithm Plagiarism Detection
SIGMADIFF: Semantics-Aware Deep Graph Matching for Pseudocode Diffing
工具名称:Sigmadiff
比较的工具:diaphora(目前已知仅存的伪代码diffing工具)、deepbindiff(仅存的二进制基本块级别diffing)
思想:用IR表示的过程间程序依赖图(IPDG)、DGMC匹配IPDG的结点
IR表示的优点:简洁、更丰富的语义信息、token level的细粒度、跨架构
挑战:在strip的文件里需要推断高级的特征,并可能引入噪声。
流敏感、call-site敏感的lightweight symbolic analysis提取IR语义信息:
motivating:在伪代码里找到语义等价的token级变化,忽略句法的改变。伪码层面的改变带来的挑战(感觉2、3主要还是编译的问题)1.变量重命名(但是在cots文件里应该没有这个问题?);2.表达式合并或拆分;3.控制流变化。作者在此处进行了实验,表明伪码的diffing不适合直接使用源码diffing技术
Step1:预处理。构造IPDG,结点为IR语句,边(两种)表示控制流和数据流;语义提取,过程内符号执行算法,得到结点的特征,具体算法建议看论文
Step2: 伪代码diffing
Ghidra-BSim测试
介绍
使用过程
GUI
创建一个non-shared项目,打开BSim功能(v11.0 默认关闭)
执行CreateH2BSimDatabaseScript.java脚本,修改name和dir字段,其他不修改。
分析一个二进制文件
执行AddProgramToH2BSimDatabaseScript.java脚本,使用name.mv.db数据库。脚本执行后会把这个二进制文件的函数签名加入数据库中
在BSim的菜单栏里选择Manage Servers指定database
把当前code view窗口选定的函数和database里的进行匹配,可以设置相似阈值和置信度阈值,也可以指定条件(二进制文件名、架构、调用了xx外部函数)
得到结果
比对的结果默认包含整个database里的函数,因此也包含了该二进制文件里的函数
可以对匹配到的函数名字进行替换、比对伪代码和汇编代码
在code browser里选择bsim->code overview,选择多行进行search可以在一个result窗口查看多个函数的匹配结果
CLI
TO BE CONTINUED …
提供的脚本
可以从这些脚本(部分)去看BSim的相似度、置信度的计算规则
JAVA
- AddProgramToH2BSimDatabaseScript.java:生成当前二进制文件所有函数的BSim信息并保存到数据库
- CompareBSimSignaturesScript.java:对两个待测的函数各跑一遍(两个函数可以在不同文件),输出BSim对这两个函数的比较结果
- CompareBSimSignaturesSpecifyWeightsScript.java:基本同上
- CompareExecutablesScript.java:由两个二进制文件所有的函数相似得分,得到两个二进制的得分(实际上是把二进制文件放到数据库里进行比对,需要再看一下如何选取函数进行比较,因为GUI比较里好像无法得到1对1的结果)
- CreateH2BSimDatabaseScript.java:创建数据库
- DumpBSimSignaturesScript.java:导出选定函数的函数特征哈希,每条汇编有一个哈希
- ExampleOverviewQueryScript.java:GUI的Overview功能
- ExampleQueryClientScript.java:查询特定函数的“一些信息”(</responseinfo>之前都相同,后续打印了callee函数)
- GenerateSignatures.java:生成签名
- LocalBSimQueryScript.java:在database里选一个二进制和当前的二进制进行函数比对
- QueryFunction.java:GUI里的search功能
- QueryWithFiltersScript.java:基本同上
- UpdateBSimMetadata.java:更新数据库
Python
- DumpBSimDebugSignaturesScript.py:导出选定函数的函数和调试信息
- DumpBSimSignaturesScript.py:导出选定函数的函数签名哈希(与java脚本导出的哈希值不同)
- ExampleOverviewQueryScript.py:GUI的Overview功能
- GenerateSignatures.py:生成签名
- QueryFunction.py:GUI里的search功能
匹配的例子
由于BSim会得到多个匹配结果,并且相似度值可能都相同,函数A的结果也可能和函数B匹配到的存在重复,因此比较fn,fp等对其他工具较为不公平。
单个函数的匹配
青绿色的是函数的差异
当用光标进行选择时,粉色是bsim关注的并且产生匹配的token;淡紫色是bsim关注但是没有匹配到的token;橘色表示token不会用作匹配
以下两对的相似值分别为1和0.777
二进制文件相似度
排除了较低hitcont和较小的函数
library score:当较小的二进制在另一个二进制里全都能找到匹配则为1
用提供的脚本跑的跨架构的例子,得到的文件相似度很低
recall
由于一个待匹配函数会得到多个匹配的结果,因此把这些结果都视为匹配
- 7zip-rar
(GT里119个函数匹配到126个)
- apache2-bin
(GT里1198个函数匹配到829个)
CWE_Checker笔记
看 https://github.com/fkie-cad/cwe_checker 的一些记录,目标是fix一个bug
南大《软件分析》笔记
2022总结以及2023的flag
我怎么也没想到这个文档居然在12.31凌晨才创建