区块链攻击对象分析——网络层与业务层

网络层

P2P网络

P2P网络传输会暴露双方的IP,同时每个节点的安全性参差不齐。这给了攻击者进行全网扫描发起攻击的可乘之机

日食攻击

囤积和霸占受害者的点对点连接间隙,将节点保留在一个隔离的网络中,阻止最新的区块信息进入日食节点

窃听攻击

将用户标识与IP关联以追溯用户信息

BGP劫持

边界网关协议(BGP)是互联网的关键组成部分,用于确定路由路径。使用BGP劫持技术可以误导、拦截流量,破坏共识机制、交易等各种信息

分割攻击

将区块链网络划分成两个或多个不相交的网络,形成分叉,攻击停止后,以最长的链为主链,废弃其他链

  • 首先,攻击者发动BGP劫持,划分一个大网络,一个小网络
  • 在小网络中,攻击者将自己的加密货币卖出,兑换为法币
  • 经过小网络的“全网确认”,交易生效
  • 攻击者释放BGP劫持,大小网络互通,小网络上的交易被否定,电子货币回到攻击者手中

延迟攻击

攻击者利用BGP劫持来延迟目标的区块更新,而且不被发现;在目标请求最新区块的时候,将它的请求修改为获取旧区块的请求,使目标获取旧的区块(POW的缺陷)

  • 攻击者修改矿工获取最新块的请求
  • 矿工无法获取新区块
  • 矿工算力和奖励丧失

节点客户端漏洞

利用漏洞扫描、0day等方式对节点客户端进行攻击,目标是获取节点控制权限

拒绝服务攻击

通过大流量或者漏洞的方式攻击P2P网络中的节点,使节点瘫痪,总算力受损,易遭受51%攻击。进行拒绝服务攻击的成本较低(僵尸网络)

广播机制

区块链中,节点与节点互相连接,节点将信息传播给其他节点后,其他节点会进行验证,无误后继续传播

双重支出攻击

种族攻击

攻击对象为面对0确认的交易便立刻进行付款的商家,欺诈者直接向商家发送支付给商家的交易,并发送冲突的交易。第二个冲突交易很可能被开采出来,并被承认,于是付款交易作废。

芬尼攻击

攻击对象为接受0确认付款的商家,攻击者(A)首先生成从A到B地址转账的块,并且不广播它。然后攻击者使用地址A向商家(C)付款,商家花费几秒钟确认双重花费,无误后转让商品。攻击者广播之前存储的块,先前的交易优先于该次交易,付款交易作废。

Vector76攻击

也称为单一确认攻击,是种族攻击和芬尼攻击的结合,成功的攻击会使攻击者花费一个块,他们需要通过不传播它来“牺牲”一个块,而是仅仅将其转让给被攻击的节点。

替代历史攻击

即使商家等待确认,该攻击也是有效的,但风险较大。攻击者向商家提交支付的交易,同时私下挖掘其中包含欺诈性双重支出交易的分支。等待n次确认后,商家发送产品,如果攻击者此时碰巧找到n个以上的区块,付款交易作废。

51%攻击

如果攻击者控制全网算力的一半以上,则替代历史攻击一定成功。攻击者可以坚持自己的私有分支,直到它比诚实节点网络建立的分支更长,替代主链。

交易延展性攻击

攻击者侦听P2P网络中的交易,利用交易签名算法的特征修改原交易中的input签名,生成拥有一样input和output的新交易,然后广播到网络中形成双花。该攻击可用来二次存款或双重提现。

验证机制

区块链的运行为了维持数据的有效性和真实性,必须要有相应的验证机制来限制节点必须将真实信息写入区块中

验证绕过

验证机制的代码是区块链应用的核心之一,一旦出现问题将导致区块链的数据混乱,而且 核心代码的修改与升级都涉及到区块链的分叉问题,所以验证机制的严谨性显得尤为重要。必须要结合验证机制代码的语言特性来进行大量的白盒审计或是模糊测试,保证验证机制的不可绕过

业务层

交易平台

网络带宽

对于主流的交易平台,每天都有大量的用户在平台上进行交易,其网络带宽对于交易平台来说至关重要。针对这方面的主要攻击类型为拒绝服务攻击。由于交易平台对于网络带宽存在高需求,所以一旦发生DDOS攻击,对于平台和整个行业造成的损失十分严重——若交易平台被DDOS攻击,不但交易平台蒙受损失,货币交易量减少,间接影响货币的涨跌

