Cointime

扫码下载App
iOS & Android

审计智能合约,看Hacken如何操作

媒体

作者:Oleh Malanii

随着我们深入探索Web3时代,智能合约在推动去中心化应用、交易所和DeFi(去中心化金融)领域中的关键作用变得越来越重要。

然而,随着这些系统的复杂性和规模增长,错误的可能性呈指数级增加。对于希望在他们的智能合约中实现无错误操作的Web3开发者来说,对区块链上每一行代码进行严格审计变得不可或缺。

尽管基于Web3应用程序、编程语言和区块链网络的特定情况可能会导致审计方法有所不同,但一些核心原则始终保持一致。

在本文中,我们将带你了解Hacken的经过验证的审计流程,这是我们自2017年首次进行审计以来不断完善的方法论。

什么是智能合约审计

智能合约审计是指对智能合约的基础代码进行仔细审查,以找出并纠正任何潜在的安全漏洞、错误或低效之处的过程。该审计旨在确保你的合约按预期运行,提供强大的安全性,并完全符合公认的行业标准和最佳实践。

简而言之,智能合约审计是确保你的合约在部署后能够顺利、安全地运行的保证。

智能合约审计的准备工作

全面准备和详细记录的重要性不可低估。它有助于提高清晰度,节约资源,并使整个过程更加高效。

为了确保你从审计中获得最大收益,你应考虑以下步骤:

1.       明确建立项目的功能要求。

2.       准备项目的详细技术描述。

3.       为项目建立开发环境。

4.       开发全面的单元测试。

5.       确保代码符合最佳实践和安全标准。

满足这些标准使我们能够对你的项目进行深入审查,并根据你的规格准确评估代码。即使你不打算进行外部审计,这种准备水平也是必要的。

准备1:功能要求

功能要求作为审计人员了解你的项目具体目标的路线图。它们需要表达清晰、简洁,没有歧义。

❌含糊的要求:用户应该能够赚取代币。

✔具体要求:合约应使用户能够质押ABC代币并获得XYZ代币作为奖励。

提供尽可能多的功能细节可以帮助审计人员确认代码是否按预期执行。

以下是几个其他明确定义的功能要求示例:

1.       合约必须使用户能够质押HAI代币并获得其他代币作为奖励。

2.       奖励总量必须根据用户质押的HAI代币总量占比分配给所有用户。

3.       用户应该能够在方便的时候提取他们的资金和奖励。

4.       每次用户提取代币时,总锁定余额应重新计算。

虽然你的智能合约代码可能是安全的,但它可能与你的预期目标不一致。这是寻求外部意见以确保应用程序按预期功能运行的另一个原因。

如果审计人员不了解应用程序的内容,他们如何验证功能并保证任何事情?确切地说!清晰和全面的功能要求是衡量成功的标准。这是真正从外部审查中获益的唯一途径。

准备2:技术描述

全面的技术概述在审计准备中起着重要作用。你应重点关注以下内容:

1.       所使用的编程语言和技术。

2.       部署的说明。

3.       测试运行的说明。

4.       任何相关的非功能性要求。

这些信息有助于我们在处理复杂且相关的智能合约时进行导航。再次强调,即使你没有计划与外部专家合作,记录代码的重要方面也是有益的。

准备3:开发环境

我们始终鼓励客户为其项目配置开发环境。Truffle或Hardhat等工具提供了一套全面的自动化工具。

专用的开发环境可以实现以下功能:

增强调试:有助于高效地追踪和修复代码错误。

简化测试:你可以自由地测试和破坏代码,而不会影响实际代码。

更好的版本控制:帮助管理代码的不同版本并跟踪更改。

减少意外实际部署的风险:避免过早或意外部署未完成的代码。

考虑到这些优势,跳过创建开发环境将是一个天大的损失。

准备4:单元测试

创建全面的单元测试来覆盖你的代码不仅是建议,而且是必不可少的。它优化了审计流程,节省了资源,并增强了应用程序的安全性。

我们建议争取实现100%的测试覆盖率,包括正面和负面的场景。此外,我们鼓励开发多用户测试来评估系统对潜在的DoS(拒绝服务)攻击的韧性。模拟多个并发用户的合约还可以确保用户操作彼此之间不受影响,除非这是你的设计的一部分。

