Page 287 - 《软件学报》2021年第5期
P. 287
田国华 等:区块链系统攻击与防御技术研究进展 1511
Trickbot 对包括 Coinbase 在内的几家数字货币交易所进行了 Web 注入攻击 [113] ,当受害者购买数字货
币时,木马病毒会劫持交易所钱包,并将资金定向至攻击者钱包,最终造成用户损失.
(3) 中间人劫持攻击(man-in-the-middle attack) [114] :目前,多数交易所都采用 HTTPS 协议进行交互,在一定
程度上保证了数据安全.但在某些 API 接口的子域名,却未使用 HTTPS.攻击者可以通过在流量中转
处劫持网络流量,如路由器、网关等流量出口,从而获取相关信息.
(4) 私钥窃取攻击(private key stealing attack) [115] :用户丢失私钥意味着用户的账户资产全部遗失,因此,用
户通常会对钱包的私钥文件进行多次备份,而不安全的备份存放点存在私钥泄露的风险.目前,针对
比特币的 wallet.dat 文件广泛出现在互联网中,例如 GitHub、NAS 服务器、Web 服务等互联网可接入
的位置.目前,已经有攻击者开始扫描密钥文件,甚至开发相关的木马病毒进行私钥窃取.
(5) 钱包客户端漏洞(wallet client vulnerability):攻击者可能利用钱包软件自身的漏洞实施攻击,进而获取
用户隐私和资产.例如:在以太坊多重签名钱包 Parity 中,攻击者可以通过间接调用初始化钱包软件的
库函数,将自己更换为受害者钱包的新主人.2017 年 11 月,Parity 钱包出现重大 Bug [116] ,攻击者利用该
Bug 成为库的主人,然后调用自杀函数报废整个合约库,彻底冻结了 150 多个地址中总计超过 50 万个
ETH,直接导致上亿美元资金被冻结.
(6) 粉尘攻击(dusting attack) [11] :比特币系统中,“聪”是最小的 BTC 单位,通常将 100 聪以内的 BTC 称为粉
尘.而且比特币中没有余额的概念,所有合法的交易都可以追溯到前向一个或多个交易的输出,其源
头都是挖矿奖励,末尾则是当前未花费的交易输出(unspent transaction output,简称 UTXO).攻击者可
以通过向目标用户钱包地址发送“粉尘”来实施粉尘攻击,当用户使用这些“粉尘”交易时,会导致其与
用户自有 UTXO 的交易输出发生混合,攻击者可以通过“粉尘”来追踪用户的钱包地址,获取用户的隐
私信息,从而勒索、盗取目标用户的资产.
(7) SIM hack [117] :在一些去中心化钱包中,用户需要通过 SIM(subscriber identity module)卡来验证身份的
合法性.用户通常在丢失 SIM 卡后向运营商申请“移植”SIM 卡,该服务允许客户将该电话号码转移到
新的 SIM 设备中.攻击者可以利用这一漏洞,通过技术手段将受害者的 SIM 卡移植到他们控制的电话
上,然后在其电子邮件帐户上启动密码重置流程,验证码会发送到电话号码中.由于攻击者此时控制
着 SIM 卡,可以轻易地对受害者账户信息进行篡改,盗取受害者账户中的财产.
(8) 在线钱包窃取(online wallet theft) [118] :目前,很多用户会选择使用在线钱包,这使得个人的资产安全严
重依赖于服务商的安全性.2013 年 11 月,比特币在线钱包服务商 Inputs.io 遭受黑客攻击 [119] ,黑客通过
电子邮件账号进行入侵,进而劫持代管账号,从中盗取了 4 100 个比特币.
(9) 重放攻击(replay attack) [120] :主要包含单链重放攻击和多链重放攻击.单链重放攻击中,攻击者通常在
以太坊等账户余额模型的区块链系统中先发起一笔交易 A(如交易所提现),然后对 A 的时间戳等数据
进行修改,获得新的交易 B 并进行广播.因为 B 的私钥签名和公钥加密齐全,所以矿工会在付款方余额
足够的情况下将交易 B 打包进新区块.攻击者不断重复便可获取大量资金,直至付款方账户余额不足
为止.多链重放攻击通常出现在区块链硬分叉时,此时用户的地址和私钥生成算法相同,所有“一条链
上的交易在另一条链上也往往是合法的”,所以攻击者在其中一条链上发起的交易后,可以重新将该
交易广播到另一条链上,并得到整个系统的确认.
6.3 防御策略与方法
相比区块链其他层级,应用层攻击的场景更加具体、复杂,所以攻击者的手段也十分多样.因此,区块链应用
层面临的安全问题应从实际的服务场景出发,设计合适的防御策略和相关技术.在挖矿场景中,攻击者采用的攻
击方式大多具备社会工程学攻击特性,即攻击者会根据矿机漏洞、挖矿机制漏洞采取趋利的挖矿行为, 通过损
害矿池或其他矿工利益,实现自身利益的最大化.
针对矿机的系统漏洞,可以尝试以下防御策略.
(1) 开发阶段:开发人员应在开发阶段设定软件安全开发生命周期,建立安全漏洞管理机制,在成品销售