搜索
慢雾安全团队 安全卫士
慢雾安全团队
船龄 2.9年 金币 648
  • 帖子 137
  • 回复
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
科普 | 加密货币诈骗,你中招了吗?(下)
之前,我们发布了加密货币诈骗,你中招了吗?(上),今天将继续分享下篇,希望大家仔细阅读,远离骗局。诈骗手法及分析钓鱼型诈骗【手法一】1、骗子假冒官方发送短信,告知“账户存在风险”、“账户涉嫌黑币交易”等,并附上假冒官网链接;2、你点击链接,输入信息,成功被钓鱼。【分析】此类诈骗类似于上篇提到的“假冒型”手法,是非常老套的手法,但仍有不少人上当受骗。骗子都是随机不断地撒网,同一用户可以收到不同的钓鱼网址。部分用户在点击链接后会进入到假冒官方“解除风险”的页面,当用户按要求输入账户、密码、验证码等,就会被骗子掌握信息,盗取资产。还有一类是本身链接就有问题,利用漏洞在某些网页中插入危险的HTML代码,拦截用户的验证码信息或骗取用户账号密码等私人信息,导致财产损失。钓鱼信息中通常有一些细小的错误,如:语句不通、拼写错误、域名奇怪等,用户应养成检查链接的好习惯,看链接的域名是否正常。用户作为安全体系最薄弱的环节,应时刻保持怀疑之心,必要时可通过官方验证通道核实。【手法二】1、骗子故意泄露私钥助记词,称将钱包中的币送给有缘人;2、你将私钥助记词导入钱包后,发现有币,但转出时提示需要手续费;3、你充入手续费,骗子立即将它取走。【分析】慢雾区之前就发布过这样的钓鱼手法,指路:价值两百万的以太坊钱包陷阱。近期,又出现了同样的手法:此类手法就是利用了用户贪小便宜的心理,导入的人越多,手续费越高,你损失就越多。在此提醒大家,天下没有免费的午餐,切勿因贪小而损已!空投型诈骗【手法】1、骗子假冒客服/官方工作人员,在微信群等不断发布带有“空投”“彩蛋”“降低手续费”字眼的文章或海报;2、骗子在群里不断加人,骗取你的信任,会告诉你说这是对某些用户独有的奖励,用户只要按照空投的规则参与就可以获得奖励,奖励十分地丰富;3、根据公告和骗子的诱导,你需要充值一定的币才能获得空投的奖励,充得越多奖励越多。(有些骗局是不让你卖币,需要一直累积升级解锁才能卖币);4、接下来是骗局的重点!骗子告诉你说想要领取空投必须安装最新的APP,你根据指引,通过链接/二维码下载“最新”的APP。(有些骗局是让你通过链接登录,填写私钥助记词);5、这时的你一心想要获得奖励,却不曾想到导入钱包时被骗子已记录下你的助记词助记词……【分析】空投主要是项目方为了拉新人、做宣传,一般真正的项目方空投,可能需要用户提供钱包地址、邮箱,加入电报群等,也可能会要求注册一个交易所账户或者转0个ETH到指定地址等。所以,当你遇到需要转一定数量的币到钱包或者需要填写你私密信息的空投活动,请擦亮眼睛,因为骗子还会通过伪造一系列的对话记录、收益记录来增强真实性,骗取你的信任。对于任何需要下载APP的活动,请通过官方渠道下载;对于需要转币、充值才能获得奖励的活动,一律不要参与,小心偷鸡不成蚀把米;对于需要填写信息的活动,抱提防之心,涉及到私钥助记词密码之类的更是要谨慎;对于需要导入钱包的活动,小心再小心,拥有私钥便是主人。简单一句话,要花钱要私钥助记词的空投就是骗人的。伪造型诈骗【手法】1、骗子未完成支付,说“已付款,系统有延迟”,通过伪造的交易截图催促你放币;2、骗子未完成支付,点击“已支付”,通过假的到账短信催促你放币;3、骗子将钱付给朋友或自己,利用付款成功的截图让你放币;4、骗子以支付失败为由,通过支付宝微信等转账,以伪造的交易截图让你放币。【分析】此类手法多数出现在OTC场外交易时,骗子以伪造的图骗过了用户的眼睛。现在有很多做伪造转账伪造聊天对话的工具,有图未必是真相,更可能是陷阱。遇到这种情况,在收到款项前,对方发的任何截图都不要相信;不管对方如何催促,一定要先查看自己账户的余额、流水等是否有变化,一定要核实正确后才放币。当然,最好的办法就是尽量避免场外交易。杀猪盘型诈骗【手法】1、骗子将自己伪装成“高富帅”或“白富美”、职业投资顾问、交易经理等,利用网络社交平台(QQ、微信等),发布各类照片包装自己,与你交友;2、骗子对你长期嘘寒问暖,用“甜言蜜语”培养感情,直至取得你的信任,甚至发展成网恋。3、时机成熟后,骗子会时不时的透露自己在看行情、看有关“数字货币”的东西或者告诉你今天行情很好又盈利不少等,利用你的信任和想挣钱的欲望,诱骗你上钩。4、骗子开始提出要带你一起投资挣钱,让你把钱充值到他指定的软件或者某个交易所,刚开始会让你“试试水”让你赚点小钱,刚开始你是可以正常提现的,之后骗子就会诱导你投入更多的钱进去,直到被套牢。【分析】“杀猪盘”其实大家都听得很多了,不同于其他的诈骗,它讲究放长线钓大鱼,一般不会上来就让你去投资充值,他们很有耐心。有句话说:放长线“养猪”,养得越久,骗得越狠。慢雾MistTrack也经常接到这样的Case。手法如出一辙,通过社交软件交友骗取信任,以投资理财为名先让你尝到甜头,后让你加大资金投入,联合客服诈骗,还装作愿意为你出一部分钱,最后你无法提现,联系不上人,网址也无法访问。请大家对所谓“内幕消息”、“巨额回报”、“包赚不赔”等陷阱,保持头脑清醒,决不轻信。时刻警惕新型网络骗局,遭遇诈骗后,可以立即报警。安全提醒骗局的本质都是利用人性的贪婪,在你以为要拥抱财富自由时,给予致命一击。还是那句话,希望各位用户一定要提高警惕,擦亮眼睛,增强安全意识与风险意识,多听多看多辨别。天下没有免费的午餐,不要相信“稳赚不赔”、“低成本高回报”之类的投资赚钱谎言。不要轻信网友,也不要点击不明链接和登录不安全网站。自己的资产需要自己严格把握,不交给其他人处理,可以通过学习,理性参与。一旦发现自己被骗,需及时止损。
2021-07-28 | 慢雾科技 7266 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
梅开二度 —— PancakeBunny 被黑分析
By:Kong@慢雾安全团队据慢雾区消息,2021年07月17日,DeFi收益聚合器PancakeBunny在Polygon上的版本遭受闪电贷攻击,慢雾安全团队第一时间介入分析,并将结果分享如下。值得注意的是本次攻击与5月20日PancakeBunny在币安智能链上的版本遭受的闪电贷攻击类似。此前慢雾安全团队也进行了简要分析,具体可查看:代币闪崩,差点归零-PancakeBunny被黑简析。攻击细节分析首先攻击者从AAVE中闪电贷借出大量的USDC、USDT、WETH代币,并将借来的USDC与USDT代币转入SushiSwap中添加流动性以获得SLP。随后攻击者进行了本次攻击最为关键的操作:将添加流动性获得的LP的一小部分抵押至VaultSushiFlipToFlip合约中,为获得polyBUNNY代币奖励做准备。而其余大部分LP都抵押到MiniChefV2中,并将存款收益地址指定为VaultSushiFlipToFlip合约。接下来为了减少攻击成本,使用借来的100,000个WETH代币,在QuickSwap中将其兑换成WMATIC代币(在后面的分析将会说明为何这样会减少攻击成本)随后攻击者调用了VaultSushiFlipToFlip合约的withdrawAll函数,以获取抵押的SLP与polyBUNNY代币奖励。我们切入此函数进行具体分析:在上图代码第162行与163行,分别通过balanceOf函数与principalOf函数获取攻击者抵押凭证换算成用户通过VaultSushiFlipToFlip合约在MiniChefV2中抵押的SLP数量以及用户在VaultSushiFlipToFlip合约中抵押时记录的SLP数量。理论上这两个数量不应相差太多,但通过分析balanceOf函数我们发现:其是通过balance函数获取VaultSushiFlipToFlip合约在MiniChefV2中抵押的SLP数量与用户持有的凭证占比相乘得到amount的。由于攻击者已提前将大量的SLP未通过VaultSushiFlipToFlip合约直接在MiniChefV2合约中抵押并将受益地址指给VaultSushiFlipToFlip合约,因此balance函数将会获取到一个比预期大得多的值,而攻击者的凭证占比却又是正常的,最后导致赋给amount的是个比预期大得多的值。这就直接导致了在上图代码第176行计算出的performanceFee参数是个非预期的巨大值。随后将此异常的performanceFee参数传入mintForV2函数中参与铸造polyBUNNY代币奖励的计算,我们切入此函数进行分析:我们可以发现其通过调用mintFor函数进行具体的逻辑处理,首先在上图代码第205行将SLP发送给Pair合约,为后续移除流动性做准备。由于shouldMarketBuy函数最终价格比较计算为false,因此将通过if逻辑调用_zapAssets函数。我们切入_zapAssets函数继续分析:在_zapAssets函数,由于asset为SLP因此将通过elseif逻辑先通过调用SushiSwapRouter合约的removeLiquidity函数进行移除流动性,随后通过_tokenToAsset函数将移除流动性获得USDC与USDT代币分别在QuickSwap中兑换成polyBUNNY与WETH代币并在QuickSwap中添加流动性。接下来我们对_tokenToAsset函数进行分析:通过简单分析我们可以发现,其将通过if逻辑直接调用zapPolygon合约的zapInToken函数,这里不再赘述判断条件的分析。接下来跟进zapInToken函数分析:同样通过对判断条件的简单分析,我们可以指定其将通过上图代码第133行进入else逻辑,接下来调用_swapTokenForMATIC函数通过下图代码第221行if逻辑设定的代币兑换路径“USDC->WETH->WMATIC",USDT代币的兑换路径同样如此。由于在此之前,攻击者已经使用借来的100,000个WETH代币在QuickSwap中通过“WETH->WMATIC”将其兑换成大量的WMATIC代币,所以上述通过“USDC/USDT->WETH->WMATIC”路径兑换到的WMATIC代币变得很少,因此接下来通过_swapMATICToFlip函数将WMATIC代币兑换成的WETH与polyBUNNY代币就会较少,导致最后转给BUNNY_POOL的LP会较少,达到减少消耗攻击者付出的SLP目的,最终减少了一部分攻击成本。接下来我们再看mintFor函数,在完成上述一系列操作后,将通过amountBunnyToMint函数计算需要铸造的polyBUNNY代币数量,而通过下图我们可以看出参与计算的contributionInETH参数来自于priceCalculator合约的valueOfAsset函数,但valueOfAsset函数接收的参数却是我们先前所说的_performanceFee参数,这是一个非预期的巨大值。我们可以对valueOfAsset函数进行简单的分析:由于asset是SLP,因此将通过上图代码第155行调用_getPairPrice函数,通过对此函数进行分析我们可以发现,参与价格获取的途径都为可信的预言机,因此攻击者无法直接操控预言机进行攻击。但由于参与计算的amount即_performanceFee是个非预期的巨大值,因此最终通过乘法计算得出的valueInETH与valueInUSD都是非预期的巨大值。随后会将获得的非预期的contributionInETH参数传入amountBunnyToMint函数进行铸币数量计算。而这里的priceOfETH与priceOfBunny都取自可信的ChainLink与官方自行喂价的预言机,因此最终经过乘法计算后,得到的铸币数量mintBunny是个非预期的巨大值。导致最终攻击者获得了大量的polyBUNNY代币奖励。攻击流程1.攻击者在AAVE闪电贷借出USDT/USDC/WETH代币,并在SushiSwap中添加流动性获得SLP。2.将大部分的SLP转入MiniChefV2中并将受益地址指定给VaultSushiFlipToFlip合约,小部分抵押到VaultSushiFlipToFlip合约中。3.由于攻击者的大部分抵押到MiniChefV2中的SLP受益地址指定给VaultSushiFlipToFlip合约,导致VaultSushiFlipToFlip获取到错误的balanceOf造成performanceFee变成一个非预期的巨大值。4.最终铸造polyBUNNY代币奖励使用了此非预期的performanceFee参数,导致额外铸造了大量的polyBUNNY代币给攻击者。5.最后攻击者抛售polyBUNNY代币,归还闪电贷,获利走人。总结此次攻击与第一次不同的点在于:并非是预言机被操控导致铸币数量错误,而是VaultSushiFlipToFlip合约获取在MiniChefV2中抵押的抵押品数量时,错误地获取了攻击者未通过VaultSushiFlipToFlip抵押的抵押品数量,导致参数铸币的参数异常。最终铸造出额外的polyBUNNY代币。参考交易链接:https://polygonscan.com/tx/0x25e5d9ea359be7fc50358d18c2b6d429d27620fe665a99ba7ad0ea460e50ae55
2021-07-17 | 慢雾科技 28674 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
科普 | 加密货币诈骗,你中招了吗?(上)
随着比特币、以太币、狗狗币等加密货币被媒体持续炒热,不少看客在毫无基础的情况下疯狂涌入加密货币世界,加上监管的缺位和加密货币的匿名性,催生了诈骗者肆意行骗的环境,据《华尔街日报》报道,美国联邦贸易委员会(FTC)数据显示,在2020年第四季度和2021年第一季度,美国消费者报告的加密货币骗局相关损失总计近8200万美元,同比增加逾9倍。诈骗,是指以非法占有为目的,用虚构事实或者隐瞒真相的方法,骗取款额较大的公私财物的行为。在区块链世界,许多怀揣着财富自由梦想的人想通过投资与加密货币相关的项目来赚钱,恰恰是这份信任感与期待感成了骗子的可利用工具。根据慢雾MistTrack所接触的受害者信息收集整理,骗子的手段主要集中在假冒工作人员、翻倍奖励投资等方面,下面我们对这两种手段进行说明分析:诈骗手法及分析假冒型诈骗【手法】1、骗子冒充交易所客服/风控人员给你打电话,告知你的某笔交易涉嫌东南亚洗黑钱,账号被冻结了,需要你协助解冻。(骗子能准确说出你的身份信息及真实存在的这笔交易等)。2、接着,骗子让你下载一个语音视频会议软件,然后让你下载某个钱包APP,并声称“平台会先把等量的USDT转到你的钱包地址,你再转给平台”。(也存在骗子让你扫描二维码,而二维码是钓鱼网站的情况)。3、当你看到钱包APP里刚刚到账的USDT(假币),你信以为真,转了真币到对方地址。4、再接着,骗子通过邮件告知你该交易所绑定的关联支付宝/银行卡号仍有未解冻金额,需要你将支付宝/微信中的余额告知对方,协助解冻。此过程中一直强调“平台会先垫付转给你,你收到账再转给我们”。5、收到假币,转出真币,发现被骗。【分析】我们都知道数据泄露事件常有发生,至于这些数据流向了哪里,不言而喻。暗网、Telegram等平台长期有出售和求购交易所用户信息的帖子。骗子们手中的用户信息正是从此而来,而这些自称“源头实时出售”的数据则来自于与各大交易所合作的第三方机构(如短信发送服务商等)。这样,一条规模庞大的加密货币诈骗产业链就此磨刀霍霍,挥向韭菜:用户信息从第三方机构泄露→骗子通过不法手段拿到信息→骗子利用信息针对受害者策划并行骗→受害者被骗。除此之外,我们还发现了“一键发行代币”的电报群,发布假币的公告一直在对话框刷新,值得注意的是,公告显示该代币只能购买不能卖出,很多用户正是被这样的假币所骗。此类诈骗类似于冒充公检法或官方人员诈骗,骗子假冒客服或其他人员,利用上述手段获取到用户的身份信息、交易信息,根据信息为用户精心策划完美贴切的方式、流程等,一步步获取受害者的信任,最后行骗。此类诈骗主要是利用官方的权威性,对受害者心理造成恐惧,同时,看到对方能说出如此准确的信息或虚假的官方文件,受害者便逐渐打开信任的大门,乖乖配合,最后被骗。面对此类诈骗,希望各大用户提高警惕,可将骗子的联系方式或网址到官方验证渠道进行验证。投资型诈骗【手法】1、骗子先建立假冒的官方群,通过微信、QQ、Telegram等社交软件拉你入群。“官方群”不断宣传好处,通过某些假的大型平台合作宣传、以及群友的晒单获取你的信任。2、接着,你抱着试一试的心态,在工作人员的不断引导下,你下载特定的钱包APP,将购买的ETH转到骗子的地址,骗子再通过合约地址,将翻倍数量的假币转到你的钱包。3、当你发现被骗后,假冒的工作人员主动私聊你,告知可以撤销交易并提供撤销工具,没有办法的你只能抓住这最后的稻草,但这时,假冒的工作人员只会引导你在虚假钓鱼网站上输入你的私钥或助记词,进行二次诈骗。【分析】投资性诈骗类似于“搬砖套利”“赠品骗局”,尽管这种诈骗手段已经被官方或媒体报道多次,但仍旧有人上当受骗。此类诈骗容易得手,一方面是骗子瞄准的都是有投资需求或贪图利益的人群;另一方面骗子也会花大量精力,冒充用户不断在群里发送虚假的赚钱截图,让受害人逐渐放松警惕。以下是慢雾MistTrack部分真实案例:可以发现,此类诈骗要么是许诺给你一定比例的回报,要么是翻倍奖励诱惑。骗子常常会利用“高收益”“高回报”“1:10”等字眼来引诱用户,但事实是,用户转出的钱犹如泥牛入海,一去不返。面对此类诈骗,希望用户切勿因贪小利而造成财产损失,同时,千万不要泄露钱包私钥或助记词。安全提醒越来越多的项目披着合法外衣,以区块链名义钻法律监管的空子,为自己牟利暴利。希望各位用户一定要提高警惕,擦亮眼睛,增强安全意识与风险意识,多听多看多辨别。永远记住,对于那些承诺高收益的投资,一定要抱有怀疑之心,转账一旦完成,资产就归对方所有。同时,不要随意信任任何网站、项目,多做调查。最重要的是,千万不要泄露自己的私钥或助记词,不要将它们通过网络、社交平台或云盘传输。一旦发现自己被骗,最好第一时间将聊天记录等证据进行留存,并去当地公安机关进行报案。更多区块链安全科普文章,请戳链接。
2021-07-16 | 慢雾科技 48643 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
假币的换脸戏法 —— 技术拆解 THORChain 跨链系统“假充值”
By:Johan@慢雾安全团队据慢雾区消息,2021年6月29日,去中心化跨链交易协议THORChain发推称发现一个针对THORChain的恶意攻击,THORChain节点已作出反应并进行隔离和防御。慢雾安全团队第一时间介入分析,经分析发现,这是一起针对跨链系统的“假充值”攻击,结果分享如下:什么是“假充值”?当我们在谈论“假充值”攻击时,我们通常谈的是攻击者利用公链的某些特性,绕过交易所的充值入账程序,进行虚假充值,并真实入账。慢雾在早期已经披露过多起“假充值”攻击事件:?【1】USDT假充值:USDT虚假转账安全?险分析|2345新科技研究院区块链实验室【2】EOS假充值:EOS假充值(hard_fail状态攻击)红色预警细节披露与修复方案【3】以太坊代币假充值:以太坊代币“假充值”漏洞细节披露及修复方案【4】比特币RBF假充值风险:比特币RBF假充值风险分析随着RenVM、THORChain等跨链服务的兴起,跨链节点充当起了交易所的角色,通过扫描另一条公链的资产转移情况,在本地公链上生成资产映射。THORChain正是通过这种机制,将以太坊上的代币转移到其它公链。漏洞分析我们从业务逻辑入口去追踪分析此漏洞的成因。首先看到在处理跨链充值事件时,调用了getAssetFromTokenAddress方法去获取代币信息,并传入了资产合约地址作为参数:-bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go在getAssetFromTokenAddress方法里,我们看到它调用了getTokenMeta去获取代币元数据,此时也传入了资产合约地址作为参数,但在此处有一个定义引起我们的警觉,在初始化代币时,默认赋予了代币符号为ETH,这就是漏洞的关键点之一:asset:=common.ETHAsset,如果传入合约地址对应的代币符号为ETH,那么此处关于symbol的验证将被绕过。-bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go继续验证我们的猜测,我们看到当代币地址在系统中不存在时,会从以太坊主链上去获取合约信息,并以获取到的symbol构建出新的代币,此时所有的漏洞成因都已经显现:-bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go-bifrost/pkg/chainclients/ethereum/tokens_db.go-bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go总结一下,首先是由于错误的定义,如果跨链充值的ERC20代币符号为ETH,那么将会出现逻辑错误,导致充值的代币被识别为真正的以太币ETH。还原攻击真相我们来看一笔攻击交易的执行过程,可以提取出充值的代币合约地址:我们在Etherscan上查看这个代币合约地址:发现这个地址对应的合约的代币符号正是ETH,攻击者正是通过部署了假币合约,完成了这次跨链假充值。漏洞修复漏洞补丁:项目方在发现攻击后快速对代码进行了修复,删除了默认的代币类型,使用common.EmptyAsset进行空代币定义,并在后续逻辑中使用asset.IsEmpty()进行判断,过滤了没有进行赋值的假充值代币。总结幸运的是项目方及时发现了本次攻击,未造成巨额财产损失,但作为跨链系统,未来可能聚集巨额的多链资金,安全性不容忽视,因此慢雾安全团队建议在进行跨链系统设计时应充分考虑不同公链不同代币的特性,充分进行“假充值”测试,做好状态监控和预警,必要时可联系专业安全公司进行安全审计。
2021-06-30 | 慢雾科技 901 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
强扭的瓜不甜 —— SafeDollar 被黑分析
By:Kong@慢雾安全团队据慢雾区消息,2021年06月28日,Polygon上算法稳定币项目SafeDollar遭受闪电贷攻击,慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析Phase1首先攻击者提前数小时创建了一个合约,并通过Polydex将MATIC兑换成PLX代币。随后攻击者通过此合约将获得的PLX代币存入SafeDollar项目的SdoRewardPool合约中,SdoRewardPool合约架构参考自SUSHI的MasterChef合约,用户在SdoRewardPool合约中抵押指定的代币即可获得SDO代币奖励。而攻击者提前数小时在SdoRewardPool合约中抵押PLX代币就是为了后续获取抵押奖励做准备。Phase2攻击者在Phase1中抵押数小时后部署了另一个合约,这也是主要的攻击合约,在此攻击合约中,攻击者利用通过Polydex的多个池子闪电贷借出大量的PLX代币。随后在同一笔交易中攻击合约将获得的PLX代币不断地在SdoRewardPool合约中进行“抵押-提现”操作。而我们知道SdoRewardPool合约架构参考自SUSHI的MasterChef合约,因此攻击者在同一笔交易内不断的进行抵押提现是无法获得SDO代币奖励的。那么攻击者最终是怎么获利的呢?通过链上分析我们可以发现攻击者是通过Phase1中部署的第一个合约获得大量SDO代币奖励的。那么为何攻击者只是在Phase1中进行简单的抵押操作就可以获得大量的SDO代币奖励呢?这与攻击者在第二个攻击者合约中不断地进行“抵押-提现”操作有何联系呢?带着这些疑问我们一步步的进行分析:首先查看攻击者获得大量代币奖励的交易,在这笔交易中攻击者只是简单的对SdoRewardPool合约进行updatePool操作,并通过withdraw进行提现。而正是在提现时SdoRewardPool合约铸造了大量的SDO代币给攻击者。既然是铸造出非预期数量的代币给到攻击者,那么必然是奖励计算出现了问题。在SdoRewardPool合约中负责SDO铸币奖励的是_harvestReward函数,我们跟进此函数:通过上图我们可以发现铸币数量取决于所计算的_claimableAmount参数,而影响此参数的就只有用户的抵押数量user.amount、池子的奖励数量pool.accSdoPerShare、精度1e18以及用户负债user.rewardDebt。我们直接对链上数据进行分析可以发现用户抵押数量与池子的奖励数量相乘时,pool.accSdoPerShare是一个十分巨大的数值,这导致了最后计算结果变得非常巨大。而池子的奖励数量pool.accSdoPerShare是在updatePool函数中进行更新的,我们继续跟进updatePool函数:可以很容易的看出pool.accSdoPerShare主要是由缓存的accSdoPerShare、_sdoReward以及lpSupply决定的。我们直接分析此段逻辑的链上数据可以发现此时的lpSupply只有2!这就导致了在计算pool.accSdoPerShare时除了一个非常小的lpSupply造成结果变得十分巨大。而lpSupply取的是抵押的PLX代币在SdoRewardPool合约中的余额,但既然在SdoRewardPool合约中有大量的PLX代币抵押,为何最终在获取余额的时候只有2呢?我们可以很容易的猜测是PLX代币在获取数量时出现的问题,我们跟进PLX代币进行分析:我们可以发现余额获取的是_balances变量,而此变量是在用户进行转账时进行改变,我们跟进其转账函数可以发现在用户进行转账时会调用_move函数,我们跟进此函数可以发现这是一个通缩型逻辑,也就是说A用户在转账给B用户时,B用户接收到的数量会小于A用户发送的数量!而此时本次攻击核心就呼之欲出了!因为我们可以知道SdoRewardPool合约架构参考自SUSHI的MasterChef合约,而此架构是用户不管抵押了多少代币,在其提现时都可以取出相同数量的代币。我们跟进SdoRewardPool合约的deposit与withdraw函数进行验证:其抵押与提现的逻辑不出我们所料,用户存入多少PLX代币,在其提现时SdoRewardPool合约就会发送给用户多少代币,即用户存入100个PLX,提现时也能提走100个PLX代币。而通过上面的分析我们可以知道PLX代币是通缩型代币,在用户抵押100个代币时,SdoRewardPool合约收到的数量小于100个,但用户提现时SdoRewardPool合约却又给了用户100个代币。相当于用户少充多提了,所以攻击者就是利用此通缩型代币与SdoRewardPool合约的兼容性问题进行反复的“抵押-提现”操作,最终把SdoRewardPool合约中的PLX代币数量消耗至2,导致SdoRewardPool合约在铸造奖励时铸造出了大量的SDO代币。攻击流程1.攻击者先通过“攻击合约1”在SdoRewardPool合约中抵押PLX代币,以便后续获取SDO代币奖励。2.攻击利用PLX通缩型代币与SdoRewardPool合约的兼容性问题,通过“攻击合约2”频繁地在SdoRewardPool合约中反复进行“抵押-提现”操作,最终导致SdoRewardPool合约中的PLX代币数量消耗到一个极小的数量2。3.随后攻击通过“攻击合约1”进行在SdoRewardPool合约中进行提现操作以获取SDO代币奖励,奖励的计算会除SdoRewardPool合约中PLX代币数量,而此时SdoRewardPool合约中PLX代币数量是一个极小的数量2,所以导致除法计算后奖励的数量变成一个巨大的值。4.攻击者在获得大量SDO奖励后,直接在市场上进行抛售,获利离场。总结此次攻击的核心问题在于“通缩型代币”与架构参考自SUSHI的MasterChef合约不兼容导致的。此兼容性问题造成SafeDollar项目的SdoRewardPool合约中PLX代币被恶意耗尽,而SDO代币奖励计算又依赖于SdoRewardPool合约中PLX代币数量,最终导致SDO代币价格闪崩的惨剧发生。由于当前DeFi项目需要多个合约间进行交互,因此慢雾安全团队建议在进行设计时应充分考虑不同合约间交互的兼容性问题。参考交易:[1]https://polygonscan.com/tx/0x55dad44a7ed31d1637e70879af66e02290d39aea54554f8411e6ec19c03a074b[2]https://polygonscan.com/tx/0x4dda5f3338457dfb6648e8b959e70ca1513e434299eebfebeb9dc862db3722f3[3]https://polygonscan.com/tx/0xd78ff27f33576ff7ece3a58943f3e74caaa9321bcc3238e4cf014eca2e89ce3f[4]https://polygonscan.com/tx/0x1360315a16aec1c7403d369bd139f0fd55a99578d117cb5637b234a0a0ee5c14
2021-06-29 | 慢雾科技 961 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
“不可思议” 的被黑之旅 —— Impossible Finance
By:Kong@慢雾安全团队据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)。随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:为什么在一次兑换过程中会进行两次兑换操作呢?通过分析具体的内部调用流程我们可以发现,攻击者在Router合约调用AAA合约的transferFrom函数将AAA代币转入Pair合约的过程中,同时调用了一次Pair合约的swap函数(即在transferFrom函数实现了正常转账与swap调用的逻辑)。然后再通过项目设计预期的cheapSwap再进行一次正常的代币兑换操作。通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用swap函数与cheapSwap函数进行两次代币兑换操作,最终收到了额外的BUSD代币。那么既然是进行兑换操作,理论上每次兑换操作都将导致K值的变化,最终使得用户无法获得预期的代币。但通过分析ImpossiblePair的swap函数与cheapSwap函数的具体逻辑,我们发现一个惊人的情况:在swap函数中进行了K值检查,而在cheapSwap函数却未进行K值检查而直接进行了update操作。这就导致了攻击者进行了多次兑换操作获得了额外的BUSD。攻击流程1、攻击者先通过PancakeSwap闪电贷借出WBNB,并将WBNB兑换成IF代币。2、创建恶意的代币合约AAA(BBB),并在Impossible中添加了AAA代币与IF代币流动性。3、通过AAA->IF->BUSD路径进行AAA代币到BUSD代币的兑换,并在AAA代币转入Pair合约兑换成IF代币的过程中进行了一次IF代币与BUSD的兑换操作,随后再进行正常的cheapSwap操作。最终获得了额外的BUSD代币。4、之后重复以上操作进行获利。总结本次攻击的核心在于cheapSwap函数中未进行K值检查,导致攻击者可以通过在一次兑换过程中进行多次兑换操作以获得额外的代币。慢雾安全团队建议DeFi协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。参考交易:https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8
2021-06-21 | 慢雾科技 18476 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
走过最长的路,竟是自己的套路 —— Alchemix 事件分析
By:yudan@慢雾安全团队据慢雾区消息,2021年06月16日,以太坊DeFi项目Alchemix的alETH合约疑似出现安全问题。17日,Alchemix发布了事故分析报告,慢雾安全团队迅速介入分析,并在官方分析报告的基础上梳理了本次事件的整个脉络和核心关键点,供大家参考。太长不看系列本次分析文章很长。这里先说结论,方便大家有个大概的理解。本次事故的主要原因在于Alchemix通过transmuter添加了3次vault,导致收益信息记录在了一个错误的元素上,而在调用transmuter的harvest函数时也没有传入正确的index值,导致通过错误的元素获取了错误的收益,将错误的4300ETH的收益发送到adapter合约,帮助用户偿还了alETH的贷款,造成收益增多的问题,导致了悲剧。核心分析——Round1根据官方发布的事故分析报告,本次事故的原因是官方的alETH的部署脚本意外地创建了额外的vaults,导致Alchemix使用了vaults数组中错误的索引并计算出了错误的奖励,导致transmuter把所有的奖励用于偿还了用户的所有负债。我知道单单是这句简短的分析让人有点云里雾里,摸不着头脑,所以我们只能把目标放在官方给出的交易中,看看能不能找到真相。根据官方给出的交易,通过ethtx.info分析工具进行分析,我们不难发现,这笔交易调用了AlchemistEth合约的harvest函数,并且传入了_vaultId=0这个参数,最后返回了"4308144937764982868765"和"4308144937764982866415"这两个值。为了更加了解harvest函数的作用,我们需要对整个函数进行分析:不难发现,harvest函数其实包含两个重要的操作,分别是收获奖励和将奖励分发给transmuter合约。其中vault是一个library库合约,其中的harvest逻辑实现如下:通过代码分析不难发现,vault库合约的harvest函数其实是检查了外部的adapter的总的资金量,然后根据adapter中的资金量减去用户的充值数量计算出收益的部分。这里我们可以将这个adapter理解为一个策略池,用于管理用户的资金和收益。然后我们回到用户一开始的AlchemistEth合约中的harvest函数,发现返回的"4308144937764982868765"和"4308144937764982866415"这两个值其实对应的就是vault库合约的harvest函数计算出的需要提现的代币数量和从adapter(策略池)中取回的代币的数量。由于这个adapter对应的收益代币是WETH,精度为18位,那么"4308144937764982866415"这个数值换算过来就是"4308.144937764982866415"个WETH。也就是说,本次harvest操作,收益了超过4300个ETH的收益,然后这个收益在下一步中通过_distributeToTransmuter函数给到了transmuter合约进行分发,我们看下分发过程中的逻辑是怎样的:_distributeToTransmuter函数的逻辑只有简单的3行,我们主要关注的是最后的外部调用——lowerHashMinted函数。该函数所对应的xtoken在这里指的是alETH本身。因为alETH本身是用户通过借贷借出来的,所以lowerHashMinted这里的操作其实是使用harvest的收益将alETH总的贷出数量减少了,从而减少了每个用户的贷款。总结来说就是用harvest4300ETH的收益偿还用户的alETH贷款。打个小总结这里先总结下这个流程,就是AlchemistEth合约通过harvest函数,得到了4300ETH的收益,并将这个收益分发出去了,用于偿还用户的alETH贷款,导致了我们看到的情况——已经贷出alETH的用户在不需要还款的情况下就可以拿回他们质押的ETH。那究竟是为什么,会有这4300ETH的收益呢?这多出来的4300ETH的收益是怎么来的?针对这个问题,我们开始下一轮的分析。核心分析——Round2要了解为什么会多出来4300ETH,就必须了解AlchemistEth的资金存储过程。在AlchemistEth合约中,合约总的充值情况是使用Vaultlibrary库的Data结构体进行记录的,然后通过flushActiveVault函数更新对应的充值数量(totalDeposit)。然后depositAll函数会将充值的代币金额打到对应的adapter(策略池)中,那么在下一次harvest的时候,通过adapter(策略池)获取的totalValue,就会是用户的本金加上策略池的收益。为了计算收益过程中的本金部分,我们对官方给出的交易进行debug,发现本金仅为9000ETH,从adapter获取的收益加上本金共有13000ETH,也就是说9000ETH的本金产生了4300ETH的收益。但是,按照上面分析的逻辑,用户的本金是不会产生那么大的收益的,问题肯定是出在了adapter获取的totalValue。也就是说adapter不止只有AlchemistEth充值代币,还存在其他的收益渠道。为了验证我们的想法,慢雾安全团队分析了adapter的所有代币收入,果然发现了一笔异常的转入行为,并且金额也能刚好对上多出的4300ETH的收益。也就是说,问题就在这里了。通过查看交易数据,发现这是一笔调用harvest操作的交易,调用的合约是transmuter合约:也就是说,是这个harvest函数出问题了,harvest函数的逻辑如下:同样是调用了vault的harvest函数,熟悉的配方,熟悉的味道。我们再次进行debug,发现一个惊人的事实——在进行收益的时候,vault的totalDeposit竟然为0,导致4300ETH的收益直接分发给了adapter,导致了adapter获取的totalValue错误了,多了4300个ETH,原因就是在这里。到了这里,我们已经很接近真相了,剩下要解决的就是为什么totalDeposit会为0?我们查询了transmuter合约中能改变totalDeposit的地方,发现只有_plantOrRecallExcessFunds函数可以改变这个值,而这个函数上层调用的又是distribute函数。而transmuter合约的distribute函数是AlchemistEth合约在收益的时候进行调用的。也就是说本身的流程应该是:1.AlchemistEth合约调用harvest进行收益2.AlchemistEth合约调用transmuter合约的distribute函数记录收益情况,并把收益部分给adapter3.adapter收到了transmuter的收益,根据收益偿还用户的alETH的贷款但是问题就出在了_plantOrRecallExcessFunds函数中。由于在记录充值信息的时候,用的是_vaults.last()来获取最新的vault,所以其实充值信息叠加在了最后一个元素上。但是项目方调用了三次setActiveVault函数,所以其实充值信息是叠加到了_vaults数组的3号元素,也就是index为2的vault元素上。但是在transmuter合约在harvest的时候传入的_vaultId却是0,0号元素是没有任何充值记录的,所以transmuter合约就误将所有的收益都给了adapter了。导致了悲剧的发生。总结到这里,整个事情已经变得很清晰了,Alchemix项目方由于某种原因,通过transmuter添加了3次vault,导致收益信息记录在了一个错误的元素上,而在调用transmuter的harvest函数时也没有传入正确的index值,导致通过错误的元素获取了错误的收益,错误收益被发送到adapter合约,造成收益增多,导致了悲剧。慢雾安全团队在此提醒,DeFi是一个复杂的系统,在进行DeFi操作的时候,要记得检查好业务逻辑中的每一个流程,防止意外的发生,在必要的时候可以联系专业的安全团队进行专业的安全审计,防止事故的发生。【参考链接】官方事故分析报告:https://forum.alchemix.fi/public/d/137-incident-report-06162021收益计算错误交易:https://etherscan.io/tx/0x3cc071f9f40294bb250fc7b9aa6b2d7e6ca5707ce4d6d222157d7a0feef618b3
2021-06-18 | 慢雾科技 772 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
我竟骗了我自己?—— BurgerSwap 被黑分析
By:yudan@慢雾安全团队据慢雾区消息,2021年05月28日,币安智能链(BSC)DeFi项目BurgerSwap被黑,损失达330万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析BurgerSwap是一个仿UniswapAMM项目,但是和Uniswap架构有所区别。BurgerSwap架构总体分成【Delegate->lpPlatForm->Pair】。其中Delegate层管理了所有的Pair的信息,并负责创建lpPlatForm层。然后lpPlatForm层再往下创建对应的Pair合约。在整个架构中,lpPlatForm层充当了Uniswap中Router的角色,负责将计算交易数据和要兑换的代币转发到Pair合约中,完成兑换。本次事件的根本正是出在这种架构的问题上。通过一步步分析攻击者的交易行为,我们来还原整个攻击过程的核心:本次攻击开始于Pancake的闪电贷,攻击者从Pancake中借出了大量的WBNB,然后将这些WBNB通过BurgerSwap兑换成Burger代币。在完成以上的操作后,攻击者使用自己控制的代币(攻击合约本身)和Burger代币通过Delegate层创建了一个交易对并添加流动性,为后续攻击做准备。在完成代币的创建和准备之后,攻击者立马通过PaltForm层的swapExactTokensForTokens函数发起了兑换,兑换路径为【攻击者自己控制的代币->Burger->WBNB】接下来进行了最关键的一次操作。由于先前攻击者在创建交易对的时候使用的是自己控制的代币,在代币兑换过程中,_innerTransferFrom函数会调用攻击者控制的代币合约,于是攻击者可以_innerTransferFrom函数中重入swapExactTokensForTokens函数。为什么攻击者要这样做呢?通过对PlatForm层的swapExactTokensForTokens函数进行代码分析,我们不难发现,合约在调用_innerTransferFrom函数时首先计算了用户的兑换数据,然后在_innerTransferFrom函数的操作后使用预先计算的数据来转发到底层进行真正的代币兑换。从这个函数层面来看,就算攻击者重入了swapExactTokensForTokens函数,底层调用的swap函数也是独立的,咋一看并没有什么问题,但是链上的一个行为引起了慢雾安全团队的注意:我们惊讶地发现,在重入的兑换过程中,兑换的数量竟然没有因为滑点的关系而导致兑换数量的减少。这究竟是什么原因呢?看来关键是底层的Pair合约的问题了。我们又进一步分析了底层调用的Pair合约,代码如下:通过分析Pair的代码,我们再次惊讶地发现在swap的过程中,合约竟然没有在兑换后根据恒定乘积公式检查兑换后的数值!!也就是说,Pair合约完全依赖了PlatForm层的数据进行兑换,导致了本次事件的发生。由于Pair层本身并不做恒定乘积的检查,在重入的过程中,PlatForm层的兑换数据预先进行了计算,在_innerTransferFrom函数完成后,Pair的更新数据也没有反映到PlatForm层中,导致重入交易中的兑换产生的滑点并不影响下一次的兑换,从而造成了损失。用图来看的话大概如下:总结本次攻击属于BurgerSwap架构上的问题,由于Pair层完全信任PaltForm层的数据,并没有自己再做一次检查,导致攻击的发生。最近DeFi安全事件频发,针对越来越密集的DApp攻击事件,慢雾安全团队建议DApp开发者在移植其他协议的代码时,需充分了解移植协议的架构,并充分考虑移植协议和自身项目的兼容性,且需通过专业安全审计机构的审计后才上线,防止资金损失情况的发生。攻击交易参考:https://bscscan.com/tx/0xac8a739c1f668b13d065d56a03c37a686e0aa1c9339e79fcbc5a2d0a6311e333
2021-05-28 | DeFi/去中心化金融 893 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
代币闪崩,差点归零 - PancakeBunny 被黑简析
By:Kong@慢雾安全团队据慢雾区情报,币安智能链上DeFi收益聚合器PancakeBunny项目遭遇闪电贷攻击,慢雾安全团队第一时间介入分析,并将结果以简讯的形式分享,供大家参考:攻击过程分析1.攻击者先发起一笔交易,使用0.5个WBNB与约189个USDT在PancakeSwap中添加流动性并获取对应的LP,随后将LP抵押至PancakeBunny项目的VaultFlipToFlip合约中。2.在LP抵押完成后,攻击者再次发起另一笔交易,在这笔交易中攻击者先从PancakeSwap的多个流动性池子中闪电贷借出巨量的WBNB代币,并从Fortube项目的闪电贷模块借出一定数量的USDT代币。随后使用借来的全部USDT代币与部分WBNB代币在PancakeSwap的WBNB-USDT池子添加流动性,并把获得的LP留在WBNB-USDT池子中。3.由于在步骤1攻击者已经在VaultFlipToFlip合约中进行了抵押,因此攻击者在添加完流动性后直接调用VaultFlipToFlip合约的getReward函数来获取BUNNY代币奖励并取回先前抵押的流动性。4.在进行getReward操作时,其会调用BunnyMinterV2合约的mintForV2函数来为调用者铸造BUNNY代币奖励。5.在mintForV2操作中,其会先将一定量(performanceFee)的LP转至WBNB-USDT池子中移除流动性,但由于在步骤2中攻击者把大量的LP留在了池子中,因此BunnyMinterV2合约将会收到大量的WBNB代币与USDT代币。6.在完成移除流动性后会调用zapBSC合约的zapInToken函数分别把步骤5中收到的WBNB与USDT代币转入zapBSC合约中。7.而在zapInToken操作中,其会在PancakeSwap的WBNB-USDT池子中把转入的USDT兑换成WBNB。随后再将合约中半数WBNB在PancakeSwap的WBNB-BUNNY池子中兑换成BUNNY代币,并将得到的BUNNY代币与剩余的WBNB代币在WBNB-BUNNY池子中添加流动性获得LP,并将此LP转至mintForV2合约中。而由于步骤5中接收到的非预期的大量的WBNB,并且进行WBNB兑换成BUNNY代币的操作,因此WBNB-BUNNY池子中的WBNB数量会大量增加。8.在完成zapInToken操作后会计算BunnyMinterV2合约当前收到的WBNB-BUNNYLP数量,并将其返回给mintForV2。随后将会调用PriceCalculatorBSCV1合约的valueOfAsset函数来计算这些LP的价值,这里计算价值将会以BNB结算(即单个LP价值多少个BNB)。9.在valueOfAsset计算中,其使用了WBNB-BUNNY池子中WBNB实时的数量乘2再除以WBNB-BUNNYLP总数量来计算单个LP的价值(valueInBNB)。但经过步骤7,我们可以发现WBNB-BUNNY池子中的WBNB非预期的数量大量变多了,这就导致了在计算单个LP的价值会使得其相对BNB的价格变得非常高。10.随后在mintForV2中,合约会以在步骤9中计算出的LP价值来通过amountBunnyToMint函数计算需要给攻击者铸造多少BUNNY代币。但由于价格计算方式的缺陷导致最终LP的价格被攻击者恶意的操控抬高了,这就导致了BunnyMinterV2合约最终给攻击者铸造了大量的BUNNY代币(约697万枚)。11.在拿到BUNNY代币后,攻击者将其分批卖出成WBNB与USDT以归还闪电贷。完成整个攻击后拿钱走人。总结这是一次典型的利用闪电贷操作价格的攻击,其关键点在于WBNB-BUNNYLP的价格计算存在缺陷,而BunnyMinterV2合约铸造的BUNNY数量依赖于此存在缺陷的LP价格计算方式,最终导致攻击者利用闪电贷操控了WBNB-BUNNY池子从而拉高了LP的价格,使得BunnyMinterV2合约铸造了大量的BUNNY代币给攻击者。慢雾安全团队建议,在涉及到此类LP价格计算时可以使用可信的延时喂价预言机进行计算或者参考此前AlphaFinance团队研究的LP价格计算方式,以避免被恶意操控的事故再次发生。
2021-05-20 | DeFi/去中心化金融 1620 2 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
开心做聚合,无奈被攻击 —— Rari 被黑事故分析
By:yudan@慢雾安全团队2021年5月8日,据链闻消息,以太坊收益聚合协议RariCapital因集成了AlphaFinance产生了漏洞,损失近1500万美元。事后,RariCapital官方发布了事故分析报告,分析了此次事故的主要原因。慢雾安全团队在官方分析的基础上,结合慢雾安全团队对此次事件的深入分析,进一步解读本次安全事故的原因。攻击细节分析本次攻击发生在RariCapital的RariManger合约中,整个过程下来就是攻击者首先通过闪电贷从dYdX中借出巨量资金,然后不停的重复调用RariManger合约中的deposit和withdraw函数,完成获利。如下图:那么用户是如何通过deposit和withdraw这两个操作获利的呢?我们需要分析对应的函数:以上是deposit函数的部分逻辑,首先deposit函数本身会调用内部的_depositTo函数,然后会再次调用getFundBalance函数来获取合约的余额。getFundBalance函数最终是会调用到RariController合约的getBalance函数去获取余额。最后是通过RariController合约中的AlphaPoolController库的getBalance函数获取余额。如下图:流程上略微复杂,用图来展示大概就是下面这样:从上面的分析不难发现,Rari合约最终是用到了AlphaFinance项目的ibETH合约的totalETH函数获取合约的余额,目的是为了根据totalETH和totalSupply的比值计算出Rari合约真正的ETH余额。deposit函数是根据用户的充值ETH的数量和比值计算要发放给用户的REPT数量,而withdraw函数的公式也大同小异,同样需要通过getBalance函数获取合约的ETH余额并计算比值,然后根据用户的REPT代币的余额和比值计算需要返还给用户的ETH的数量。但是问题恰恰出在这个获取ETH余额的公式上。根据官方描述,从ibETH合约获取的totalETH函数获取的值是可以被用户操控的。以下是官方原文:根据官方的描述,用户可通过ibETH合约的work函数操控totalETH函数返回的值,导致Rari整个价值计算公式崩溃。我们分别分析ibETH的work函数和totalETH函数:totalETH函数:work函数:以上分别是ibETH合约中的totalETH函数和work函数的部分实现。不难发现totalETH函数其实就是获取合约的总的ETH的数量。而work函数,本身是一个payable函数,也就是说,用户是可以通过work函数来控制ibETH合约中的ETH数量从而来改变totalETH返回的值的。更糟糕的是,work函数同时还支持调用其他的任意合约。那么整个思路就很清晰了。攻击流程1、从dYdX中进行闪电贷,借出大量的ETH;2、使用一部分的ETH充值到RariCapital合约中,此时从ibETH获取的比值还是正常的;3、使用剩余的ETH充值到ibETH合约中,调用ibETH合约的work函数,为后续推高ibETH合约的totalETH的返回值做准备;4、在work函数中同时对RariCapital合约发起提现,由于上一步已经推高totalETH值,但是计算的totalETH()/totalSupply()的值相对于充值时被拉高,从而使攻击者能从RariCapital中使用等量的REPT获取到更多的ETH。总结本次分析下来,主要的原因是协议的不兼容问题,攻击者通过闪电贷和重入的方式,攻击了RariCapital,造成了巨大的损失。慢雾安全团队建议在DeFi逐渐趋于复杂的情况下,各DeFi项目在进行协议间交互时,需要做好协议之间的兼容性,避免因协议兼容问题导致的损失。【参考链接】RariCapital官方分析:https://medium.com/rari-capital/5-8-2021-rari-ethereum-pool-post-mortem-60aab6a6f8f9攻击交易(其中一笔):https://etherscan.io/tx/0x171072422efb5cd461546bfe986017d9b5aa427ff1c07ebe8acc064b13a7b7be
2021-05-09 | DeFi/去中心化金融 1205 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
铸币疑云 —— Paid Network 被盗细节分析
据消息,以太坊DApp项目PaidNetwork遭受攻击。攻击者通过合约漏洞铸造近1.6亿美元的PAID代币,并获利2000ETH(约300万美元)。慢雾安全团队在第一时间跟进并分析,现在将细节分析给大家参考。攻击细节分析以上是整个攻击过程的调用流程细节。可以看到整个攻击过程非常的简单,攻击者通过调用代理合约中函数签名为(0x40c10f19)的这个函数,然后就结束了整个攻击流程。由于这个函数签名未知,我们需要查阅这个函数签名对应的函数是什么。通过查阅这个函数签名,我们发现这个签名对应的正是mint函数。也就是说,攻击者直接调用了mint函数后就结束了攻击过程。那么到这里,我们似乎可以得出一个mint函数未鉴权导致任意铸币的漏洞了。通过Etherscan的代币转移过程分析,似乎也能佐证这个猜想。但是,事实真是如此吗?为了验证未鉴权任意铸币的这个想法,我们需要分析合约的具体逻辑。由于PaidNetwork使用的是合约可升级模型,所以我们要分析具体的逻辑合约(0xb8...9c7)。但是在Etherscan上查询的时候,我们竟然发现该逻辑合约没有开源。这个时候,为了一探究竟,我们只能使用反编译对合约的逻辑进行解码了。通过Etherscan自带的反编译工具,可以直接对未开源合约进行反编译。在反编译后,我们却发现了一个惊人的事实:通过反编译,我们不难发现,合约的mint函数是存在鉴权的,而这个地址,正是攻击者地址(0x187...65be)。那么为什么一个存在鉴权的函数会被盗呢?由于合约未开源,无法查看更具体的逻辑,只能基于现有的情况分析。我们分析可能是地址(0x187...65be)私钥被盗,或者是其他原因,导致攻击者直接调用mint函数进行任意铸币。总结本次攻击过程虽然简单,但是经过细节分析后却有了惊人的发现。同时这次的攻击也再次对权限过大问题敲响了警钟。如果这次的mint函数给到的鉴权是一个多签名地址或是使用其他方法分散权限,那么此次攻击就不会发生。参考链接:攻击交易:https://etherscan.io/tx/0x4bb10927ea7afc2336033574b74ebd6f73ef35ac0db1bb96229627c9d77555a0
2021-03-06 | DeFi/去中心化金融 3674 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
可避天灾,难免人祸 —— Furucombo 被黑分析
著名DeFi项目Furucombo被黑,损失超1500万美元。慢雾安全团队第一时间介入分析,并将攻击细节分享给大家。攻击细节分析本次发生问题的合约在Furucombo本身的代理合约当中。整个攻击流程很简单。攻击者通过设置了Furucombo的AaveV2Proxy的逻辑地址导致后续通过Furucombo代理合约调用的逻辑全部转发到攻击者自己的恶意合约上,导致任意资金被盗。但是如果事情那么简单,那么本次分析不值一提。问题远比想象的复杂得多。如上图所示攻击者的入口在Furucombo的batchExec函数,我们先对batchExec函数进行分析:以上是FurucomboProxy合约的batchExec函数的具体实现,其中_preProcess和_postProcess合约分别是对调用前后做一些数据上的处理,不涉及具体的调用逻辑,这边可以先忽略。我们主要观察核心的_execs函数:通过对execs代码的分析不难发现,函数的主要逻辑是对configs数组的数据做检查,并根据configs数组的数据对data进行一些处理。但是回顾上文中攻击者的调用数据,不难发现攻击者的调用数据中,configs的数据是一个0地址:这里有一个trick,由于0地址是一个EOA地址,所有对EOA地址的函数调用都会成功,但是不会返回任何结果。结合这个trick,execs函数中的关于configs数据的部分可以先暂时忽略。直接看到最后的核心_exec函数:_exec函数的逻辑也很简单,在校验了_to地址后,直接就将data转发到指定的_to地址上了。而通过对攻击交易的分析,我们能发现这个_to地址确实是官方指定的合法地址。最后一步,便是调用_to地址,也就是官方指定的AaveV2Proxy合约的initialize函数,将攻击者自己的恶意地址设置成AaveV2Proxy合约的逻辑地址。通过对Furucombo合约的分析,可以发现整个调用流程上没有出现严重的安全点,对调用的地址也进行了白名单的检查。那么问题只能是出在了对应要调用的代理逻辑上,也就是AaveV2Proxy合约。我们直接分析AaveV2Proxy合约的initialize函数的逻辑:可以看到initialize函数是一个public函数,并在开头就检查了_implementation是否是0地址,如果是0地址,则抛出错误。这个检查的目的其实就是检查了_implementation是否被设置了,如果被设置了,就无法再次设置。根据这个设置,不难想出initialize这个函数只能调用一次。除非AaveV2Proxy从来没有设置过_implementation,否则这个调用是不会成功的。难道Furucombo真的没有设置过对应的_implementation吗?带着这样的疑问,我们检查了交易内的状态变化。如下:可以看到,交易中改变了存储位置为0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc的内容,而写入的内容正是攻击者自己的恶意合约地址0x86765dde9304bea32f65330d266155c4fa0c4f04。而0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc这个位置,正是_implementation数据的存储地址。也就是说,官方从来没有设置过AaveV2Proxy合约的_implementation地址,导致攻击者钻了这个空子,造成了Furucombo资产损失。总结通过对整个事件的分析来看,Furucombo此次事故并不在安全漏洞的范畴内,主要的原因在于官方将未启用的AaveV2Proxy合约添加进了自己的白名单中,并且未对AaveV2Proxy合约进行初始化,导致攻击者有机可乘。建议目前,由于Furucombo遭受攻击,导致任何将代币授权过给Furucombo合约(0x17e8ca1b4798b97602895f63206afcd1fc90ca5f)的用户都将面临资金损失的风险。慢雾安全团队建议与Furucombo交互过的用户检查是否有将相关代币授权给Furucombo合约。如有授权,应及时撤销相关授权,避免进一步损失。参考链接:代币授权检查地址:https://approved.zone/攻击交易:https://ethtx.info/mainnet/0x6a14869266a1dcf3f51b102f44b7af7d0a56f1766e5b1908ac80a6a23dbaf449
2021-02-28 | DeFi/去中心化金融 3893 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
王者开局偶遇猪队友——简析 Alpha Finance & Cream
据慢雾区消息,2021年2月13日,以太坊DeFiAlphaFinance遭受攻击,慢雾安全团队第一时间跟进分析,并以简讯的形式分享给大家,供大家研究。1.攻击者用一部分的WETH在UniswapWETH-UNI池子上添加流动性,再把一部分的WETH兑换成sUSD并在Cream中添加流动性获得cySUSD凭证。2.攻击者通过AlphaHomoraV2从IronBank借出sUSD,并将LP抵押到WERC20中为后面开杠杆做准备。3.攻击者再通过AlphaHomoraV2将上一步借出的sUSD归还给IronBank。4.上面几步似乎只是试探。5.随后攻击者开始利用AlphaHomoraV2的杠杆借贷从IronBank中循环借出sUSD,每次借出数量都是上一次的一倍,最后将借出的sUSD再转到Cream中添加流动性获得cySUSD凭证。6.之后攻击者不满足于这种低效的杠杆循环借贷叠cySUSD的方式,开始使用闪电贷加快速度。7.攻击者开始从AAVE中闪电贷借出180万USDC,并通过Curve将USDC兑换成sUSD,这时候攻击者就拿到了大量的sUSD了。8.随后攻击者先用sUSD到Cream中添加流动性,并获得cySUSD凭证,再开始继续使用AlphaHomoraV2的杠杆借贷从IronBank中循环翻倍的借出sUSD,最后利用借出的sUSD去归还闪电贷。(偿还的闪电贷中有包含先前几步的一部分sUSD作为利息,因为最后一步借出的不足以还贷,但都是拿从Alpha借的去还的)9.重复上一步,闪电贷借出1000万USDC,换成sUSD,先添加在Cream中,添加9,668,335的流动性拿到cySUSD,再继续杠杆借贷,最后翻倍到10,088,930应该基本把池子借空了。然后开始重复添加流动性,获取cySUSD。最后再去归还闪电贷。10.再闪电贷借出1000万,再重复添加流动性与借贷,获取cySUSD并归还闪电贷。11.由于经过以上步骤攻击者已获得大量cySUSD,因此攻击者开始直接在Cream借出WETH、USDC、USDT、DAI、sUSD。总结:攻击者使用闪电贷到AlphaFinance中进行杠杆借贷,并使用AlphaFinance本身的CreamIronBank额度来归还闪电贷,在这个过程中攻击者通过在Cream添加流动性获得了大量的cySUSD,使攻击者得以用这些cySUSD在CreamFinance中进行进一步的借贷。由于AlphaFinance的问题,导致了两个协议同时遭受了损失。
2021-02-15 | DeFi/去中心化金融 4051 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
引介|一种安全的 LP 价格的获取方法
By:yudan@慢雾安全团队前言目前,使用LPToken进行抵押借贷的需求越来越大,但是目前市面上并没有一种完善的用于安全获取LPToken价格的方法。慢雾安全团队在分析LPToken价格的获取方式的过程中关注到了AlphaFinance团队的关于安全获取LP价格的方法。在仔细阅读后,将相关的思考分享给大家。LPToken价格获取分析目前,常见的LPToken价格的获取方式如下:其中,r0,r1分别代表Uniswap交易对中两种代币的存量,price0,price1分别代表r0和r1对应代币的价格。上面的公式简单来说就是算出交易对中两种代币的总价值之和,然后除以LPToken的总数量,得到了单份LP的价值。这个公式咋一看没什么问题,一般来说,price0和price1都会取Uniswap本身提供的延时价格。但是这里存在一个被闪电贷攻击的风险。虽然price0和price1是不能操控的,但是r0和r1却是可以操控的。通过操控r0和r1的值,即可对整个公式进行操控,具体可参考慢雾文章《采用延时喂价还被黑?WarpFinance被黑详解》那么有没有办法能获取一种安全的LPToken价格,使代币的存量无法被操控呢?AlphaFinance团队提供了一个思路:根据AlphaFinance的分析,整个过程分为3步:第1步是通过Uniswap的getReserves接口获得交易对中对应代币的数量,算出K第2步是获取交易对中每个代币对应的价格,然后算出代币的价格的比例P第3步是通过K和P之间的关系反推真实的代币存量。完成以上3步后,最终LPToken的价格获取公式会变成下面这个样子:这一波操作下来,好像有点整懵了,但是问题不大,我们来逐个分析。首先,我们知道,Uniswap采用的是恒定乘积算法。简单来说就是x*y=K,也就是说,交易前后的K值是不会变的。在不讨论手续费的情况下,K值理论上是不会改变的。我们先记住这个前提。然后,获取交易对中每个代币各自的价格,比方说对USDT价格。这里以ETH-BTC交易对为例,假设ETH的价格为650USDT,BTC的价格为22,000USDT,那么ETH/BTC的价格比值P为0.03。在得到价格的比值P之后,直接用第1步得到的K计算K/P和K*P就得到了对应交易对的一个正常的数量。下面要对第3步,即获取正常的数量这一步进行相应的说明。公式思路解释现在开始对上面的第3步进行说明,扶稳坐好:D像前面说的,恒定乘积的公式为:那么其实可以根据K来分别算出x,y。然后根据上一节的第2步,我们得到了x和y的价格的比值P。由于Uniswap本身是根据池中代币的比例来确定对应的价格,所以比值P本身就是x/y的价格的比值。然后,由于K=x*y,而P是由正确的价格算出的比值,那么,我们其实就可以以这个真实的K和x/y来反推真实的x和y。推算如下:首先,我们根据P和r0,r1的比例得出以下公式:接着,根据P就可以倒推真实的r0,r1,如下:那么,拿到了正确比例的x和y之后,LP的价格会是下面这个公式:再转换成如下:攻击的可能性在完成公式分析后,我们不难知道,只要有正确的价格的比例P,就能根据这个比例倒推真实的r0和r1,最后得到公式:那么,这个公式能不能被攻击呢?从公式上可以知道,公式的price0,price1都是可信源获取的正确的价格,这个值是无法被操控的,然后是totalSupply,这个值虽然可以操控,但是在控制LP价格进行攻击的过程中改变totalSupply只能是改变你的抵押数量,这个暂时没有用。那么剩下可以操控的只有r0和r1的值了。如何改变r0,r1的值呢?下面提供两种思路进行分析:思路一:直接进行代币兑换我们知道,在代币池中,无论是采用什么算法进行计算,代币池在进行代币兑换的过程中,必然会发生代币数量的改变,那么这种改变最终能不能操控公式呢?其实是不可以的。我们知道,在恒定乘积的模型中,x*y=K总是成立的,那么也就是说无论交易过程中怎么发生代币的兑换,K的值总是不变的(这里不考虑手续费的情况),而公式中采用的是r0和r1进行相乘,所以使用代币兑换来操控公式实际上是不可行的。思路二:将代币直接打入到代币池中这种思路比较粗暴,可以直接忽视K值来操控r0和r1相乘的值,但是经过我的运算,这种方法看似可行,其实是不行的。虽然达到了操控的目的,但是因为公式本身在获取最终价格的时候采用的是根号的模式,所以最后获得的收益是根号后的收益,比方说付出10,000的成本,最后只能获得最多100的收益,这样是明显不划算的。所以这种思路也是不可行的。适用范围本算法的适用范围仅限于适用AMM模型的代币池的LP价格的获取,因为整个推导过程都基于恒定乘积公式中K的基本特性来进行。获取的LP本身所属的交易对算法不使用AMM模型是不可行的,因为这种情况下,前面所有的假设都已经不成立了,那么对应的公式的推算自然也是不成立的。总结LP抵押已经成为了一种迫切的需求,在目前没有更好的方式(如ChainLink提供的LP喂价,Uniswap提供延时LP接口等),AlphaFinance的方式可以说是一种较为安全的实现方法,使针对数量进行控制的攻击变成不可行或成本非常高。当然,随着越来越多场景的出现,这种算法也不一定是万能的,项目方需要结合自身的场景,合理运用该算法,达到良好的效果。此外,特别需要注意的是,虽然公式的终极形式用的是开根号的r0,r1和price0,price1相乘,但是真正实现的时候,需要根据K来推导具体的r0和r1的值,不然会存在一定的误差。参考链接:AlphaFinance关于获取公平LP价格的方法
2021-02-07 | DeFi/去中心化金融 3439 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
慢雾:简析 SushiSwap 第二次被攻击始末
By:yudan@慢雾安全团队背景2021年1月27日,据慢雾区情报,SushiSwap再次遭遇攻击,此次问题为DIGG-WBTC交易对的手续费被攻击者通过特殊的手段薅走。慢雾安全团队在收到情报后立马介入相关事件的分析工作,以下为攻击相关细节。SushiMaker是什么SushiMaker是SushiSwap协议中的一个重要的组件,其用于收集SushiSwap每个交易对的手续费,并通过设置每个代币的路由,将不同交易对的手续费最终转换成sushi代币,回馈给sushi代币的持有者。这个过程就是发生在SushiMaker合约上。说说恒定乘积恒定乘积的公式很简单,在不计算手续费的情况下,恒定乘积的公式为也就是说每次兑换,其实都是遵循这个公式,及交易前后K值不变,在兑换的过程中,由于要保持K值不变,公式的形式会是这个样子其中X代表卖掉的代币,Y代表要购买的代币,那么每次能兑换到的代币数量会是这个样子(具体的推导过程就不演示了:D)从公式上可以看到,当输出代币Y的兑换数量上限取决于Y代币的数量,而和X代币数量的大小无关,反过来说,如果要卖掉的X代币数量很大,但是Y代币的数量很小,那么就会造成大量的X代币只能兑换出少量的Y代币,而这个兑换价格相比正常的交易价格会偏离很多,这就是所谓的滑点,是本次攻击中的关键。攻击流程2020年11月30日,SushiSwap就曾因为SushiMaker的问题出现过一次攻击(详解参阅:以小博大,简析SushiSwap攻击事件始末),本次攻击和第一次攻击相似,但流程上有区别。相较于旧合约,在新的合约中,手续费在兑换的过程中会通过bridgeFor函数为不同交易对中的代币寻找特定的兑换路由,然后进行兑换。其中,bridgeFor函数的逻辑如下:根据bridgeFor的逻辑,我们不难发现,如果没有手动设置过特定币种的bridge,那么默认的bridge是WETH,也就是说,在未设置bridge的情况下,默认是将手续费兑换成WETH。而DIGG这个币,就是正好没有通过setBridge设置对应的bridge的。但是这里还有一个问题,就是在swap的过程中,如果这个交易对不存在,兑换的过程是失败的。本次攻击中,DIGG-WETH这个交易对一开始并不存在,所以攻击者预先创建一个DIGG-WETH的交易对,然后添加少量的流动性。这个时候如果发生手续费兑换,根据前面说的恒定乘积的特性,由于DIGG-WETH的流动性很少,也就是DIGG-WETH中的WETH上限很小,而SushiMaker中的要转换的手续费数量相对较大,这样的兑换会导致巨大的滑点。兑换的过程会拉高DIGG-WETH交易对中WETH兑DIGG的价格,并且,DIGG-WETH的所有DIGG手续费收益都到了DIGG-WETH交易中。通过观察DIGG-WETH交易对的流动性情况,流动性最大的时候也才只有不到2800美元的流动性,这个结果也能和公式的推导相互验证。攻击者在SushiMaker完成手续费转换后,由于DIGG-WETH交易对中WETH兑DIGG的价格已经被拉高,导致少量的WETH即可兑换大量的DIGG,而这个DIGG的数量,正是DIGG-WBTC交易对的大部分手续费收入。总结本次攻击和SushiSwap第一次攻击类似,都是通过操控交易对的兑换价格来产生获利。但是过程是不一样的。第一次攻击是因为攻击者使用LP代币本身和其他代币创建了一个新的交易对,并通过操纵初始流动性操控了这个新的交易对的价格来进行获利,而这次的攻击则利用了DIGG本身没有对WETH交易对,而攻击者创建了这个交易对并操控了初始的交易价格,导致手续费兑换过程中产生了巨大的滑点,攻击者只需使用少量的DIGG和WETH提供初始流动性即可获取巨额利润。相关参考链接如下:SushiMaker归集手续费交易:https://etherscan.io/tx/0x90fb0c9976361f537330a5617a404045ffb3fef5972cf67b531386014eeae7a9攻击者套利交易:https://etherscan.io/tx/0x0af5a6d2d8b49f68dcfd4599a0e767450e76e08a5aeba9b3d534a604d308e60bDIGG-WETH流动性详情:https://www.sushiswap.fi/pair/0xf41e354eb138b328d56957b36b7f814826708724Sushi第一次被攻击详解:https://mp.weixin.qq.com/s/-Vp9bPSqxE0yw2hk_yogFw
2021-01-27 | DeFi/去中心化金融 3118 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
慢雾:复盘 2020 DeFi、交易所和公链领域安全与隐私大事件
2020年,无论从哪个角度来讲,对区块链和数字货币来说都是非凡的一年。我们见证了DeFi和开放金融生态系统的爆炸性增长。我们见证了作为新技术基础设施代表之一的区块链被纳入“新基建”,我们见证了中国推出央行数字货币(CBDC)的同时,更多的国家地区开始关注并发展区块链,全球性区块链的“竞赛”已经开始。据慢雾科技区块链被黑档案库(hacked.slowmist.io)数据统计,2020年区块链生态被公开的区块链安全事件共122起:其中智能合约及代币安全事件54起,交易所安全事件29起,公链攻击事件12起,钱包攻击事件12起,其他攻击事件15起。慢雾区块链被黑档案库攻击事件累计随着各种应用落地,区块链数字资产引发的安全问题总体呈上升趋势,数字货币犯罪五花八门,盗币、诈骗、非法集资、洗钱、暗网非法交易、犯罪等案件频发,各种原因造成的“黑天鹅”事件层出不穷。通过数据统计,可以看到今年智能合约安全事件明显增多,交易所攻击事件也是占比较大,数字货币诈骗、勒索、洗钱事件几乎每月都会发生。慢雾科技将通过这篇文章梳理2020年区块链安全与隐私生态发生的影响重大的事件,为读者回顾事件详解,同时对每类事件附上慢雾观点。虽然本文列举的仅是冰山一角,但具有很大的代表性,让我们通过本文一起来窥见2020年区块链生态世界的“不平凡”。01DApp及DeFi安全事件bZx遭遇两次闪电贷攻击2月15日,DeFi贷款协议bZx遭受攻击,攻击者同时跨多个协议完成了一笔闪电贷杠杆套利交易,导致价值35万美元的ETH被盗。2月18日,bZx再次遭受闪电贷攻击,攻击者通过控制预言机价格获利2388个ETH,约64.4万美金。(详解参阅:慢雾:详解DeFi协议bZx二次被黑)MakerDAO清算机制异常3月12日,由于以太坊ETH的价格暴跌,MakerDAO的大量抵押债仓跌破清算门槛,引发了清算程序执行。原本应该参与到清算过程中的清算机器人(Keeperbot)因为设置了较低的gas值,导致出价受阻,一位清算人(Keeper)在没有竞争者的情况下,以0DAI的出价赢得了拍卖。Uniswap的ERC777重入风险4月18日,黑客利用DeFi平台Uniswap和ERC777标准的兼容性问题缺陷,对Uniswap实施了重入攻击。具体而言,黑客在交易ETH-imBTC时,利用ERC777标准中进行转账的tokensToSend回调函数实现了重入攻击,总获利34万美元。(详解参阅:慢雾:详解Uniswap的ERC777重入风险)DeFi平台Lendf.Me遭受重入漏洞攻击4月19日,以太坊DeFi平台Lendf.Me遭受重入漏洞攻击,损失约2500万美元。后慢雾安全团队协助追回了被盗资产。(详解参阅:慢雾:DeFi平台Lendf.Me被黑细节分析及防御建议)DeFi项目Hegic代码出现漏洞致用户资产被永久锁定4月27日,DeFi项目Hegic代码出现漏洞导致用户资产被用户永久锁定。在该项目上线几小时后,其代码中的一个错误锁定了该平台智能合约价值2.8万美元的用户资金,由于该漏洞将资金锁定在了过期合约中,使其无法被访问。Bancor新合约出现安全漏洞6月18日,由于新的BancorNetwork合约上未经验证的safeTransferFrom()函数,用户资金即将被耗尽。Bancor团队表示:1.两天前发布的新BancorNetworkv0.6合约中发现了一个安全漏洞;2.在发现漏洞之后团队进行了白帽攻击,以将资金转移到安全地址;3.智能合约已完成审核。但还有135,229美元的资金被两个未知套利机器人抢先交易了。Balancer流动性池两次遭黑客闪电贷攻击6月29日,知名DeFi平台Balancer流动性池遭黑客闪电贷攻击,损失50万美金。Balancer流动性池遭闪电贷攻击,损失50万美金,Balancer上遭遇损失的为STA和STONK两个代币池,目前这两个代币池的流动性已枯竭。6月30日,黑客再次利用dYdX的闪电贷攻击了Balancer部分流动性矿池中的COMP交易对,将池子中未领取的COMP奖励抽走,获利10.8ETH,约合2408美金。(详解参阅:慢雾:Balancer第一次被黑详细分析)Vether(VETH)遭黑客攻击7月1日,VETH在去中心化交易所Uniswap遭遇黑客攻击。黑客仅使用0.9ETH就盗走了919,299VETH(价值90万美元)。攻击事件发生后,VETH官方表示,「该合约被其放置在transferForm()中的UX改进所利用,这是我们的过错。我们将重新部署vether4,并将补偿所有受影响的Uniswap质押者。」(详解参阅:慢雾:VETH合约被黑分析)Opyn看跌期权被外部参与者恶意利用8月5日,链上期权平台Opyn披露其以太坊看跌期权被外部参与者恶意利用。Opyn指出,除以太坊看跌期权外的所有其他Opyn合约均不受此漏洞的影响。攻击者双重利用oToken并窃取了看跌期权卖方的抵押资产。据Opyn统计,截至目前共有371,260枚USDC被盗。Opyn团队根据ConvexityProtocol进行的白帽黑客攻击,成功从未偿付的保险库中收回了439,170USDC,以进一步减轻损失。(详解参阅:慢雾:Opyn合约被黑详细分析)DeFi项目YAM合约存在漏洞8月13日,知名以太坊DeFi项目YAM官方通过Twitter发文表明发现合约中存在漏洞,24小时内价格暴跌99%,导致了治理合约被“永久破坏”,价值75万美元的Curve代币被锁定而无法使用。(详解参阅:DeFiYAM,一行代码如何蒸发数亿美元?)DeFi项目YFValue在YFV质押池中发现漏洞8月25日,DeFi项目YFValue(YFV)官方发布公告称,团队于昨日在YFV质押池中发现一个漏洞,恶意参与者借此漏洞对质押中的YFV计时器单独重置,1.7亿美元资金存在被锁定风险。目前已有一名恶意参与者正试图以此漏洞勒索团队。(详解参阅:慢雾:YFValue,一行代码如何锁定上亿资产)EOS项目EMD跑路9月9日,据慢雾区情报,EOS项目EMD疑似跑路。截至目前,项目合约emeraldmine1已向账号sji111111111转移78万USDT、49万EOS及5.6万DFS,并有12.1万EOS已经转移到changenow洗币平台。当前损失总市值:2,468,838美金=17,281,866人民币。DeFi流动性挖矿项目“珊瑚”遭攻击9月10日,EOS生态DeFi流动性挖矿项目“珊瑚”的wRAM遭到黑客攻击,损失逾12万EOS。Bantiample团队砸盘套现跑路9月19日,币安智能链上的项目Bantiample团队已砸盘套现3000个BNB跑路,团队的主要开发者已经删除Telegram账号,项目代币BMAP单日跌幅超过90%。以太坊挖矿项目LVFinance项目跑路9月20日,据慢雾区情报,以太坊挖矿项目LVFinance项目疑似跑路,不到一个小时已有400万被转走,该项目通过伪造虚假审计网站并提供虚假审计信息诱骗投资者进行投资,待一段时间后资金池内金额足够大时进行跑路。目前,该项目网站lv.finance已无法访问。SushiSwap仿盘项目GemSwap跑路9月26日,名为GemSwap的SushiSwap仿盘项目被曝跑路,LP被卷走。查询发现,该项目在15点左右发布推特自曝其遭受了“whatitdobb”开发者的攻击,据了解,该项目早些时候完成了流动性迁移,但发起攻击的开发者在迁移之前就获得了相关许可,能够将流动池中的代币取走,目前尚不清楚此次攻击造成的具体损失。Eminence(EMN)遭遇闪电贷攻击9月29日,yearn.finance创始人AndreCronje刚推出的游戏项目Eminence(ENM)遭遇闪电贷攻击,黑客将800万美元的资金返还给了yearn部署者合约。官方将重新分配受攻击的800万美元。DeFiSaver交易所漏洞致31万DAI被盗10月8号,去中心化钱包imToken发推表示,用户报告称31万枚DAI被盗,这与DeFiSaverExchange漏洞有关。DeFiSaver对此回应称,被盗资金仍旧安全,正在联系受害用户。截至目前,资金已全部归还受害用户。(详解参阅:慢雾:DeFiSaver用户的31万枚DAI是如何被盗的?)以太坊项目WLEO合约遭到黑客攻击10月11日,以太坊项目WLEO合约遭到黑客攻击,导致价值4.2万美元的资金被盗。黑客通过将向自己铸造WLEO,并将其换成以太坊,从去中心化交易所Uniswap的池中窃取了以太坊。Harvest.finance遭闪电贷攻击,被巨额套利10月26日,有用户发现DeFi挖矿项目Harvest.finance被使用闪电贷功能实现了巨额套利。Harvest官方发推解释称,这次套利攻击起源于一笔巨额闪电贷,并通过多次操纵CurveyPool的价格,以套取fUSDT、fUSDC的价差进而获利。(详解参阅:慢雾:Harvest.Finance被黑事件简析)SharkTron匿名开发者跑路11月10日,基于Tron区块链的DeFi项目、JustSwap白名单项目SharkTron的匿名开发者DanielWood跑路,尽管目前不清楚具体损失,但推特用户报告称损失了3.66亿至4亿枚TRX(价值约1000万美元)。Akropolis合约遭多次连续重入攻击11月13日,黑客利用Akropolis项目存在的存储资产校验缺陷,向合约发起连续多次的重入攻击,致使Akropolis合约在没有新资产注入的情况下,凭空增发了大量的pooltokens,进而再利用这些pooltokens从YCurve和sUSD池子中提取DAI,最终导致项目合约损失了203万枚DAI。(详解参阅:无中生有?DeFi协议Akropolis重入攻击简析)ValueDeFi协议遭闪电贷攻击11月15日,ValueDeFi协议周六遭到了闪电贷攻击。据悉,攻击者从Aave协议借了80000ETH,执行了一次闪电贷攻击,在DAI和USDC之间进行套利。攻击者在利用740万美元DAI后,向ValueDeFi退还了200万美元,保留了540万美元。随后,ValueDeFi团队发推证实其MultiStablesvault遭到了“一次复杂的攻击,净损失达600万美元。(详解参阅:如何使用闪电贷从0撬动百万美元?ValueDeFi协议闪电贷攻击简要分析)CheeseBank遭攻击损失330万美元11月16日,基于以太坊的去中心化自治数字银行平台CheeseBank因黑客攻击遭受了330万美元的损失。黑客通过利用基于自动做市商(AMM)的预言机在dYdX、Uniswap等平台上进行了一系列恶意借贷操作,共导致价值超330万美元的损失,其中包括200万美元的USDC。OUSD遭闪电贷+重入攻击11月17日,DeFi协议OriginProtocol稳定币OUSD遭到攻击,攻击者利用dYdX的闪电贷进行重入攻击,造成价值770万美元的ETH和DAI的损失。(详解参阅:闪电贷+重入攻击,OUSD损失700万美金技术简析)PickleFinance未经审核的合约漏洞被利用11月22日,曾被V神发推文赞赏的DeFi项目PickleFinance(酸黄瓜),因被黑客攻击未经审核新创建的智能合约漏洞,损失近2000万美元的DAI。(详解参阅:假钱换真钱,揭秘PickleFinance被黑过程)Compound喂价错误致9000万美元资产遭清算11月26日,Compound9000万美元资产遭清算。Debank创始人hongbo表示,此次Compound巨额清算事件其实是因预言机数据源CoinbasePro的DAI价格剧烈波动而导致,通过操控预言机所依赖的信息源可以实现短时间的价格操纵,以误导链上价格。SushiSwap遭到流动性提供者攻击11月30日,据慢雾区情报,以太坊AMM代币兑换协议SushiSwap遭到流动性提供者攻击,损失约1.5万美元。(详解参阅:以小博大,简析SushiSwap攻击事件始末)WarpFinance遭遇闪电贷攻击12月18日,流动性LP代币抵押借贷DeFi协议WarpFinance遭遇闪电贷攻击,约800万美元被盗。后WarpFinance针对遭到的闪电贷攻击发布声明。据称,闪电贷攻击者最多可盗走价值770万美元的稳定币,不过WarpFinance团队已拟定计划来追回仍在抵押金库中的价值约550万美元的稳定币,这550万美元将按比例分给遭受损失的用户。(详解参阅:采用延时喂价还被黑?WarpFinance被黑详解)Cover合约漏洞遭黑客攻击推特网友表示,由于奖励合同中的一个漏洞,CoverProtocol损失了300万美元。此外,链上数据显示,已有攻击者(0xf05Ca...943DF)利用Cover合约共增发了约1万枚COVER,并且已将其换成了WBTC和DAI等资产。后区块浏览器显示,此前通过增发COVER获利300万美元的攻击者(地址标签为GrapFinance:Deployer)将4350枚ETH返还给标签为YieldFarming.insure:Deployer的地址。CoverProtocol官方发推文宣布,将根据漏洞被滥用之前的快照提供全新的COVER代币。并且攻击者退还的4350ETH也将通过快照处理归还给LP代币持有者。(详解参阅:一次由存储状态引发的惨案—Cover协议被黑简要分析)慢雾观点由于DeFi项目的火热,针对DeFi项目的钓鱼攻击活动越来越频繁,手法也越来越高级。投资者在进行项目投资时应注意项目风险,要注意平台用的智能合约有没有开源、平台本身有没有安全审计、智能合约有没有问题,同时任何DeFi项目上线前都应该经过专业安全团队的充分审计。02交易所安全事件Altsbit交易所遭攻击后关闭2月5日,意大利加密货币交易所Altsbit存放热钱包私钥的服务器被入侵,导致损失了6.929个比特币、23个ETH,以及其他数量的加密货币,随后交易所宣布于5月8日关闭。VBITEX交易所被入侵2月17日,VBITEX交易平台发布公告称被黑客入侵,导致平台数据被恶意篡改、虚拟资产被盗。加密货币交易所Bisq被盗4月9日,加密货币交易所Bisq被盗,攻击者利用Bisq交易协议中的一个缺陷,针对单笔交易来窃取交易资金。7名受害者共损失3个BTC和4,000个XMR。LMEX联交所遭黑客入侵5月27日,LMEX联交所在社群发布关于交易所运营调整通知称:平台遭黑客入侵被盗损失了15万枚USDT,致使平台资不低债,目前已关闭充提。加密货币交易所Cashaa被盗7月12日,英国加密货币交易所Cashaa表示,黑客从其中一个钱包中窃取了超过336枚比特币。目前,该交易所已停止所有与加密有关的交易。西班牙加密货币支付应用2gether被盗7月31日,西班牙加密货币支付应用2gether宣布被黑客盗取了140万美元。暗网市场EmpireMarket骗取资金后关闭运营8月30日,著名暗网市场EmpireMarket已关闭运营,退出时该网站共骗取了130万用户的约2638枚比特币,价值近3000万美元。欧洲交易所ETERBASE部分热钱包被盗9月8日,欧洲加密交易所ETERBASE遭遇黑客攻击,导致部分热钱包被盗,包括BTC、ETH及ERC-20代币、XRP、TRX、XTZ和ALGO。损失逾500万美元资产。其中,ETH和ERC-20代币地址损失的资金最多,达约390万美元,其次是XTZ地址,损失约47.1万美元。Kucoin交易所遭黑客攻击9月26日,Kucoin库币交易所遭到黑客攻击,大量ETH和ERC20代币被转移,其中包括11,486枚以太坊、19,788,586枚USDT、525,405枚Gladius(GLA)、77,874枚Hawala(HAT)、21,660,274枚OceanToken(OCEAN)、8,893,428枚Chroma(CHR)、30,452,178枚Ampleforth(AMPL)、198,678,919枚AnkrNetwork(ANKR)等。此后,该黑客跑路资金遭到各个大交易所联合封堵。Liquid数据泄露加密货币交易所Liquid首席执行官MikeKayamori在官网发布通知说,11月13日交易所发生了一起数据泄漏安全事件。管理一个核心域名的域名托管提供商错误地将该帐户和域名的控制权转移给了一个恶意入侵者,使其可以改变DNS记录,进而控制大量的内部电子邮件帐户,并且能够部分破坏交易所的基础设施并获得存储文档的访问权限。英国交易所Exmo发生重大安全漏洞12月21日,英国加密货币交易所Exmo发生重大安全漏洞,导致平台已冻结所有提款。根据TheBlock的研究分析师的说法,Exmo似乎损失了1,050万美元的资金。俄罗斯交易平台Livecoin遭攻击12月24日,俄罗斯加密货币交易平台Livecoin遭遇黑客攻击,平台上的代币价格已被操控。慢雾观点交易所资金量巨大,很容易引来黑客的攻击,一旦出现问题几乎所有用户都会受到影响,交易所应加大防范。同时。黑客也会恶意入侵交易所使其数据泄露借此获利,平台在早期架构设计时应做好所有安防措施,避免此类信息泄露事件的发生。此外还有一些平台方暴雷跑路的恶意行为,毕竟在金钱面前,人性经不住考验。03公链安全事件BitcoinGold遭两次51%攻击1月28日,BitcoinGold遭遇两次51%算力攻击,两笔对交易所的充值交易均被撤销,涉及约1900个BTG和5267个BTG,接近9万美元。Cocos-BCX映射钱包信息遭盗取4月3日,Cocos-BCX经与交易所核实和内部调查,由于映射钱包信息遭恶意盗取,所以出现了资产丢失和恶意抛售。与交易所核实确认后,本次被盗取的代币总额为1,087,522,819.2个COCOS,交易所确认该总额已被抛售完毕。Filecoin代码漏洞可实现Filecoin无限增发5月28日,石榴矿池技术人员发现Filecoin代码中的严重漏洞,通过该漏洞可以实现Filecoin的无限增发。石榴矿池表示,为了证明漏洞的有效性,6Block旗下的三个矿工账号t01043、t027999、t0234783通过该漏洞已实现16亿Filecoin的增发,占据了Filecoin富豪榜前三名。Ravencoin(RVN)区块链存在漏洞7月3日,CryptoScope团队发现Ravencoin(RVN)区块链存在漏洞,经过rvn首席开发团队确认后已发布了紧急更新。据悉,该漏洞可生成额外的RVN,但是不会影响或控制已经存在的RVN资产。由于该漏洞造成了RVN总量比原计划多出了1.5%,并且漏洞产生的RVN已经流入市场,因此无法进行回滚等操作。ETC连遭三次大规模攻击8月1日,Bitfly发推称,ETC区块链在区块高度10904146经历了一次3693个区块的链重组。这导致所有状态修建节点停止同步。ETC链近6小时没有出块,随后出块恢复正常。8月6日,Bitfly官方发推称,今日ETC又遭遇了一次大规模51%攻击。攻击已导致4000多个区块发生重组。报告显示,此次攻击的发起者与第一次攻击事件的发起者是同一名矿工。攻击者从本次攻击中获利了至少168万美元。8月30日,Bitfly官方发推称,今日ETC又遭遇了一次大规模51%攻击,导致7000多个区块发生重组,相当于大约两天的挖矿时间。所有丢失的区块将从未到期的余额中移除,其将检查所有支出以查找丢失的交易。Chainlink节点运营商遭垃圾邮件攻击9月5日,九个Chainlink节点运营商遭到所谓“垃圾邮件攻击”,攻击者从他们的“热钱包”中获取了大约700枚ETH。Grin网络遭51%攻击11月10日,Grin网络最近遭受51%攻击。一个未知实体在周六控制了超过57%的网络算力。Aeternity(AE)遭51%攻击12月8日,据Aeternity官方推特证实,Aeternity(AE)昨日遭到了黑客51%攻击,据Aeternity社区核心成员披露,此次51%攻击造成的损失超过3900万枚AE代币,官方团队正在解决问题,此次受损的主要是交易所和矿池,交易所集中于OKEx、Gate、Binance。慢雾观点公链一旦出现漏洞就会影响整个链,所以公链在上线前一定要经过专业的安全审计。建议公链团队与可信且职业的安全团队进行深入合作,部署因地制宜的安全建议,提升安全维度。04钱包安全事件Electrum多次遭遇钓鱼攻击1月19日,Electrum遭遇“钓鱼”盗币行为。8月30日,GitHub用户”1400BitcoinStolen“表示其比特币巨额款项消失在黑客攻击中。该用户使用的是比特币钱包Electrum软件,该用户一直没有安全更新此软件,因此当他转移比特币时提示更新和修补潜在问题,但当他根据提示操作时,该软件利用了一个漏洞连接了黑客的服务器,1400枚比特币(价值1600万美元)被存入了黑客的钱包。10月12日,ZDNet一项调查显示,黑客通过引诱用户安装假软件更新,从比特币钱包Electrum的用户那里窃取了2200万美元。而该手法最高出现在2018年。而自两年前首次发现这种攻击以来,Electrum团队已经采取了一些措施来防止这种攻击。但这种攻击仍然适用于使用旧版本应用程序的用户。IOTA官方钱包应用Trinity出现漏洞2月12日,黑客利用IOTA官方钱包应用Trinity的漏洞窃取资金,官方之后宣布关闭整个网络。EtherCrash冷钱包被盗10月30日,网络犯罪情报公司HudsonRock首席技术官AlonGal发推表示,10月27日,自称“以太坊最成熟、规模最大的菠菜游戏”EtherCrash“冷钱包被盗,损失约250万美元,疑似为内部人员所为。Ledger遭数据泄露12月21日,包含270,000多个Ledger客户个人信息的数据库在RaidForums上泄漏,这些被泄露的信息包括Ledger硬件钱包购买者的电子邮件、实际地址和电话号码。RaidForums是一个买卖、共享和共享被黑信息的市场。此次被泄漏的Ledger信息是由今年6月遭受数据泄露导致,包含超过100万Ledger客户的电子邮件。LedgerCEO随后表示不会为遭到数据泄露的用户提供补偿。慢雾观点用户在选择钱包时尽量选择国际知名、一流的钱包,同时注意看钱包App的代码是否开源、代码是否经过安全审计、团队内是否有CSO或安全负责人,这些都可能影响到钱包不断迭代、升级过程中的安全是否有保障。同时,作为用户一定要从钱包的官网下载App,避免误入钓鱼网站下载到被植入了后门的钱包App。05其他类型安全事件SIM卡被黑导致被盗2月22日,BitcoinBuilder创始人、Mt.Gox第二大债权人JoshJonesSIM卡被黑,导致价值$45,000,000的数字货币被盗。TridentCryptoFund被攻击致数据泄露3月5日,加密基金TridentCryptoFund遭黑客攻击,26.6万名用户数据被泄露。加密货币挖矿组织BitClubNetwork电信欺诈7月10日,根据美国新泽西州联邦检察局发布的公告显示,程序员SilviuCatalinBalaci承认参与建立了加密货币挖矿组织BitClubNetwork,并进行电信欺诈,出售未经注册的证券。Balaci确认,在该计划实施的五年过程中,BitClub从投资者手**骗取至少7.22亿美元的比特币。多个推特账号被黑7月16日凌晨,多位名人政要以及一些公司的推特账号被黑客袭击,这些推特账户都发布了相关的数字货币钓鱼骗局信息。不过,这些钓鱼信息在发布几分钟后就被删除。截至目前,诈骗者共收到12.86枚比特币。CWT被劫持并同意支付比特币8月1日,美国第五大旅游公司CWT同意向劫持其计算机系统的黑客支付价值450万美元的比特币。以色列无线芯片和摄像头传感器制造商遭勒索软件攻击9月7日,黑客向以色列纳斯达克上市无线芯片和摄像头传感器制造商TowerSemiconductorLtd(TSEM)进行勒索软件攻击,并索要数十万美元比特币赎金。为了安全起见,TSEM关闭了一些正在运行的服务器,并暂停了部分工厂的生产。富士康遭勒索软件攻击12月8日,富士康遭到了勒索软件的攻击,短暂地导致其在墨西哥的生产设施出现问题,并导致数据被盗。对此,富士康回应称,其美洲工厂近日确实遭受网络勒索病毒攻击,目前其内部资安团队已完成软件以及作业系统安全性更新,同时提高了资安防护层级。同时,受影响的厂区的正在恢复网络,对集团整体营运影响不大。DeFi保险协议NexusMutual创始人个人地址被攻击12月14日,DeFi保险协议NexusMutual在推特上表示,其创始人HughKarp的个人地址被一位平台用户攻击,被盗37万NXM,损失超过800万美元。官方表示这是一次具有针对性的攻击,只有Karp的地址收到影响,NexusMutual或其他成员没有后续风险。官方称,Karp使用的是硬件钱包,攻击者获得了对他电脑的远程访问权限,并修改了钱包插件MetaMask,欺骗他签署了交易,将资金转移到攻击者自己的地址。OneCoin加密货币庞氏骗局12月14日,阿根廷科尔多瓦市检察院起诉了涉及OneCoin加密货币庞氏骗局案件的12名诈骗者,并于上周四下令逮捕,目前其中八人已被捕。此前报道,OneCoin庞氏骗局使相关投资者在从2014年4月至2018年3月期间因投资该项目遭受了共44亿美元的财务损失。慢雾观点最近市场变热,随之而来的是勒索、诈骗、传销、钓鱼事件层出不穷。针对平台或个人的各类攻击形势严峻,目前已经造成大量个人百万到千万级别的损失!请大家务必提高警惕,加强自身安全意识,务必开启二次认证(短信或GA,不推荐使用邮箱验证码),谨慎保管好各类私密信息。2020年是跌宕起伏的一年,疫情黑天鹅、比特币从3.12事件低谷恢复并于近期涨至接近历史高点、流动性挖矿DeFi繁荣增长并快速落地等。区块链既是未知的,又是充满可能性的,希望区块链新的一年能迸发出更大的能量,创造出更多元化的产业。慢雾也将不负各位的期待,继续为区块链生态安全保驾护航!PS:MistTrack追币服务已全面上线,有需要可联系team@slowmist.com;HackingTime文化周边已上线(https://1337.slowmist.io),欢迎关注&购买。
2021-01-12 | 区块链社区 4552 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
慢雾:Warp Finance 被黑详解
By:Kong@慢雾安全团队背景2020年12月18日,据慢雾区情报DeFi项目WarpFinance遭受闪电贷攻击。以下是慢雾安全团队对整个攻击流程的详细分析。攻击过程分析(分析过程较多,快速了解攻击思路可以直接查看下方完整攻击流程部分)1、通过攻击交易可以看出攻击者通过Uniswap和dydx闪电贷借出了约290万DAI和34.5万WETH:https://etherscan.io/tx/0x8bb8dc5c7c830bac85fa48acad2505e9300a91c3ff239c9517d0cae33b5950902、接下来攻击者先使用借来的WETH和DAI向Uniswap的WETH-DAI交易对添加流动性,获得了约9.4万个LPToken,为接下来在Warp中抵押LP做准备。3、随后攻击者通过Warp项目WarpVaultLP合约的provideCollateral函数抵押之前获得的LPToken。functionprovideCollateral(uint256_amount)public{require(LPtoken.allowance(msg.sender,address(this))>=_amount,"Vaultmusthaveenoughallowance.");require(LPtoken.balanceOf(msg.sender)>=_amount,"MusthaveenoughLPtoprovide");LPtoken.transferFrom(msg.sender,address(this),_amount);collateralizedLP6)在获取完LP池子中两种代币(如WETH、DAI)的数量后再通过oracle1.consult()分别获取这两种代币的价格,而这里的价格获取使用的是Uniswap预言机的实现方式,而Uniswap预言机价格获取是有经过时间加权的,也就是延时喂价方式,用户获取的价格是上一个区块的价格,这是无法被操控的。因此我们可以知道代币价格获取的是正确的价格。Uniswap的预言机介绍:https://uniswap.org/docs/v2/core-concepts/oracles/7)接下来将通过_calculatePriceOfLP函数来计算LPToken的具体价格:function_calculatePriceOfLP(uint256supply,uint256value0,uint256value1,uint8supplyDecimals)publicpurereturns(uint256){uint256totalValue=value0+value1;uint16shiftAmount=supplyDecimals;uint256valueShifted=totalValue*uint256(10)**shiftAmount;uint256supplyShifted=supply;uint256valuePerSupply=valueShifted/supplyShifted;returnvaluePerSupply;}通过以上代码我们可以知道LP价格是如何得出的,以WETH-DAI池为例:其通过池子中WETH的数量乘WETH的价格加上池子中DAI的数量乘DAI的价格最后除以池子总的LPToken数量即可得到单个LPToken的价格。具体计算算式如下所示:通过以上分析我们可以知道WETH的价格和DAI的价格获取是正常的,无法被恶意操纵,因此我们可以大胆猜测:攻击者通过将巨量的WETH打入WETH-DAI池子中换取DAI,这时候池子中WETH的数量将大大的增加,而由于滑点的存在,这种巨量兑换操作必然是会亏损一大部分WETH的。所以我们再看上面LP单价的计算方式,由于WETH数量的大大增加,在巨量兑换后池子中WETH数量*WETH价格+池子中DAI数量*DAI价格将远大于巨量兑换前的,也就是池子的总价值大大增加了。所以LP的单价也随之提高了,因此攻击者就可以通过其抵押的LPToken借出更多的稳定币了。分析思路验证我们可以借助Ethtx.info来验证我们的猜测是否正确:https://ethtx.info/mainnet/0x8bb8dc5c7c830bac85fa48acad2505e9300a91c3ff239c9517d0cae33b5950901、通过上文中第4点分析我们可以知道:攻击者通过Uniswap的WETH-DAI交易对将大约34万的WETH兑换成约4762万DAI,此时WETH-DAI池子中约剩下有43.6万枚WETH和1328.8万枚DAI,而在此之前池子里约有9.5万枚WETH和6091万枚DAI。2、我们可以在Ethtx.info发现在兑换前WETH-DAI池子的LPToken单价为58815427。巨量兑换后WETH-DAI池子的LPToken单价为135470392。我们可以看到由于WETH数量的增加造成兑换后池子的总价值几乎翻倍了,因此单个LPToken在Warp中可借出的稳定币就更多了。3、接下里如我们猜测的那样攻击者在拉高LPToken的价格后通过WarpControl合约的borrowSC函数分别借出DAI和USDC。4、最后在Uniwsap的WETH-DAI池子总归还DAI,重新拿回34万枚WETH完成攻击操作。最后只需按部就班的归还闪电贷即可获利。完整的攻击流程如下1、攻击者部署攻击合约,并通过dydx与Uniswap闪电贷借出DAI和WETH。2、攻击者拿出一小部分的DAI和WETH在Uniswap的WETH-DAI池中添加流动性,并获取LPToken。3、攻击者使用添加流动性获取的LPToken抵押到WarpFinance中,为借出稳定币做准备。4、攻击者利用巨量的WETH在Uniswap兑换成DAI来拉高WETH-DAI池子的总价值,使得WarpFinance中LPToken的单价变高。(注意这里WETH和DAI价格获取是正确的并没有被操纵,被操纵的是WETH的数量,通过增加WETH的数量来拉高池子的总价值)。5、由于LPToken的单价变高,导致攻击者抵押的LPToken可以借出更多的稳定币来进行获利。总结本次攻击的本质是通过操纵LPToken的单价来获取更多的稳定币可借贷数量进行获利的。这是由于在WarpFinance中LPToken的价格是通过LP池子的总价值除以LPToken的总数量得到的,虽然代币价格获取正确,但代币数量是可被操纵的,因此LP的单价就是可被操纵的,这就形成了攻击的必要条件了。最终项目方损失约800万美元,但攻击者抵押的LP也留在了Vault中,如果抵押的这部分LP后续可被清算的话可以一定程度上的弥补项目方的损失。相关参考链接如下:Uniswap预言机实现介绍:https://uniswap.org/docs/v2/core-concepts/oracles/本次分析的攻击交易:https://etherscan.io/tx/0x8bb8dc5c7c830bac85fa48acad2505e9300a91c3ff239c9517d0cae33b595090
2020-12-18 | 区块链社区 1410 1 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
以小博大,简析 Sushi Swap 攻击事件始末
By:yudan@慢雾安全团队2020年11月30日,据慢雾区情报,以太坊AMM代币兑换协议SushiSwap遭遇攻击,损失约1.5万美元。慢雾安全团队第一时间介入分析,并以简讯的形式分享,供大家参考。背景提要SushiSwap项目中SushiMaker合约的作用是用于存放SushiSwap中每个交易对产生的手续费。其中手续费会以SLP(流动性证明)的形式存放在合约中。SushiMaker合约中有一个convert函数,用于将从每一个交易对中收集的手续费通过调用各自交易对的burn函数获得对应的代币,然后将这些代币转换成sushi代币,添加到SushiBar合约中,为SushiBar中抵押sushi代币的用户增加收益,而此次的问题就出在SushiMaker合约。攻击流程1、攻击者选中SushiSwap中的一个交易对,如USDT/WETH,然后添加流动性获得对应的SLP(USDT/WETH流动性证明,以下简称SLP),使用获得的SLP和另外的少量WETH创建一个新的SushiSwap交易对,然后得到新代币池的SLP1(WETH/SLP(USDT/WETH)流动性证明,以下简称SLP1)转入SushiMaker合约中。2、调用SushiSwap的convert函数,传入的token0为第一步获得的SLP,token1为WETH。调用convert函数后,SushiMaker合约会调用token0和token1构成的代币池的burn函数燃烧SLP1,燃烧掉攻击者在第一步中打入SushiMaker合约中的SLP1,得到WETH和SLP。3、SushiMaker合约的convert函数紧接着会调用内部的_toWETH函数将burn获得的代币转换成WETH,由于在第二步SushiMaker合约通过burn获得了SLP和WETH。其中WETH无需转换,只需转换SLP。此时,转换将会通过调用SLP/WETH交易对进行转换,也就是攻击者在第一步创建的交易对。由于SushiMaker合约在转换时会将所有的balanceOf(token0)转换成WETH,这里传入的token0为SLP,于是合约将合约中所有的SLP通过SLP/WETH交易对进行兑换(兑换的SLP包含USDT/WETH交易对每次swap产生的收益和在第二步合约通过burn函数获得的SLP)。而SLP/WETH代币池是攻击者创建的,攻击者只需在初始化的时候添加少量的WETH,就可以在SushiMaker交易对进行兑换的过程中,用少量的WETH换取SushiMaker合约中对应交易对的所有的SLP。4、攻击者使用burn函数在SLP/WETH交易对中燃烧掉自己的SLP1,拿到大量的SLP和小量的WETH,并继续对其他流动性池重复该过程,持续获利。总结攻击者使用SLP和WETH创建一个新的代币池,使用新代币池的SLP1在SushiMaker中进行convert,使用少量的SLP将SushiMaker合约中的所有SLP转到自己创建的代币池中,即将对应交易对一段时间内的所有手续费收入囊中。并对其他交易对重复这个过程,持续获利。
2020-12-01 | 区块链社区 2237 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
假钱换真钱,揭秘 Pickle Finance 被黑过程
By:yudan@慢雾安全团队据慢雾区情报,2020年11月22日,以太坊DeFi项目PickleFinance遭受攻击,损失约2000万DAI。慢雾安全团队第一时间跟进相关事件并进行分析,以下为分析简略过程。攻击流程简析1、项目的Controller合约中的swapExactJarForJar函数允许传入两个任意的jar合约地址进行代币的兑换,其中的_fromJar,_toJar,_fromJarAmount,_toJarMinAmount都是用户可以控制的变量,攻击者利用这个特性,将_fromJar和_toJar都填上自己的地址,_fromJarAmount是攻击者设定的要抽取合约的DAI的数量,约2000万DAI。2、使用swapExactJarForJar函数进行兑换过程中,合约会通过传入的_fromJar合约和_toJar合约的token()函数获取对应的token是什么,用于指定兑换的资产。而由于_fromJar合约和_toJar合约都是攻击者传入的,导致使用token()函数获取的值也是可控的,这里从_fromJar合约和_toJar合约获取到的token是DAI。3.此时发生兑换,Controller合约使用transferFrom函数从_fromJar转入一定量的ptoken,但是由于fromJar合约是攻击者控制的地址,所以这里转入的ptoken是攻击者的假币。同时,因为合约从_fromJar合约中获取的token是DAI,然后合约会判断合约里的资金是否足够用于兑换,如果不够,会从策略池中赎回一定量的代币,然后转到Controller合约中。在本次的攻击中,合约中的DAI不足以用于兑换,此时合约会从策略池中提出不足的份额,凑够攻击者设定的2000万DAI。4.兑换继续,Controller合约在从策略池里提出DAI凑够攻击者设定的2000万DAI后,会调用_fromJar的withdraw函数,将攻击者在第三步转入的假ptokenburn掉,然后合约判断当前合约中_toJar合约指定的token的余额是多少,由于_toJar合约指定的token是DAI,Controller合约会判断合约中剩余DAI的数量,此时由于第三步Controller合约已凑齐2000万DAI,所以DAI的余额是2000万。这时Controller合约调用_toJar合约的deposit函数将2000万DAI转入攻击者控制的_toJar合约中。到此,攻击者完成获利。总结此次攻击中,攻击者通过调用Controller合约中的swapExactJarForJar函数时,伪造_fromJar和_toJar的合约地址,通过转入假币而换取合约中的真DAI,完成了一次攻击的过程。
2020-11-24 | 区块链社区 2995 0 0
慢雾安全团队
慢雾安全团队
安全卫士 船龄 2.9年
闪电贷+重入攻击,OUSD 损失 700 万美金技术简析
By:Kong@慢雾安全团队据慢雾区情报,2020年11月17日,以太坊DeFi项目OUSD遭受闪电贷攻击。慢雾安全团队于第一时间跟进并进行相关分析。以下是慢雾安全团队针对本次攻击的简要分析。攻击过程详细分析会在稍后发布。如有兴趣可保持持续关注。背景提要OriginDollar(OUSD)由OriginProtocol(OUSD)创建,是一种新型的ERC-20稳定币,当它仍然放在钱包里时,会自动从DeFi协议中获得有竞争力的收益。OUSD由USDT、USDC和DAI等其他稳定币的1:1支持。攻击流程简析1.攻击者使用dydx闪电贷借出70000个ETH,随后通过Uniswap将其兑换为USDT和DAI。2.攻击者调用OUSDVault的mint函数,Vault会先进行一次rebase将之前积累的奖励进行分配,随后将750万USDT从攻击者合约转入OUSDVault中。此时OUSD合约会铸出等量的750万OUSD代币给攻击合约,最后通过allocate来结算当前的收益。3.在攻击者转入750万之前,Vault的价值约为7018138美元。攻击者转入750万USDT后将占Vault总价值的一半以上。4.随后攻击合约利用mintMultiple函数传入DAI合约地址与攻击合约的地址,同样是先进行一次rebase,将之前累计的收益进行分配(包含先前转入的750万USDT部分),再通过transferFrom先将攻击合约的2050万DAI转入Vault中。随后将调用攻击合约的transferFrom函数,攻击者在攻击合约的transferFrom函数中构造再次调用Vault合约mint函数的逻辑来实现重入攻击。5.在上一步骤中转入2050万DAI后通过攻击合约的transferFrom函数再次调用Vault的mint函数。由于重入时传入2000USDT符合判断是否调用rebase的条件,此时将进行一次rebase,而由于rebase需要Vault中的资产总价值和OUSD的总铸币数有差值才能触发。按照原本的业务场景是进行allocate结算收益后改变Vault中的资产总价值然后通过rebase进行分配。而由于重入原因并没有先通过oUSD.mint进行铸币操作,且攻击者已先将2050万的DAI转入Vault中,所以Vault中的资产总价值仍然增加了,导致合约中的资产总价值大于OUSD的总铸币量。因此Vault会将增加的2050万DAI当成收益部分进行rebase分配。在步骤3中由于攻击者资产已占Vault总价值的一半以上,所以此时攻击者将凭空获得超过价值1025万的收益分配。6.随后将通过oUSD.mint铸出2000OUSD,并通过allocate结算重入时2000USDT的收益(从上一步骤可以看出攻击合约传入的2000USDT只是为了满足调用rebase的条件,触发收益分配而已)。重入结束后仍将通过oUSD.mint铸出之前转入的2050万DAI等值的OUSD代币。7.最后Vault的总价值约为3501万美元,但攻击者所拥有的价值超过3825万美元,因此攻击者用大部分的OUSD去Vault进行赎回操作,将Vault基本提空,而其余的OUSD是通过Uniswap和Sushiswap的OUSD-USDT池将OUSD换成USDT来增加收益。总结此次攻击关键在于调用外部合约造成的重入问题与Vault的rebase收益分配机制相结合,导致攻击者可以通过重入来凭空获得巨额的收益分配。针对此类情况,慢雾安全团队建议对传入资产进行检查后,对不在白名单内的资产直接进行回滚,并使用防重入锁以避免重入攻击。相关链接:(1)参考攻击交易:0xe1c76241dda7c5fcf1988454c621142495640e708e3f8377982f55f8cf2a8401
2020-11-18 | 区块链社区 3037 0 0