小宅是一家互联网公司的小职员,区块链还没火起来的时候他买了点币,火了之后也算个玩币玩家。
币圈不好混,被割韭菜的也多,谁都不知道接下来会踩着什么坑。小宅人老实,从不做那些靠币致富的美梦,谁知道还是悲剧了。
事情的起因是小宅要给另一个币友转账,没有以太坊,就找有以太坊的玩家通过代理方式转账,结果不出半天发现除了转出给币友的钱(token),自己账户在另外两个代币的钱(token)也飞了。
小宅斯巴达了,查了半天怎么都不知道这币飞去了哪。
晚上时候他发了个朋友圈,天台见吧朋友们。
小宅最后上没上天台不知道,毕竟故事是编的,但攻击手段是真的。就在刚刚落幕的DEFCON上,360独角兽安全团队的安全专家郑玉伟讲了一个《以太坊智能合约重放攻击》议题。
技术细节
相比其他DEFCON上的议题,这个议题有点“另类”,用郑玉伟的话说就议题内容组织是太学术性了。
“DEFCON上大多是破解秀这种很有意思的议题,我们则更像一个学术课题。”虽然被吐槽议题过于严肃,但郑玉伟演讲完走下舞台时候还是被其他白帽子们包围了。
重放攻击这个词谁都听着熟,指的就是身份欺诈,主要被用作报文的重放。智能合约这个热词听着也熟,懂不懂区块链的都能扯上智能合约,但这两个词加在一起就是新鲜的攻击手段了。据郑玉伟小哥说,他们团队发现以太坊上一些智能合约由于签名设计不当,存在被重放攻击可能。
具体来说,有一个场景,假如有两个用户,A给B转帐,而A没有以太坊,所以通过委托代理C来转账。A在委托代理转帐的时候会调用transferproxy这个接口,这个接口会用到一个签名。由于这个签名内容的设计存在问题,导致签名可以被重复使用。此时攻击者可以在另一个合约上重放这个交易将A在这个合约上的token转走。
“我们用自己的账户在存在漏洞的其中两个合约进行实验验证,由于实验中的两个合约在委托代理交易时签名的内容相同,攻击者通过重放交易成功的从发送者那里获得了双份收入。”实现该攻击的白振轩小哥说道。
举个“栗子”,一个用户A他在北京银行有一个账户,在招商银行也有一个账户,现在他通过银联(代理角色)在北京银行给另外一个用户B转帐。由于转账时的签名内容存在问题,这笔交易发送给招商银行也会被确认,这样,A在招商银行也会给B转出与北京银行相同的金额。
在区块链上的所有交易都是可以查到的,谁在某时间通过代理的方式做了一次转帐交易轻易就能得知,在查到之后可以提取相应的签名就可以对其发起攻击。实际上这里的签名内容和代理是谁并无关系,作出一个新的代理替换之前的代理,只要受害者在第二个合约上有token就可以转走了。
这也就是小宅只是通过代理转了一次账却莫名其妙其他账户里的钱也飞了的原因。
说起来,整个议题的准备过程都很“赶趟儿”,就是时间紧。
今年4月初的时候,郑玉伟和一位研究区块链开发的朋友聊到了一起,两人一合计:你熟悉区块链开发过程,我熟悉安全分析技术,那何不把这两个方面结合在一起搞搞看?
两人开始先瞄准的是雷电网络,闪电网络这些协议层面,找了一圈没有收获。于是把目光转向了签名范围这个方向,发现签名设计的很多合约都有问题,接着往下研究还真有事儿。
他们先从以太坊提供的ERC20接口,发现接口在使用 Ecrecover 这个API时候可能会存在一些问题,然后针对这些条件进行扫描,机器筛选后又进行了人工审计,最终筛选出来有问题的52个合约。
这52个有问题的合约都可以被发起上面提到的重放攻击,据说根据网络上部署的有漏洞的签名内容相同的合约数量,特定情况下,攻击者甚至可获得10倍以上的收入。
为什么是10倍?
“我们将这52个合约按照签名设计分组,只有签名内容完全一样才划分成一组,同一组之间可以互相重放。”郑玉伟告诉雷锋网。
其中有10个合约的签名设计完全一样,除了包含A的账户信息,B的账户信息以及每次的转账的token数量,手续费,以及nonce外,没有额外附加信息。至于剩下的合约则在签名内容中添加了特定字符串,字符串相同的合约之间可以进行重放攻击。
发现了这种攻击方式以后,他们有意参加当年的DEFCON大会,眼看着5月1号就是议题征集截止日期。
拼一把!
四人小团队分工明确,4月20号左右开始验证攻击,全部验证完成之后已经到了4月28号,此时议题报告还没写,于是团队某位博士小哥哥被大家推了出去,赶在5月1号截止之前提交了议题。
8月11日,郑玉伟在DEFCON演讲这个选题。据说前几天他们团队做了一个统计,利用代理转账的交易有多少,扫描结果显示有三百四十多条。这个数字在庞大的交易中其实九牛一毛,从这三百四十多个交易中再筛选出处于同一组合约可能发生重放攻击的交易更少,也就是说目前尚没发现在野利用。
但仍然存在很大风险,在知道某个账户在存在漏洞合约上token数量很多的情况下, 攻击者甚至可以依照漏洞合约依葫芦画瓢部署一个新合约, 诱导用户,例如通过赠币帮忙测试的形式,在自己的新合约上做一次代理转账,就可以通过重放的方式,将用户在漏洞合约上的token都转走。倘若有人动了歪脑筋,那又会多一大批“天台伙伴”。
这种针对智能合约的重放攻击是否有修复方式?
郑玉伟表示,防护上,由于智能合约代码即是法律的特性,一旦部署不可更改。所以对于用户而言,确保在有漏洞的的合约上不要留余额。对于合约发行方而言,只能发行新合约,在新合约中修复漏洞,将原合约的用户迁移走。
这届黑客大会还有啥?
世界顶级信息安全会议BlackHat和DEFCON刚刚在美国拉斯维加斯落幕,有意思的议题还有很多。
比如360无线电安全研究部的两位小哥哥曹鸿健、秦明闯带来的Ghost Tunnel(“幽灵隧道”)攻击就是一种适用于隔离网络环境下的传输方式,利用wifi无线信号来传输数据。
攻击者利用GhostTunnel 与目标设备建立一个“隐蔽隧道”,在目标完全无感知的情况下与其进行数据通信。它可以通过USB-HIB把攻击的程序释放到目标上去,并植入木马或者窃取文件。
具体来说,不论是 windows 还是苹果、安卓,都有管理无线网络或者进行网络传输的一套系统API,这个系统API可以操作wifi模块,收发无线数据包。恶意代码通过HID方式植入到系统,并利用系统API操作,整个过程被攻击方是无感知的,无法从wifi网络状态看出任何问题。”
也就是说,只要掌握这种方式,你就可以轻易从图书馆后桌妹子电脑上窃取一波资料,如果里面有她的简历之类的更“收获颇丰”。
据曹鸿健说,这一攻击方式是他们在去年发现的,在问到有何手段检测或是避免时,他表示如果想发现这种攻击需要用一些特殊手段,比如可以通过对wifi流量进行审计,发现无线数据中的异常流量,比如对ghosttunnel 通信中的特征比对,还有就是根据大量异常的probe quest 和beacon 数据帧来判断。
至于避免,如果攻击代码已经植入,基本不可避免,只能防止其被植入。 可以从防止社会工程学攻击角度防御,不随便插入不可靠的usb设备。
另一个有意思的议题是关于Lora智能水表安全分析。
水表这个研究对象在所有议题中是最“亲民”的了(毕竟隔壁是炫酷的特斯拉),但这东西似乎家家户户都有,一旦被攻击十分麻烦。
曾颖涛告诉雷锋网,Lora是一种专利,是一种比较新的无线传输的方式。他们有对这种无线传输的方式有对接数据,厂商在用这些 Lora 传输方式的时候,认为这种传输方式是比较安全可靠的。
“但是我们团队自己做了一个小硬件,把一些射频的参数写入我们的射频芯片寄存器上",将自有的硬件伪造成网关,把水表传到网关的数据嗅探下来,然后分析数据内容。”
据曾颖涛说,他们找到一个市面上水表的厂商,发现可以从没有加密的数据中逆向得到传输的数据是什么,传输的水量是多少。比如他们可以在一个小区里面部署足够多的节点,把所有住户的数据清算进行用户数据分析,得到每一个住户的生活起居习惯是怎样的,甚至可以分析出职业的信息。
对于普通的吃瓜群众,隐私数据泄露足够可怕。
“或者我们可以伪造一个网关设备,在知道某住户水表ID之后,可以伪造ID设备给网关发一个数据,数据可以任意被我们修改,而且这种传输方式是不用物理接触水表的,只要在小区里面有部署足够多的嗅探节点,我们就可以把所有的ID保存下来。”
当然 Lora 同样可以部署在其他的领域上面,比如说一些阀门的控制,或者井盖、路灯之类的。一般的水表只是把自己探测到的传感器的数值传给网关端,网关端对数字进行一些校验和判断,没有下发指令的操作在里面,但是有些阀门控制之后是可以通过远程的方式把这些阀门进行控制,比如说重复的关闸和开闸。
试想一下如果躲在暗处之人能轻易操控你家中设备阀门,水表电表如果不算严重,那如果是煤改气阀门呢?更可怕的是普通群众对这种攻击方式根本无法察觉更不可能采取防御。
那是否有修复方法?
曾颖涛告诉雷锋网,针对Lora的攻击厂商可以对所有传输的数据内容进行加密处理,并在传输的数据中加入计数值和签名或者采用Lora联盟发布的LoraWan规范协议。