北京時間2022年7月3日,CertiK安全團隊監測到Solana鏈上的Crema Finance項目遭到黑客攻擊,損失約880萬美元。
Crema Finance是一個建立在Solana上強大的流動性協議,為交易者和流動性提供者提供各項功能。在發現黑客攻擊後,該項目方暫時終止了項目運行,以防止攻擊者從平台上盜取更多資金。
CertiK安全團隊進行了初步調查,認為在這次黑客攻擊中,攻擊者通過使用Solend協議中的6個不同閃電貸來利用合約。攻擊者偽造tick賬戶, 通過存入和提取借來的代幣,並調用瞭如下三個函數來實現攻擊:“DepositFixedTokenType”,“Claim”以及“WithdrawAllTokenTypes”。當調用”Claim “函數時,黑客利用先前偽造的tick賬戶能夠獲得額外的代幣。
Crema Finance隨後聯繫了攻擊者並稱“黑客有72小時的時間考慮成為白帽黑客,並保留80萬美元”。
值得注意的是,與該項目名字類似的Cream Finance於2021年10月也遭遇過毀滅性的閃電貸攻擊,該攻擊中Cream Finance被黑客盜取了約1.3億美元資金。雖然這兩起攻擊事件並不相關,但這兩個相似名字的項目遭遇的兩起攻擊都顯示出了合約安全的重要性:黑客能夠以驚人的方式利用閃電貸來進行各種各樣的攻擊。
攻擊步驟
①攻擊者準備了一個假的tick賬戶,方便在調用“Claim”函數時使用。
②攻擊者利用閃電貸借出了所需的token,並被用於與Crema Finance交互時的存款。
③攻擊者調用“DepositFixTokenType”函數,通過該函數將通過閃電貸借來的金額存入相應的pool。
④攻擊者通過調用“Claim”函數,獲得額外代幣。
⑤最後,攻擊者調用“WithdrawAllTokenTypes”函數,將最初存入的代幣取回。
資產去向
截稿時,CertiK安全團隊預估損失總計約為878萬美元。
大約7萬SOL在Esmx2QjmDZMjJ15yBJ2nhqisjEt7Gqro4jSkofdoVsvY賬戶中,而分批被盜的資產已被轉移到5pkD6y7qyupa2B1CiYoapBZootfhA6aRWqhqi4HYeQ9s。這些資金被橋接到ETH主網,並被發送到0x8021b2962db803b73aa874030b0b42c202e8458f。
寫在最後
根據現有的攻擊流程和Crema Finance公佈的信息來看,本次攻擊的起因為項目方代碼缺少對於tick account的驗證。作為存儲價格信息的重要數據賬戶,源代碼可能並沒有做數據來源、所有者驗證, 或者這些驗證可以被輕鬆跳過。
類似的賬戶檢查缺失屢見不鮮,可以說賬戶如何安全使用是Solana程序的重中之重。類似的例子包括但不限於賬戶所有者驗證的缺失、不同用戶的數據賬戶混用等等。
CertiK安全專家在此建議:在程序編寫時需注意賬戶的使用和其之間的聯繫。
攻擊發生後,CertiK的推特預警賬號以及官方預警系統已於第一時間發布了消息。同時,CertiK也會在未來持續於官方公眾號發布與項目預警(攻擊、欺詐、跑路等)相關的信息。