首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

智能合约安全审计之路-拒绝服务漏洞

描述:拒绝服务漏洞(DOS)智能合约无法按照设定的方式被调用 核心问题:智能合约中的拒绝服务是一个致命的漏洞,因为漏洞导致的拒绝服务一般为永久性的,无法恢复 ?...漏洞分析 selfdestruct()合约自毁函数 指令执行后,合约将拒绝服务,地址对应的字节码将被标注为删除 合约地址中所有的ETH将被发送到指定的新地址 进行ETH转移时,即使目标地址为一个合约地址...访问控制策略错误 onwer权限变更不需要确认,因此若owner被设置为一个错误地址,合约将彻底失去管理员权限 onwerGame合约分析 pragma solidity ^0.4.24; contract...Gas达到区块上限 对于每一个区块来说,有一个区块的GasLimit,任何交易的gas花费都不超过这个上限,否则无法被打包 GaslimitGame合约分析 pragma solidity ^0.4.24...使整个合约没办法正常进行。 ? 漏洞预防 严格限制selfdestruct指令的权限限制 设置完善合理的访问控制策略 如果目标地址可以是一个合约,需要考虑合约的特性

1.5K40

“以太坊智能合约编码设计问题”影响分析报告

这次我们提到的编码设计问题就和EVM底层的设计有很大的关系,由于EVM的特性,智能合约有很多与其他语言不同的特性,当开发者没有注意到这些问题,就容易出现潜在的问题。...这次我们提到的编码设计问题就和EVM底层的设计有很大的关系,由于EVM的特性,智能合约有很多与其他语言不同的特性,当开发者没有注意到这些问题,就容易出现潜在的问题。...1、地址初始化问题 在EVM中,所有与地址有关的初始化时,都会赋予初值0。 如果一个address变量与0相等,说明该变量可能未初始化出现了未知的错误。...3、余额判断问题 在智能合约中,经常会出现对用户余额的判断,尤其是账户初建,许多合约都会对以合约创建余额为0来判断合约的初建状态,这是一种错误的行为。...值得注意的是,在打包的过程中,攻击者可以通过条件竞争来在合约创建前转账,这样在合约创建余额就为0了。 4、转账函数问题 在智能合约中,涉及到转账的操作最常见不过了。

44410
您找到你想要的搜索结果了吗?
是的
没有找到

以太坊合约审计 CheckList 之“以太坊智能合约编码设计问题”影响分析报告

这次我们提到的编码设计问题就和EVM底层的设计有很大的关系,由于EVM的特性,智能合约有很多与其他语言不同的特性,当开发者没有注意到这些问题,就容易出现潜在的问题。...1、地址初始化问题 在EVM中,所有与地址有关的初始化时,都会赋予初值0。 如果一个address变量与0相等,说明该变量可能未初始化出现了未知的错误。...2、判断函数问题 在智能合约中,有个很重要的校验概念。下面这种问题的出现主要是合约代币的内部交易。...3、余额判断问题 在智能合约中,经常会出现对用户余额的判断,尤其是账户初建,许多合约都会对以合约创建余额为0来判断合约的初建状态,这是一种错误的行为。...值得注意的是,在打包的过程中,攻击者可以通过条件竞争来在合约创建前转账,这样在合约创建余额就为0了。 4、转账函数问题 在智能合约中,涉及到转账的操作最常见不过了。

51940

访问控制概述

站在合约的管理角度来讲,智能合约中的用户可以分为合约的owner、合约的普通用户两类。...新版构造函数 从0.4.22版本开始,solidity编译器引入了constructor关键字,以替代低版本的将合约名作为构造函数名的语法,避免程序员容易出现的编码错误,使用旧写法会出现warning...: 构造函数名与合约名不同 在编译器0.4.22之前构造函数的函数名默认是和合约名一致的,如果智能合约的开发者在开发过程中出现"构造函数名与合约名不一致"的现象(大小写、多加了一个s等情况),那么构造函数将不再是...constructor函数不规范 在编译器0.4.22之后使用了constructor来替代原先的"构造函数名与合约名必须一致"的代码编写规范,但是一些合约开发者在开发工程中往往还是会出现各种错误,例如...在编译,发现会给出“警告”哦!但是因为“警告”在合约开发中很常见,一般不是什么致命错误所以很多合约开发者在开发合约以及调试过程中会忽略这一点! ?

1K20

访问控制概述