账户体系

平台需根据相关条约对用户的账户隐私、安全负责

  • 防撞库,人机识别
  • 进行敏感操作时启用多因素认证
  • 防COOKIE泄露,全站https
  • 防止CSRF
  • 逻辑清晰无漏洞
  • 防暴力破解
  • 若SSO、oauth等登陆方式,遵循协议标准实现
  • 帐号风控

撞库攻击

由于目前网络用户普遍安全意识不足,经常会使用通用的用户名和密码,在不同的网站上使用相同的帐号和口令登陆,攻击者可以通过网络钓鱼或者收集网络上公开的与区块链相关网站的用户数据,在目标交易平台上进行自动化的尝试.

穷举攻击

若网站不对登录接口进行请求限制或者风控,会导致攻击者可以无限发送请求来暴力破解信息。在短信验证中,不对短信验证码做有效期限制或者验证接口限制,会导致验证码被破解.若登陆接口未做限制,攻击者可以通过字典爆破单一用户的密码,或者通过特定密码爆破使用该密码的用户

单点登陆漏洞

攻击者可以通过CSRF、XSS等手段窃取用户登陆的ticket,导致用户帐号被盗。主要有以下几个攻击面

  • 未使用https导致的中间人劫持
  • Jsonp接口泄露
  • CSRF漏洞
  • XSS漏洞

oAuth协议漏洞

  • Auth 2.0只是协议安全,并不代表其最终实现无安全漏洞。主要有以下攻击面
  • 利用CSRF漏洞绑定劫持
  • 利用redirect_url授权劫持
  • 利用scope权限控制不当造成的越权访问

支付体系

交易平台内充值、提现都涉及到了支付,完整的支付体系是交易平台必备的基础配置

支付漏洞

  • 修改支付价格问题:在支付时未对支付价格做后端验证,导致可以将价格调低甚至设为负数来获得收入
  • 修改购买数量问题:在支付过程中,数量也决定着价格。当数量为负,价格也为负
  • 最大值支付问题:通过购买大量商品使得最后的支付数额非常大,可能导致整型溢出漏洞
  • 越权支付问题:后端缺少验证,导致可以通过改包修改当前用户ID,使用他人的余额进行支付

业务逻辑

业务逻辑即交易平台的业务流程或用户操作流程,还包含交易平台的交易策略和规范

逻辑漏洞

  • 越权漏洞
  • 验证码漏洞
  • 条件竞争漏洞
  • 认证漏洞

首次代币发行(ICO)

篡改攻击

ICO在募集资金的时候,一般会在项目官网上挂出收款地址,然后投资人会卤素往此地址转账以获取相应代币。黑客可通过域名劫持、web漏洞或社会工程学等方式篡改项目收款地址。

钓鱼攻击

攻击者利用社会工程学手段冒充官方,收到转账

  • 利用近似域名+高度仿冒网站欺骗投资者
  • 利用电子邮件散布虚假信息,如ICO项目的收款通知
  • 在社交软件、媒体上散布虚假信息

矿工与矿池

矿机系统

矿机是根据币种算法专门研发的设备。设备厂商们的安全防护意识参差不齐,而且由于其闭源的特性,其代码安全性无法被大众检查。一旦出现安全问题,结果是致命的。设备厂商可能在设备中穿插后门进行远程控制,亦或是偷偷窃取挖矿产出。

0day漏洞攻击

矿机大多数是属于通用系统,多个厂商可能会使用同一套系统,只是贴牌配置不一样的硬件,一旦某个矿机系统发现0day漏洞,攻击者可以利用此漏洞获取矿机的完全控制权限。因此,有必要对矿机进行访问控制和网络隔离,对0day的出现制定相应的防护措施。

渗透攻击

利用多种漏洞获取到矿机系统的控制权限,目前已经有组织对矿机进行持续性的渗透攻击。

弱口令攻击

目前的矿机系统都是B/S架构,若在矿机上使用弱密码,则极易遭受入侵

奖励接收地址篡改

黑客可以通过篡改接收奖励的地址获取受害者的全部收入

矿池

本质上是一种将少量算力合并联合运作的方法。无论是否成功挖掘出有效的数据块,皆可由对矿池的贡献来获得少量的比特币奖励。目前约70%的算力在中国矿工手中。

