原创: 张祥利 Pallet 7月12日
点击上方蓝字及时获取PalletOne最新消息
讲师简介:
张祥利,PalletOne高级核心开发工程师,9年c/c++开发经验。熟悉加解密算法,熟悉比特币,对数据结构和算法有较深入的了解。
一、Ethernaut
Ethernaut是Zeppelin提供的一个基于Web3 和 Solidity的智能合约审计训练平台,目前收录了18 道题目,复现了智能合约中可能出现的各种安全问题。
•https://ethernaut.zeppelin.solutions
•https://ethernaut-devcon3.zeppelin.solutions/
•https://github.com/OpenZeppelin
•The ethernaut is a Web3/Solidity based wargame inspired on overthewire.org.
CTF,全称Capture The Flag,即夺旗赛,起源于1996 年 DEFCON全球黑客大会,是网络安全技术人员进行技术竞技的一种比赛。
二、重入漏洞---DAO
Re-entrancy
function withdraw(uint_amount) public {
if(balances[msg.sender] >= _amount) {
if(msg.sender.call.value(_amount)()) {
_amount;
}
balances[msg.sender] -= _amount;
}
}
三、转账
Solidity 中几种转币方式。
•.transfer()
当发送失败时会 throw; 回滚状态
只会传递部分 Gas 供调用,防止重入(reentrancy)
•.send()
当发送失败时会返回 false
只会传递部分 Gas 供调用,防止重入(reentrancy)
•.call.value()()
当发送失败时会返回 false
传递所有可用 Gas 供调用,不能有效防止重入(reentrancy)
使用 msg.sender.call.value(amount)() 传递了所有可用 Gas 供调用,也是可以成功执行递归的前提条件。
四、Fallback
Fallback函数在合约实例中表现形式:一个不带参数没有返回值的匿名
函数
什么时候会执行 fallback 函数呢?
•当外部账户或其他合约向该合约地址发送ether时;
•当外部账户或其他合约调用了该合约一个不存在的函数时;
注:目前已知的关于 Solidity 的安全问题大多都会涉及到 fallback 函数
五、攻击实验
1.点击按钮获取实验实例
> contract.address
> getBalance(contract.address)
2.部署攻击合约:记得步骤‘1’的地址替换
instance_address_here
function withdrawAttack() public { msg.sender.transfer(this.balance); }
3.使用攻击合约攻击
>contract.donate(‘attackAddr’,{value:500000000000000000})
= hack
参考:
Ethernaut通关0-15:
https://www.anquanke.com/post/id/148341
Solidity 安全:已知攻击方法和常见防御模式综合列表:
https://github.com/slowmist/Knowledge-Base/blob/master/solidity-security-comprehensive-list-of-known-attack-vectors-and-common-anti-patterns-chinese.md
翻译自 :https://blog.sigmaprime.io/solidity-security.html
部署合约:http://remix.ethereum.org
https://ethereum.github.io/browser-solidity/
以太坊智能合约安全入门了解一下:
http://rickgray.me/2018/05/17/ethereum-smart-contracts-vulnerabilites-review/
区块链世界的IP协议高性能分布式账本
更多有价值的悄悄话,欢迎加入PalletOne社群
添加PalletOne波波微信
加入社区,咨询更多消息
官网:https://pallet.one/
官方邮箱:[email protected]
Telegram:https://t.me/PalletOneGlobal
Github:https://github.com/PalletOne
Twitter:https://twitter.com/PalletOne_org
Facebook:https://www.facebook.com/Pallet
One-1399711010172819/?modal=admin_todo_tour
更多官方咨询,关注公众号获得