站在合约的管理角度来讲,智能合约中的用户可以分为合约的owner、合约的普通用户两类。...image.png 新版构造函数  从0.4.22版本开始,solidity编译器引入了constructor关键字,以替代低版本的将合约名作为构造函数名的语法,避免程序员容易出现的编码错误,使用旧写法会出现...,调用者就可以获得初始化合约的权限,带来安全隐患,下面举几个之前引发的案例作为简要分析: 构造函数名与合约名不同  在编译器0.4.22之前构造函数的函数名默认是和合约名一致的,如果智能合约的开发者在开发过程中出现...constructor函数不规范  在编译器0.4.22之后使用了constructor来替代原先的"构造函数名与合约名必须一致"的代码编写规范,但是一些合约开发者在开发工程中往往还是会出现各种错误,例如...在编译,发现会给出“警告”哦!但是因为“警告”在合约开发中很常见,一般不是什么致命错误所以很多合约开发者在开发合约以及调试过程中会忽略这一点!

1.5K00

以太坊智能合约审计 CheckList

其中涵盖了超过29种会出现以太坊智能合约审计过程中遇到的问题。帮助智能合约的开发者和安全工作者快速入门智能合约安全。...=address(0))验证,有效避免用户误操作或未知错误导致的不必要的损失 由于EVM在编译合约代码初始化的地址为0,如果开发者在代码中初始化了某个address变量,但未赋予初值,或用户在发起某种操作...值得注意的是,在打包过程中,攻击者可以通过条件竞争在合约创建前转账,这样在合约创建余额就不为0. (4) 转账函数问题 在完成交易,默认情况下推荐使用transfer而不是send完成交易 当transfer...在智能合约中,经常容易出现对交易顺序的依赖,如占山为王规则、或最后一个赢家规则。...真实世界事件 Fomo3d事件 智能合约游戏之殇——类 Fomo3D 攻击分析 (11) 未初始化的储存指针 避免在函数中初始化struct变量 在solidity中允许一个特殊的数据结构为struct

95231

智能合约语言 Solidity 教程系列8 - Solidity API

写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 欢迎订阅区块链技术专栏阅读更全面的分析文章。...错误处理 assert(bool condition) 用于判断内部错误,条件不满足抛出异常 require(bool condition): 用于判断输入或外部组件错误,条件不满足抛出异常 revert...紧密打包参数。...(0x12345678)) 在私链(private blockchain)上运行sha256,ripemd160或ecrecover可能会出现Out-Of-Gas报错。...一种解决办法(workaround)是每个在你真正使用它们之前先发送1 wei到这些合约上来完成初始化。在官方和测试链上没有这个问题。

60220

福利|评价超高的《精通以太坊》丛书免费送,还包邮!手慢无

error调用时错误,无错误时返回null,有错误时则返回一个错误对象。 id:调用标识符,与调用方传入的标识一致,当请求中的id检查发生错误时(转换错误/无效请求),则必须返回null。...我们可以在Compile的tab下点击Details,在出现的页面中拷贝合约的ABI(点击“复制”小图标),如下图所示。 ? 将其复制到代码中,代码如下所示。 ? ?...contracts为智能合约的文件夹,所有的智能合约文件都放置在这里。 migrations是用来处理部署(迁移)智能合约的。迁移是用一个额外、特别的合约来保存的。 test智能合约测试用例文件夹。...truffle.js配置文件。 src web源码文件夹。 编写智能合约 接下来,编写智能合约。在contracts目录下,添加合约文件Adoption.sol。 ? ?...至此MetaMask的安装配置已经完成。 安装和配置lite-server 接下来需要本地的Web服务器提供服务访问。

1.1K20

Hyperledger Fabric和VSCode的IBM区块链扩展开发智能合约

创建一个新的JavaScript智能合约打包智能合约。 创建,探索和了解Hyperledger Fabric网络。 在本地Hyperledger Fabric实例上部署智能合约。...步骤: 1.开始 2.创建一个新的智能合约项目 3.修改智能合约 4.打包智能合约 5.安装智能合约 6.实例化智能合约 7.导出连接详细信息 8.提交交易 9.更新智能合约 10.提交更多交易 11....6.完成扩展打包合约后,你可以打开lib/my-contract.js文件以查看智能合约代码框架。不错的工作!...4.打包智能合约 image.png 现在你已经创建了智能合约并了解了你已定义的功能,现在可以将其打包,以便你可以将其安装在节点设备上。...经过一些繁重的计算(以及一点点间),如果一切顺利,你应该在右下角收到一条通知说成功升级智能合约Successfully upgraded smart contract。

2.8K30

继承变量覆盖及构造函数失配,竟然会导致这些漏洞