算力伪造攻击

矿池会通过某种特定的工作量证明检验算法来确定矿工的实际算力。黑客可以通过寻找矿池算力检验的算法漏洞来虚报算力,然后获取到与实际算力不符的超额奖励。

扣块攻击

在矿工参与矿池进行挖矿的过程中,只要有一个矿工解题成功,所有人将共享解题成果,并按照算力大小来分配奖励。矿工若不遵守规则,得到题解后不传回给矿池,会对矿池利益造成极大的损失。

自私采矿攻击

恶意采矿池决定不发布它发现的块,进而创建一个分叉,此时网络中存在由诚实矿工维护的公共链和恶意采矿池的私人分叉。当私人分叉比公共链长的时候,恶意矿池发布分叉,原公共链及其包含的诚实数据将被丢弃

中心化问题

矿池的存在违背了区块链的去中心化原则。当矿池做大,算力达到全网51%时,加密货币的体系将被摧毁

普通用户

系统资源

在POW机制中,矿工的主要作用为

  • 解题:通过答案来证明自己的工作结果,从而获取报仇
  • 对账:对区块内交易的合法性和其他矿工的答案进行核对
  • 记账:将交易打包至新区块中

挖矿傀儡

对于黑客而言,通过一些漏洞获取主机的权限或者网页端挖矿是很容易的。通过在被入侵的主机上部署挖矿程序,消耗主机的系统资源和电力,由此获利。黑客可以直接将挖矿脚本植入到网页内,网页访问者就变成了矿工。

钱包

区块链的钱包指的是存储区块链资产的地址和私钥文件。目前的钱包分为冷钱包和热钱包,冷钱包没有联网环境,如市面上的硬件钱包。热钱包是在线的,如电脑客户端钱包等。

钱包客户端RPC API风险

区块链项目的客户端中目前通常会有RPC API接口,涉及到用户的敏感操作。在没有鉴权和访问控制的情况下会造成如下攻击场景

  • 用户开启RPC API,此时API仅能进行非敏感操作,不能转账
  • 用户执行解锁钱包操作,此时API能进行转账而无任何鉴权
  • 攻击者趁机在此API上执行转账操作
  • 代币窃取完成

钓鱼攻击

攻击者恶意伪造某个钱包客户端,在转账时窃取私钥信息或是在篡改转账地址,窃取资产。虚拟货币的客户端一定要在官网下载,并验证hash

私钥窃取

由于私钥信息至关重要,因此很多人会选择备份私钥文件,而备份点不安全会导致私钥泄露

  • OSS服务
  • 网盘
  • Github
  • NAS服务器
  • Web服务

已经有攻击和开始针对密钥文件进行专门的扫描,以及开发相关的木马病毒进行窃取

钱包软硬件漏洞攻击

钱包软件本身可能因为其本身或是开放的一些服务存在漏洞,影响用户的资金安全。硬件厂商提供的钱包只是将钱包与网络隔离,并不能保证其本身的安全性,而且由于其闭源的特性,厂商可能在其中穿插后门

在线钱包帐号窃取

对于在线钱包,个人资产安全与服务商的安全是一个强绑定关系,个人资产过分依赖于外部保障与中心化的应用类似,违背了区块链的去中心化理念

交易所账户

当用户可以在交易所中执行买入卖出操作时,相当于交易所账户掌握了用户的数字货币买卖权

钓鱼攻击

通过伪造交易所网站的域名和页面来欺骗消费者,一般用来窃取用户的交易所登陆口令

中间人劫持攻击

攻击者可以在流量中转处截获流量,如路由器、网关等。虽然目前多数交易所都采用https,但是不排除某些API接口的子域名未使用https

木马劫持攻击

木马通过按键记录,或是hook浏览器的方式获取交易所帐号的登陆口令,或是直接劫持用户资产

交易所API

各大交易所为了满足用户调用平台的需求,会开放API给用户使用。API分为两大类:公共API和私有API。公共API用于查看交易所订单情况、公开的交易记录、交易版信息。私有API用于确认及取消订单、个人余额,需要相应的key才可使用。

关键key&token获取

私有API涉及用户的敏感操作,一旦API key泄露,很可能会造成财产损失。大部分人不一定有足够的安全意识,嗯嗯会有意无意将相关的代码配置信息同步到Github、公开网盘等互联网公共区域。