什么是智能合约漏洞?

简介:

智能合约(Smart Contract) 这个术语是在1994 年由Nick Szabo 提出的,后来经过几次在不同环境下的重新定义。我们现在通常所说的区块链智能合约以以太坊为代表的。

以太坊的作者Vitalik Buterin 意识到,在区块链系统中,交易逻辑是可以和底层系统机制分离的。底层系统负责交易块的创建和验证,记账者的共识达成等基础功能,而交易本身到底做什么事情是可以通过二次编程的方式来定义的。因此他设计了一种交易代码执行的虚拟环境EVM,使用者可以开发自定义的交易逻辑,发布到链上,当交易进行时,链上所有的节点都执行相同的代码,从而同步改变链上数据的状态。

他为这种代码使用了“智能合约”这个名字,这是我们目前通常所说的智能合约的内涵。

智能合约漏洞,左右为难!

智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。以以太坊体系的代币为例,其业务逻辑是代币发币和交易。以太坊在设计之初,将智能合约设计成了一旦部署就不能修改的模式。这种设计有可能是为了提高智能合约的可信性。但是我们知道,只要是由人编写的程序,就一定会出现错误和缺陷。

以太坊这种设计本身就违背了程序设计的一般规律,在智能合约出现漏洞的时候可能会造成无法弥补的损失。我们可以看到,近期出现的以太坊体系智能合约的漏洞,造成了巨大的影响,有的代币也因此毁灭。

目前以太坊体系区块链智能合约的机制设计,加之漏洞可能带来的毁灭性影响,使得已上线智能合约的漏洞的报告和处理变得非常棘手。360代码卫士团队在近期的研究中发现了以太坊体系下多个已上市交易的代币的智能合约安全漏洞,并已第一时间报告厂商,但到目前为止厂商尚未作出任何回应。

对于厂商来说,由于智能合约不可修改的特性,要对上线后发现的漏洞进行有效修复,只能选择重新部署新的合约,这将付出巨大的代价,因此有的厂商可能会选择不响应,不处理。

而对于安全研究者来说,也面临尴尬的境地,左右为难。在厂商修补漏洞前公开漏洞细节对于厂商不利,有悖漏洞披露的一般原则,但如果厂商迟迟不修补漏洞,公众对于漏洞的存在不知情,风险会随着时间的增长迅速膨胀,漏洞一旦爆发可能会造成更大的危害,波及更大的人群,可能会造成很多人的投资瞬间化为乌有。接下来我们还将与厂商保持积极的联系和沟通,以期帮助其修复漏洞。

智能合约漏洞,如何应对?

在一些联盟链中,智能合约的设计是可以在部署之后更新的,当然这种更新需要一定的线下协商流程。要应对区块链智能合约的安全漏洞问题,未来需要普遍考虑设计相应的智能合约协商更新机制,降低漏洞修复的成本。

但现在,我们需要面对现实,做出几乎唯一可行的、切实有效的努力——在智能合约上线之前,对其进行全面深入的代码安全审计,尽可能的消除漏洞,降低安全风险。

据悉,360代码卫士团队利用自身在源代码静态分析领域的长期技术积累,迅速将污点传播、约束求解等技术移植到针对智能合约的分析中,可针对区块链智能合约提供专业的代码审计服务,帮助区块链项目尽早发现智能合约中可能存在的安全隐患。


原文发布时间为:2018-05-31

本文来自云栖社区合作伙伴“安全牛”,了解相关信息可以关注“安全牛”。

相关文章
|
存储 安全 区块链
智能合约开发中13种最常见的漏洞
智能合约开发中13种最常见的漏洞
1857 5
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的农村土地管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的农村土地管理系统附带文章源码部署视频讲解等
158 0
|
机器学习/深度学习 数据可视化 Swift
CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
这是8月份再arxiv上发布的新论文,我们下面一起来介绍这篇论文的重要贡献
632 10
CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
|
自然语言处理 算法 API
「AIGC」Python实现tokens算法
使用Python的`transformers`库,通过`AutoTokenizer`初始化BERT tokenizer,对文本进行分词统计,减少API调用。示例展示从开始到结束的时间,包括文本转换为tokens的数量和过程耗时。
600 0
「AIGC」Python实现tokens算法
|
关系型数据库 MySQL 数据库
MySQL8报错:Public Key Retrieval is not allowed
MySQL8报错:Public Key Retrieval is not allowed
7366 1
|
运维 Java Shell
shell脚本回顾及find文件查找基本用法| 学习笔记
快速学习shell脚本回顾及find文件查找基本用法
512 0
|
Web App开发 存储 JavaScript
store.js - 轻松实现本地存储(LocalStorage)
  store.js 是一个兼容所有浏览器的 LocalStorage 包装器,不需要借助 Cookie 或者 Flash。store.js 会根据浏览器自动选择使用 localStorage、globalStorage 或者 userData 来实现本地存储功能。
1154 0
|
3天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
5天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
783 12