近日,韩国最大的交易所Upbit遭遇了一个重大的充值漏洞,诈骗者创造的假APT代币被识别为真实 APT 代币。随后机器人将大量假币被存入大量用户账户中,不少用户将其直接出售。
Upbit平台的logo
在发觉这一情况后,Upbit电话要求出售假币的用户退款,并紧急暂停了APT的充值与提币服务,预计有10万个账户受到影响。Upbit表示:这不是你的财产,需要将其归还。如果您拒绝,我们可能会采取法律行动。
为什么身为大交易所的Upbit无法识别这以假乱真的戏码?APT在韩国市场又有怎样的特殊待遇?痛定思痛后这一事件能给行业带来哪些启发?下面我们一一来看。
APT在上线初期,曾被韩国用户疯狂炒作,价格急速上涨。APT在韩国有“一币一公寓”的 MEME 称号,粉丝群体众多,Upbit也长期是APT现货交易量最大的交易所,最近24小时Upbit APT现货交易量为7100万美金,是币安的两倍以上。所以此次事件让Upbit颜面尽失。
另外,绝大部分用户已经出售了这笔虚假资产,如果他们回避电话或不同意赎回,势必会让Upbit产生经济损失。即使按照该国KYC政策Upbit能追回大部分资产,但依旧会对用户体验与交易所口碑造成不可挽回的影响。
事实上,到底发生了什么?我们可以从该虚假代币的链上转移记录来整理此次事件。
虚假代币的名称为ClaimAPTGift.com,只是一个普通的aptos链上的衍生代币。该代币被铸造后,铸造者向约38万个地址各发送了约3000-5000枚该代币, 其中大部分地址应该是Upbit的充值地址。
由于该虚假代币的Decimal属性为6位,而APT的Decimal属性为8位,因此Upbit将这些笔转账视为充值了30-50枚APT代币。按照APT市价折算,总金额在8000万美元之上。之所以攻击者只对每个地址发送了这些数额而非更大金额的代币,是为了规避之前规定的旅行规则。同时向大量地址发送,也为Upbit增加了巨大的处理工作量。
之所以Upbit会出现此漏洞,极有可能是Upbit自身犯了一个简单的错误,没有对代币种类的参数进行检查。我们可以对比一下虚假代币与真实APT代币的转账记录。(以下图片来自于 aptos 浏览器截图)
可以看出二者的转账链上记录在参数上有明显区别,其转账时的type_arguments有所不同。
虚假代币的转账参数
事实上,APT是aptos链上的基础代币,由coin.move模块提供支持。在coin模块的基础上,move提供了MoonCoin 模块,来定义新的衍生代币。第一张图中的虚假代币,既是按MoonCoin模块的标准构建的。
真实APT代币的转账参数
transfer即转账是coin.move模块中的一个EntryFunction,即Move中的一个入口函数,可以直接调用。因为 coin模块可以被其他衍生代币使用,所以转账必须明确地使用TypeTag来定义要对哪种coin进行转账。交易入参必须被放入带有类型指定器(Serializer.{type})的TransactionArguments 中,这将在交易生成时将入参序列化为适当的类型。
该参数也对应上图的 type_arguments 参数,如果没有指定coinType,则默认为0x1::aptos_coin::AptosCoin,也就是第二张图中的APT代币。
而Upbit未能将这两种交易识别区分出来,极有可能是未对type_arguments参数做检查,把aptos链上的衍生 MoonCoin代币也当成了APT代币,将虚假代币的充值当成了APT代币的充值。
查阅aptos官方的api文档,可以发现其中对于交易查询参数也规定了明确的代币种类,即type_arguments标识。因此目前看来,这次的充值漏洞很可能完全是由Upbit自身造成的。由于其本身代币类型参数检查的疏忽,让攻击者有机可乘。
aptos官方API文档中的type_arguments标识
从另一个角度看,EVM公链为衍生代币提供了ERC-20这一协议标准,这与其原生代币ETH是完全区分开的。ETH转账直接通过以太坊内置的转账机制进行,而ERC-20代币转账则需要通过调用代币合约的transfer函数来实现,这样更方便开发人员做出区分。
而aptos中的原生代币APT与其衍生代币采用了相同的 coin 标准,衍生代币可以重用APT的代币框架,也包括相同的转账函数,只是在代币种类等参数上有所区别,这也有可能是引发此次漏洞的原因之一。
此次事件,为交易所重新敲响了安全警钟。在智能合约的世界里,代码即规则,即使是微小的错误,也有可能造成巨大的经济损失,中心化交易所缺乏第三方审计,被黑客攻击暴雷事件屡见不鲜,安全性依然是重中之重。
来源:金色财经