KeyFrame內部研究專用

The 2016 Shanghai Attacks: History and Technical Deep Dive | Hudson Jameson (Polygon Labs)

DeFi Security Summit - DSS·1月21日週二·24 min英文

三句話摘要

2016 年上海 Devcon 期間,Ethereum 遭受針對 EVM opcode 定價漏洞的拒絕服務攻擊,核心開發者如何在會議現場緊急應對。 多客戶端架構是 Ethereum 在 2016 年上海攻擊中從未中斷的真正原因,也是任何追求高韌性區塊鏈最值得效仿的核心設計原則。 opcode 定價錯誤是核心漏洞。 EXT code hash 這類 IO 密集操作的 gas 費用遠低於其實際耗用的硬碟與記憶體資源,攻擊者得以極低成本反覆呼叫,直接壓垮客戶端底層的 LevelDB,使 Geth 節點因記憶體錯誤崩潰。

重點整理

重點
  • 1

    opcode 定價錯誤是核心漏洞。 EXT code hash 這類 IO 密集操作的 gas 費用遠低於其實際耗用的硬碟與記憶體資源,攻擊者得以極低成本反覆呼叫,直接壓垮客戶端底層的 LevelDB,使 Geth 節點因記憶體錯誤崩潰。

  • 2

    多客戶端架構是 Ethereum 當次倖存的關鍵。 Geth 下線期間,使用 RocksDB 的 Parity 客戶端持續正常出塊,整條鏈從未停止。這印證了「規格與客戶端分離」的設計哲學——Ethereum 的規格存在於 GitHub,任何人都能實作不同客戶端,而非綁定單一參考實作。

  • 3

    緊急協調能力決定應對速度。 核心開發者借用一台備用 Toshiba 筆電、在上海 Hyatt 大廳找到空房作戰,同時直接致電 F2Pool、EthFans 等現場礦池負責人,透過網路內建的 1/1024 漸進機制在 5 小時內將區塊 gas 上限壓到約 40 萬,讓攻擊合約無法塞入區塊。

  • 4

    狀態清理需要系統性硬分叉。 空帳戶(empty account)在協議層被視為獨立存在,1,900 萬個空帳戶佔用大量磁碟並拖慢同步,臨時措施無法解決;最終 Spurious Dragon 硬分叉改寫規則,讓節點在「觸碰」空帳戶時自動刪除,再透過腳本批量清理,才根治狀態膨脹問題。

實用技巧與重點

乾貨
  • 攻擊時間:2016 年 9 月 18 日,Devcon 2 開幕前 6 小時
  • 攻擊手法一:EXT code hash opcode 定價過低 → 大量呼叫 → Geth(LevelDB)記憶體耗盡崩潰
  • 攻擊手法二:SUICIDE(self-destruct)opcode 反覆建立空帳戶 → 狀態膨脹達 1,900 萬個空帳戶
  • 當時存活的執行層客戶端:Geth(Go)、Parity(Rust)、Ethereum J(Java)、Aleth/Ethereum++(C++)
  • 底層資料庫:Geth 使用 LevelDB,Parity 使用 RocksDB
  • 緊急措施:降低區塊 gas 上限,礦工透過 1/1024 漸進公式調整,約 5 小時降至 ~400,000 gas
  • 協調對象:F2Pool、EthFans(後更名 SparkPool),均在上海現場
  • 修復硬分叉:
  • Tangerine Whistle(EIP-150):重新定價多個 IO 密集 opcode
  • Spurious Dragon(EIP-158):消除空帳戶概念,批量清除 1,900 萬個空帳戶
  • 攻擊者花費:300 ETH(當時 ~$4,000,現值 ~$875,000)
  • ETH 當時價格:$13

結論

結論

多客戶端架構是 Ethereum 在 2016 年上海攻擊中從未中斷的真正原因,也是任何追求高韌性區塊鏈最值得效仿的核心設計原則。

完整解析

詳細

2016 年 9 月,Ethereum 基金會正在上海舉辦年度開發者大會 Devcon 2。就在 Vitalik Buterin 準備登台演講的前 6 小時,凌晨 3 點,負責活動運營的 Hudson 被一通廁所電話叫醒——「我們正在被攻擊。」此時 ETH 價格僅 13 美元,Ethereum 主網僅有 Geth(Go)、Parity(Rust)、Ethereum J(Java)、Aleth(C++)四個客戶端能同步,整個生態系統還相當年輕。

第一波攻擊利用了 EVM opcode 定價系統的根本缺陷。Ethereum 的 gas 機制原本應讓每個操作的費用與其耗用的計算資源成正比,但 EXT code hash 這類需要頻繁存取底層資料庫的 IO 密集操作,定價遠低於其實際消耗。攻擊者部署惡意合約,在單一交易中反覆呼叫此 opcode,使 Geth 底層的 LevelDB 被淹沒——硬碟 IO 超載、記憶體耗盡,節點接連崩潰。關鍵是,同樣情境下使用 RocksDB 的 Parity 客戶端卻撐了下來,讓整條鏈得以繼續出塊,沒有中斷。

開發者們擠在上海 Hyatt 酒店的一個臨時空房裡應戰,有人甚至沒帶筆電,Hudson 把備用的 Toshiba 筆電借給 Peter 和 Martin 嘗試同步節點。在最糟糕的網路環境下,他們確定了緊急方案:協調礦工大幅降低區塊 gas 上限。Ethereum 協議內建一個機制,礦工可透過出塊信號表達期望的 gas 上限,網路每個區塊最多移動 1/1024,多數礦工一致時可快速收斂。Hudson 直接致電同在上海參加 Devcon 的 EthFans(後改名 SparkPool)負責人,並聯絡 F2Pool,再由這些礦池向其他礦工廣播設定異動。約 5 小時後,區塊 gas 上限被壓縮至約 40 萬,攻擊合約根本無法塞入區塊,第一波攻擊被暫時壓制。

然而攻擊並未停止。幾天後,第二波攻擊改用 SUICIDE(self-destruct)opcode 的 ether 轉帳副作用,每次呼叫都在狀態中「彈出」新的空帳戶。協議當時區分「空帳戶」(zero balance/nonce/code)與「不存在帳戶」,前者仍佔用磁碟空間與記憶體,但建立成本極低。攻擊者就這樣累積出 1,900 萬個空帳戶,使全節點的磁碟用量與同步時間急劇膨脹。針對這兩個問題,核心開發者快速推出兩個連續硬分叉:Tangerine Whistle(EIP-150)重新定價所有 IO 密集 opcode,從根本堵住定價漏洞;Spurious Dragon(EIP-158)則修改協議,讓節點在觸碰空帳戶時直接刪除,再輔以批量腳本清理全部 1,900 萬筆狀態,Ethereum 的磁碟佔用才回歸正常。整個攻擊過程,攻擊者共花費 300 ETH,按當時市價約 $4,000 美元;以今日幣值計算,則高達 $875,000。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