Fomo3D代码分析以及漏洞攻击演示
Fomo3D过去的一周内赚足了噱头,一场光明正大的“庞氏”游戏疯狂吸金,在链得得此前的报道中提到“Fomo3D的开发者,是对生态有深刻理解的现实主义者。Fomo3D鼓励黑客去黑掉智能合约,来证明以太坊有多脆弱。”Fomo3D核心成员Justo直指v神:“我已经发现了可以毁灭以太坊虚拟机(EVM)的‘核武器漏洞’。”详情请见《【链得得独家】庞氏游戏”Fomo3D的真实意图:黑掉脆弱以太坊》。
开发者虽然狂妄,但是却被看作是足够聪明的人。不过,以太坊基金会的核心成员peter szilagyi在twitter上表示,Fomo3D的空投机制要被智能合约自身存在的漏洞戏弄了。
来源:peter szilagyi的twitter
链得得注:Fomo3D玩家购买的key金额高于0.1ETH时,有机会获得空投。例如,文字显示:“下次购买0.1ETH时有5%的机会获得一个ETH !”空投的ETH直接打入你的投注地址。接收空投的机会从0%开始,每一笔超过0.1ETH总额的Key订单会增加0.1%的几率。。
但是由于智能合约本身的漏洞,羊毛党可以准确捕捉到这个“随机数”,从而在投入很小的前提下获得将近100%的空投。PeckShield研发总监吴家志告诉链得得作者,这是一个成功薅羊毛的案例。世界上是做不到完全随机的,通常是利用时间当作种子计算出一个相对随机数,但是在区块链中可以预测到这个“相对随机数”。
吴家志说:“每一个智能合约的运作必然发生在某一个块中,块的时间可以运算出,加上FoMo3D计算种子里使用的钱包地址,可以被伪造成可预测的合约地址,所以可以把小概率事件变得很大。”
Fomo3D在合约的最初设定中把“投注者的钱包地址”放到监测名单,他们知道地址可以生成很多,但是攻击者不可能用不同的地址去测试、押注空投的奖池,这是一个成本非常大的事情。而这个事件中最核心就是Fomo3D在判断钱包地址中存在的差错,这也是Peter关注到的地方。
Peter作为跟随V神多年的以太坊核心成员,他十分了解以太坊的技术架构。攻击者可以通过把钱包地址当作随机计算的部分来避开Fomo3D的判断。吴家志告诉链得得作者,设计Fomo3D的人没有想到,在其合约的airdrop函数中,产生随机数的种子是通过当前块信息(例如,第1416行的timestamp、第1417行的difficulty等)和msg.sender一起计算出来的(随机变得不随机),攻击者可以在攻击airdrop函数之前在合约中预先计算出结果(必然会开奖)。
如果能够得到一个针对当前airDropTracker_的可用种子,攻击者总是可以使airdrop函数返回true(第1424行),从而在正确时间点实施“薅羊毛”行动。(合约地址可以不停尝试新的合约地址,试到可以时便可进行精准投注,这样就会确保一定能得到空投,其随机性就遭到抑制,所以就会变得很像挖矿)。如下图:
Fomo 3D的airdrop函数
PeckShield研究人员观察到,攻击者通过利用Fomo3D的空投机制在两天时间内薅了近60个ETH。这种获利能力,可以比拟1000台以上GPU显卡矿机的挖矿能力。最关键的是这个行为没法制止,如果有好的编程能力,这是一个比挖矿还容易的“赚钱”方式。
事实上,在Fomo3D推出之后,市面上顿时出现大量的以FOMO Short、FOMO Lightning和RatScam等为代表复制版Fomo3D。他们也仅是对Fomo3D的合约进行了复制,所以都会存在这样的问题。
攻击者发起的事务
但这种漏洞既然存在,为什么无法停下来?PeckShield吴家志告诉链得得作者,基于智能合约的游戏一旦运转起来就无法更改,除非有一天没人继续玩了,游戏会按照合约设定停下来。不过,Fomo3D游戏现在炙手火热,很多玩家投注不少在其中,且奖励池金额不断刷新,在巨额奖励诱惑下,每个人都在争抢做最后一名投注者,所以暂时还看不到停下来的可能。
Fomo3D代码分析以及漏洞攻击演示的更多相关文章
- ProFTPd Local pr_ctrls_connect Vulnerability - ftpdctl 漏洞及攻击代码分析
攻击代码网址:http://www.exploit-db.com/exploits/394/ 1.执行环境: 1.ProFTPD 1.3.0/1.3.0a 2.编译ProFTPD时.--enable- ...
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了 ...
- [web安全]Web应用漏洞攻击分析与防范
网站攻击主要分为以下几类: (1) sql注入攻击 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.它是利 ...
- Apache Log4j2远程代码执行漏洞攻击,华为云安全支持检测拦截
近日,华为云安全团队关注到Apache Log4j2 的远程代码执行最新漏洞.Apache Log4j2是一款业界广泛使用的基于Java的日志工具,该组件使用范围广泛,利用门槛低,漏洞危害极大.华为云 ...
- Apache Log4j 反序列化代码执行(CVE-2019-17571) 漏洞分析
Apache Log4j 漏洞分析 仅用于研究漏洞原理,禁止用于非法用途,后果自负!!! CVE-2019-17571 漏洞描述 Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开 ...
- SQL注入原理及代码分析(二)
前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...
- 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
- python调用metasploit里的MS-17-010模块进行漏洞攻击
起因:看各位大佬们写的shellcode厉害的一匹,可惜自己没学C和汇编 也看不懂shellcode,只能写一个调用metasploit里的模块进行攻击了. 0x01 攻击机:192.168.223. ...
- 《网络对抗》Exp4 恶意代码分析
20155336<网络对抗>Exp4 恶意代码分析 问题回答 实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监 ...
随机推荐
- js控制select选中显示不同表单内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- malloc动态分配字符串数组“ 一个月内的提醒”
//输出一个月提醒 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_R ...
- mysql 数据库设计规范
MySQL数据库设计规范 目录 1. 规范背景与目的 2. 设计规范 2.1 数据库设计 2.1.1 库名 2.1.2 表结构 2.1.3 列数据类型优化 2.1.4 索引设计 2.1.5 分库分表. ...
- 介绍hadoop中的hadoop和hdfs命令
有些hive安装文档提到了hdfs dfs -mkdir ,也就是说hdfs也是可以用的,但在2.8.0中已经不那么处理了,之所以还可以使用,是为了向下兼容. 本文简要介绍一下有关的命令,以便对had ...
- Vue项目部署遇到的问题及解决方案
写在前面 Vue-Router 有两种模式,默认是 hash 模式,另外一种是 history 模式. hash:也就是地址栏里的 # 符号.比如 http://www.example/#/hello ...
- ubuntu18.04.1LTS系统远程工具secureCRT
ubuntu18.04.1LTS类windows的系统下安装远程管理工具 本地电脑之前安装的是win10,疲于win10频繁的更新和各种兼容问题,果断放弃win10系统,安装了Ubuntu 18.04 ...
- c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】
引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...
- php扩展开发-INI配置
php.ini文件是用来保存各项扩展配置的文件,每个扩展都或多或少需要有一个定制化的配置,ini文件是一个很好的保存配置的方式,我们来看下怎么在自己的扩展里,使用到ini的配置功能 //创建ini的配 ...
- 图解HTTP总结(3)——HTTP报文内的HTTP信息
HTTP通信过程包括从客户端发往服务端的请求及从服务器端返回客户端的响应. 用于HTTP协议交互的信息被称为HTTP报文.客户端的HTTP报文叫做请求报文,服务器端的叫做响应报文.HTTP报文本身是多 ...
- you do not permission to access / no this server
最近在学习Linux下的httpd服务,自己写了一个虚拟主机的配置文件 重启之后,怎么访问都是出现以下的内容, do not permission to access / no this server ...