通过遵循这些步骤,你甚至可以在开始审计之前发现安全漏洞。因此,在审计过程中,我们可以利用这些测试,将我们的努力集中在更复杂的问题上,从而加强你的安全措施。

准备5:最佳实践和安全标准

遵循官方语言风格指南和格式规范是促进审计和计划中的合约升级的又一种经济高效的方式。

遵循这些最佳实践可以减少问题检测所需的时间,并减少对新增代码的错误监视的可能性。简单来说,遵循最佳实践是节省时间和金钱的有效策略。

如何审计智能合约

现在,让我们来介绍最关键的部分:审计智能合约的过程。

在Hacken,多年来我们不断优化了我们的方法论,并建议遵循以下步骤以实现最有效和高效的错误检测:

1.       预审阶段

2.       逐行审查

3.       分析和验证

4.       报告和评分

第一步:预审阶段

我们的审计的初始阶段旨在在深入审查开始之前发现任何需要注意的问题区域。

在预审阶段,我们研究你提供的代码库,确保审计范围全面。

预审员评估开发环境是否存在潜在的编译问题,执行提供的测试,并验证功能和非功能性要求。

智能合约审计工具

对于Solidity合约,我们使用以下安全分析工具来发现基本问题并深入了解合约:

Slither:这个静态分析工具检查Solidity源代码的安全漏洞,并检查其符合最佳实践。

Mythril:一个用于识别Solidity智能合约中潜在漏洞的bug-hunting框架。

Solgraph:一种生成DOT图的工具,用于可视化Solidity合约的函数控制流,并突出显示潜在的安全威胁。

Echidna:一个用于对Solidity智能合约进行模糊测试和基于属性的测试的程序。

Mythx:一个用于Solidity智能合约的安全分析平台,结合静态和动态分析,以检测漏洞并生成详细报告。

对于Rust合约,我们依赖以下工具:

Clippy:一组用于捕捉常见错误和增强Rust代码的检查工具。

Cargo-udeps:用于检测Cargo.toml中未使用的依赖项的工具。

Cargo-audit:用于对存在安全漏洞的依赖项进行审计,根据RustSec Advisory数据库中的报告。

Cargo-geiger:帮助检测使用不安全Rust的情况。

Cargo-crev:为Cargo提供了一个可进行密码学验证的代码审查系统。

此外,我们还运行了一些内部的安全分析程序,具体细节我们不予透露,但通过上述工具,你可以获得可观的结果。

在此阶段结束时,我们将向你提供初步报告,让你有机会在正式审计开始之前进行最后的修改。

第二步:逐行审查

让审计开始吧!在这个阶段,我们的目标是为你提供经过验证的见解,指导你在增强代码安全性方面做出必要修改的决策过程。

问题的发现和记录。在详尽的逐行审查中,由一对熟练的审计员独立进行,我们会仔细检查你代码的每个部分,寻找所有可能的漏洞,包括:

1.       SWC注册表中列出的问题

2.       数据操作

3.       访问违规

4.       闪电贷款

5.       由合约互动引发的复杂漏洞

虽然要列出所有检查项目的完整列表太长,但请放心,我们会适当检查大多数编程语言的关键项目:

项目 描述
默认可见性 函数和状态变量的可见性应明确设置
整数溢出和下溢 如果使用未经检查的数学操作,则所有数学运算应安全免受溢出和下溢影响。
过时的编译器版本 建议使用最新版本的相应编译器(Solidity或Rust)。
访问控制和授权 所有关键函数应受到保护,以防止所有权被接管
资产完整性 资金受到保护,不能未经适当权限提取或锁定在合约中。
数据一致性 智能合约数据在整个数据流中应保持一致。

需要认识到,所有问题并非完全相同。因此,我们针对以太坊虚拟机(Solidity、Viper、Yul)和基于Rust的合约(Solana、Near、CosmWas)使用了50多个特定于编程语言的参数。

测试

此外,我们还对测试覆盖率进行了彻底评估。如果我们发现任何缺口,无论多小,我们会开发和实施额外的测试用例,以涵盖所有可能的正面和负面场景。

请记住,有些问题只能在依赖合约的错误配置下复制。因此,我们的审计员会有意地设计这些配置并运行相关的测试。

每个问题被分类为通过、失败或不相关。

