前言:雙面刃的「一次編寫,到處執行」
Java 的跨平台特性讓開發者免於移植之苦,也讓惡意程式碼獲得了前所未有的傳播管道。瀏覽器自動下載並執行網頁內嵌的 Applet,雖然 Java 設計了沙箱機制 (SecurityManager)、後來又引入數位簽名 (JDK 1.1+),但安全漏洞層出不窮。本文系統梳理惡意 Applet 的四大攻擊面向,並提供防禦建議。
四大攻擊類型
1. 系統破壞 — 最嚴重的威脅
- 檔案系統操作:刪除/修改檔案、格式化磁碟、殺掉進程/執行緒。
- 入侵跳板:利用 JVM 漏洞逃逸沙箱,取得作業系統級存取權。
- 跨平台攻擊:同一惡意 Applet 可同時攻擊 Windows、Linux、Solaris 等所有裝有 JVM 的平台。
- 真實案例:普林斯頓大學 SIPT 實驗室曾公開示範實驗室環境下的逃逸攻擊;歷年 CVE (如 CVE-2012-0507, CVE-2013-0422) 導致大規模駭客攻擊活動。
後果:財務資料竄改導致公司倒閉、醫療資料篡改危及生命、關鍵基礎設施癱瘓。
2. 隱私竊取 — 無聲的間諜
- 掃描本機敏感檔案:
/etc/passwd (Unix)、登錄檔、瀏覽器儲存密碼、SSH 金鑰、錢包檔案。
- 側錄鍵盤、截圖、攝影鏡頭存取 (若權限提升成功)。
- 將竊取資料透過 HTTP/ DNS/ ICMP 等隱蔽通道外洩。
3. 資源盜用 — 讓你的電腦為駭客打工
- 挖掘加密貨幣 (早期 Java Applet 即用於此)。
- 發動 DDoS 攻擊 (殭屍網路節點)。
- 發送垃圾郵件、暴力破解密碼。
- 佔用 CPU/記憶體/頻寬導致系統緩慢、過熱、縮短硬體壽命。
4. 對抗使用者 — 流氓行為
- 彈窗廣告、修改瀏覽器首頁、安裝工具列。
- 鎖定螢幕勒索贖金 (早期勒索軟體雛形)。
- 偽裝成合法軟體誘導安裝更多惡意程式。
Java 官方防禦演進史
| 版本/時期 | 關鍵防禦機制 | 局限 |
| JDK 1.0 | 沙箱 : 禁止本地檔案/網路/系統呼叫 | 過於嚴格,功能受限;漏洞頻出 |
| JDK 1.1 | 簽名 Applet + SecurityManager 精細權限 | 用戶易盲目信任簽名;私鑰外洩風險 |
| JDK 1.2 (Java 2) | 代碼來源/簽名者/主體 三維權限策略 | 配置複雜;原生庫 (JNI) 仍可繞過 |
| Java 7/8 | Click-to-Play、簽名強制驗證、部署規則集 | 瀏覽器廠商逐步移除 NPAPI 支援 |
| Java 9+ | 模組化 (Jigsaw) 強化封裝;移除 Applet API (Java 11) | 徹底終結瀏覽器 Applet 時代 |
使用者與企業防禦清單
- 停用/移除瀏覽器 Java 外掛 — 最有效的單一手段。
- 僅在必要時啟用:企業內部舊系統需求,配合部署規則集 僅允許特定簽名/位置的 Applet 執行。
- 保持 JRE 更新:自動更新或統一軟體分發管道。
- 網路層隔離:防火牆/代理封鎖非必要外部 Java 下載;內網分段限制橫向移動。
- 端點防護 (EDR):偵測異常進程行為 (如
java.exe 產生 cmd.exe、連接可疑 IP)。
- 安全意識訓練:不輕信「需要執行 Java 才能觀看」的網頁誘餌。
結語
Java Applet 的安全歷史,是「功能與安全博弈」的經典縮影。雖然瀏覽器端 Applet 已成絕響,但沙箱逃逸、序列化漏洞、供應鏈攻擊等核心問題在伺服器端 Java、容器逃逸、依賴庫投毒等新場景中持續上演。理解這段歷史,能讓我們在現代雲原生、微服務架構中建立更纵深的防禦體系。