
在11月2日上線後僅幾個小時,Axion Network代幣AXN的價格暴跌了100%。這次價格暴跌披露了其存在的漏洞,下文是CertiK安全審計團隊針對此事件的完整分析。
2020年11月2日北京時間晚上七時左右➀,黑客利用Axion Staking合約的unstake函數設法鑄造了約800億個AXN代幣。
黑客隨後將AXN代幣在Uniswap交易所中兌換以太幣,重複此過程,直到Uniswap中ETH-AXN交易對的以太幣所被耗盡,同時AXN代幣價格降至0。
在攻擊發生後的幾分鐘內,CertiK安全審計團隊獲知了該攻擊事件,並即刻展開了調查。
CertiK安全審計團隊認為該攻擊極大可能是內部操作造成的,該內部操作通過在部署代碼時,對項目依賴的OpenZeppelin依賴項注入惡意代碼。
二級標題
二級標題
攻擊預謀
黑客在發動攻擊時使用的是前一天從tornado.cash➁中獲取的匿名資金➂,說明這是一次有預謀的攻擊。
二級標題
二級標題
攻擊準備
在北京時間下午四時➄,黑客先以數量為0 和持續抵押時間為1 天為參數調用stake函數,在Axion Network的抵押合同中創建“空”抵押。
這為黑客創建了一個Session條目,其會話ID為6,數量為0,股價為0。
此後,黑客預料到攻擊將會成功,因此向Uniswap交易所預先授權了無限制的AXN。
隨後,他們批准了Axion的NativeSwap合約,以獲取即將轉換為AXN代幣的資金額。
二級標題
二級標題
攻擊執行
以上提到的交易僅僅是黑客為了掩護真正unstake攻擊的煙霧彈。
由於黑客進行的交易未更改sessionDataOf映射,因此可以得出結論,這是一次多地址攻擊。
二級標題
二級標題
攻擊途徑
在分析了已部署的Staking合約源代碼之後,CertiK安全審計團隊在Staking合約的已部署的源代碼➆第665-671行發現了一處代碼注入,該代碼注入發生在被修改的OpenZeppelin庫中的AccessControl智能合約。
鏈接中的checkRole函數不屬於OpenZeppelin v3.0.1的實現,而OpenZeppelin v3.0.1➇在項目的GitHub代碼存儲庫中被列為依賴項。
在checkRole函數中,存在以下assembly模塊:
結論
結論
結論
此次攻擊涉及到的代碼,是在合約部署前被人為故意添加進去的。
此次事件與CertiK完成的審計毫無關聯,對這次攻擊所負責的人應是參與了Axion Network合約部署的相關人員。
在此CertiK也特別強調,為了保證審計報告的有效性,和對項目安全的保障,審計報告應包括已部署的智能合約地址。地址所指向的合約的代碼應是和被審計過的源代碼相同的。因此,請大家切勿因為看到項目“已審計”就不做任何背景調查而盲目跟進。
CertiK安全預言機,作為一個鏈上可實時交互進行安全檢測的工具,可以有效確保並驗證已部署的智能合約匹配已被審計的版本。
它可以從去中心化的安全運營商網絡中檢索一組安全評分,獲得安全可靠的網絡評估源代碼,所有人都可以通過使用預言機來驗證合約安全性。
參考鏈接:
參考鏈接:
➀https://etherscan.io/tx/0xc2a4a11312384fb34ebd70ea4ae991848049a2688a67bbb2ea1924073ed089b4
➂https://etherscan.io/tx/0x86f5bd9008f376c2ae1e6909a5c05e2db1609f595af42cbde09cd39025d9f563/advanced
➃https://etherscan.io/tx/0x6b34b75aa924a2f44d6fb2a23624bf5705074cbc748106c32c90fb32c0ab4d14
➄https://etherscan.io/tx/0x5e5e09cb5ccad29f1e661f82fa85ed172c3b66c4b4922385e1e2192dc770e878
➅https://etherscan.io/tx/0xf2f74137d3215b956e194825354c693450a82854118a77b9318d9fdefcfbf875
➆https://etherscan.io/address/0xcd5f8dcae34f889e3d9f93f0d281c2d920c46a3e
➇https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.1/contracts/access/AccessControl.so