Solidify 介绍——一种自动检测和分类智能合约安全风险的工具 作者:Peter Kacherginsky,首席区块链安全工程师 当我们的区块链安全团队在 2018 年开始进行一些智能合约安全审查时,我们不知道我们会在 2021 年进行数百次审查。 为了发展开放的金融系统,Coinbase 致力于扩大其支持的加密货币列表。 最近,我们推出了资产中心,以简化我们对新上市的尽职调查流程。 我们考虑的关键因素之一是智能合约的安全性,尤其是基于以太坊的代币,其技术复杂性差异很大。 因此,我们创建了一个名为 Solidify 的智能合约安全工具,以帮助自动化、标准化和扩展此过程。 手动智能合约分析是一个耗时且容易出错的过程。 经验丰富的团队偶尔会错过可能导致重大金钱损失的漏洞。 为了保证我们的客户和 Coinbase 的安全,我们的代币上市流程需要对每个智能合约进行安全审查和风险缓解建议。 考虑一下我们找出如何大规模执行此专业风险识别和推荐流程的挑战。 我们确定了适用于人工审查的现有智能合约安全扫描仪。 但是这些工具没有为全自动分析提供所需的安全保证和标准化的风险评分。 为了解决这个问题,我们开发了一个名为 Solidify(Solidity 的游戏)的工具,以在不降低 Coinbase 客户期望保护其代币的高安全标准的情况下提高新资产安全审查的速度。 Solidify 使用大型签名数据库和模式匹配引擎来可靠地检测合约特征及其风险,对智能合约风险进行标准化和评分,提出缓解策略并生成详细报告,以帮助我们决定 Coinbase 是否应该列出资产。 Solidify 可以完全自动地或通过识别需要额外人工审查的独特功能来评估数百个智能合约的安全风险。 Solidify 的工作原理 大多数智能合约风险来自资产发行者的操作设计选择,这些选择引入了潜在危险功能(例如冻结、升级等)或未充分测试的非标准功能实现(例如自定义提款逻辑)。 在设计方面,我们观察到大多数资产发行者使用标准模式(例如 OpenZeppelin 的合约库)来实现资产暂停等功能: 合同可暂停是可拥有的{ 来源:openzeppelin-contracts-1.3.0/contracts/lifecycle/Pausable.sol 通过使用上述 pause() 函数,智能合约的所有者可以停止所有发送/接收操作,并且在某些情况下,会对合约效用产生负面影响。 通过暂停库和使用它们的相应传递函数的存在,我们可以可靠地对具有暂停风险的合约进行分类。 Solidify 通过聚合所有已知实例和 pause() 函数的可能变化并自动检查当前分析的合约是否具有它来实现此目的。 独特的签名是使用 AST(抽象语法树)结构生成的,以避免因语法的细微变化而产生重复,同时确保函数实际执行的语法准确性。 上面 pause() 函数的示例 AST 树将被处理以生成唯一的哈希值,该哈希值将用作与其他智能合约匹配的签名: 以下是 Solidify 为 pause() 函数生成的签名数据库中的示例条目: { 请注意,相同的 pause() 函数签名存在于 3 个不同版本的 OpenZeppelin 库和包含该代码的其他标记中。 上面的签名还包括一系列功能,例如“暂停”,它使我们能够自动评估资产的风险并提出缓解措施(例如,所有者帐户的强大多重签名)。 Solidify 对分析过的合约中的每个函数执行类似的签名匹配,直到所有函数都被检测到或添加到我们的签名数据库中,因此我们永远不需要分析相同的代码两次。 Solidify 目前有大约 6,000 个独特的签名,用于有效地将风险与任何给定的智能合约进行匹配。 2018 年需要长达 2 个工作日的人工审核在 2021 年只需几分钟即可完成。随着我们的安全工程师添加新签名并记录相关风险,Solidify 的功能和检测率不断提高。 如何使用 Solidify 让我们分析一个示例智能合约来说明正在运行的签名匹配引擎。 让我们看看 ChainLink 代币 (LINK),通过在其部署在 0x514910771af9ca656af840dff83e8264ecf986ca 的智能合约上运行 Solidify 来看看它的安全性: %./solidify -a 0x514910771af9ca656af840dff83e8264ecf986ca 2021年5月20日从15时16分22秒加载5777个函数签名2021年5月20日15时16分22秒处理0x514910771af9ca656af840dff83e8264ecf986ca 2021年5月20日15时16分23秒加载签名:合同/ LINK_0x514910771af9ca656af840dff83e8264ecf986ca /LinkToken.sol 2021/05/20 15:16:23 为合约生成 AST/LINK_0x514910771af9ca656af840dff83e8264ecf986ca/LinkToken.sol 2021/05/20 15 solid:16 version:204.204/1025/16:204/204/10520402020202020202020201020201202040都安装了将 solc 版本设置为 0.4.21 2021/05/20 15:16:29 检测到 19 个签名 2021/05/20 15:16:29 将报告存储在报告中/LINK_0x514910771af9ca656af840dff4ecflink202020202010/05/05/05/2016:25在报告中存储报告/LINK_0x514910771af9ca656af840dff83e8264ecf986ca/ChainLink Token (LINK) Security Memo.md Solidify 只用了几秒钟就自动下载合约源代码,使用合适的 Solidity 版本生成 AST,检测和匹配 19 个独特的函数签名。 以下是该工具生成的 Markdown 报告的片段: ERC-20 安全评估:ChainLink 代币 (LINK) 审计员:Peter Kacherginsky 执行摘要 日期:2021-05-20 风险评分:2 风险评分:1 此资产不需要任何缓解措施。 风险详情 ChainLink Token 存在以下风险: 2 | 外部地址调用 外部地址调用增加了智能合约的复杂性和风险。 外部调用是重入漏洞的先决条件。 以下功能触发了此风险: 合同回退(地址,uint256,字节内存) transferAndCall(地址,uint256,字节内存) transferAndCall(地址,uint256,字节内存)1 | 使用组装说明 汇编指令的使用增加了复杂性并混淆了智能合约的功能,同时规避了一些固有的编译器保护。 以下功能触发了此风险: isContract(地址)缓解细节 以下风险缓解措施的实施推动了剩余安全风险评分: N/A 监控 松弛监控:不适用 匹配函数签名062afb9e84bbfded288268dcd3860be4fac7576697e563970dbfedd29dd9f5ff – 添加(uint256,uint256)0f5d6c18af8bfe45551aea6c08ee36f2388d40721a399a99210754fb5b5d4fcc – isContract(地址)27711ded0a7898d7ac3feca9c539c7660909efcc5bf12c8e8b8612d522be6ac4 – contractFallback(地址,uint256,字节存储器)2d299e0f7d2ea990e5ca714c04fbac5ae68615d9404bf447f42234f28891fcd5 – transferFrom(地址,地址,uint256)3ee09ec574744840001f024d57db0a57f4986733e71f8355bf8cd7af08e03ef4 – transferAndCall(地址,uint256,字节存储器)504201695c6fb08bebd3aaa9ccc252afd104cedddc5a5db8785ff1ec93e3255d —— 匹配函数源: 签名/openzeppelin/openzeppelin-contracts-1.1.0/contracts/token/BasicToken.sol signatures/openzeppelin/openzeppelin-contracts-1.1.0/contracts/token/StandardToken.sol signatures/openzeppelin/openzeppelin-contracts.0-1.1. contract/math/SafeMath.sol 签名/openzeppelin/openzeppelin-contracts-1.11.0/contracts/math/SafeMath.sol 签名/openzeppelin/openzeppelin-contracts-1.3.0/contracts/math/SafeMath.sol 大部分合约取自标准 OpenZeppelin 库或其他已知的智能合约,这使得功能匹配变得容易。 只有两个信息发现与使用自定义汇编代码和进行外部函数调用有关; 然而,这些本身并不构成安全风险。 根据上面的输出,令牌的风险评分为 (2),从安全角度来看,这被认为是低风险。 限制 Solidify 旨在满足我们快速安全地审查 ERC-20 和类似代币的需求。 拥有标准化的代币接口和管理账户所需的相对有限的功能非常适合构建与大量合约相匹配的签名数据库。 但更复杂的资产(例如 AMM 和其他 DeFi 应用程序)需要额外的手动分析,因为自定义代码的比例很大。 但是,在分析 DeFi 克隆或从手动审查范围中消除标准库时,Solidify 仍然对这些应用程序有益,因此分析师可以专注于自定义逻辑。 尽管 Solidify 目前仅限于以太坊区块链和 Solidity,但有计划将该工具扩展到其他基于 EVM 的平台并支持其他语言,如 Vyper。 由于 Solidify 中的所有数据都是由分析师手动填充的,因此也存在我们遗漏或错误分类特征特征的风险,从而导致评估不正确。 我们担心已部署的合约试图通过恶意构造函数、代码混淆、利用工具本身和其他技术来隐藏后门。 内部构建了额外的控制来验证签名、检测异常和恶意行为。 未来发展 我们计划在今年晚些时候开源 Solidify。 与此同时,额外的开发侧重于: 提高签名生成和检测逻辑的准确性 集成形式验证技术以减少手动分析的需要结论 在本博客中,我们分享了一种用于自动检测和分类智能合约风险的新颖工具和技术。 Solidify 是一种功能强大且高度可配置的工具,智能合约审计师、资产发行者和其他交易所可以使用它来帮助提高数字资产生态系统的安全性。 随着加密经济的发展,像 Solidify 这样的工具将变得越来越重要。 如果您对确保金融的未来感兴趣,Coinbase 正在招聘。 Solidify 简介——一种自动检测和分类智能合约安全风险的工具最初发表在媒体的 Coinbase 博客上,人们通过突出显示和回应这个故事来继续对话。 >> 在 Coinbase 上查看 加入我们的 Telegram 在推特上关注我们 在 Facebook 上关注我们 帖子 [Coinbase] Solidify 介绍——一种自动检测和分类智能合约安全风险的工具,首先出现在 AZCoin 新闻上。 —- 原文链接:https://azcoinnews.com/coinbase-introducing-solidify%E2%80%8A-%E2%80%8Aa-tool-to-automatically-detect-and-classify-smart-contract-security-risks.html 原文作者:Coinbase News 编译者/作者:wanbizu AI 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
[Coinbase] Solidify 介绍——一种自动检测和分类智能合约安全风险的工具
2021-06-23 wanbizu AI 来源:区块链网络
LOADING...
相关阅读:
- 为什么说?阿里智己汽车与湃氪云Pekka的玩法将开启区块链“矿业”新时2021-06-23
- 高盛在摩根大通区块链平台上完成首笔交易2021-06-23
- 比特币价格突破 30,000 美元 – 比特币杂志:比特币新闻、文章、2021-06-23
- Kusama“Parachain”分析报告(一)2021-06-23
- ZBGZillion矿池-FIL云算力(第9期)“越买越省”活动开始2021-06-23