雷锋网编者按:“我们不生产币,我们是币的搬运工。”白帽汇安全研究院负责人邓焕如此描绘他所观察到黑客在区块链币世界的猖獗现象。“有些技术可以产品先行,但是自带金融属性的技术必须得安全先行。”白帽汇 CEO 赵武这样说。在专业的安全研究人员看来,黑客要想攻击区块链实在太简单了,那么自带金融属性的区块链又受到了哪些安全威胁?5月8日,白帽汇安全研究院联合安全智库发布了一份《区块链安全分析报告》,雷锋网截取了其中“区块链攻击对象分析”部分章节。
3.5.1 合约虚拟机
随着区块链技术的不断升级,区块链已经具备在链上繁衍出多种应用的功能,而实现这种功能的基础就是合约虚拟机(用于运行各种智能合约的平台),此技术的出现极大的提高了区块链的可扩展性,是区块链2.0的重要标志。
合约虚拟机的出现为合约代码提供了沙盒式的执行环境。
风险
合约虚拟机运行在区块链的各个节点上,接受并部署来自节点的智能合约代码,若虚拟机存在漏洞或相关限制机制不完善,很可能运行来自攻击者的恶意的智能合约。
针对合约虚拟机的安全风险,我们分析总结了以下攻击方式:
逃逸漏洞
虚拟机在运行字节码的时候会提供一个沙盒环境,一般用户只能在沙盒的限制中执行相应的代码,此类型漏洞会使得攻击者退出沙盒环境,执行其他本不能执行的代码。
逻辑漏洞
虚拟机在发现数据或代码不符合规范时,可能会对数据做一些“容错处理”,这就导致可能会出现一些逻辑问题,最典型的是“以太坊短地址攻击”。
堆栈溢出漏洞
攻击者可通过编写恶意代码让虚拟机去解析执行,最终导致栈的深度超过虚拟机允许的最大深度,或不断占用系统内存导致内存溢出。
此种攻击可引发多种威胁,最严重的是造成命令执行漏洞。
资源滥用漏洞
攻击者可以在虚拟机上部署一份恶意代码,消耗系统的网络资源、存储资源、计算资源、内存资源。
所以在虚拟机中必须要有相应的限制机制来防止系统的资源被滥用。
在以太坊中采用的是gas机制,攻击者想要在以太坊虚拟机上做更多操作,需要付出经济代价。
案例
以太坊短地址漏洞:由于EVM并没有严格校验地址的位数,并且还擅自自动补充消失的位数,使得合约多发送很多代币出来。
3.5.2 智能合约
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。
风险
智能合约本质上是一份代码程序,难免会有因为考虑不周的导致出现漏洞的情况,所以在发布一份智能合约之前,进行大量的模糊测试与白盒审计是必不可少的。
在将大量资金放入合约之前,合约应当进行大量的长时间的测试。
至少应该:
拥有100%测试覆盖率的完整测试套件(或接近它)
在自己的testnet上部署
在公共测试网上部署大量测试和错误奖励
彻底的测试应该允许各种玩家与合约进行大规模互动
在主网上部署beta版以限制风险总额
针对智能合约的安全风险,我们分析总结了以下攻击方式:
可重入攻击
当智能合约A调用智能合约B时,智能合约B可以在被调用的函数中写入“使智能合约A调用智能合约B”的代码,这样就造成了可重入攻击。
比较典型的一个案例:
1. 智能合约A向智能合约B发起提现请求
2. 智能合约B向智能合约A转账,并调用智能合约A的回调函数
3. 智能合约A的回调函数中被写入的操作是“智能合约A向智能合约B发起提现请求”。
4. 又回到了步骤1,一直循环步骤1234直到不满足循环条件。
5. 提现结束
调用深度攻击
在合约虚拟机中,会对智能合约的互相调用的深度定一个阈值,超过这个深度调用就会失败,例如在以太坊EVM中,调用深度被限制为1024。
调用深度攻击可以让合约调用失败,即使这个调用在逻辑上不存在任何问题,但是在虚拟机层面以及不被允许了,因为调用深度达到了虚拟机中的阈值,超过阈值不再往下执行。
攻击者可以通过控制调用深度,来使某些关键操作无法执行,例如:转账、余额清零等。
交易顺序依赖攻击
智能合约的执行会随着当前交易处理顺序的不同而产生不同的结果。
场景:攻击者发布一个解题合约,在合约中写给出丰厚的解题奖励。等有人提交了正确答案后,此时的答案还需要经过其他节点的确认,合约才会执行奖励操作。此时攻击者可以提交一个将奖励额度调低的交易,这笔交易肯定是在奖励操作的后面,理论上不会造成给答题人带来损失。
但是,在区块链项目中,交易顺序并不是一成不变的,例如在以太坊中,交易顺序就会随着交易发布者的gas(交易费)的高低来决定先确认哪笔交易。
此时若攻击者更改奖励额度的交易给的交易费比较高,验证节点会先执行这笔交易,最终会导致答题人最后得到的奖励额度是调低的额度。而攻击者以一个较低的成本就买到了正确答案。
时间戳依赖攻击
如果智能合约在敏感操作中依赖时间戳,可能会导致执行结果被预测。
场景:若发布一个抽奖合约,抽奖结果由当前区块的时间戳和其他因素组合计算而来,攻击者可以通过提前尝试不同的时间戳来计算这个抽奖结果,从而导致结果被预测。
误操作异常攻击
当合约A调用另外一个合约B的操作的时候,合约B操作的执行可能会因为种种原因导致执行失败,从而退回到未执行前的状态,此时合约A若不检查合约B执行的结果继续往下执行,会导致很多问题。
场景:合约A调用合约B的提现操作后并在合约A的余额中增加与提现额度一样的数值。此时若没检查合约B的执行提现操作的返回值,就可能会导致合约B中的余额并没减少,而合约A中的余额却已经增加了。
整数溢出攻击
在常见的程序语言中,对整数类型的变量一般都会有最大值和最小值。智能合约本质上也是一份程序代码,合约中的整数也会有相应的最大值和最小值。一旦变量所存储的值超过了最大值就会发生整数上溢错误,导致变量最后存储的值为0,反之则是整数下溢错误,变量最后存储的值为变量最大值。当然,溢出的情况并不限于以上整数上溢或者整数下溢,还可能会在计算、转换等过程中发生溢出。
场景:假设某个智能合约中的余额为无符号整数类型,此类型的范围为0~65535,当攻击者通过某种方法使余额小于0时,它在智能合约中的余额将下溢为65535。使余额大于65535时,它在智能合约中的余额将上溢为0。
基于以太坊的多个ERC20智能合约就遭受过整形溢出漏洞的影响,如图:该漏洞就是一个典型的整形溢出导致,绕过业务逻辑,能够刷出大量的token。
ERC20相关的智能合约中就曾曝出过batchTransfer(CVE-2018–10299),SmartMesh 合约中transferProxy函数,proxyTransfer函数(CVE-2018-10376),UET合约的 transferFrom函数(CVE-2018-10468),都出现过整形溢出的问题。
案例
1. 2016年6月发生了一起史上最大的智能合约事件,它就是著名的The DAO攻击事件。导致价值6000万美元的以太币被盗,迫使以太币被硬分叉为ETH和ETC。
2. 2017年7月,以太坊发生了Parity多重签名钱包被盗事件,黑客从从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。
3. 2018年4月,BeautyChain(BEC)智能合约中出现了一个灾难性的漏洞(整形溢出漏洞),导致损失约10亿美元
4. 2018年4月, SMT的智能合约漏洞(整形溢出)。
3.6.1 交易平台
3.6.1.1 网络带宽
目前在网络中有许多以区块链作为底层技术的加密货币的交易平台,用户在通过交易平台来购买和出售加密货币,对于主流的交易平台,每天都有大量的用户在平台上进行交易,其网络带宽对于交易平台来说至关重要。
风险
针对交易平台的安全风险主要为拒绝服务攻击:
拒绝服务攻击
由于交易平台对于网络带宽的存在高需求,所以一旦发生DDoS攻击,对于平台和整个行业来说是非常严重的。若交易平台被DDoS攻击,不但交易平台蒙受损失,区块链货币的交易量也将大大减少,间接影响区块链货币的涨跌,在我们统计的安全事件中,以及调查的相关案例显示目前只要是交易平台上线都遭受到DDOS攻击过。
场景:攻击者首先通过DDOS使平台无法访问,此时通常一定会有相关的新闻资讯报道这次事件。然而普通大众并分不清拒绝访问攻击与入侵的区别,在自己所使用的交易平台被“攻击”后,为了自己的资金安全通常会选择转向别的平台,导致此平台资金、用户流失。
案例
1. 2017年5月12日,Poloniex交易平台遭受了严重的DDoS攻击,BTC/USDT的交易价格一度困于1761美元,绝大多数用户都无法执行订单或是提取资金。
2. 2017年12月12日,比特币交易平台Bitfinex遭受严重DDoS攻击,API瘫痪。消息传出后,比特币下跌1.1%,报16968美元。
3.6.1.2 账户体系
账户是交易平台必须具备的基础配置,账户是开户的凭证,包含账号和密码,意味着你成为他们的用户,平台必须根据相关条约对你账号的隐私、安全负责。
风险
交易平台为保证用户的资金安全需要建立高强度的账户安全体系。具体需要做到如下几点:
1. 防撞库,人机识别
2. 进行敏感操作的时候启用多因素认证
3. 逻辑缜密,务必要杜绝“密码找回漏洞”、“登陆绕过”、“越权访问/调用”等漏洞
4. 防暴力破解,对登陆频率进行限制
5. 防cookie泄露,开启httponly,杜绝XSS漏洞
6. 防跨站请求伪造,提交动作尽量使用POST并且增加token,杜绝CSRF漏洞
7. 若使用SSO、oauth等登陆方式,务必严格遵循协议标准实现
8. 账号风控
针对交易平台账户体系的安全风险,我们分析总结了以下攻击方式:
撞库攻击
由于目前的网民普遍安全意识不足,经常会使用通用的用户名和密码,在不同的网站上使用同样的账号和口令登陆。
导致攻击者通过手机互联网上已公开或还未公开的用户名、邮箱、密码等信息来在要攻击的网站上通过程序批量尝试。
场景:攻击者通过网络钓鱼或者收集网络上已公开的与区块链相关网站的用户数据(包括用户名、密码等)在目标交易平台上使用程序自动化逐个尝试,导致账户安全受到极大威胁。
穷举攻击
若网站不对登陆接口做请求限制或者风控,会导致攻击者可以无限发送请求逐个测试可能的值来暴力破解某些关键信息。
场景:
1. 在短信验证中,若不对短信验证码的有效期做限制或者验证接口做限制,很容易短信验证码被破解。
2. 若登陆接口未做请求限制,攻击者可以通过大量的密码字典来暴力破解某个账户的密码。又或者说,攻击者可以通过大量的用户名字典来暴力破解密码为某个值的用户,比如密码为123456的用户。
单点登陆漏洞
在账户体系中此类漏洞比较隐蔽,攻击者可以通过CSRF、XSS等手段来窃取用户登陆的ticket,从而导致用户账号被窃取。
主要有以下攻击面:
● 未使用HTTPS导致中间人劫持
● Jsonp接口泄露ticket
● CSRF漏洞窃取ticket
● XSS漏洞窃取ticket
oAuth协议漏洞
oAuth协议到2.0实际上已经足够安全,但是只是协议安全,并不代表它的最终实现就没有问题,在安全意识不足的情况下很容易导致出现一些潜在威胁,导致攻击者可以通过CSRF等手段来越权登陆他人账号。
主要有以下攻击面:
● 利用CSRF漏洞绑定劫持
● 利用redirect_uri授权劫持
● 利用scope权限控制不当越权访问
案例
2017年10月2日,OKCoin旗下交易所出现大量账户被盗情况,不完全统计损失金额在一千余万人民币左右,用户怀疑平台已被攻击,或有已被关闭平台的交易所员工向黑客泄漏了平台用户的账户信息,黑客通过用户信息破解账户密码登录平台,然后在平台上完成数字资产转移。
3.6.1.3 支付体系
交易平台内充值、提现都涉及到了支付,所以完整的支付体系也是交易平台必备的基础配置。
风险
针对交易平台支付体系的安全风险,我们分析总结了以下攻击方式:
支付漏洞
凡是涉及到支付,则就有可能出现支付漏洞,且支付漏洞直接涉及到资金的安全问题,无论对平台或是用户来说都是高风险,必须要谨慎对待。以下总结了支付体系中常见的问题:
1. 修改支付价格问题:在支付时未对支付价格做后端验证,导致可以将价格调低甚至设为负数来通过交易获得收入。
2. 修改购买数量问题:在支付的过程中,数量也同时决定着价格,比如:1个数量商品对应的是100,2个数据就是200,那么当你修改这个值数量值为负数时,那么其金额也会变为负数,最后就会导致支付问题的产生。
3. 最大值支付问题:通过购买大量商品使得最后的支付数额非常大,后端可能存在大整数溢出漏洞,当数值超过了某个阈值后,得到的结果会为0或者负数。
4. 越权支付问题:后端缺少验证,导致可通过改包修改当前用户ID使用他人余额进行支付。
案例
目前暂无实际攻击曝光,但在某些层面可能存在致命安全隐患
3.6.1.4 业务逻辑
业务逻辑即交易平台的业务流程或用户操作流程,还包含交易平台的交易策略和规范。
风险
针对交易平台业务逻辑的安全风险,我们分析总结了以下攻击方式:
逻辑漏洞
业务逻辑必须严谨,必须要对每段业务逻辑代码进行大量的模糊测试与代码审计,因为此类漏洞很难用传统的方式发现,只能借助于人的逻辑思维去思考其中可能出现的问题。目前常见的业务逻辑漏洞有如下几种:
● 越权漏洞
● 验证码漏洞
● 条件竞争漏洞
● 认证漏洞
案例
目前暂无实际攻击曝光,但在某些层面可能存在致命安全隐患
3.6.2 首次代币发行(ICO)
ICO是类似于IPO的一种区块链项目融资方式,用于项目的起步资金,与IPO不同的是:ICO是一种以币换币的融资行为,一般以比特币或以太坊换取该项目代币。
风险
针对目前ICO的业务形态,已经发生了各种针对ICO业务的特定攻击场景如下:
篡改攻击
ICO在募集资金的时候,一般会在项目官网上挂出收款地址,然后投资人会陆续往此地址转账以换取相应代币。
攻击场景:黑客通过域名劫持、web漏洞、或社会工程学等等之类的攻击手段来篡改项目官网上的收款地址,此之后项目募集到的资金便落到了黑客的手中。
钓鱼攻击
攻击者利用社会工程学等手段来冒充官方,使用户向攻击者的钱包地址中转账。
攻击场景:
1. 利用近似域名+高度仿冒网站欺骗投资者
2. 利用电子邮件散步虚假信息,如ICO项目的收款地址更改通知等
3. 在社交软件、媒体上散步钓鱼信息来欺诈投资者
案例
2017年7月,CoinDash项目ICO收款地址遭到黑客篡改,价值约1000万美元的eth流入黑客钱包。
3.6.3 矿工
3.6.3.1 矿机系统
普通的家用PC、服务器等,并不是挖矿最合适的设备。一些厂商为了减少挖矿成本以及提高挖矿效率,根据币种的算法专门研发出了相应的挖矿设备。并在上面搭建相应的访问来提供远程访问以及控制,这种专门用来进行挖矿的设备即被称为矿机。
风险
设备厂商们的安全防护意识是参差不齐的,而且由于其闭源的特性,其代码的安全性无法被大众检查,一旦出现安全问题,结果就是致命的。
而且设备厂商是否会在设备中穿插后门进行远程控制,亦或是偷偷窃取挖矿产出,这些都还有待商榷。
针对矿机系统的安全风险,我们分析总结了以下攻击方式:
0day漏洞攻击
矿机系统大多都是属于通用系统,很少会定制开发。一般是厂家售卖矿机时自带的,多个厂商肯能会使用同一套系统,只是贴牌配置不一样的硬件。
没有绝对安全的系统,矿机也不例外,一旦某个矿机系统被发现存在0day漏洞[15],那系统的安全壁垒将瞬间被打破,攻击者可以利用漏洞拿到修改权限后进行奖励接收地址篡改然后劫持用户的奖励。
所以有必要对矿机进行访问控制以及网络隔离,以及相应的防护来抵御0day漏洞攻击。
渗透攻击
目前已经有组织对矿机进行持续性的渗透攻击,利用漏洞组合拳,最终获取到系统的篡改控制权限威胁矿机的系统安全,该攻击方式不限制于某一特定漏洞,最终以拿到系统权限为目的。
弱口令攻击
目前市面的矿机系统都是以B/S架构,在访问矿机系统一般是通过web或者是别的途径,若是在矿机上使用弱密码,则会极易遭到入侵。
奖励接收地址篡改
在挖矿主机系统被攻陷后,可能利用各种漏洞,最终黑客目的都是为了获取相关利益,而最直接的就是通过修改奖励的接受地址来使受害者的收获全部被黑客获取。
案例
1. 2017年4月份,比特大陆旗下蚂蚁矿机被指存在后门,可导致矿机被远程关闭。若此攻击发生,将导致比特币区块链中损失大量算力。
2. 以下某挖矿系统存在弱口令,可导致比特币接受地址被篡改。
3.6.3.2 矿池
由于比特币全网的运算水准在不断的呈指数级别上涨,单个设备或少量的算力都无法在比特币网络上获取到比特币网络提供的区块奖励。在全网算力提升到了一定程度后,过低的获取奖励的概率,促使一些“bitcointalk”(全球最大的比特币论坛)上的极客开发出一种可以将少量算力合并联合运作的方法,使用这种方式建立的网站便被称作“矿池”(Mining Pool)。
在此机制中,不论个人矿工所能使用的运算力多寡,只要是透过加入矿池来参与挖矿活动,无论是否有成功挖掘出有效资料块,皆可经由对矿池的贡献来获得少量比特币奖励,亦即多人合作挖矿,获得的比特币奖励也由多人依照贡献度分享。
截止2018年4月,全球算力排名前五的比特币矿池有:AntPool、BTC.com 、BTC.TOP、ViaBTC、F2Pool,目前全球约70%的算力在中国矿工手中。(以上数据来至https://btc.com/stats/pool)
风险
针对矿池平台的安全风险以及矿池本身在区块链网络的特殊角色,我们分析总结了以下影响区块链网络的攻击方式:
算力伪造攻击
矿池会通过某种特定的工作量证明检验算法来检验当前矿工的实际算力,但是在算法的实现上可能不一定完美无瑕,当算法的实现上存在某种漏洞可以虚报算力时,会给矿池平台带来很大的经济损失。
因为当前矿工实际上并没有给矿池贡献那么高的算力,却拿了与算力相当的奖励分配,对于矿池中的其他矿工来说极其不公平。
场景:黑客通过寻找矿池算力检验算法的漏洞来虚报算力,然后获取到与实际算力不想当的超额奖励。
扣块攻击
也叫做藏块攻击。在矿工参与矿池进行挖矿的过程中,只要有一个矿工解题成功,题解会上交给矿池,整个矿池所有的矿工便会共享这次的解题成果,并按照算力贡献大小来分配奖励。
但在实际情况中,矿池中的矿工可以不遵守规则,在得到题解后不回传给矿池,而是选择私吞,在这种情况下就会造成矿池利益的极大损失。
场景:矿池中的某节点在挖到区块之后并不上交给矿池,而是选择“私吞”,这样既能享受矿池所带来的福利,又能从挖矿中获得利益。
自私采矿攻击
自私采矿攻击(Selfish Mining Attack)[11]是针对区块链的一种典型攻击。由于挖取像比特币这样的加密货币,对于一个矿工(Miner)来说,需要高计算能力来解决密码难题(即工作量证明),因此采矿变得十分困难。鉴于此,一组矿工(Mining pool,采矿池)通常会相互组合起来,并在成功解决密码难题之后,分享收到的奖励。这样有助于个体矿工在单独采矿时产生较连续恒定的收入而不是很少的收益。Eyal和Sirer认为如果存在一群自私的矿工,采用自私的采矿战略,并获得成功,就可能会使诚实矿工的工作无效。这种自私采矿攻击表现为:一个恶意的采矿池决定不发布它发现的块,进而创建一个分叉,因此,网络中就存在由诚实矿工维护的公共链和恶意采矿池的私人分叉恶意采矿池在此私人分叉下继续进行挖掘,当私人分叉比公共链长的时候,恶意采矿池就发布该私人分叉,由于该分叉是当前网络中最长的链,因此会被诚实的矿工认定为合法链,所以原公共链及其包含的诚实数据将被丢弃。研究结果表明,一般情况下恶意采矿池采用自私采矿策略将获得更多的收益。
中心化问题(算力过于集中问题)
目前因为矿池的存在,违背了区块链去中心化的原则,当矿池做大,算力提高后,矿池变得过于集中,当算力达到全网的51%后,从理伦上来说,如果能够控制整个网络达到或超过51%以上的算力,将可以垄断开采权、记账权、分配权,将影响区块链的生态安全,这样加密货币的信用体系将不复存在,加密货币体系也将彻底摧毁。
案例
1. 2014年5月份,Eligius矿池遭受扣块攻击,损失约300个比特币,在当时价值约16万美元
3.6.4 普通用户
3.6.4.1 系统资源
在使用PoW共识机制的区块链中,存在一个非常重要的角色,那就是“矿工”,他们的主要作用是:
1. 解题:矿工需要通过计算来解决每过一段时间产生的“数学难题”,并通过“解题答案”来证明自己的工作结果,从而获取报酬。
2. 对账:对区块内的交易合法性以及其他矿工广播的“解题答案”进行核对,确认交易没有造假以及“解题答案”是正确的并盖章。
3. 记账:核对交易的合法性以及“解题答案”后,将这段时间的交易打包进新区块中。
风险
针对目前用户的普通用户计算资源被滥用,用于挖矿的安全风险,我们分析总结了以下一些风险点:
挖矿傀儡
并不是人人都愿意当“矿工”。对于黑客而言,通过一些漏洞获得一些主机的权限或者网页端来挖矿是很容易的,黑客可以轻易地在被入侵主机上部署挖矿程序,消耗主机的系统资源与电力,以此来获取利益,目前市面上被黑客应用最多的就是门罗币(Monero),因为植入部署方便,导致现在很大一部分黑产团体从原来的篡改网页,到现在直接植入挖矿脚本在网页里。
案例
1. 2017年下旬,有人发现很多网站首页中插入了coinhive平台的JS挖矿代码,使得大量访问网站的人系统变慢,疑似为黑客篡改首页权限导致。
2. 2018年初,上百款《荒野行动》游戏辅助被植入挖矿木马,利用游戏主机的高性能来挖矿获取利益。
3. 2017年至现在,很多攻击者利用“永恒之蓝”漏洞获取大量主机权限,然后在受害者的系统内长期潜伏挖矿。
3.6.4.2 钱包
区块链的钱包指的是存储区块链资产的地址和私钥的文件。
目前主流的钱包分为冷钱包和热钱包。冷钱包是没有联网环境的,如市面上的硬件钱包就是冷钱包,由于其不联网的特性,使得它的安全性要在热钱包之上,但不方便交易。热钱包是在线的,例如电脑客户端钱包、手机APP钱包、网页钱包等,都属于热钱包,它的交易是很方便的,但是安全性相对于冷钱包来说要低很多。
风险
针对钱包的安全风险,我们分析总结了以下攻击方式:
钱包客户端RPC API风险
区块链项目的客户端中目前通常都会有RPC API接口,给用户提供一个可程序化操作的接口,其中涉及到用户的一些敏感操作,例如:转账。
所以API的访问控制和鉴权至关重要,在没有鉴权和访问控制的情况下会造成如下攻击场景,以eth客户端geth为例。
场景:
1. 用户开启RPC API,此时API只能做常规查询操作,并不能转账
2. 用户执行解锁钱包操作,此时API能执行转账操作并且无任何鉴权
3. 攻击者趁机在此API上执行转账操作
4. 代币窃取完毕
钓鱼攻击
在目前的互联网环境中,欺诈随处可见,这种攻击手段在区块链应用上也同样受用。攻击者可以伪造某个钱包客户端,无论从界面和操作上都可以做到和真钱包没有区别,可能他们只是在你转账的时候窃取你的私钥信息或者在转账地址上动手脚,就可以轻易地偷偷窃取你的资产。
所以,客户端一定要在官网下载,并验证官网发布的客户端文件hash是否与下载的客户端文件hash一致。
私钥窃取
因为私钥信息至关重要,所以很多人会选择将钱包私钥文件多点备份,而备份得多或者备份点不安全都有可能导致钱包私钥泄露。经调研,目前针对比特币的wallet.dat文件就出现在各个互联网中,例如:OSS服务、网盘、GitHub、NAS服务器、Web服务等等互联网可接入的地方,都能看到密钥的存储,这是极其危险的,甚至已经有攻击者开始针对密钥文件进行专门扫描,以及开发相关的木马病毒进窃取。
钱包软硬件漏洞攻击
钱包软件本身可能因为其本身或是开放的一些服务存在漏洞,影响用户的资金安全。
硬件厂商提供的钱包只是将钱包与线上网络隔离,并不能保证其本身的安全性就足够,由于其是封闭的,其代码质量对于大众是未知,且不良厂商在其中穿插后门也不是并无可能。
在线钱包账号窃取
由于在线钱包其方便、快捷等特性,使得很多人直接选择使用在线钱包。所以个人的资产安全与服务商的安全是一个强绑定的关系,个人的资产过分依赖于外部保障其实和中心化的应用比较类似,这与区块链根本理念相冲突,同时也给个人资产带来的很大风险。
案例
1 2013年11月,比特币在线钱包服务商Inputs.io遭受黑客攻击,黑客透过电子邮件账号进行入侵,进而劫持代管账号,从中盗取了4100个比特币(在当时折算为130万美元)。
2 莱特币假钱包客户端盗币事件,攻击者通过修改开源钱包源代码,将显示的钱包地址固化为攻击者的钱包地址再重新编译,用户使用此地址接收转账的时候很自然的就转账到了攻击者的账户中。
3 Ledger 硬件钱包漏洞,该漏洞让黑客可以在设备发货之前和发货之后窃取密码。
4 2015年2月23日,比特币钱包运营商比特币存钱罐被盗,比特币存钱罐官方表示:黑客于2014年6月30日入侵了平台的Linode账号,并修改了Linode账号密码和服务器的root密码,从而入侵了服务器并且获得了服务器的控制和管理权限,导致比特币被盗。
5 在社区上,经常有用户表示自己的比特币余额被盗,而原因大多与钱包私钥泄露有关。
6 2018年3月25日,币安发布公告表示部分社区ERC20钱包用户收到一封冒充Binance名义发送的“Binance开启ERC20私钥绑定”诈骗邮件,邮件主要是为了盗取用户的ERC20钱包私钥。
7 2018年1月份,名钱包开发商 Electrum 近期针对其比特币钱包的 JSONRPC 接口漏洞发布了安全补丁,这个漏洞能使攻击者通过JSONPRNC接口获取私人数据和加密货币。
3.6.4.3 交易所账户
要在交易所中进行交易需要注册相应的账户,有了交易所账户就可以很方便的在交易所内进行买入卖出交易,相当于交易所账户掌握了你的数字货币的买卖权。
风险
在交易所中的账户安全需要在各个方面都有保障,只要有一个短板就会面临危险。
针对交易所账户的安全风险,从用户角度来说,我们分析总结了以下攻击方式:
钓鱼攻击
通过仿冒交易所网站的域名和页面来达到从视觉上欺骗受害者的手段,一般用来窃取用户的交易所登陆口令,攻击者拿到相关口令后开始进行转账操作。
中间人劫持攻击
攻击者可以在流量中转处截获流量,例如:路由器、网关等流量出口。不过好在目前多数的交易所一般都是采用https,在此方面问题不算大,但是不排除在某些API接口的子域名未使用https。
木马劫持攻击
木马通过按键记录,或是hook浏览器的方式来获取交易所账号的登陆口令或是直接劫持用户的资产,在历史安全事件就有攻击团体再各种相关虚拟货币网站,论坛社区发布带有木马的APP程序,来盗取劫持用户。
案例
1. 2018年3月8日,币安网公布部分币安钓鱼网站案例
2. 2017年8月份,一款名为Trickbot的木马就针对包括Coinbase在内的几家数字货币交易所增加了web注入攻击的功能,在受害者购买数字货币的时候和会将接受钱包重定向到攻击者的钱包,让用户误以为转账成功,其实最终转账操作都进了攻击者的钱包。
3.6.4.4 交易所API
各大交易所为了满足用户需要调用平台数据的需求,会开放一些API提供给用户使用。交易所API大致分为两类:
1. 公共 API 可以参考交易所的订单状况、公开的交易记录、交易版信息。
2. 私有 API 可以确认交易所的新订单及其取消、个人余额等信息,需要相应的key才可以使用。
风险
针对交易所API的安全风险,我们分析总结了以下攻击方式:
关键Key&Token窃取
私有API一般都涉及到用户的一些敏感操作,例如:买入、卖出等操作。所以,API key一旦泄露,很可能会使自己的账户蒙受经济损失。而大部分人,甚至包括程序员都不一定有这种安全意识,存在key泄露的隐患,例如一些使用者,开发者可能有意或者无意就把相关的代码配置信息同步在GitHub、公开网盘等互联网公共区域,互联网任意用户都能轻易的通过一些检索把这些敏感信息找出来。
案例
2018年3月8日,币安网大量用户API key泄露,通过泄露的key直接操作用户买卖,导致一万余枚的比特币被用于购买其他币种,造成币市动荡。而某些交易所的API key到目前截稿为止在GitHub还能搜到。
雷锋网注:若想获取整份报告,链接如下:https://www.bcsec.org。