使用defi_poc进行区块链攻击事件仿真复现实验
⚔️
使用defi_poc进行区块链攻击事件仿真复现实验
defi_poc是blocksecteam开源的一个项目,目前已经开源了3个以太坊上攻击事件的仿真复现靶场以及PoC&EXP,虽然数量不多,但是可以根据这个项目的框架去自己写PoC,向blocksecteam致敬!
 

0x1 介绍

notion image
项目很低调,没有宣传,也没有更多的介绍,3个目录里是这三个项目被攻击的复现靶场,不过里面是一些靶场的相关的介绍
notion image
运行复现环境需要的条件:
  • GanacheGanachetruffle套件中的一个构建本地区块链测试网的工具,分ganache-uiganache-cli,这里只需要用cli就可以了,安装教程 https://www.npmjs.com/package/ganache-cli
  • ARCHIVENODE:以太坊存档节点,可以去archivenode.io申请token,不过我是用的moralis.io提供的免费存档节点,申请到后把start_archive.sh中的url替换掉就可以了。
notion image
 
项目中进行攻击复现的核心逻辑代码放在攻击合约(.sol文件)中
notion image
再通过python脚本(.py文件)来控制攻击步骤
notion image
 
而构建复现环境则是通过Ganache连接以太坊存档节点,基于攻击事件的前面的区块分叉出一个本地测试网,这样可以还原一个完整的攻击事件发生前的主网链上的状态,再使用Brownie来进行编译与复现测试。
 

0x2 使用

把项目克隆下来,然后把上面提到的必要条件给准备好,然后根据靶场中的ReadMe去执行
notion image
第一步,申请ARCHIVENODE_TOKEN,但是由于我是用的moralis.io提供的免费存档节点,所以我这里直接把start_archive.sh中的url给改掉
notion image
然后sh start_archive.sh
notion image
跑起来了没有问题,如果跑不起来就多试几次,有时候存档节点会抽风。
然后sh run.sh
notion image
报错,提示没有rich库,那给Brownie装个rich
pipx inject eth-brownie rich
然后再运行run.sh
notion image
依然报错,编译有问题,看起来像openzeppelin的路径不对,修改一下brownie-config.yaml
notion image
再跑一遍
notion image
跑起来了,成功对CREAM重入攻击事件进行了仿真复现实验。
 

0x3 思考

整个过程从构建靶场到复现攻击还是挺简单的,但是应该还能更简单一点,比如说把环境都打包到docker中,直接起一个容器就可以进行复现了,不过这样的话会面临一个问题,那就是外部依赖问题,只能将Ganache打包进去,然后通过第三方提供的云存档节点来分叉出本地测试网,严重依赖第三方,不是独立自包含,用是能用,只是不够完美。
 
既然用Ganache工具可以很容易的起一个本地分叉链测试网,那能否通过研究Ganache来实现一个有限大小且不依赖第三方节点的离线测试网呢,这是一个问题。