如何审计一个智能合约

news2024/11/16 3:19:11

智能合约审计用于整个 DeFi 生态系统,通过对协议代码的深入审查,可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点,这使得审计成为任何区块链项目安全流程的关键部分。

代码审计对任何应用程序都很重要,但它们对去中心化应用程序 (dApp) 尤其重要,因为它们建立在其之上的区块链是不可变的。如果代码漏洞导致用户资金丢失,这些资金将无法找回。迄今为止,DeFi 中的黑客已经损失了超过 50 亿美元。

在本文中,我们研究了智能合约审计到底是什么、如何进行审计、需要注意的常见智能合约漏洞、Solidity gas 优化策略、流行的审计工具等等。

10-1.png
每个月在 Defi 被盗的资金.

在 2023 年 2 月 20 日前,在 Defi 中被盗的总资金是 51.3 亿美元

什么是智能合约审计?

智能合约审计包括对一个协议的智能合约代码进行详细分析,以识别安全漏洞、不良的编码实现方式和低效代码,然后再提出解决这些问题的解决方案。审计有助于确保跨 Web3 的去中心化应用程序的安全性、可靠性和性能。

在智能合约审核期间,安全专家团队将以自动和人工的方式,审查应用程序的代码、逻辑、架构和安全措施,以识别任何潜在问题。他们专门寻找可能容易受到恶意攻击的任何代码,以及任何需要改进的部分。

智能合约代码最终将部署到 Avalanche、BNB Chain 或 Ethereum 等区块链中。一旦合约生效,任何人都可以访问它们——从终端用户到恶意攻击者——这就是为什么在启动或更新去中心化应用程序之前必须解决所有漏洞。

审计完成后,审计师会发布一份摘要报告,其中提供有关审计结果、解决方法和任何其他问题的详细信息,以及未来解决现存问题的路线图。经过全面的智能合约审计后,项目可以放心地部署他们的合约,因为应用程序的安全性有了保证,用户资金也受到保护。

如何审计智能合约

智能合约审计利用各种技术和工具来减少风险点并使协议更加健壮。

步骤 1. 收集文档

被审计的项目必须先冻结代码,并向审计员提供技术文档,包括代码库、白皮书、架构和任何其他相关材料。该文档应该为审计员提供有关代码旨在实现的目标、范围和具体实施的详细指南。

步骤 2. 自动化测试

也称为形式化验证引擎,自动化测试检查智能合约的每个可能状态,并针对可能攻击合约功能性或安全性的问题发出警报。审计人员还可以对单个功能进行集成测试、单元测试,以及探测安全漏洞的渗透测试。

步骤 3. 人工审核

安全专家团队仔细检查每一行代码,找出错误和漏洞。虽然自动化测试可以很好地识别代码中的错误,但人类工程师更有能力检测合约逻辑或架构的问题、技术上正确且通过自动化测试的不良编码实现、gas 优化以及常见攻击点(比如说抢先交易)。

步骤 4. 合约错误分类

每个错误都根据它可能被利用的漏洞严重性进行分类:

  • 严重 - 影响协议的安全运行。

  • 重大 - 可能导致用户资金或协议控制损失的中心化和逻辑错误。

  • 中等 — 影响平台的性能或可靠性。

  • 次要 - 不会使应用程序的安全受到威胁的低效代码。

  • 信息性 — 与代码风格或行业最佳实践相关的错误。

第 5 步。初始报告

审计员起草一份初步报告,总结代码缺陷和其他问题,以及项目团队如何解决这些问题的反馈。一些智能合约服务提供商拥有一个专家团队,可以帮助修复发现的每个错误。通过解决所有问题,项目可以确保其智能合约的安全性,并且做好部署的准备。

第 6 步。发布最终审计报告

审计人员在详细将所有发现的问题写入最终报告中,所有问题都被标记为已解决或未解决。该报告将提供给项目团队并同时会被公开,以便协议的用户和其他利益相关者具有完全的透明度。

本指南全面分析了如何评估区块链预言机的安全性。

常见的智能合约漏洞

以下是当前智能合约审计清单的一部分的常见漏洞。

重入问题

当智能合约函数被不受信任的外部合约调用时,可能会发生重入攻击。重入攻击中,使该外部合约能够通过递归调用原始合约来耗尽用户资金或进行其他恶意操作。

整数上溢和下溢

当智能合约执行算术运算输出超过当前存储容量的数字时,可能会发生整数溢出或下溢,从而导致计算错误。

抢先交易机会

设计不合理的代码可能会泄露有关 dApp 尚未发生的的交易信息,其他用户可以先行运行这些信息,以牺牲协议为代价锁定利润。

