智能合约的第三方库检测
第三方库检测方法总结
函数检测是一种二进制分析技术,将二进制代码分类为原始代码级别的函数相近的函数。用于二进制插桩、二值漏洞搜索、二元保护方案(包括流的完整性),以及帮助反向工程师分析代码区域间隔,推理复杂的二进制代码。
白名单匹配
- 基于函数名字做匹配,但是由于函数名可以被轻易更改,因此不具有抵抗混淆的能力。
- LibRadar: Fast and Accurate Detection of Third-party Libraries in Android Apps
提取API级别的函数签名方法
- 函数名、参数名等可以被轻易更改,但是调用参数类型,返回值类型是不可修改的。
- 提取API目录级别的特征,提取函数方法签名(Method signatures),做修剪+hash操作
- Reliable Third-Party Library Detection in Android and its Security Applications
- Pruned Method signatures
- 对signatures在method级别进行必要的修剪。
- 方法签名可以唯一确定这个函数,由方法名称和有序的参数列表组成。
- 得到修剪后的方法签名后,采用MD5将其hash成128位的比特串。这个bit值代表method级别的特征。但是我们要检测的库函数是一个package级别,一个package包含多个class,一个class包含多个method。于是利用Merkle trees将多个Method Hash集合再一次进行hash操作,形成class hash值,作为class级别的特征。
- Pruned Method signatures
字节码特征匹配方法
- 提取函数开头的32个字节机器码
- 33->可变字节,进行CRC16值验证,记录校验值和字节数,外部符号引用引用属性(辅助特征)。
- 先分好函数块,然后进行第三方库的识别 (IDA PRO)
- pro
- 完全是基于二进制代码操作,与编译器、优化级别等完全无关。
- con
- 由于函数头的二进制字节码被修改后,此方法便无法很好地区分混淆。
- 反编译中的库函数识别技术研究
控制流图
- 其匹配特征深入到代码内部,而不仅仅依赖于函数名字或部分字节,并具有抗混淆性。
- Compiler-Agnostic Function Detection in Binaries
- 扫码call指令:直接找到函数入口,跟踪入口块的边缘知道完整的部件,圈起来成为一个函数。
- 不可达基本块集合:采用连接组件分析扩展成一个函数块。扫描函数块,内部边不可达的,为第一个入口点。
- FOSSIL: A resilient and efficient system for identifying FOSS functions in Malware binaries
- Using Reduced Execution Flow Graph to Identify Library Functions in Binary Code
- 简化执行流图Execution Flow Graph,把库函数检测看成是子图同构问题。
多特征
- BinShape: Scalable and Robust Binary Library Function Identification Using Function Shape
- CFG、指令级特征、统计特征、函数调用图
- 论文提出方法的主要步骤是,反编译,提取上述四个特征,采用互信息计算,选择最佳的特征子集,为每个函数构建特定的签名信息。
- 排名靠前的特征被输入决策树,决策树的结果被存储在一个数据结构中,以形成每个库函数的签名。
Automated Detection and Classification of Third-Party Libraries in Large Scale Android Apps
Abstract
- 通过白名单检测第三方库不完善且不准确
- 第三方库的种类和数量很大
- 常见的代码混淆或者第三方库伪装等技术使得白名单方法不能准确地识别第三方库
- 提出一种第三方库自动检测和分类方法
- 基于多级聚类技术准确识别第三方库
- 基于机器学习对第三方库的功能进行准确分类
获取APK中第三方库信息的工具
在网上能够收集到的只有16年北大的LibRadar、reddr开源的LibScout和基于LibScout开发的apkLibDetect。
- LibRadar
- 该工具使用基于多级聚类的方法来检测第三方库,其目的是为了快速分析应用中使用的第三方库。
- 它能够识别应用中属于第三方库的代码,但不能完整地将第三方库的根目录识别出来;
- 同时,该工作并没有考虑第三方库的功能分类。
- 因为第三方库调用的次数多,再加上第三方库一般不会修改,根据这两个特点判断是否为第三方库。
RQ
- 智能合约的第三方库有哪些
- 智能合约的第三方库的类型
- 智能合约的第三方库怎么用
- 智能合约的第三方库在bytecode是什么样的
- 怎么检测智能合约的第三方库可能可行
- [] Ethereum中library与Wasm合约中library的区别
智能合约的第三方库有哪些
- openzeppelin-contracts
- 用于安全智能合同开发的库
- ERC20和ERC721等标准的实施。
- 基于角色的灵活权限方案。
- 可重复使用的Solidity组件,以构建自定义合同和复杂的分散系统。
Reference
- https://github.com/reddr/LibScout
- LibScout是一个轻量级有效的静态分析工具,用于检测Android/Java应用程序中的第三方库。
- Reliable Third-Party Library Detection in Android and its Security Applications (CCS’16)
- Keep me Updated: An Empirical Study of Third-Party Library Updatability on Android (CCS’17)
- https://github.com/OpenZeppelin/openzeppelin-contracts
- 用于安全智能合同开发的库。
- https://mp.weixin.qq.com/s/NU-tV-v_dL-CZbX--iAyzQ
- 第三方库导致
- https://www.cnblogs.com/buyucoder/p/14671243.html
- 以太坊合约第三方库
- https://www.nowcoder.com/discuss/142826?source_id=profile_create_nctrack&channel=-1
- ETH&EOS开发资源及工具集合(完整汇总版)
- https://ethervm.io/decompile
- solidity逆向
- https://paper.seebug.org/1454/
- 智能合约拒绝服务之不安全的 “SafeMath”
- Post title:智能合约的第三方库检测
- Post author:Eveneko
- Create time:2021-11-30 16:20:54
- Post link:https://eveneko.com/2021/11/30/3rd-in-smart-contract/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments