原標題:《Cobo 區塊鏈安全月報——盤點解析2 月典型安全事件》
此篇文章由Cobo 區塊鏈安全研究團隊供稿,團隊成員來自知名安全實驗室,有多年網絡安全與漏洞挖掘經驗,曾協助谷歌、微軟處理高危漏洞,並獲得谷歌、微軟等廠商致謝,曾在微軟MSRC 最有價值安全研究員Top 榜單中取得卓越的成績。團隊目前重點關注智能合約安全、DeFi 安全等方面,研究並分享前沿區塊鏈安全技術。
本文解析了2月發生的典型區塊鏈安全事件,對跨鏈橋遭攻擊、前端JS投毒攻擊、DAO遭遇惡意接管、NFT市場合約中心化風險、OpenSea用戶遭受釣魚攻擊、閃電貸攻擊等多重角度進行了技術解讀。就近期發生的安全事件,Cobo安全團隊提醒廣大用戶需留意前端風險,防範簽名釣魚攻擊;謹慎投資,關注社區治理與相關區塊鏈安全事件,保護加密資產安全。
Wormhole 跨鏈橋被攻擊
2月3日Solana 跨鏈橋Wormhole 遭攻擊,攻擊者在Solana 側的橋鑄造了約12萬枚wETH,獲利約3.2 億美元。這是繼Poly Network 攻擊損失6億美元後史上第二大DeFi 攻擊事件。
漏洞主要在於Wormhole 的驗簽Instruction 是由輸入指定的,在正常的使用中,此項輸入應該為系統賬戶Instructions sysvar。由於代碼缺乏有效校驗,Wormhole 可使用攻擊者偽造的sysvar 生成簽名。後續該簽名可進一步被利用進行鑄幣操作,從而源鏈無需鎖定的情況下,在目標鏈鑄幣,實現攻擊獲利。
Cobo Comment:
跨鏈橋本身架構就要比普通DApp 複雜,尤其當源鏈與目標鏈架構不同時復雜性會更加突出。目前區塊鏈安全主要集中在以太坊及EVM兼容的網絡上(以及曾經輝煌過的EOS),對於較新的公鏈、DApp 的安全審計發展的尚不成熟。而新公鏈、新智能合約架構上,又必然會產生新的問題,無論攻擊方和防守方都是值得關注的方向。
Reference:
https://threadreaderapp.com/thread/1489044939732406275.html
https://mp.weixin.qq.com/s/x39VlJM0tKQ7r8Xzzo25gQ
https://www.tuoniaox.com/news/p-532969.html
KLAYswap 前端JS 投毒攻擊
2 月3 日,韓國公鏈Klaytn 上的DeFi 項目KLAYswap 遭遇前端JS 投毒攻擊,導致用戶將錢包資產授權給攻擊方,共造成約183 萬美元損失。
攻擊者通過BGP 路由器劫持,使用戶在訪問KLAYswap 時頁面中加載的Kakao SDK JS 文件內容( https://developers.kakao.com/sdk/js/kakao.min.js )會解析到攻擊者可控的服務器IP 上。另一方面由於攻擊者已經控制了路由策略,攻擊者成功從ZeroSSL 註冊到了developers.kakao.com 的臨時SSL 證書。至此通過路由器劫持,完成了JS 投毒。篡改的代碼修改了原始KLAYswap 中內置的合約地址為攻擊的惡意合約,這樣當用戶正常應該授權給官方合約的資產就會授權到攻擊者,從而進行竊取。
Cobo Comment:
此次針對KLAYswap 的攻擊並不需要項目方的智能合約和前端腳本中存在安全漏洞,直接攻擊了底層路由器這樣的網絡基礎設施。目前區塊鏈世界雖然可以在合約、P2P 網絡層面實現去中心化,但在實際的DApp 使用中,域名、服務器、瀏覽器等基礎設施仍然是存在明顯的中心化特徵的,而這在整個區塊鏈底層基礎設施建設的十分完備前,都很難避免。僅從前端攻擊的角度來說,目前瀏覽器的安全機制保證了前端腳本與插件(錢包)執行環境的隔離,因此即使前端完全被攻擊者控制,只要用戶不主動進行人工的交互簽名操作,就不會造成資產損失。對於用戶而言,建議在每次簽名時,仔細檢查交易信息,確認授權的目標合約確實是官方DApp 的合約。這在實際操作上對普通用戶來說有一定難度,如果未來錢包App 可以主動完成這一校驗,可以極大的提高交易過程中的安全性。
Reference:
https://medium.com/klayswap/klayswap-incident-report-feb-03-2022-f20ba2d8e4dd
https://medium.com/s2wblog/post-mortem-of-klayswap-incident-through-bgp-hijacking-898f26727d66
Meter.io 跨鏈橋被攻擊
2 月6 日Meter Passport 跨鏈橋遭受攻擊,攻擊者在無抵押的情況下,在以太坊、BSC、Moonriver 等鏈上鑄造了價值約400 萬美元的代幣資產。
漏洞成因與1 月份的Qubit 跨鏈橋攻擊比較類似,均是在區別處理鏈的原生代幣與ERC20 代幣兩類資產的代碼中邏輯不嚴謹導致。 Qubit 攻擊中將原生代幣作為零地址的Token 處理,出現錯誤。 Meter.io 中則是在抵押WETH, WBNB 等ERC20 Token 時會當作原生代幣處理,沒有使用transferFrom 收取攻擊者的代幣(因為合約假設原生代幣的情況下,已經通過msg.value 完成轉賬檢查)。最終導致攻擊者在源碼沒有抵押的情況即可在目標鏈上鑄造資產,攻擊獲利。
Cobo Comment :
Meter 和Qubit 跨鏈橋攻擊雖然漏洞成因細節稍有不同,但大體都是在處理原生代幣與ERC20 資產羅邏輯出現錯誤導致(deposit 和depositETH 函數)。在對類似的跨鏈橋項目進行安全審計時,可以將其作為一種典型的漏洞模式重點審查。
Reference:
https://mp.weixin.qq.com/s/-xKQV-R6ACUIundJwqO68w
https://mp.weixin.qq.com/s/yzGuD6UGopOBATYzBKDpng
Superfluid 攻擊事件
2月8日,Polygon 原生穩定幣協議QiDao 第三方合約SuperFluid 遭到黑客攻擊,損失超過1300萬美元。 SuperFluid 是一個流支付項目,可以實現自動轉賬等複雜功能,Superfluid 採用ctx 這一數據結構作為協議之間通信的手段,按照正常邏輯這一重要的數據結構是由合約本身構造的,但是合約在打包用戶自定義calldata 和ctx 時沒有校驗ctx 的合法性,攻擊者可以將自己構造的惡意ctx 附加在calldata 之後,使得合約接受的ctx 為用戶構造的ctx,原本合法的ctx 被丟棄,從而造成攻擊者可以繞過驗證偷走其他用戶的資產。
Cobo Comment :
此類安全漏洞的成因在於開發者對於設計上由合約本身構造的數據過於信任,敏感數據在後續的每一步使用和處理中都需要檢查其合法性。雖然SuperFluid 開發者對於ctx 的有效性專門設置了一個hash 值作為校驗,但是在後續的處理中沒有保證每一步都進行驗證,最終導致了這一攻擊事件的發生。所以對於開發者和安全審計人員來說一定要確保敏感數據的合法性檢查。
Reference:
https://halborn.com/explained-the-superfluid-hack-february-2022/
https://medium.com/superfluid-blog/08-02-22-exploit-post-mortem-15ff9c97cdd
https://www.tuoniaox.com/news/p-533223.html
Build Finance DAO遭惡意接管
2月13日Build Finance 發推表示項目遭受惡意治理攻擊。攻擊者鑄造了1.1M $BUILD 並耗盡了相關的流動性池。
攻擊細節:攻擊者suho.eth 發起了提案0xfa9c…35e9(見參考鏈接),內容為對BUILD Finance (BUILD) 合約調用setGovernance(0xdcc8a38a3a1f4ef4d0b4984dcbb31627d0952c28)。並為其投贊成票2367 BUILD。該提案會將BUILD 鑄幣權限轉移到0xdcc8.. 單簽EOA 地址,是明顯的惡意提案。隨後valueless.eth 投5000 BUILD 反對票。在投票結束前幾分鐘前,0xdcc8 補充投票2675 贊成票,使贊成票數超過反對票數,提案通過。 1 天后(即2 月11日)提案交易成功執行。至此0xdcc8 已擁有BUILD 治理權限,開始大量鑄幣拋售。查看0xdcc8 的交易記錄,可以看到攻擊者也使用了類似手法洗劫了Grap Finance( GRAP )。此次攻擊獲利超160 ETH,已通過Tornado.Cash 洗走。
攻擊發生時BUILD 的totalSupply 為130000,總值20萬美金左右,因此其實是規模很小的DAO(反而是前面提到的GRAP 還要大一些)。攻擊發生時,官方Discord 社區已經很不活躍,雖然有bot 監測到了惡意提案的出現,但社區成員並沒有積極投反對票,導致最終的接管行為發生。合約中的quorum 固定為5000(即提案生效要求至少有5000 BUILD 贊成票),在攻擊前約佔總量的4%,從比例上看不算是一個過低的閾值,但因整體市值規模較小,成本僅需$7500,給了攻擊者機會。另一方面,由於合約本身不支持撤消已經通過的提案,攻擊者利用最後幾分鐘加票的trick 使提案通過,通過後必將可以執行。而提案通過後,社區也沒有及時響應,如撤出相應的流動性池的資金等。
Cobo Comment :
項目規模小;合約不支持撤銷提案;社區響應不及時等多種因素共同存在最終導致了攻擊的發生。學到的教訓:對於項目方或者開發者,有必要在治理合約中添加撤銷機制,避免通過惡意提案後無法挽回;同時社區需要監測合約層的提案交易,發現惡意提案及時呼籲持幣成員投票反對;惡意提案通過後,在執行前及時通知各方,盡可能降低損失。對於普通投資者,要積極參與社區投票(尤其是反對票)以提高惡意治理攻擊的成本;另外要謹慎投資體量過小的項目。
Reference:
https://twitter.com/finance_build/status/1492591680716951556 https://etherscan.io/tx/0xfa9cca40f225745c2eac97521d979ddfa4edae589ff0f1b543b94345e52335e9
神魚提示X2Y2 NFT 市場合約中心化風險
2月18日,神魚@bitfish1 在社交媒體提示X2Y2 NFT 掛單挖礦項目合約存在一定中心化風險。 NFT 授權的合約admin 為多簽但無時間鎖;交易合約(DELEGATION_CALLER 合約)為可升級合約,可升級合約的owner 為單簽地址。理論上項目方可通過添加新交易合約或者升級原有交易合約轉走所有用戶授權的NFT。目前項目方已更新相關合約admin/owner 為時間鎖合約。
Cobo Comment :
根據Certik 2021 DeFi 安全報告的總結,目前DeFi 項目中心化風險已經是出現頻率最高的風險類型。幾乎每個月都會有項目方Rug Pull 或疑似Rug Pull。優質的去中化項目應該在一些關鍵權限上使用多籤和時間鎖,儘管這會在一定程度上提高項目方管理的複雜度,但好處是十分明顯的:一方面可以提高投資者對項目方的信任度,另一方面也可降低因項目方單簽私鑰保管不當遭受黑客攻擊的風險。
Reference:
最近两天X2Y2 NFT挂单挖矿很火
小伙伴研究了下合约,提示下风险吧
1. 用户NFT授权的是 0xf849de01b080adc3a814fabe1e2087475cf2e354 ERC721Delegate 合约,该合约有RBAC的权限管理;
2. 交易Exchange合约 0x74312363e45dcaba76c59ec49a7aa8a65a67eed3 拥有通过ERC721Delegate合约转移用户token的权限— DiscusFish (@bitfish1) February 18, 2022
白帽發現Coinbase 漏洞獲$250,000賞金
2月19 日Coinbase 發布文章稱修復了交易平台的漏洞,並向報告者支付了高達25 萬美金的漏洞獎金。漏洞存在於Coinbase 的Retail Advanced Trading platform,其中Retail Brokerage API 校驗不嚴格。 API 只檢查了訂單金額,但沒有校驗資產幣種。如:某賬戶有100 SHIB,卻可以利用該API 發起出售100 BTC 的訂單。
Cobo Comment :
區塊鏈行業的安全漏洞往往可以直接的造成資產損失,因此在漏洞獎勵上十分慷慨。 25萬美金已經是Google 為Android 遠程root 漏洞提供的獎勵金額了。
Reference:
https://medium.com/the-coinbase-blog/retrospective-recent-coinbase-bug-bounty-award-9f127e04f060
OpenSea 用戶遭受釣魚攻擊
2 月21 日OpenSea 官方(@opensea )發推表示有部分用戶遭受了釣魚攻擊,造成損失約170 萬美元。
隨後的調查披露了釣魚攻擊的細節:OpenSea 因合約升級推送了要求用戶進行listing 遷移的郵件。攻擊者利用此機會發送了內容相似的郵件,但郵件內鏈接指向攻擊者偽造的惡意頁面。受害者訪問惡意頁面時,被要求進行一些離線數據簽名,簽名的數據實際是允許將手中NFT 以0 ETH 出售的定單。攻擊者利用此合法簽名提交交易將NFT 轉到自己賬戶上。根據官方說明,OpenSea 合約升級完成後將使用新的EIP-712 格式簽名,可以降低此類釣魚簽名事件的發生。另有消息稱攻擊者事後返還了一部分NFT。
Cobo Comment :
釣魚攻擊在傳統安全領域也是重要的攻防課題,釣魚主要利用人性弱點而非技術漏洞,實現攻擊成本低,收益高。規避此類問題更多的需要用戶自身提高安全意識,具體來說在簽名交易時,仔細核查當前網站是否是官方網站,交易內容(如轉賬地址、合約地址、方法參數)是否為預期內容。另外對於如NFT 交易中涉及的離線信息簽名,也可保持與交易簽名一樣的重視程度。
Reference:
1) We’ve narrowed down the list of impacted individuals to 17, rather than the previously mentioned 32. Our original count included anyone who had *interacted* with the attacker, rather than those who were victims of the phishing attack.
— OpenSea (@opensea) February 21, 2022
1) Sharing a technical run-down of the phishing attacks targeting @OpenSea users, including some web3 technical education.
👇— Nadav Hollander (@NadavAHollander) February 20, 2022
https://blog.checkpoint.com/2022/02/20/new-opensea-attack-led-to-theft-of-millions-of-dollars-in-nfts/
福布斯文章稱找到The DAO 攻擊者
2 月22 日,記者Laura Shin 在福布斯網站發文稱發現了The DAO 事件攻擊者的真實身份:TenX 的CEO ,36 歲的程序員Toby Hoenisch。但Toby Hoenisch 本人表示結論不實。
2016 年發生的The DAO 事件是以太坊歷史上非常有名的攻擊事件,攻擊者利用合約重入漏洞盜取了約360 萬個ETH(現價值近100 億美金),佔當時ETH 總流通量的5%。該攻擊直接導致了以太坊的硬分叉以及以太經典(ETC)鏈的產生。分叉後的以太坊將盜取的資金歸還給用戶,所以攻擊者最終獲得的並非ETH 而是ETC(現在價值約1 億美元)。
文章披露了發現對攻擊者的追溯細節:Chainalysis 發現疑似The DAO 攻擊向Wasabi 混幣錢包發送了50 BTC。 Chainalysis 對混幣交易進行了分離,最終追踪到4 家交易所。一家交易所的員工確認了該筆資產被兌換成了隱私幣Grin 並提款到了一個稱為grin.toby.ai 的Grin 節點。而該結點服務器託管在Amazon Singapore,在比特幣閃電網絡上的別名為TenX。而TenX 的CEO Toby Hoenisch 在各大社交網站的賬戶均為@tobyai,這與上文提到的交易所賬戶名匹配。同時有多方證據表示,在2016 年Toby Hoenisch 曾多次表示The DAO 合約代碼中可能存在隱患,但最終未受重視。
Cobo Comment :
我們無法確認消息的真實性。但無可否認的是2016 年的The DAO 事件確實影響極為深遠。區塊鏈世界居民第一次如此深刻地見識了Code is Law 的威力,並有力地推動了智能合約審計等區塊鏈安全領域的發展。
Reference:
https://www.forbes.com/sites/laurashin/2022/02/22/exclusive-austrian-programmer-and-ex-crypto-ceo-likely-stole-11-billion-of-ether/?sh=30dc183a7f58
Congrats to @laurashin on her new book & reporting into the alleged hacker behind the 2016 DAO attack. This is yet another example of evidence preserved on the blockchain forever. Confirming we helped trace funds despite the attacker's attempts to cover his tracks w/ mixers https://t.co/hKqyi2DkAj
— Chainalysis (@chainalysis) February 22, 2022
Flurry Finance遭閃電貸攻擊
2月23日,Flurry Finance的Vault 合約遭到閃電貸攻擊,導致Vault 合約中價值約293,000 美元的資產被盜。
該項目引用的第三方合約StrategyLiquidate.execute 合約函數存在漏洞,未驗證傳入的流動性代幣地址的合法性,攻擊者可以傳入事先構造好的偽造代幣地址執行惡意函數。此次攻擊過程中,攻擊者將惡意Token 中的approve 函數設置為調用FlurryRebaseUpkeep.performUpkeep() 函數,該函數最終會調用vault 合約中的rebase 函數,在閃電貸過程中更新了rho token 係數函數,從而造成rho token 幣價下跌,攻擊者可以以此製造兌換差價以此獲利。
Cobo Comment :
儘管Flurry Finance項目本身合約代碼沒有問題,但是不安全的第三方合約的引用也會帶來嚴重的安全風險。 DeFi 項目方應該在引用第三方合約時對合約的安全性做一個考量。
Reference:
The update was triggered in the process of a flashloan and the tokens borrowed from the Bank contract were not returned yet, the low balance led to a low multiplier.
FlurryRebaseUpkeep contract: https://t.co/2DKd8fgvgT
One of the Vault contracts: https://t.co/RWmqxrht9j pic.twitter.com/WSV0J8GJFA— CertiK Security Leaderboard (@CertiKCommunity) February 22, 2022
Solidly 疑存在前端bug 造成用戶大額滑點損失
2 月26 日,有用戶稱使用Solidly 進行Swap 時實際滑點與UI 顯示不一致,因此造成了數万美金的損失。
Solidly 是Fantom 鏈上新興的去中心化交易所項目,上線後TVL 迅速超過20 億美金。 Solidly 號稱擁有更低的滑點與手續費(0.01%)。 Solidly 支持兩類池,穩定幣池(Stable Pool ) 和非穩定幣池( Volatile Pool )。非穩定幣池參考Uniswap V2 實現。穩定幣池使用新的AMM 曲線x^3*y + x*y^3 = K,以獲得更低的滑點。
根據用戶推文及相關交易分析,滑點損失很可能是由前端bug 導致的。用戶在進行USDC-FTM 兌換時前端顯示的是USDC-FTM 的非穩定幣池對應的兌出值與滑點,但提交時實際通過 USDC-FTM 的穩定幣池進行兌換,由於穩定幣池深度較小(總量不超過$1000),用戶兌換$24000 的USDC 最終只得到390 FTM(約$600)。而兌換完成後,池子中的USDC 很快又被套利機器人換走,最終用戶產生了2 萬多美金的損失。
據Cobo 團隊針對鏈上數據的分析,此類用戶兌換路由中存在穩定池與非穩定池錯用的情況的問題並非個例,造成用戶損失數千到十幾萬美金不等。詳情見參考鏈接中的交易。
Cobo Comment :
DApp 的安全性要由前端代碼、合約代碼、區塊鍊網絡三方共同保證。其中合約和網絡層近年來已經比較受重視,但前端代碼的重視程度還明顯不夠。目前很少有項目開源前端未打包的源碼,更不用說做第三方審計了。項目方bug、項目方做惡、xss 釣魚等前端問題仍可能存在。對於普通用戶來說,自行驗證前端代碼安全有一定難度,為防範此類事件,建議用戶在簽名交易前,務必反复確認交易合約、函數、參數與期望一致,避免因前端問題遭受資產損失。
Reference:
https://twitter.com/solidlytxissue/status/1497243098673557507?s=21
https://ftmscan.com/tx/0x8d601600e7f08add8c37e8a3312a621bc7384671c8a6d7f6686ee4f28d828d2c
https://ftmscan.com/tx/0x5f411f38bc1d8ef301025fce63a0c47cfb1871786912f9216e3bb66efc9b8750
https://ftmscan.com/tx/0xc64e2d0b38ebc813ff28bb1e7a7bc8a4d1445b3a4b32e1f0bce15524ce8a4c2c
https://ftmscan.com/tx/0x734aa352c1abe0658282e849669e42b00a812db97bf621180280b4977a273c93