這是一起非常典型的供應鏈攻擊(Supply Chain Attack),但其攻擊目標與手法與我們平常看到的資訊竊取類惡意軟體截然不同。這次的案例是攻擊者利用了拼寫錯誤(Typosquatting)的手段,在 NuGet 倉庫中上傳了一個偽裝成知名 JSON 處理庫的惡意套件。
首先我們來定義什麼是 Typosquatting。簡單來說,就是攻擊者註冊一個與知名套件名稱極其相似的名稱,例如將 Newtonsoft.Json 錯寫成 Newtonsoftt.Json.Net(多了一個 t)。開發者在安裝套件時如果手快打錯字,就可能在不知不覺中安裝了惡意版本。
這次攻擊的特殊之處在於,它並非為了大規模竊取所有使用者的密碼或金鑰,而是一個具有高度針對性的精準打擊。
隱蔽的特洛伊木馬設計
通常的惡意套件在安裝後會立即執行惡意腳本,這很容易被安全掃描工具偵測到。但這次的惡意套件採取了更狡猾的策略:它是一個功能完整的 Newtonsoft.Json 分叉(Fork)版本。
這意味著,如果你是一個普通開發者,不小心安裝了這個套件,你的程式碼依然能正常運行,JSON 解析功能完全正常。因為惡意程式碼被隱藏在 JsonConvert.DefaultSettings 的屬性設定器(Setter)中。只有當程式執行到設定該屬性的動作時,惡意邏輯才會被觸發。
為了進一步規避偵測,攻擊者還加入了一個隨機延遲機制。即使觸發了設定器,惡意行為也不會立刻發生,而是等待一段時間後才啟動,以此來欺騙那些僅在短時間內監控行為的沙箱測試環境。
針對特定目標的操縱邏輯
這款惡意套件的真正目標是名為 Digitain 的線上博弈平台,特別是其 FG-Crash 遊戲的後端伺服器。
攻擊者在程式碼中植入了特定的邏輯:它會檢查目前運行的環境是否包含 Digitain 遊戲後端的特定方法。如果發現環境匹配,它就會修改遊戲結果,將操縱後的結果發送到攻擊者控制的伺服器(C2 Server),並將這些流量偽裝成一般的遙測數據(Telemetry Data)以掩蓋行蹤。
從版本演進來看,攻擊者經歷了三個階段的迭代。第一代僅是本地的概念驗證,第二代引入了反射(Reflection)和 ConfuserEx(一種混淆工具,用來讓程式碼變得難以閱讀)來隱藏外傳行為,第三代則穩定化了操縱邏輯。有趣的是,最後一個版本 11.0.11 竟然完全沒有混淆,研究人員推測這可能是攻擊者不小心上傳了未經處理的原始版本。
這揭示了一個關鍵訊息:攻擊者極有可能已經獲取了 Digitain 的內部原始碼,因為套件的元數據中多次洩漏了該公司的內部儲存庫網址。
對工程實務的啟示與防禦
對於 Junior 工程師來說,這次事件提供了幾個重要的安全教訓。
第一,永遠不要完全信任套件名稱。在安裝第三方庫時,請務必確認套件的官方名稱、下載量以及維護狀態。
第二,使用鎖定檔(Lock Files)。在 .NET 環境中,建議使用 packages.lock.json。鎖定檔會記錄每個套件的精確版本與雜湊值(Hash),確保團隊成員安裝的是完全相同的二進位檔案,防止在更新或重新安裝時被替換成惡意版本。
第三,最小權限與環境監控。雖然這次攻擊是針對特定後端,但它提醒我們,即使是看似無害的基礎庫(如 JSON 處理工具),一旦被污染,就擁有了存取應用程式記憶體與網路的權限。
總結來說,這次事件展示了供應鏈攻擊的演進:從隨機撒網轉向精準狙擊。當惡意軟體在 99% 的環境中表現得像個正常工具時,偵測它的難度將大幅提升。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。