重放攻击

当数据被恶意延迟或重复时,就会发生重播攻击,尤其是在硬分叉事件期间,攻击者可以使用新的系统上的消息从遗留系统中提取资金。

随机数漏洞

如果 dApp 使用公开的数字(例如块哈希)来播种随机数,则它很容易受到利用,这就是为什么许多协议使用 Chainlink VRF 来实现随机性。

函数可见性错误

打算私有的函数必须定义为私有的,因为 Solidity 中的默认可见性属性是公共的。如果是公开的,任何人都可以调用该函数。

中心化风险

中心化机制有单点故障的问题,如果单个私钥或类似密钥被泄露,可能会破坏协议的安全性。时间锁和授予 DAO 特权是处理中心化风险的常用技术。

未锁定编译器版本

Solidity 有许多编译器版本。 dApps 应该锁定他们使用的编译器版本,这样用户就不能用不同的版本编译它,否则这可能会导致不同的字节码和意想不到的问题。

Solidity gas 优化

Gas 是指在以太坊网络上进行特定操作所需的费用。 Gas 优化是降低智能合约代码执行成本的过程,随着项目规模的扩大和需要更多的 Gas 来运行,这一点变得越来越重要。它还有助于防止协议被滥用。

Solidity gas 优化技术包括:

  • 启用 Solidity 编译器优化器,最大限度地减少代码的大小。

  • 最小化所需的链上数据量。

  • 释放未使用的存储空间。

智能合约审计工具

流行的智能合约安全审计工具包括:

  • Echidna – 一个 Haskell 程序,专为模糊测试的以太坊智能合约而设计。

  • Ethlint — 分析 Solidity 代码的风格和安全问题并帮助解决这些问题。

  • Mythril – EVM 字节码安全分析工具,使用符号执行(symbolic execution)、SMT 求解(SMT solving)和污点分析(taint analysis)来检测各种安全漏洞。

  • MythX – 自动扫描以太坊和其他基于 EVM 的区块链智能合约中的安全漏洞。

  • Rattle — 一个使用流敏感分析(flow-sensitive analysis)的 EVM 二进制静态分析框架。

  • Slither – 针对安全漏洞和最佳实践对 Solidity 源代码进行静态分析。

  • Solgraph — 生成一个 DOT 图,可视化功能控制流并显示潜在的安全漏洞。

  • Scribble – 规范语言和运行时验证工具,可将高级规范转换为 Solidity 代码。

常见问题

智能合约审计的费用是多少?

智能合约审计通常需要花费 5,000 到 15,000 美元,根据代码复杂性和技术支持要求,还有可能更高。

如何成为智能合约审计师?

智能合约审计员必须对软件工程有高层次的理解,了解特定区块链环境的特定语言,如以太坊的 Solidity,并了解去中心化金融等关键垂直领域。审计师的收入通常在 10 万到 25 万美元之间,有些人的收入超过 40 万美元。

如何准备智能合约审计?

通过清理代码库、收集所有文档然后冻结代码来准备智能合约审计。在 Hacken 的这篇文章中了解更多信息。

审计智能合约需要多长时间?

完成智能合约安全审计的时间取决于代码的大小和复杂性。虽然可以在 48 小时内审核一个简单的通证合约,但一个完整的去中心化应用程序可能需要数周的时间来审核。

如何选择智能合约审计师?

如果你正在寻找合约审计人员建议,也可以联系我们的技术专家。

欢迎关注 Chainlink 预言机并且私信加入开发者社区,有大量关于智能合约的学习资料以及关于区块链的话题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ES】Elasticsearch核心基础概念:文档与索引

es的核心概念主要是:index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例,下面我们先来了解一下Document与Index。 RESTful APIs 在讲解Document与Index概念之前,我们先来了解一下RESTful APIs,因为下面讲解Documen…

Antd Form校验没有效果的问题

问题是这样的: 环境: antd4.x 现象: 如上页面 出现页面后直接点击按钮触发校验,不会有校验提示,页面没有任何反应假如只有其中任何一个,校验正常 比如,没有“模型编码”,只有“模…

变分推断 (Variational Inference) 解析

前言 如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 变分推断 在贝叶斯方法中,针对含有隐变量的学习和推理,通常有两类方式,其一是马尔可…

Python爬虫:如何自动化下载网站图片

目录 Requests 访问页面 XPath 定位 JSON 对象 如何使用 XPath 自动下载百度图片 Selenium 库模拟浏览器 Requests 访问页面 Requests 是 Python HTTP 的客户端库,编写爬虫的时候都会用到,编写起来也很简单。它有两种访问方式:Get 和 P…