然而,这样的问题在区块链发展到近期依然屡次出现,导致安全事件的发生,例如Morphtoken, B2X, DoubleOrNothinglmpl等多个合约出现的Owned合约构造函数Owned大小写问题...构造函数(constructor)用于初始化合约对象。...一个合约的构造函数的方法名与合约的名字相同,在合约创建,对于状态变量的数据初始化操作是通过调用构造函数完成的,一般包括:设置代币名称、标识符、发币、将所有代币发送给owner,注意此调用仅存在于合约部署...以太坊solidity0.4.22引入了新的构造函数声明形式constructor(),该函数引入的目的是避免编程人员在编写构造函数的命名错误。...但是,在使用constructor声明构造函数,开发者错误的在其前面添加了一个function关键字,导致其变成一个名为constructor普通的函数。

68520

基于Ordinals在比特币L1网络实现EVM图灵完备智能合约支持——BxE协议

3.1.3 EVM虚拟机 EVM,全称Ethereum Virtual Machine,即以太坊虚拟机,是以太坊区块链的核心部分。它作为一个全局计算设备,用于执行智能合约。...EVM执行一次交易或智能合约,需要以下信息: 调用交易的发送者地址、接收者地址、转账金额、Gas价格、Gas限额、调用数据等信息。 合约的字节码获取接口,即通过地址可获得对应合约的二进制代码。...3.4 BxEVM以太坊交易的执行 BxEVM是BxE协议的核心组件,它是一个以太坊虚拟机的实现,兼容最新版本以太坊主网的合约逻辑,用于执行以太坊交易中的智能合约。...状态共识质押合约是BxE协议的共识核心组件,它允许用户质押BXET成为验证者,并在每个新比特币区块产生执行其中的BxE交易,并将执行结果形成状态根哈希提交到比特币网络。...为了保证BxE与以太坊的兼容性,BXET与以太坊Gas费用的设计保持一致,即用户在BxE上执行智能合约,需要支付一定数量的BXET作为手续费。

12510

以太坊DApp系列(二)---从入门到出家

,Geth搭建私链,我们需要配置创世块、bootnode、启动节点、挖矿等操作,这里不详细赘述,读者可以查阅更多的资料。...发送合约字节码和初始化参数到以太坊节点。 以太坊节点上EVM验证完成后,部署到全网的所有节点,完成后返回合约地址和应用二进制接口(ABI)。...在Remix上部署十分简单,选择部署的以太坊网络和填好合约初始化参数后,点击create按钮即可。...调用时需要注意的几点: 当调用者给予Gas不足,EVM会报出out of gas的错误,这时候会回滚本地交易所做过的所有修改,好在以太坊还提供了estimategas方法,可以让我们在调用之前预估交易所需的...Gas,因为Solc编译器会算出每一句代码的价格,不过有时会不准确,特别是出现死循环或者违反了修饰方法的限制条件

3.6K180

去中心化应用安全威胁Top10榜单

这些漏洞通常在合约使用tx.origin 对调用者进行验证触发。 漏洞造成的损失:大约15000ETH(当时约为3000万美元) 三、算数问题 整数的溢出并不少见,但这类问题在智能合约中尤其危险。...在去中心化应用、以太坊的世界中,拒绝服务问题往往会是致命的:尽管其他类型的应用程序最终总是可以恢复服务的,但智能合约可能会因一次拒绝服务攻击而永久下线。...有多种原因引发导致拒绝服务,如在合约交易收到了对方恶意行为的攻击,人为地提高了执行操作消耗的容量,滥用访问控制来获取智能合约的隐私组件,遭到混淆攻击。...攻击者可以通过特定制作的地址利用这个弱点,针对部分编码错误的客户端进行参数填充。 尽管不同的人对于这个问题看法不同: 这是以太坊虚拟机的问题还是客户端的问题?这能够在智能合约中修复吗?...每次发现具有破坏性的智能合约让许多人都感到惊讶,但我们没有理由相信其他同等性质破坏力的漏洞不会出现。代码审计和安全检查仍然会是有效的措施,尽管有很多不成熟的地方,去中心化应用仍然在以飞速的方式发展。

38420

第十二课 SOLIDITY语法难点解析及故障排查

.send(uint256 amount) returns (bool): 发送特定数量(wei为单位)的以太坊到对应地址,当出现错误时会返回flase。...【说明】为了和非ABI协议的合约进行交互,可以使用call() 函数, 它用来向另一个合约发送原始数据,支持任何类型任意数量的参数,每个参数会按规则(ABI协议)打包成32字节并一一拼接到一起。...8. solidity常见错误提示及原因分析 1). 智能合约执行失败 告警描述: " Warning!...GETH安装出现异常 告警描述: GETH安装出现以下告警: E: Failed to fetch http://101.110.118.22/ppa.launchpad.net/ethereum...3).智能合约的定时器和系统函数是什么? 4).当创建一个智能合约,msg.sender和this的区别? 答复:msg.sender是指外部账户的地址,this是指当前创建的智能合约的地址。

