模擬感知型惡意合約,指的是一類經過刻意設計的智能合約,能在自己被執行的當下,主動判斷這次執行究竟發生在交易模擬環境裡,還是真實的區塊鏈上,並依照判斷結果切換成完全不同的行為模式——在模擬環境裡刻意表現得安全、甚至展示對使用者有利的假結果,藉此讓使用者放心點下確認;等到交易真正被送上鏈執行,才切換成原本設計好的惡意邏輯,把使用者的資產轉走。這類手法在資安圈也被稱為「紅藥丸攻擊」(red pill attack),這個名稱取自電影《駭客任務》裡「吞下紅藥丸就會看清現實」的橋段,意指合約能「看穿」自己是不是身處一場虛擬的模擬。
這種手法之所以能夠成立,關鍵在於模擬環境跟真實鏈上環境,理論上應該完全一致,但在實務上,兩者之間永遠存在某種程度、可能被合約邏輯偵測到的差異——如果這個差異被合約開發者發現並拿來利用,原本被設計來保護使用者、讓使用者能在簽署前先預覽交易結果的模擬工具,就會反過來變成攻擊者手上一件強化欺騙效果的工具,因為使用者看到的「安全」預覽本身,正是誘使他們卸下心防、放心簽署的關鍵一步。
模擬感知型惡意合約之所以能實際運作,根本原因在於區塊鏈執行環境裡存在一批被稱為「特殊變數」(special variables)的環境資訊——例如當前區塊高度、時間戳記,以及代表區塊出塊者地址的 COINBASE。這些變數的存在,原本是為了讓合約邏輯能感知自己所處的鏈上狀態,做出對應的判斷;但在模擬環境裡,因為當下並不存在真正的區塊與出塊者,開發模擬工具的團隊必須自行決定要在這些欄位填入什麼數值——2023 年資安研究團隊 ZenGo 的研究發現,部分實作方式選擇最省事的做法,直接把 COINBASE 這類變數填成全零地址,這個看似無傷大雅的簡化,卻讓惡意合約有了一個明確的判斷依據:只要偵測到這個變數是零值,就代表自己正身處模擬環境,可以放心展示假結果;一旦偵測到非零的真實地址,就代表已經在真實鏈上,可以執行真正想做的事。
這個技術根源也解釋了為什麼這類手法一度能同時影響多款主流工具——因為 COINBASE 這類環境變數該如何在模擬環境裡被填值,並不是區塊鏈協定本身規定的標準,而是每一家模擬工具開發團隊各自的實作選擇,一旦多數團隊都採用了同樣「省事」的簡化做法,同一套規避手法就能對多款不同產品同時奏效。
2023 年 ZenGo 團隊發布的研究,實際示範了這類手法在 Polygon 鏈上的運作情境:一個測試用的惡意合約要求使用者送出約 0.1 枚 MATIC,模擬結果顯示使用者將收到 0.016 枚 WETH(當時價值約 30 美元)作為交換,呈現出一筆明顯划算的交易。研究團隊透過調查發現,這個攻擊模式當時同時影響了包括 Coinbase Wallet、Rabby、Blowfish、Pocket Universe 在內共六款主流錢包與資安擴充功能——這些工具在使用者送出交易前,都會呼叫模擬引擎預覽交易結果,而其中多款工具依賴的模擬引擎,都採用了容易被偵測的環境變數填值方式。ZenGo 團隊將這項發現透過負責任揭露的管道通知各廠商,多數廠商在收到通知後迅速完成修補,ZenGo 也因此獲得多筆漏洞賞金。
這起研究案例值得注意的一點,是修補方式本身相對直接:只要把模擬環境裡的環境變數,改成填入從真實鏈上狀態擷取的、有意義的具體數值,而不是圖方便填入零值或空值,就能讓惡意合約失去原本用來判斷「我是不是在被模擬」的依據。但這個修補只能解決已被公開研究過的這一種具體手法,無法保證未來不會有新的、尚未被發現的環境差異被拿來利用——這也是為什麼多數資安研究者認為,「模擬環境是否能做到跟真實環境完全無法區分」,是一場需要持續投入資源才能維持領先的長期競賽。
對一般使用者而言,這個概念最實用的參考價值,不在於要求自己去分辨某個模擬工具背後的技術實作是否安全(這遠超出一般用戶能自行判斷的範圍),而在於調整對交易模擬工具的期待值:模擬結果是一個高度可信、但不是絕對無法被繞過的訊號,這代表在特定高風險情境下,值得額外採取一些不依賴模擬結果本身的判斷方式。具體來說,如果一筆交易的模擬結果顯示報酬異常優渥、明顯超出合理範圍(例如花很少的錢就能換到高出許多倍的資產),這種「好到不像真的」的訊號本身,就應該被當成需要提高警覺的線索,而不是照單全收的好消息——攻擊者最有動機透過偽裝模擬結果來誘騙使用者的情境,正是這類看似穩賺不賠的交易。
另一個值得建立的習慣,是不要把交易模擬當成唯一的判斷依據,尤其是面對來源不明、剛部署不久,或跟知名協議刻意做出高度相似的新合約時。額外用一個完全獨立的來源(例如區塊鏈瀏覽器的合約原始碼查詢功能,或社群裡其他使用者對這個合約的討論與回報)交叉核對,能在模擬結果本身可能失準的情境下,提供第二層判斷依據。這個原則背後的邏輯,其實跟本站反覆強調的「不要只依賴單一防線」是同一件事:模擬工具是很有效的第一道防線,但任何單一防線都有可能在特定情境下被繞過,多層防護疊加,才是相對穩妥的做法。
2023 年 ZenGo 團隊發布的「紅藥丸攻擊」研究,是模擬感知型惡意合約最具代表性的公開案例:研究團隊在 Polygon 鏈上部署一個測試合約,利用當時多款模擬工具把 COINBASE 變數填成零值的實作方式,讓合約在模擬環境裡顯示使用者將獲得約 30 美元的 WETH 回報,實際上鏈執行時卻讓合約直接收下使用者送出的 MATIC,不回饋任何資產。這項研究最終確認包括 Coinbase Wallet、Rabby、Blowfish、Pocket Universe 在內共六款主流工具受到影響,多數廠商在收到負責任揭露後迅速修補,ZenGo 也因此累積獲得多筆漏洞賞金與以太坊基金會的研究補助。