智能合约安全分析,假充值攻击如何突破交易所的防御?
引言
假充值攻击,是指攻击者通过利用交易所在处理充值过程中的漏洞或系统错误,发送伪造的交易信息到交易所钱包地址,这些伪造的交易信息被交易所误认为是真实的充值请求,并将对应的数字资产或货币添加到攻击者的账户中。攻击者利用这种方式,可以获得未经支付的数字资产,导致交易所的资产损失。
本文旨在深入探讨假充值攻击如何突破交易所的防御机制。我们将分析假充值攻击的原理,揭示攻击者利用的漏洞和策略。同时,我们将通过实例分析假充值攻击,以便更好地理解攻击方式和影响。此外,我们还将讨论交易所应对假充值攻击的应急措施和预防措施,以提供相关保护资产和应对类似攻击的建议。
充值原理解析
在了解假充值之前,我们需要先了解交易所的充值原理。
一个典型的流程如下:
1. 钱包地址生成
交易所为每个用户分配一个唯一的钱包地址,用于接收用户的充值。这些地址通常由交易所的系统自动生成。用户在进行充值时,需要将数字资产发送到交易所账户中的特定钱包地址。
2. 区块链账本扫描
交易所的节点会与区块链网络中的其它节点同步,以获取最新的区块链状态和交易信息。当交易所节点收到新的区块时,它会从区块包含的交易内容,或者区块触发的交易执行事件中,提取出用户的充值交易 ID 及对应的金额,加入待充值列表。
3. 确认入账
交易所通常要求交易在区块链网络中获得一定数量的确认后才被视为有效。确认是指交易所在区块被一定数量的区块所引用,并被其他矿工验证和确认。交易所设定的确认数目可以根据不同的数字资产和网络而有所不同。
如图所示:
(假充值攻击发生在步骤 5 和 6)
假充值攻击模式
交易所是黑客攻击的重灾区,因此交易所通常会把服务器置于重重防御系统的背后,对于管理资金的核心服务,甚至要离线托管。然而由于区块链系统对数据完整上的要求,恶意交易并不会被外围安全系统拦截。
需要说明的是,假充值攻击并非区块链的漏洞,而是攻击者利用区块链的一些特性,构造出特殊的交易。这些恶意交易会让交易所误认为是真实的充值请求,或者多次处理同一笔充值请求。Safful安全团队经过长期的实战,总结出了几种常见的假充值攻击手法:
自 2018 年以来,Safful安全团队多次首发披露过多个假充值攻击,包括:
- USDT 虚假转账安全⻛险分析
- EOS 假充值(hard_fail 状态攻击)红色预警细节披露与修复方案
- 以太坊代币“假充值”漏洞细节披露及修复方案
- 比特币 RBF 假充值风险分析
除了这些已经公开的假充值攻击,还有多个我们未曾公开的经典攻击手法,以及一些普适性的攻击手法。例如:
- Bitcoin 多签假充值
- Ripple 部分支付假充值
- Filecoin 双花假充值
- TON 反弹假充值
如果要了解更多详情,欢迎和我们联系以深入探讨。
实例分析:TON 反弹假充值
几乎所有的区块链都存在假充值问题,只是有的攻击很容易避免,有的却要对区块链的特性有十分深入的研究才能免受其害。
以 TON 的假充值为例,我们将向大家展示狡猾的攻击者如何利用 TON 的特性攻击交易所。
TON(The Open Network)是知名通讯软件 Telegram 发起的一个区块链项目,支持在用户的账号上部署智能合约。
交易所在对接 TON 充值时,按之前描述的方法,它首先会为用户生成一个充值地址,然后用户将资产转移到充值地址,最后确认入账。
交易所如何确认一笔交易是它的用户的呢?我们通过 RPC 接口来查看一笔正常的转账:
通常交易所会判断 in_msg 里的 destination 是否为用户的充值地址,如果是,那么把金额 value 按照精度换算后为用户入账。但这样安全吗?
TON 交易有一个特性,几乎所有在智能合约之间发送的内部消息都应该是可反弹的,即应该设置它们的 bounce 标志位。这样,如果目标智能合约不存在,或者在处理这条消息时抛出未处理的异常,该消息将被“反弹”回来,并携带原始值的余额(减去所有的消息转账和燃气费用)。
也就是说,如果一个恶意攻击者通过设置 bounce 标志位,给一个未部署过合约的账号转账,那么充值金额在扣掉手续费以后会被反弹回原账号。交易所检测到了用户的充值记录,但没想到充值的币居然还会原路返回“反弹”到攻击者的账号上。
我们来看这一笔交易,对比正常交易可以发现,多了一个 out_msg,这个 out_msg 就是资金被反弹回原账号的操作。
交易所如果只检验了 in_msg,那么就会错误地为攻击者入账,造成平台资产损失。
预防假充值攻击的最佳实践
防范假充值攻击的一些基本策略有:
**1. 多重确认机制:**设定充值的多重确认要求,确保交易在区块链上得到足够的确认后才被视为有效。确认数目应根据不同数字资产的安全性和区块链的确认速度来设定;
**2. 严谨的交易匹配:**从区块中筛选用户交易时,只有完全匹配正常转账模式的交易才能自动设置为到账,最后还要检查余额变化;
**3. 风险控制系统:**建立完善的风险控制系统,监测和检测异常交易活动。该系统可以通过分析充值模式、交易频率、交易规模等因素来识别潜在的风险和异常行为;
**4. 人工审核:**对于较大金额或高风险交易,采用人工审核机制进行额外的审核。人工审核可以增加交易的可信度,发现异常交易,并防止恶意充值;
**5. API 安全:**对外部 API 接口进行安全认证和授权,避免未经授权的访问和潜在的漏洞。定期审查 API 接口的安全性,并进行及时的安全更新和修复;
**6. 限制提款:**充值发生后,暂时限制用户对充值资产的提款操作。这样可以给交易所足够的时间来确认充值的有效性和防范潜在的假充值攻击;
**7. 安全更新:**及时更新交易所软件和系统,修复可能存在的安全漏洞。持续监控交易所的安全状态,并与网络安全专家合作,定期进行安全审计和渗透测试。
对于特定区块链的假充值防范,则需要通读官方说明文档,了解交易中存在的特征。
Badwhale 假充值检测系统
Safful安全团队在长期的攻防实践中开发出 Badwhale 假充值测试系统,专门为数字资产管理平台开发。该系统旨在帮助它们检测和评估其防范假充值攻击的能力,优化其防御机制,以保障用户资产的安全和数字资产管理平台的可靠性。
Badwhale 是Safful安全团队独家且沉淀多年的商业系统,为数十个平台持续服务多年,已避免了预估几十亿美金资产的假充值风险。
特色功能:
**1. 模拟假充值攻击:**Badwhale 能够模拟各种类型的假充值攻击,并自动发送虚假的充值请求到被测试的数字资产管理平台。这有助于评估数字资产管理平台的弱点,发现潜在的漏洞和安全隐患;
**2. 多样化的测试场景:**系统提供多样化的测试场景和攻击模式,可以根据实际情况对数字资产管理平台的假充值防御进行全面测试;
**3. 高度可扩展性:**Badwhale 设计为高度可扩展的测试系统,支持为不同数字资产管理平台和区块链平台提供测试,可以灵活适应不同系统架构和技术环境的需求。
Badwhale 目前已经支持数百条公链、数万代币的假充值测试,包括:
- Bitcoin Families (BTC/LTC/DOGE/QTUM…)
- BitcoinCash
- Ethereum Families (ETH/BSC/HECO/RON/CFX-evm/FIL-evm/AVAX-evm/FTM-evm/RSK/GNO/MOVR-evm/GLMR-evm/KLAY/FSN/CELO/CANTO/EGLD/AURORA-evm/TLC/WEMIX/CORE/VS/WAN/KCCL/OKX…)
- ERC20 Tokens (USDT…)
- Ethereum L2 (ARB/OP/METIS…)
- Polygon
- Polygon Tokens
- Cosmos Families (ATOM/LUNA/KAVA/IRIS/OSMO…)
- EOS Families and EOS Tokens (EOS/WAX/XPR/FIO/TLOS…)
- Ripple
- Flow
- Aptos
- Solana
- Solana SPL-Tokens
- Conflux
- Polkadot Families (DOT/ASTR/PARA/MOVR/GLMR…)
- Tron
- Filecoin
- Ton
- Mina
- Sui
- Ordinals (ORDI…)
- …
借助 Badwhale 的强大功能,数字资产管理平台可以进行全面的假充值防御测试,了解其在面对假充值攻击时的表现,并优化其防御机制,提升用户资产的安全保障。Badwhale 的引入将帮助数字资产管理平台加强安全防护,提高对抗假充值攻击的能力,确保数字资产交易的可靠性和用户信任度。
结语
通过深入研究假充值攻击的突破方式,我们可以更好地认识到数字资产管理平台在保护用户资产和维护安全的重要性。只有通过增强安全防御措施、持续监测漏洞并采取适当的应对措施,数字资产管理平台才能有效地应对假充值攻击和其他安全威胁,确保数字资产交易的可信度和可靠性。