0%


面向题库学习,用ChatGPT 3.5,错了就寄

事实证明想过只要背原题

阅读全文 »

V1SCAN: Discovering 1-day Vulnerabilities in Reused C/C++ Open-source Software Components Using Code Classification Techniques

检测复用c/c++组件带来的1day。目前有基于版本和基于代码的方法,基于代码的方法在代码修改后复用的场景下,检测结果可能会带来大量误报和漏报。
本文结合了这两类方法

基本块

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

介绍

使用过程

GUI

创建一个non-shared项目,打开BSim功能(v11.0 默认关闭)
1
执行CreateH2BSimDatabaseScript.java脚本,修改name和dir字段,其他不修改。
分析一个二进制文件
执行AddProgramToH2BSimDatabaseScript.java脚本,使用name.mv.db数据库。脚本执行后会把这个二进制文件的函数签名加入数据库中
在BSim的菜单栏里选择Manage Servers指定database
20231230140608
把当前code view窗口选定的函数和database里的进行匹配,可以设置相似阈值和置信度阈值,也可以指定条件(二进制文件名、架构、调用了xx外部函数)
20231230142324
得到结果
20231230181838
比对的结果默认包含整个database里的函数,因此也包含了该二进制文件里的函数
可以对匹配到的函数名字进行替换、比对伪代码和汇编代码
20231230183247

在code browser里选择bsim->code overview,选择多行进行search可以在一个result窗口查看多个函数的匹配结果
20240103190919
20240103190936

CLI

TO BE CONTINUED …

提供的脚本

可以从这些脚本(部分)去看BSim的相似度、置信度的计算规则

JAVA

  • AddProgramToH2BSimDatabaseScript.java:生成当前二进制文件所有函数的BSim信息并保存到数据库
  • CompareBSimSignaturesScript.java:对两个待测的函数各跑一遍(两个函数可以在不同文件),输出BSim对这两个函数的比较结果
  • CompareBSimSignaturesSpecifyWeightsScript.java:基本同上
  • CompareExecutablesScript.java:由两个二进制文件所有的函数相似得分,得到两个二进制的得分(实际上是把二进制文件放到数据库里进行比对,需要再看一下如何选取函数进行比较,因为GUI比较里好像无法得到1对1的结果
    20240103194149
  • CreateH2BSimDatabaseScript.java:创建数据库
  • DumpBSimSignaturesScript.java:导出选定函数的函数特征哈希,每条汇编有一个哈希
    20240103195804
  • ExampleOverviewQueryScript.java:GUI的Overview功能
  • ExampleQueryClientScript.java:查询特定函数的“一些信息”(</responseinfo>之前都相同,后续打印了callee函数)
    20240103202052
  • GenerateSignatures.java:生成签名
  • LocalBSimQueryScript.java:在database里选一个二进制和当前的二进制进行函数比对
    20240103201611
  • QueryFunction.java:GUI里的search功能
  • QueryWithFiltersScript.java:基本同上
  • UpdateBSimMetadata.java:更新数据库

Python

  • DumpBSimDebugSignaturesScript.py:导出选定函数的函数和调试信息
    20240103195635
  • DumpBSimSignaturesScript.py:导出选定函数的函数签名哈希(与java脚本导出的哈希值不同)
    20240103200008
  • ExampleOverviewQueryScript.py:GUI的Overview功能
  • GenerateSignatures.py:生成签名
  • QueryFunction.py:GUI里的search功能

匹配的例子

由于BSim会得到多个匹配结果,并且相似度值可能都相同,函数A的结果也可能和函数B匹配到的存在重复,因此比较fn,fp等对其他工具较为不公平。

单个函数的匹配

青绿色的是函数的差异
当用光标进行选择时,粉色是bsim关注的并且产生匹配的token淡紫色是bsim关注但是没有匹配到的token橘色表示token不会用作匹配

以下两对的相似值分别为1和0.777
20240104165115
20240104165141

二进制文件相似度

排除了较低hitcont和较小的函数
library score:当较小的二进制在另一个二进制里全都能找到匹配则为1

用提供的脚本跑的跨架构的例子,得到的文件相似度很低

20240104112320
20240104163037

recall

由于一个待匹配函数会得到多个匹配的结果,因此把这些结果都视为匹配

  1. 7zip-rar
    (GT里119个函数匹配到126个)
    20240104155104
  2. apache2-bin
    (GT里1198个函数匹配到829个)
    20240104164252

记录一下👴吃过的乐事较少见款袋装薯片的味道

完全不知道为啥会想着要记录这种东西…果然是属于莫名其妙的记录Orz

阅读全文 »

在平板上用termux跑ubuntu+vim写/看代码时的记录
不日应该会改成用带gui的aidlux或者ubuntu+code-server
不知道会不会再往这上边添加东西

阅读全文 »