2022年10月7日,据成都链安鹰眼-区块链安全态势感知平台舆情监测显示,BNB Chain跨链桥“代币中心”(Token Hub)遭遇黑客攻击,由于涉及的金额较为庞大,并且涉及多个链之间的跨链,根据成都链安安全团队的整理与追踪,目前整理出7.1亿美元是币安链上未涉及跨链部分的被盗资产,加上跨链部分的被盗资产,我们初步估计涉及金额在8.5亿左右。
这场震动整个行业的“攻击”事件因何发生,关于本次事件,成都链安安全团队第一时间进行了分析。
1 BNB Chain如何被黑客盯上
北京时间10月7日6点左右,BNB Chain发推表示,由于活动异常,目前正在维护中,暂时暂停所有通过BNB链的存取款,直到有进一步的更新。
BNB Chain在另一推文表示,被提取资金约7000万至8000万美元,已冻结700万美元。

7点41分,币安CEO赵长鹏发推表示,在BNB Chain跨链桥“代币中心”(Token Hub)上的一个漏洞导致了额外的BNB,已要求所有验证者暂停BNB Chain,这个问题现在得到了控制,资金是安全的,将相应地提供进一步的更新。

这一次,黑客再次盯上跨链桥,因为跨链桥的复杂性以及累计的巨额财产,因此跨链桥往往成为黑客攻击的首要目标,关于本次攻击事件的详细经过,我们接着往下看。
2 攻击时间以及黑客手法解析
10月7号零点55分,黑客于区块高度 21955968 通过调用合约缴纳 100 BNB 注册成为 Relayer。
凌晨两点半左右开始,黑客从BNB Chain的“代币中心”(TokenHub)系统合约分两次(2:26、4:43)共获取了200万枚BNB。并将其中90万枚BNB在BNB Chain上借贷协议Venus进行抵押,借出6250万BUSD、5000万USDT、3500万USDC。
成都链安安全团队现将手法解析如下:
币安跨链桥BSC Token Hub在进行跨链交易验证时,使用了一个特殊的预编译合约用于验证 IAVL 树。而该实现方式存在漏洞,该漏洞可能允许攻击者伪造任意消息。
1)攻击者先选取一个提交成功的区块的哈希值(指定块:110217401)
2)然后构造一个攻击载荷,作为验证IAVL树上的叶子节点
3)在IAVL树上添加一个任意的新叶子节点
4)同时,添加一个空白内部节点以满足实现证明
5)调整第3步中添加的叶子节点,使得计算的根哈希等于第1步中选取的提交成功的正确根哈希
6)最终构造出该特定区块(110217401)的提款证明


当然,有一些细节还要进一步推敲,成都链安安全团队正在进行深入研究,有结果将第一时间与大家分享。
成都链安安全团队通过链必追-虚拟货币案件智能研判平台对被盗资金进行追踪分析,发现总计有1亿4357万美元的被盗资金通过跨链进行转移(含借贷)。被盗资金中有7739万美元的资金通过各种跨链转入了以太坊,5896万美元的资金留存在FTM链中(含各种gUSDT),400万美元的资金在Arbitrum链中,172万美元的资金在Avalanche链中,40万美元的资金在Polygon和110万美元在Optimism。

链必追-虚拟货币案件智能研判平台智能研判模块

链必追-虚拟货币案件智能研判平台地址分析模块

链必追-虚拟货币案件智能研判平台资金分析模块

成都链安安全团队根据链必追平台进行的资金统计
3 恢复出块的BNB Chian还安全吗?
10月7日9点半左右,BNB Chain官方在社交媒体上发文表示,已要求BNB Chain节点验证者在未来几个小时内与其联系,以便可以计划进行节点升级。

到了下午13点,BNB Chain发推称,已发布BSC v1.1.15版本,BSC验证者正在协调,以寻求在1小时内恢复BNB智能链(BSC)。新版本将阻止黑客账户相关活动。BNB信标链和BNB智能链之间的原生跨链通信已禁用。官方要求所有节点运营者尝试升级至上述版本。验证者和社区将讨论进一步升级以完全解决此问题。
下午三点左右,BNB Chain发推称,BNB智能链(BSC)20多分钟前开始良好运行。验证者正在确认他们的状态,社区基础设施也在升级。此外,BscScan数据显示,BNB Chain网络已恢复出块。

成都链安安全团队监测显示,重启之后,当前BSC节点程序通过黑名单与暂停iavlMerkleProofValidate功能的方式阻止被盗资金流动与潜在的攻击。


4 写在最后,关于跨链桥安全的讨论
由于区块链经过了一段不短的发展时间,无论是区块链项目方自己还是区块链安全公司对于安全的重视程度都高于了以往,但是跨链桥这种代码复杂且含有链下部分的项目非常容易遭受攻击。
跨链桥通常都是一些大项目,代码量较多,多个环节的组合下就容易出现一些组合型漏洞,然而这些漏洞又是较为隐蔽的,容易被黑客所利用。跨链桥还有一个高危点就是链下安全,由于链下代码一般与链上代码分开审计,并且通常由项目方自己来保证安全,导致很多漏洞被忽视。