第三步:分析和验证

审计过程的这一关键阶段真正展示了我们独特方法论的优势。到目前为止,我们的审计员一直在独立进行审查,从各自的角度对代码进行客观的审视和深入探索。

现在,这些审计员首次汇聚在一起,将他们的个人见解和发现带入到主审计员的指导下进行共同讨论。我们在开放的对话中审查、讨论并甚至争论所发现的问题,以培养对项目潜在漏洞更全面的理解。

此外,团队编制了一份内部文件,重点介绍你项目的关键方面和可能的弱点,同时提供详细的咨询报告,建议采取措施增强项目的安全性和改进审计评级。

主审计员会仔细查看所有材料,确保它们完整、准确,并准确地代表了集体审计发现的结果。在此最后检查之后,汇总的审计报告将发送给你,作为对项目安全性的强有力评估。

第四步:报告

经过对发现的问题进行密集的相互审查后,我们的团队共同起草了一份详细的最终报告,涵盖了关键问题、漏洞和已执行的测试。

报告概述:

1.       执行摘要

2.       已检查项目

3.       系统概述

4.       发现

5.       免责声明

审计报告中的执行摘要提供了关键发现和整体评估的概览。已检查项目部分列出了所有审查的元素,发现部分提供了对已发现问题的详细见解和改进建议。免责声明解释了审计的范围。

基本上,该报告全面审查了审计情况,为你提供了经过验证的信息,增强你的智能合约的安全性和可靠性。

外部用户

最终的审计报告对于社区成员和投资者等外部利益相关者也是宝贵的资源。他们会阅读该报告,以便在考虑向你的项目存款/投资时做出明智的决策。

审计评分。我们还根据以下三个标准为你的项目分配最终的审计评分:

文档质量(D)- 1.0

代码质量(C)- 2.0

安全级别(S)- 7.0

这个评分提供了一个便于外部和非技术用户了解你的项目可行性的方式。

在审计中应该有多少人参与

一些安全公司可能采用精简化的工作方式,只有1-2名员工负责所有职责。虽然这样可以降低劳动成本,但存在质量折衷的风险,并给这几个人带来过重的负担。

在Hacken,我们采用更加专注的策略,每个专业人员专注于一个核心任务。我们倡导角色专业化,因为它使我们能够更多地投入宝贵的时间解决手头的问题。

1.       预审员:负责初步阶段的审计员,负责审查项目要求,确认项目范围,并部署自动化工具。

2.       审计员:主要审计员进行深入的逐行审查,解决任何差异,并向主审计员提供所有必需的材料。

3.       主审计员:高级审计员,负责审查审计员准备的所有材料,确保没有忽视任何安全问题。

4.       校对员:负责确保最终报告没有错误,并符合我们制定的结构。

5.       交付经理:负责保持我们团队之间的直接沟通,确保解决所有关注和建议。

毫无疑问,这种方法对人力资源的投入要求更高,但随着时间的推移,我们发现对我们和客户的长期利益是值得的。

总结

在Hacken,我们强调定期进行智能合约审计的绝对必要性。由于区块链应用的不可变性,智能合约中的未发现的缺陷可能会导致长期的问题。

积极主动地进行审计有助于及早发现此类漏洞,使你能够有效可靠地保护应用程序。

评论

所有评论

