本文介绍了Trail of Bits开发的Slither-simil工具,该工具通过机器学习技术分析Solidity代码相似性,自动检测智能合约中的已知漏洞,显著提升审计效率并降低人工错误风险。
基于机器学习与Slither-simil的高效审计方案
Slither-simil技术架构
Slither-simil是Slither静态分析工具的扩展模块,采用最先进的机器学习技术检测相似的Solidity函数。其核心工作流程包括:
- 漏洞数据库构建:从历史安全评估报告中手动收集漏洞案例
- 代码标准化处理:
- 使用SlithIR中间表示对Solidity函数进行编码
- 通过自动化脚本提取并规范化函数特征
- 机器学习模型:
- 基于FastText构建文本基线模型
- 开发图神经网络模型处理抽象语法树和控制流图
技术实现细节
1
2
3
4
5
6
|
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]);
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
|
上述Solidity函数经Slither转换后的SlithIR表示:
1
2
3
4
|
REF_10(mapping(address => uint256)) -> allowance[_from]
REF_11(uint256) -> REF_10[msg.sender]
TMP_16(bool) = _value <= REF_11
TMP_17 = SOLIDITY_CALL require(bool)(TMP_16)
|
实际应用效果
通过相似性评分系统(0-1范围),工具可快速识别潜在漏洞:
1
2
3
4
|
$ slither-simil test contracts.bin --filename Token.sol --fname transferFrom
Reviewed 825062 functions, top matches:
TokenERC20.sol freeze 0.991
StandardToken.sol transferFrom 0.936
|
技术挑战与解决方案
-
数据稀缺问题:
- 建立专有漏洞数据库整合客户案例与公开漏洞
- 处理不同solc版本的编译兼容性
-
模型优化方向:
- 减少特征工程依赖的端到端系统
- 提升图神经网络在代码抽象语法分析中的应用
未来规划
- 扩展对不可检测漏洞的识别能力
- 测试主网环境下的实际性能
- 开发更成熟的可扩展架构
项目代码已开源在GitHub仓库。