1.背景介绍随着区块链和链上程序的发展,迫切需要多链资金转换,跨链桥业务也会相应增加。有业务的地方就会有安全问题,跨链桥在为用户提供便利的同时,也可能为黑客提供另一扇门。PolyNetwork攻击事件发生后,跨链桥的安全问题也随之浮出水面。2、什么是跨链桥?区块链桥,也称为跨链桥,连接两个区块链并允许用户将加密货币从一条链发送到另一条链。跨链桥通过在两个独立平台之间实现代币转移、智能合约和数据交换以及其他反馈和指令来实现资金的跨链操作。普通跨链桥接操作如下:用户将资产A发送到原链上的某个充值地址,并支付桥接费用;资产A被随机选择的智能合约中的验证者或受信任的托管人锁定;在目标链上发行等量的资产A1,并将资产A1发送到目标链上的用户地址;看似跨链转账操作并不复杂,但在多个跨链桥接项目中,不同步骤都出现了安全漏洞。三、跨链桥出现过哪些漏洞四、跨链桥常见漏洞分析(一)ChainSwap攻击事件2021年7月,跨链资产桥项目ChainSwap被攻击,20多个项目上线跨链桥被攻击。此次攻击导致资产损失近800万美元,并导致十多个项目暴跌99%。这种攻击主要是由于协议没有严格检查签名的有效性,使得攻击者可以使用自己生成的签名对交易进行签名。(2)Factory合约上图中receive方法的主要作用是将跨链后的用户资金转移到目标链的用户地址,需要验证发送链的签名。当前需要验证的签名个数为1,由于receive方法和ecrecover调用的逻辑,_decreaseAuthQuota方法没有严格检查调用的签名,攻击者传入自己生成的签名,后续合约逻辑没有严格判断签名映射值等计算。结果,攻击者成功执行接收方法为自己转移资金签名。(三)PolyNetwork攻击事件2021年8月,跨链互操作协议PolyNetwork突然遭到黑客攻击。使用该协议的O3Swap损失惨重。以太坊、币安智能链、Polygon三个网络上的资产几乎被摧毁。在不到一个小时的时间里,黑客窃取了2.5亿、2.7亿美元、8500万美元的加密资产,总损失达6.1亿美元。本次攻击主要是由于更换了中继链验证人的公钥。也就是说,跨链中间验证者被攻击者取代,由他自己控制。协议内部关系:中继链验证人的公钥存在于EthCrossChainData合约中;EthCrossChainData合约有一个putCurEpochConPubKeyBytes方法,可以直接修改中继链验证人的公钥;EthCrossChainData合约的所有者是EthCrossChainManager合约;EthCrossChainData合约的putCurEpochConPubKeyBytes方法可以修改中继链验证人角色。上图中的EthCrossChainManager合约中,_executeCrossChainTx方法没有严格限制传入的参数,导致攻击者传入toContract,方法参数都是攻击者可控的。由于协议内部关系,攻击者在哈希碰撞签名后传入与putCurEpochConPubKeyBytes方法相同的方法,成功调用EthCrossChainData合约的putCurEpochConPubKeyBytes方法直接修改中继链验证人的公钥为自己可控,然后利用验证者对恶意资金转账进行签名,获取大量资金。(4)Multichain(AnySwap)攻击事件2022年1月,Multichain官方表示协议跨链桥存在安全风险,部分代币存在被黑客攻击的风险,敦促用户尽快取消授权。事件核心原因:协议调用的底层t??oken合约没有实现permit方法,但包含回滚函数,所以调用permit方法的合约运行正常。左AnyswapV4Router合约,右WETH9合约在上图中的anySwapOutUnderlyingWithPermit方法中,前三个参数均由调用方传入,即from和token等参数由攻击者控制。当参数可控时,攻击者部署攻击合约,将受影响的代币合约地址设置为底层代币参数。核心问题在于,由于WETH9没有permit方法,但是会调用WETH9的fallback方法进行入金操作,所以调用不会出错(事务不会回滚),所以当用户将资金授权给协议,攻击者将快速转移用户资金。(5)QubitBridge攻击2022年1月,QubitFinance跨链桥Ethereum-Binance被黑客攻击,造成超过8000万美元的损失。核心问题:在存款方法中,当资金地址为address(0)且safeTransferFrom没有报错时,正常执行存款功能。在QBridge合约的上图中,存款是一种正常的存款方式。在该方法中调用IQBridgeHandler(handler).deposit时,当用户传入的resourceID映射tokenAddress地址为0时,后续的tokenAddress.safeTransferFrom(depositer,address(this),amount);转账会正常执行,导致方法和事件正常运行,调用方可以成功充值。这里比较重要的是官方tokenAddress的ETH地址为零,这是官方的动作(官方已经声明存款功能是被忽略的废弃功能)。(6)MeterBridge攻击2022年2月,Meter.io跨链协议遭到攻击,合约没有阻止封装的ERC20代币与原生gas代币直接交互,造成约430万美元的损失。事件核心问题:充值方式在充值时没有验证WBNB充值状态,导致攻击者绕过判断条件,没有充值正常获取资金。在Bridge合约的上图中,deposit和depositETH方法都是充值方法,而deposit方法充值时,还没有验证充值是原生token。攻击者使用deposit进行充值时,传入WBNB地址,由于WBNB充值未通过该方法进行验证,因此不进行资金入库和转账,调用depositHandler.deposit方法成功绕过判断健康)状况。最终,攻击者成功获取了大量资金。(七)虫洞攻击2022年2月,以太坊和Solana两大区块链的重要桥梁“虫洞”(Wormhole)遭到黑客攻击,损失超过3.2亿美元。漏洞产生的核心原因:verify_signatures调用的load_instruction_at方法没有验证指令的有效性,使得攻击者可以伪造并利用验证签名获取资金。verify_signature.rs接口合约上图中的verify_signatures方法是跨链验证时调用的签名方法。由于verify_signatures方法调用了load_instruction_at方法,所以load_instruction_at方法是协议更新后的废弃方法,传入的指令在该方法中没有严格执行。检查,攻击者传入了一个他可以控制的值,攻击者利用这种签名方式签署了自己的跨链请求,获得了大量资金。(8)LiFinance攻击事件2022年3月,以太坊上的分布式跨链协议Li.Finance被攻击。攻击者执行了37次调用注入,在多个钱包中获得了约60万美元的资产(204ETH)。本次攻击事件的核心问题是对传入的外部数据没有严格限制,导致攻击者将自己可以控制的调用逻辑传入。上面CBridgeFacet合约的swapAndStartBridgeTokensViaCBridge方法中,对传入的_swapData参数没有严格限制。在同一个LibSwap.swap调用中,该值不受严格限制。结果,在swap方法中,_swapData可以成功调用call方法进行恶意操作,攻击者利用该漏洞多次调用获取资金。(9)RoninNetwork攻击事件2022年3月,AxieInfinity侧链Ronin验证节点和AxieDAO验证节点被攻破,导致两笔交易桥接Ronin173,600Ethereum和2550万USDC。攻击原因:SkyMavis的Ronin链目前由9个验证者组成。为了识别存款事件或取款事件,需要九个验证者签名中的五个。攻击者控制了SkyMavis的四个Ronin验证器和一个由AxieDAO运行的第三方验证器。(2021年11月-12月,AxieDAO允许SkyMavis代为签署各种交易,事件停止后权限列表访问权限未被撤销。攻击者获得了SkyMavis系统的访问权限,并使用了AxieDAO的无gasRPC验证者获得签名)。五、总结与建议通过以上的跨链桥攻击事件可以发现,从去年的两次重要的跨链桥攻击到今年,已经发生了多起跨链桥攻击事件。跨链桥攻击明显增多,被盗资金也相当庞大,看来黑客已经盯上了跨链桥的肥肉。从表格总结来看,攻击主要发生在跨链前和签名处,一般是合约漏洞,也有官方马虎造成的被盗事件。对于越来越多的跨链项目和项目合约安全,可以遵循以下安全建议:在项目上线前对合约进行安全审计。需要严格检查合约调用接口的适配性。评估需要对跨链签名者进行严格审查,以确保签名不受恶意方控制