以往的跨链桥攻击通过线下漏洞或者是私钥泄露等方式的攻击较多,本次攻击通过的构造特定的根哈希来构造出特定区块的提款证明,从而使攻击成立,攻击难度比较大,并且数额较以往来说也比较高。本次事件也提醒了我们漏洞往往就在一些我们想不到的地方,因此只能不断去完善项目安全,比别有用心者更早的去发现这些问题所在,才能够更加维护我们的区块链生态安全。
成都链安作为一家致力于区块链安全生态建设的全球领先区块链安全公司,也是最早将形式化验证技术应用到区块链安全的公司,成都链安目前已与国内外头部区块链企业建立了深度合作;为全球2500多份智能合约、100多个区块链平台和落地应用系统提供了安全审计与防御部署服务。成都链安同时具备全链条打击虚拟货币犯罪和反洗钱技术服务能力,为公安等执法部门提供案件前、中、后期全链条技术支持服务千余次,包括数起进入混币器平台Tornado Cash的案件,成功协助破获案件总涉案金额数百亿。
以太坊价格分析表明横盘整理,偏向中性。价格从前一交易日的高点1,791美元回落后正在盘整。但是,有趣的是,多头在1,680美元附近持有重要支撑。多头在1,700美元的心理水平附近聚集动能,并准备在接下来的几个交易日推向1,800美元。以太坊价格显示出盘整迹象,因为它形成了多个连续的顶部形态。这种回撤可能是第二大加密货币下一轮上涨的基石。以太坊连续第二个交易日走低。过去10天,价格在1,590-1,760美元的短期区间内盘整。每日烛台高于1,800美元将维持ETH的进一步上涨。ETH价格走低日线图上,以太坊价格在上升趋势线附近获得一轮支撑。来自879.80美元低点的看涨趋势线为ETH买家提供了支
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
前言 Slowloris攻击是我在李华峰老师的书——《MetasploitWeb 渗透测试实战》里面看的,感觉既简单又使用,现在这种攻击是很容易被防护的啦。不过我也不敢真刀实战的去试,只是拿个靶机玩玩罢了。 废话还是写在结语里面吧。(划掉)结语可以不看(划掉)Slowloris攻击的原理 Slowloris是一种资源消耗类DoS攻击,它利用部分HTTP请求进行操作。也叫做慢速攻击,这里的慢速并不是说发动攻击慢,而是访问一条链接的速度慢。Slowloris攻击的功能是打开与目标Web服务器的连接,然后尽可能长时间的保持这些连接打开。如果由多台电脑同时发起Slo
我想在Ruby中正确地将美分转换为美元。我将永远不必使用几分之一美分。是否可以在不使用BigDecimal的情况下正确执行此操作(没有浮点错误)?例如,美分兑美元"99"=>"0.99""324"=>"3.24"以下似乎有效,但它是否正确?(cents.to_i/100.0).to_s更新:我注意到如果cents="10287349283923497624861294712974892742837833",上面的行不起作用。 最佳答案 作为MichealKohlalreadyanswered:看看金钱gem。例子:require'm
这是我在我的模型中使用的:before_validation:strip_dollar_signvalidates:amount_due,:format=>{:with=>/^\d+??(?:\.\d{0,2})?$/},:numericality=>{:greater_than=>0}privatedefstrip_dollar_signself.amount_due=self.amount_due.to_s.tr!('$,','').to_fend如果我在Rails控制台中手动运行来自strip_dollar_sign函数的行,我得到的正是我想要的(即400美元最终为400.0),
代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为
我正在使用https://github.com/kickstarter/rack-attack/#throttles限制对某些网址的请求。机架攻击文档展示了如何通过请求IP或请求参数进行限制,但我想做的是限制每个用户的请求。因此,无论IP是什么,用户都应该能够在特定时间范围内发出不超过n个请求。我们使用devise进行身份验证,我想不出一种简单的方法来根据请求唯一标识用户。我应该在session/cookie中存储用户ID吗?也许是一个uniq哈希?您对实现这一目标的最佳方式有何看法? 最佳答案 想通了。Devise已将用户ID存储
我正在尝试为像这样的ActiveRecord模型提供一组非常通用的命名范围:moduleScopesdefself.included(base)base.class_evaldonamed_scope:not_older_than,lambda{|interval|{:conditions=>["#{table_name}.created_at>=?",interval.ago]}endendendActiveRecord::Base.send(:include,Scopes)classUser如果命名范围应该是通用的,我们需要指定*table_name*以防止命名问题,如果它们是来自
我已经在Rails上研究了一年半,我非常喜欢它!:)在Rails中,我们大量使用局部变量、实例变量(如@user_name)和初始化器中定义的常量(如FILES_UPLOAD_PATH)。但为什么没有人使用像$dynamic_cluster_name这样的全局“美元化”变量($)?是因为设计缺陷吗?与性能有关吗?安全漏洞? 最佳答案 Isitbecauseofdesignflawissue?设计...缺陷?那是设计的祝福,设计的福音,设计的优点,除了缺陷之外的一切!全局变量arebad,并且它们在Web应用程序中特别不好。使用全局变
我正在观看有关多态关联的RailsCast。http://railscasts.com/episodes/154-polymorphic-association?view=asciicast有三种不同的模型文章、照片和事件,每个模型都从Comment.rb获取评论。(文章、照片和事件各有一个article_id、photo_id和event_id)。在列出评论时,他有一个问题,即要确定要为3个模型中的哪个模型列出评论,因此他在索引操作中这样做defindex@commentable=find_commentable@comments=@commentable.commentsendde