EOS 節點執行遠程代碼漏洞
截止到目前,EOS團隊並未就此次漏洞時間發表官方聲明。Daniel Larimer僅是在Telegram的EOS Developers頻道口頭闡述此次時間並非360所描述的那樣,而同時並未就360相關blog的截圖回復。希望此次EOS事件不會像IOTA一樣收尾。
漏洞發現者
Yuki Chen of Qihoo 360 Vulcan Team
Zhiniang Peng of Qihoo 360 Core Security
漏洞描述
360安全團隊在 EOS 解析 WASM 文件時, 成功的發現如何利用緩衝區溢出寫入漏洞.
通過這個漏洞, 攻擊者可以上傳一個包含惡意代碼的智能合約, 在節點伺服器解析了這個智能合約後, 這個惡意代碼就可以在伺服器上執行並接管整個伺服器.
在控制了節點伺服器後, 攻擊者可以將惡意合約打包到新的塊中, 並進一步控制 EOS 網路的所有節點.
漏洞報告時間線
2018-5-11 發現EOS 緩存溢出漏洞
2018-5-28 在 EOS 超級節點實現重現漏洞 Demo
2018-5-28 將漏洞詳情報告給EOS項目方
2018-5-29 EOS 項目方在Github Fix 並關閉了 Issue
2018-5-29 通知項目方Fixing並未完全完成
360團隊與 Daniel Larimer的 Telegram 聊天記錄:
發送的郵件截圖
漏洞的技術描述
這是一個緩衝溢出寫入漏洞.
在libraries/chain/webassembly/binaryen.cpp(Line 78), 函數binaryen_runtime::instantiate_module:
漏洞上的修改記錄
Bytemaster 在 EOS 的 github 上創建了一個issue 3498來描述這個漏洞:
並通過如下代碼解決了問題
但正如 guhe120所說的, 這個修改在32位處理器上還是存在問題的, 所以這個修改並非完全解決了漏洞問題.
如何復現漏洞
1. 構建 EOS 最新版本的代碼:./eosio-build.sh
2. 啟動EOS 節點, 並按照Tutorial-Getting-Started-With-Contracts內的表述完成所有設置
3. 設置一個漏洞 Contract:在一個proof of concept WASM 內將|offset|欄位設置為 0xffffffff 以便在溢出時立即崩潰.
測試 PoC:
如果一切正常, 你會在 nodeos 進程看到segment fault
利用漏洞實現遠程代碼執行
利用此漏洞可以在nodeos進程中實現遠程代碼執行,漏洞利用方法是將惡意合約上傳到受害節點,並讓節點解析惡意合約。而在真正的攻擊中,攻擊者可能會向EOS主網路發布惡意合約。
EOS超級節點解析惡意合約觸發漏洞後,攻擊者將可以完全控制這個節點。
攻擊者可以竊取超級節點的私鑰或控制新區塊的內容,更重要的是攻擊者可以將惡意合約打包成一個新塊並發布進行攻擊,最終整個網路中的所有節點都將受到攻擊並被控制。
我們完成了概念性的漏洞驗證程序,並在基於64位Ubuntu系統的nodeos上進行了測試。這個漏洞的攻擊過程是這樣的:
1. 攻擊者將惡意合約上傳到nodeos伺服器。
2. 伺服器nodeos進程解析引發漏洞的惡意合約。
3. 使用越界寫入的原生代碼,我們可以覆蓋WASM模塊實例的WASM內存緩衝區,在惡意WASM代碼的幫助下,最終可以在nodeos進程中實現了任意內存讀/寫操作,並繞過了64位操作系統上的DEP/ ASLR等常見的攻擊緩解技術。
4. 漏洞利用一旦成功,會啟動一個反向shell連接攻擊者。
To be continued...
後續本號會持續跟蹤漏洞的相關信息.
隨想
其實除了 EOS, 老牌的 IOTA 也出現了同樣的安全問題, 如果大家感興趣請在文末留言, 如果需求強烈, 會對 IOTA 做同樣的追蹤報道.
[360官方博客原文地址](http://blogs.360.cn/blog/eos-node-remote-code-execution-vulnerability/)
END


TAG:九州區塊鏈 |