區塊鏈安全入門筆記:狀態攻擊、重放攻擊、重入攻擊、假充值攻擊

買賣虛擬貨幣
隨著越來越的人參與到區塊鏈這個行業中來,為行業注入新活力的同時也由於相關知識的薄弱以及安全意識的匱乏,給了攻擊者更多的可乘之機。面對頻頻爆發的安全事件,慢霧特推出區塊鏈安全入門筆記系列,向大家介紹區塊鏈安全相關名詞,讓新手們更快適應區塊鏈危機四伏的安全攻防世界。hard_fail 狀態攻擊   hard_fail Attackhard_fail 是什麼呢?簡單來說就是出現錯誤但是沒有使用錯誤處理器(error handler)處理錯誤,比方說使用 onerror 捕獲處理,如果說沒有 onerror 捕獲,就會 hard_fail。EOS 上的交易狀態記錄分為  executed, soft_fail, hard_fail, delayed 和 expired 這 5 種狀態,通常在鏈上大部分人觀察到的交易,都是 executed 的,或者 delayed 的,而沒有失敗的交易,這就導致大部分開發者誤以為 EOS 鏈上沒有失敗的交易記錄,從而忽略了對交易狀態的檢查。攻擊者利用這個細節,針對鏈上游戲或交易所進行攻擊,構造執行狀態為 hard_fail 的交易,欺騙鏈上游戲或交易所進行假充值攻擊,從而獲利。該攻擊手法最早由慢霧安全團隊於 2019 年 3 月 10 日一款 EOS DApp 上捕獲,帳號名為 fortherest12 的攻擊者透過 hard_fail 狀態攻擊手法攻擊了 EOS 遊戲 Vegas town。隨後,相同攻擊手法頻頻發生,慢霧安全團隊在此提醒交易所和 EOS DApp 遊戲開發者在處理轉賬交易的時候需要嚴格校驗交易狀態,確保交易執行狀態為 executed。重放攻擊   Replay Attack重放攻擊(Replay Attack),是針對區塊鏈上的交易資訊進行重放,一般來說,區塊鏈為了保證不可篡改和防止雙花攻擊的發生,會對交易進行各種驗證,包括交易的時間戳,nonce,交易 id 等,但是隨著各種去中心化交易所的興起,在智慧合約中驗證使用者交易的場景越來越多。這種場景一般是需要使用者對某一條訊息進行簽名後上傳給智慧合約,然後在合約內部進行驗籤。但由於使用者的簽名資訊是會上鍊的,也就是說每個人都能拿到使用者的簽名資訊,當在合約中校驗使用者簽名的時候,如果被簽名的訊息不存在隨著交易次數變化的變數,如時間戳,nonce 等,攻擊者就可以拿著使用者的簽名,偽造使用者發起交易,從而獲利。
這是一種最早出現於 DApp 生態初期的攻擊形態,由於開發者設計的開獎隨機演算法存在嚴重缺陷,使得攻擊者可利用合約漏洞重複開獎,屬於開發者較為容易忽略的錯誤。因此,開發者們在鏈上進行驗籤操作的時候,需要對被簽名訊息加上各種可變因子,防止攻擊者對鏈上簽名進行重放,造成資產損失。重入攻擊   Reentrancy Attack重入攻擊(Reentrancy Attack)首次出現於以太坊,對應的真實攻擊為 The DAO 攻擊,此次攻擊還導致了原來的以太坊分叉成以太經典(ETC)和現在的以太坊(ETH)。由於專案方採用的轉賬模型為先給使用者傳送轉賬然後才對使用者的餘額狀態進行修改,導致惡意使用者可以構造惡意合約,在接受轉賬的同時再次呼叫專案方的轉賬函式。利用這樣的方法,導致使用者的餘額狀態一直沒有被改變,卻能一直提取專案方資金,最終導致專案方資金被耗光。慢霧安全團隊在此提醒智慧合約開發者在進行智慧合約開發時,在處理轉賬等關鍵操作的時候,如果智慧合約中儲存了使用者的資金狀態,要先對資金狀態進行修改,然後再進行實際的資金轉賬,避免重入攻擊。假充值攻擊  False Top-up假充值攻擊(False Top-up),分為針對智慧合約的假充值攻擊和對交易所的假充值攻擊。在假充值攻擊中,無論是智慧合約還是交易所本身,都沒有收到真實的 Token,但是使用者又確實得到了真實的充值記錄,在這種情況下,使用者就可以在沒有真正充值的情況下從智慧合約或交易所中用假資產或不存在的資產竊取真實資產。
1.智慧合約假充值攻擊針對智慧合約的假充值主要是假幣的假充值,這種攻擊手法多發於 EOS 和波場上,由於 EOS 上代幣都是採用合約的方式進行發行的,EOS 鏈的系統代幣同樣也是使用這種方式發行,同時,任何人也可以發行名為 EOS 的代幣。只是發行的合約帳號不一樣,系統代幣的發行合約為 "eosio.token",而其他人發行的代幣來源於其他合約帳號。當合約內沒有校驗 EOS 代幣的來源合約的時候,攻擊者就能透過充值攻擊者自己釋出的 EOS 代幣,對合約進行假充值攻擊。而波場上的假充值攻擊主要是 TRC10 代幣的假充值攻擊,由於每一個 TRC10 都有一個特定的 tokenid 進行識別,當合約內沒有對 tokenid 進行校驗的時候,任何人都可以以 1024 個 TRX 發行一個 TRC10 代幣對合約進行假充值。2. 交易所假充值攻擊針對交易所的假充值攻擊分為假幣攻擊和交易狀態失敗的假充值攻擊。以 EOS 和以太坊為例。針對 EOS 可以使用名為 EOS 的假幣的方式對交易所進行假充值攻擊,如果交易所沒有嚴格校驗 EOS 的來源合約為 "eosio.token",攻擊就會發生。同時,區別於 EOS,由於以太坊上會保留交易失敗的記錄,針對 ERC20 Token,如果交易所沒有校驗交易的狀態,就能透過失敗的交易對交易所進行 ERC20 假充值。除此之外,hard_fail 狀態攻擊也是屬於假充值攻擊的一種。慢霧安全團隊在此建議交易所和智慧合約開發者在處理轉賬的時候要充分校驗交易的狀態,如果是 EOS 或波場上的交易,在處理充值時還要同時校驗來源合約是否是 "eosio.token" 或 tokenid 是否為指定的 tokenid。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;