王道操作系统课代表 - 考研计算机 第五章 输入输出管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “输入输出管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的…

基于.NET 7 + iView 的前后端分离的通用后台管理系统开源框架

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 今天给大家推荐一套前后端分离通用后台管理系统开源框架。 项目简介 这是基于.Net 7 Vue.js开发的、前后端分离框架,前端UI框架采用iView,该项目只有基础功能模块,不包含具…

VMware虚拟机安装centos(超详细图文教程)

1、centos下载 Ubuntu下载地址:点这里 下载不成功的也可关注公众号获取:待更新 2、打开VMware VMware安装过程:待更新 2.1 创建新的虚拟机 2.2 一般情况都会选择典型(如果这里有需要选择自定义的一般也不会看教程了&#xff…

【Spark分布式内存计算框架——Spark Streaming】10. 应用案例:百度搜索风云榜(中)实时数据ETL存储

5.3 实时数据ETL存储 实时从Kafka Topic消费数据,提取ip地址字段,调用【ip2Region】库解析为省份和城市,存储到HDFS文件中,设置批处理时间间隔BatchInterval为10秒,完整代码如下: package cn.itcast.spar…

华为机试题:HJ94 记票统计(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

linux和windows中安装emqx消息服务器

大家好,我是雄雄,欢迎关注微信公众号雄雄的小课堂 现在是:2023年3月1日21:53:55 前言 最近几天看了下mqtt,通过不断的搜索资料,也将mqtt集成到项目中,跑了个demo运行,和预想中的差不多&#x…

Altair 宣布将于3月举办 Future.Industry 2023 全球虚拟大会

Altair(纳斯达克股票代码:ALTR)近日宣布将于 2023 年 3 月 8 - 9 日 举办年度全球虚拟大会 Future.Industry 2023。旨在探索影响全球未来的新趋势,并深入探讨仿真、高性能计算 (HPC)、人工智能(AI)和数据分…

使用jenkins+nginx自动化部署前后端项目并打包备份

前言:因为之前使用docker拉取的jenkins无法检测到本地服务器安装的jdk和maven,所以我在本地服务器直接拉取了jenkins,使用8090端口与docker拉取的jenkins进行对比,可以检测到本地服务器安装的jdk和maven,前端和后端分开…

ETHDenver 2023

ETHDenver是全球最大、持续时间最长的以太坊活动之一,今年的活动定于2月24日至3月5日在美国科罗拉多州丹佛市盛大举行。这次活动将面向以太坊和其他区块链协议爱好者、设计者和开发人员。Moonbeam作为ETHDenver 2023的Meta赞助商,将在本次活动中展示令人…

如何使用crAPI学习保护API的安全

关于crAPI crAPI是一个针对API安全的学习和研究平台,在该工具的帮助下,广大研究人员可以轻松学习和了解排名前十的关键API安全风险。因此,crAPI在设计上故意遗留了大量安全漏洞,我们可以通过 crAPI学习和研究API安全。 crAPI采用…

如何把照片的底色修改为想要的颜色

如何给照片更换底色?其实有可以一键给照片更换底色的 APP ,但是几乎都要收费。如果想要免费的给照片更换底色的话,分享两种简单便捷的方法给你。掌握了这项技能,以后就不用店花钱处理啦!1、免费!线上快速 给…

【SpringBoot教程】SpringBoot入门

SpringBoot介绍 SpringBoot简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让你更易上手&…

Rancher Prime 为平台工程提供面向 K8s 的弹性能力

作者简介 张应罗,SUSE 资深架构师,拥有 16 年架构咨询工作经验,专注于 SUSE Enterprise Container Management 相关的产品落地方案及咨询方案设计。 平台工程 “DevOps 已死,平台工程才是未来!” 去年,知名软件工程师…

原来JS可以这么实现继承

当我们在编写代码的时候,有一些对象内部会有一些方法(函数),如果将这些函数在构造函数内部声明会导致内存的浪费,因为实例化构造函数得到不同的实例对象,其内部都有同一个方法,但是占据了不同的…

【unity】开发rts 4 放置建筑进地图;创建单位;单位移动;单位生产者

一 放置建筑进地图 1 GameManage,slot faction阵营插槽, 新建筑拖进secne,便于管理,在实例栏将建筑放在factions下 inital faction entitys,(也可带上cam look at) 添加新建筑上 此时测试&a…

大专生学云计算,工作好找吗?

当然可以找到工作。云计算行业整体是处理高速成长期,市场规模以每年30%的速度增长,市场的扩张意味着需要更多的技术人才支撑,据统计云计算未来五年人才缺口将达到150万。 目前企业对于学历的要求并不高,基本大专及以上都可以的。…