1.1K30

Fomo3D 千万大奖获得者“特殊攻击技巧”最全揭露!

如上图所示,交易最终状态为失败,并且 Etherscan 有 Bad instruction 错误提示,最终导致耗光 Gas Limit (4200000),约为正常区块 Gas Limit 的一半,因此打包该交易的矿池也收到了高额的手续费...我们知道,以太坊智能合约还存在一个指令 assert(),用于断言。当 assert 的结果不满足条件,则会耗光交易的 Gas。...获奖者(黑客)就是利用这种方法,发起大量类似的可变神秘交易:在自己极有可能成为中奖者,利用这些高额手续费的神秘交易,吸引矿池优先打包,占满后续区块,从而使得其他玩家购买 key 的交易无法被正常打包,...这轮游戏的获奖者(黑客),并未联合多家矿池作恶,反而巧妙利用了所有矿池优先挑选交易打包策略的共性。 获奖者(黑客)部署的神秘合约(攻击合约),简直是智能合约作为攻击武器的典范示例,精确制导,有的放矢。...作为区块链及智能合约爱好者,安比(SECBIT)实验室无比希望能尽快看到下一款安全、公平、优秀、有趣的智能合约游戏出现。 — END —

76410

深入Solidity数据存储位置 - 存储

如何用我们可能最熟悉的东西来表示一个智能合约的存储? 合约的存储布局与货架很相似。 从货架上把东西拿出来。这相当于 EVM 在读取状态变量的做法。...智能合约的存储是在合约构建过程中(在合约被部署)预置的。这意味着合约存储的布局在合约创建就已经确定了。该布局是基于你的合约级变量声明而 "成型 "的,并且这种布局不能被未来的方法调用所改变。...:= sload(c) } } 上面的代码将不会被编译,并会出现以下错误 有一点也要提到的是,在内联汇编中,你不能向存储变量的.slot或.offset赋值: function doesNotCompile...结论 智能合约的存储空间,无论是初始化还是修改里面的数据,都要付出高昂的代价。...虽然从合约存储中读取数据是免费的,但如果这些读取操作是改变状态的交易的一部分,我们还是应该考虑到向智能合约的存储读取的 Gas 成本。

1.8K30

秒懂商用区块链关键技术:智能合约

以太坊的出现,让智能合约从简单实验到落地应用,对于成熟的区块链技术体系而言,智能合约是一个非常重要的技术特性,也是区块链能够被称为颠覆性技术的主要原因之一。...假定此时交易被广播且被打包,节点需要将该交易存储在区块链上,需要对该交易进行回放和演算。...安全计算函数在遇到溢出问题,将会通过函数来终止执行,并回退数据。 (3)发布之前一定要充分测试。 (4)对于不可预知的错误,要多使用断言并终止程序。 (5)避免重入攻击。...当在合约里调用另外一个合约,当前合约一定要先改变重要变量的状态,否则另外的合约再次向当前合约发起交易,会依然使用当前的合约状态。 (6)合约转账尽量由普通用户交易触发。...《商用区块链技术与实践》这本书从商用区块链核心需求的角度出发,详细地介绍了区块链的产品架构和底层关键技术,并从行业痛点、解决方案、核心价值的角度分析了典型的商用案例。

41631

Ethereum - 以太坊项目

特点 以太坊区块链的特点主要包括: 单独为智能合约指定编程语言 Solidity; 使用了内存需求较高的哈希函数:避免出现算力矿机; uncle 块激励机制:降低矿池的优势,减少区块产生间隔为 15 秒...协议设计 核心概念 EVM:以太坊虚拟机,轻量级虚拟机环境,是以太坊中智能合约的运行环境。 Account:账户,分两类:合约账户存储执行的合约代码;外部账户为以太币拥有者账户,对应到某公钥。...Gas:燃料,每执行一条合约指令会消耗一定的燃料,当某个交易还未执行结束,而燃料消耗完合约执行终止并回滚状态。 一致性 目前采用了 PoW 作为一致达成保证,未来可能迁移到 PoS 上。...此时只要等待矿工把我们的合约打包保存到以太坊区块链上,部署就完成了....,当运行以下代码: //由于该命令未改变blockchain,所以不会有任何花费greeter.greet(); 命令行上会出现如下返回结果: 'Hello World!'

1.6K71
领券