推荐阅读

  • 过去24小时全网爆仓1.21亿美元,多单爆仓8292万美元

    据 Coinglass 数据显示,过去 24 小时全网爆仓 1.21 亿美元,其中多单爆仓 8292 万美元,空单爆仓 3832 万美元。比特币爆仓约 3497 万美元,以太坊爆仓约 2035 万美元。

  • 名义价值12亿美元的BTC期权和9.3亿美元的ETH期权即将到期

    Greeks.live数据显示,5月17日期权交割数据:1.8万张BTC期权即将到期,Put Call Ratio为0.63,最大痛点63000美元,名义价值12亿美元。 32万张ETH期权即将到期,Put Call Ratio为0.28,最大痛点3000美元,名义价值9.3亿美元。 Greeks.live表示,本周受美股Meme风潮的激励,BTC ETF也收获了明显的资金流入,BTC大幅上涨突破65000美元,但Meme以外的加密市场较为弱势,成交量继续下跌,BTC和ETH的期权数据分化就可以体现这一点。 从大宗交易和市场交易结构看,各主要期限IV下降趋势结束进入横盘,目前下跌的空间不大。BTC多空较为均衡,而ETH币价弱势导致市场信心持续减弱,卖出看涨成为绝对主力成交。

  • Binance协助中国台湾执法部门破获涉案近2亿新台币的重大虚拟资产案件

    5月17日消息,Binance发布公告称,近日,Binance金融犯罪合规部(FCC)联合中国台湾司法部调查局破获一起涉及虚拟资产洗钱的重大刑事案件,涉案金额近新台币2亿元。Binance在整个案件中为台湾犯罪斗士提供支持,提供关键情报和援助,在推进调查方面发挥了关键作用。 除了业务协助外,Binance还在台湾推出了一系列执法培训计划,与十多个不同单位合作,涉及千多名执法人员,这些努力都得到了非常积极的反馈。

  • Tether CEO:Tron Network上增发10亿枚USDT,已授权未发行

    5月17日,Tether CEO Paolo Ardoino表示,已于北京时间今日凌晨在Tron Network上增发10亿枚USDT,已授权未发行,这意味着该金额将用作下一期发行请求和链交换的库存。

  • 链上索引服务Subsquid完成总额1750万美元融资,DFG等参投

    链上索引服务Subsquid宣布通过CoinList社区销售完成630万美元融资,截至目前其融资总额已达到1750万美元,DFG、Hypersphere、Zee Prime、Blockchange和Lattice参投,据悉其原生代币SQD拟于本周五上市,而Subsquid SDK已与Google BigQuery集成,允许开发人员使用Google的技术来分析区块链数据,继而降低业内区块链和开发者社区大规模部署的数据成本。

  • Optimism 2024 Q1报告:EIP-4844的实施使L1提交成本降低了99%

    Optimism发布2024 Q1报告,其中日活地址达到89,000个(环比增长23%),每日交易量增至470,000笔(环比增长39%)。这些指标均略低于2023年第三季度的历史高点。 OP主网的稳定币市值达到8.09亿美元(环比增长32%)。过去六个月,USDT在OP主网上的市值大幅飙升,达到5.12亿美元(环比增长64%),占总市值的63%。 EIP-4844的实施使L1提交成本降低了99%,将平均每日成本从前几周的420,000美元减少到830美元。2024年Q1 OP主网的链上利润为200万美元(环比增长14%)。

  • Peaq通过CoinList Launch完成2000万美元募资

    适用于DePIN和机器RWA的Layer1区块链Peaq在X平台宣布,其通过5月9日至5月16日在CoinList上推出的原生代币Launch中完成2000万美元募资,截至目前超过14.5万名社区成员完成超3600万美元的超额认购,新资金将用于加速peqosystem的增长,并推动各种生态系统和社区计划的进一步巩固。

  • 印度NFT市场NFTFN完成5000万卢比融资

    印度NFT市场NFTFN宣布通过代币分配方式完成5000万印度卢比融资,约合60万美元,新资金将用于其拓展旗下低成本NFT交易平台SuperNova。

  • 美国财政部将加强数字资产反洗钱和反恐融资工作

    美国财政部希望继续加强数字资产的反洗钱和反恐融资工作,作为其打击非法融资的更广泛战略的一部分。该部门在周四发布了其2024年《打击恐怖主义和其他非法融资的国家战略》战略,概述了其应对非法融资的优先事项。财政部强调了其围绕加密货币的持续工作,包括对某些交易所和组织(如Bitzlato和Lazarus)的制裁,与币安的和解以及对猪肉屠宰诈骗的警告。周四的战略文件总体上表示,其四个优先事项是关闭反洗钱监管的漏洞,支持“更有效和风险集中”的框架,提高执法机构的效力并利用技术创新。更新加密货币的现有监管框架将支持这些优先事项,战略文件表示。

  • 美联储梅斯特:利率应在更长时间内保持在高位

    美联储梅斯特表示,短期通胀预期已经上升;利率应在更长时间内保持在高位;作出通胀回落进程停滞的结论还为时过早;数据显示美联储的通胀目标面临的风险上升;需要在“未来几个月”收集更多价格数据;最近的数据表明就业市场面临的风险已经减弱;需要更长的时间才能确信通胀朝着2%回落。