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

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

评论

所有评论

推荐阅读

  • Hacken警告:审计徽章制造"虚假安全感",Q3加密损失达11.8亿美元

    10月19日,据CoinDesk报道,区块链安全公司Hacken发布报告称,第三季度加密行业黑客攻击损失11.8亿美元(107起事件),环比激增55%。其中9.068亿美元损失源于供应商或开发者工具遭入侵、未装安全补丁,或未被纳入最新审计的组件。报告警告,审计徽章制造"虚假安全感"——审计常只覆盖特定合约,钱包、签名系统和第��方软件被排除,投资者误以为整套已受审。期内最大单笔为9月Bitget因第三方安全产品漏洞被攻破、损失至少3.52亿美元;Ledger本周亦在CryptoBilis转售设备发现未授权"间谍"植入、损失约9300万美元。Hacken对12家衍生品平台研究发现,两家主要平台逾7亿美元资产依赖4把密钥中3把签名,或持有人未公开的管理密钥。报告称责任终在持币机构须及时打补丁,而非依赖数月乃至数年前的旧审计。

  • 周末美股休市,芯片股永续合约10分钟强平5160万美元

    10月19日,据CoinDesk报道,上周六美股休市期间,一轮约10分钟的剧烈抛售席卷7×24小时交易的"芯片股"永续合约(加密交易所跟踪股价的合约),约5160万美元头寸被强制平仓。据CoinGlass数据,21:22至21:32 UTC间,芯片股及半导体基金头寸被强平约5160万美元,其中约3800万美元来自做多一方。三倍做多芯片ETF的SOXL受创最重(约1270万美元),SanDisk与SK海力士各约1080万美元。抛售始于币安,Tread.fi CEO David Jeong于21:21:59 UTC挂出首批SanDisk、美光大额卖单;不到1秒后蔓延至Hyperliquid(Trade XYZ上架股票合约),约10个地址在1.8秒内对6个芯片合约下注做空。因美股休市、无真实股价锚定,交易者只彼此反应;Trade XYZ规则允许平台自定参考价,直至周一美股开盘外部报价回升。

  • 伊朗革命卫队副总司令:伊朗已赢得战场较量,舆论造势无法改变战局结果

    据伊朗劳工新闻通讯社(ILNA)报道,伊朗伊斯兰革命卫队副总司令穆斯塔法·伊兹迪少将表示,在“12日战争”和“40日战争”中,敌人动用了所有资源,但伊朗伊斯兰革命卫队、武装部队和参与其中的民众给予了有力回击,伊朗已在这场较量中获胜。他强调,舆论造势和宣传无法改变战场结果。伊朗武装力量正以更充分的准备和更强的能力,为保卫革命和现行体制做好准备。他强调,这些策略和言论无法影响伊朗的胜利进程,也无法改变伊朗已经取得的结果。(金十)

  • Qubic遭遇钱包盗刷损失约130万美元,网络紧急暂停

    10月18日,据Bitcoin.com报道,Qubic网络在遭遇钱包盗刷后暂停运行。攻击者利用55位钱包种子生成随机性不足的漏洞,重构出可预测种子,累计从1404个钱包转走2.94万亿枚QU(约合130万美元)。异常转账发生于UTC周六23:42至周日凌晨01:26,验证者(Computor)随后于tick 85,371,949暂停交易。受影响钱包多为iPhone/iPad浏览器、Mac Safari及旧版iOS App生成的种子,该问题已在4.26.4版本修复。截至美东周日上午,QU代币跌超10%。后续显示,87.1%被盗QU仍滞留链上被冻结,12.9%流入MEXC已被冻结收款账户,Bitget同步暂停充提;是否赔付取决于Computor仲裁。

  • Michael Saylor再次发布比特币Tracker信息,或于下周披露持仓变动数据

    10月18日消息,比特币财库公司 Strategy 创始人兼执行主席 Michael Saylor 再次发布比特币 Tracker 相关信息,根据此前规律,Strategy 通常在 Michael Saylor 发布相关消息后的第二天披露比特币持仓变动信息。

  • Strive CEO发布比特币Tracker信息

    10 月 18 日,比特币财库公司 Strive 首席执行官 Matt Cole 发布比特币持仓数据图,配文称「现在用双倍马力堆积 sats」(Now stacking sats with double the horsepower),暗示将于下周披露 BTC 增持数据。

  • Deepseek公布API网页搜索与抓取费用:每1000次成功请求5元

    10 月 18 日,DeepSeek 发布公告,DeepSeek API 现已支持网页搜索与抓取,按请求次数计费,单价为每 1000 次成功请求 5 元。公告称,当前用户在 DeepSeek Harness / Claude Code / Codex 中使用 DeepSeek API 时,已经会通过 Server 端工具调用访问到 Search / Fetch 接口,这部分 Search / Fetch 接口调用目前未计费,并将于北京时间 2026 年 11 月 1 日 00:00 起按次收取调用费用。DeepSeek 官方于 10 月 17 日宣布 Search / Fetch API 已正式上线,两项接口均使用 DeepSeek 自研搜索引擎,为 Agent 与 RAG 应用提供实时网页内容。Search 接口按 query 搜索网页并返回结构化结果,Fetch 接口则抓取单个网页,以 Markdown 文本返回标题与正文。两者均为原始 JSON API,Base URL 为 api.deepseek.com,使用与 DeepSeek API 相同的 Bearer 鉴权。

  • BTC突破82000美元

    行情显示,BTC突破82000美元,现报82033.16美元,24小时涨幅达到0.37%,行情波动较大,请做好风险控制。

  • ETH突破2400美元

    行情显示,ETH突破2400美元,现报2400.26美元,24小时跌幅达到0.95%,行情波动较大,请做好风险控制。

  • 比特币现货ETF过去一周净流出2.28亿美元 月初至今达6.18亿

    10月18日,据Bitcoin Archive报道,比特币现货ETF过去一周净流出2.28亿美元;月初至今(month-to-date)净流出已达6.18亿美元。该账号以「Uptober 还能救回来吗」发问,借市场对10月传统上涨行情的预期,点出近期ETF资金流出的反差。