聚焦 Web3.0 生态系统全生命周期安全的「Supremacy安全机构」已推出面向加密社区的可视化区块链交易浏览器「Cruise」,旨在为社区开发者以及安全研究员提供有关交易详情、消息调用栈和余额变更等全面数据。目前,它支持 Ethereum、BSC 、Polygon、Arbitrum、Fantom、Optimism、Avalanche、Celo 和 Gnosis 多达 9 条主流 EVM 兼容链。
Link:https://cruise.supremacy.team
什么是 Cruise
Cruise 是 Supremacy 安全机构研发的一整套针对以太坊(Ethereum)及其它8大主流 EVM 兼容链的交易数据可视化分析系统,它将原子交易中涉及的交易详情、余额变更和消息调用层级关系以树状图的形式展示出来,便于分析人员梳理整笔交易的调用逻辑。
除此之外,我们正在逐步研发其它新型功能,请大家拭目以待。
Cruise 目前共分为 5 个功能模块,它们分别是:“Search”、“Transaction Information”、“Balance Changes”、“Customized” 以及“Call Trace” 五个部分。
以下的介绍部分通过由我们 (Supremacy)率先披露的 Rabby Swap Router 攻击事件举例说明,我们取其中一笔攻击交易:
Cruise: https://cruise.supremacy.team/detail/?tx=0xce0935010baf445e300d4d600caac7fc1fecb5ccb092cdbef57904aa7e5408b2&type=eth
Etherscan: https://etherscan.io/tx/0xce0935010baf445e300d4d600caac7fc1fecb5ccb092cdbef57904aa7e5408b2
1)Search 包含对 9 条 EVM 链的检索及解析,通过选择特定链及键入 TXN Hash,点击搜索按钮后,即可获取交易详情。
2)Transaction Information 涵盖交易中的详细信息,它由 “Transaction Hash”、“Status”、“Timestamp”、“Block”、“Position In Block”、“From”、“To、“Value”、“Transaction Fee”、“Nonce”、“Event Count”、“Internal Transaction Count”、“Gas Used”、“Gas Price”、“Max Priority”、“Max Fee” 以及 “Input Data” 等 17 个部分组成,并且集成了交易所在链的区块浏览器,从而极大程度上满足了用户的使用需求。
3)Balance Changes 则展现了该笔原子交易中所涉及的账户地址其所持资产的变更明细。如果地址涉及某一个事件,Cruise 将会对其自动赋予 Label 标签。用户也可选择在 Customized 栏目,通过改写 JSON 原文的形式修改 Label 映射关系。资产余额采用双向计算法,绿色表示增加,红色表示减少,资产未变更则不展示。
4)Customized 包括 Address Mappings 与 Function Mappings 两部分,两者通过 key-value 的 JSON 格式进行映射。地址标签被用于 Balance Changes 以及 Call Trace 中的地址对象替换,便于用户理解交易调用详情。Function Mappings 则不同于以往的外部案例:“通过函数签名替换为函数名这一方式进行伪解析”(字面替换无法解析出 Calldata 原始明文),而Cruise 则是在前端进行ABI实时解码,通过 Function Mappings 的 ABI 可以解析出字面意义不明的原始内容。Tricks:修改完成后需点击框外内容使当前 Customized 生效。
5)Call Trace 包含了交易的完整消息调用流,实现原则即简洁直观,极大降低了使用门槛。除基础功能外,Cruise 的 Call Trace 还支持 Expand Tree Nodes (展开树节点) 这一实用功能,展开全节点的示例如下。
Call Trace 下拉框示意图,包含了多节点之间的层级关系。
0-0-0:2:基于“0-0”扩展第三个深度的第一个到第三个节点
实例分析
在我们拿到疑似攻击的链上交易之后,可以在 Cruise 搜索 Tx Hash,这时 Cruise 会将搜索结果返回到用户的浏览器中。
我们可以通过 Transaction Information 确认交易信息,有助于我们的后续分析。
之后可以在 Balance Changes 列表中,迅速确认获利地址以及受害者地址,比如 Rabby Swap 攻击中的 0xb687550842a24d7fbc6aad238fd7e0687ed59d55 显然是黑客地址,而 0x97469b461d73c4f570fc4f30255edfd134227408 则是受害者地址。(0xb687…9d55地址由于已被我们标记 Label,所以直接显示为 Rabby Swap Approval Exploiter)
显然,这是一笔由 EOA 发起的交易调用,之后的 Call Trace 都是围绕着 0x9682…6475 地址展开的,而该地址正是黑客的攻击合约。通过攻击交易的 Call Trace 我们可以发现,攻击合约直接调用了 0x6eb211caf6d304a76efe37d9abdfaddc2d4363d1 (Rabby Swap Router) 合约,由于该合约并未开源。因此在后续的调查工作中,我们通过 OSINT 的方式找到了涉及该合约的审计报告,其中附有部分源代码:
通过源码中的函数实现我们可以尝试手动提取ABI,并将其填入到 Function Mappings 中进行ABI解析。
通过解析出来的 Call Trace,我们推测这是一个典型的任意外部调用漏洞。函数签名 0x32854cc2 对应 swap() 函数,基于可控的前提,将该函数作为入口点,传递多个恶意参数给到内部 _swap() 函数。
跟进 _swap() 函数可以发现,它通过 L78 中的函数 functionCallWithValue() 调用了 dexRouter(token) 地址,由于该参数是可控的,并且对 dexRouter 的 calldata 也由可控的参数组成。从而导致黑客利用了用户所授权并持有的 (QNT) ERC20 token 进行了转移操作,所以这是一个典型的任意外部调用漏洞。
综上所述,最终我们成功通过 Cruise 分析出黑客的攻击行为。
点击 “阅读原文” 可快速进入 Cruise 官网。
原文始发于微信公众号(Supremacy):Supremacy: 如何使用 Cruise 分析一笔交易?