後門是跳過正常登入、可以再次進入的路徑。本文說明它的原理,以及如何發現和防範(不說明安裝或使用的方法)。
從哪裡來,為什麼會一直留著
後門很少單獨出現,它通常和第一次入侵成對出現。攻擊者先用某種方式取得立足點,再留下回來的路。麻煩的地方就在這裡:修補了原本的漏洞,存取並不會因此結束。
1. 第一次入侵
利用漏洞或被盜的帳密取得立足點
2. 植入後門
留下一個繞過驗證的入口
3. 反覆回來
漏洞修補後仍然可以進入
4. 資料外流
與指揮伺服器通訊,資料被送出去
後門不只是伺服器被入侵後才加上去的東西。2024 年發現的 xz-utils 後門是另一種形態:一個花了很長時間取得維護者信任的人,把後門植入一個廣泛使用的壓縮函式庫的發布原始碼中(CVE-2024-3094)。也就是說,即使你自己的伺服器從未被入侵,後門也可能隨著你引入的元件進來。不論哪一種形態,結論都一樣:修補漏洞不等於安全。要確認是否有據點被留下。
實例:被植入發布檔或更新中的後門
以下是本站介紹過的案例,加上一個廣為人知的公開案例。
| 案例 | 植入的位置 | 學到的事 |
|---|---|---|
| XZ Utils(2024) | 壓縮函式庫的發布檔(CVE-2024-3094,CVSS 10.0) | 在廣泛發布到穩定版之前被發現,起因是一位工程師追查一個原因不明的變慢問題 |
| SolarWinds Orion(2020) | 監控軟體的正式更新 | 該公司向 SEC 提交的文件指出,安裝了受影響更新的客戶少於 18,000 家。美國 CISA 發布緊急指令,要求聯邦機關中斷受影響產品的連線 |
| MOVEit Transfer(2023) | 透過漏洞進入的網頁伺服器(web shell) | 零時差漏洞導致 web shell 被放置,背後資料庫中的資料被大量取走 |
這三個案例中,使用者都是透過正當的程序使用正當的產品。即使你自己的伺服器從未被入侵,後門也可能藏在你引入的元件或更新中進來。
後門與相近用語的比較
| 用語 | 意思 | 與後門的關係 |
|---|---|---|
| 後門 | 繞過驗證、可再次進入的隱藏路徑 | — |
| 漏洞 | 軟體的缺陷;非預期的破洞 | 常被用於第一次入侵,之後才被放置後門 |
| 木馬 | 偽裝成有用軟體的惡意軟體 | 內部可能帶有後門 |
| RAT(遠端存取木馬) | 用來遠端控制受感染裝置的惡意軟體 | 裝置上後門的典型形式 |
| Web shell | 放在網頁伺服器上的惡意控制腳本 | 網頁伺服器上後門的典型形式 |
與正當遠端維護的差別
就「遠端操作機器的方法」而言,正當的遠端維護和後門看起來很像。差別在於是否受到控制。
正當的遠端維護
管理者知道它存在,它受到驗證和存取控制的管理,而且會留在稽核紀錄中。誰在什麼時候做了什麼都可以追查。它是經過授權而建立的。
後門
由攻擊者偷偷植入,繞過驗證,並且刻意設計成不留紀錄。這是一個沒有人追蹤、也沒有人控制、看不見的入口。
偵測與防範
不是靠單一對策,而是三者組合:減少入口、讓攻擊者無法留下、察覺變化。
減少入口(阻止第一次入侵)
不留下未修補的漏洞(讓相依套件和框架保持最新),嚴格管理帳密和金鑰且不重複使用,並把對外開放的範圍降到最小。沒有第一次入侵,就沒有機會留下後門。
讓攻擊者無法留下(最小權限與隔離)
把權限範圍縮小,並把服務分開,讓入侵造成的損害維持在有限範圍。設計成一個元件被攻破時,不會連帶影響其他部分。
察覺變化(完整性與流量監控)
留意陌生的執行檔或腳本、意料之外的程序和 cron 項目,以及從伺服器連往不認識目的地的外連流量。EDR 等工具就是為了讓異常變化被看見而存在的。
審查相依套件與供應鏈
審查你引入的東西,關閉被污染的元件把後門帶進來的途徑。但要注意,簽章證明的是來源,不是安全。關於被污染的版本經由正當發布流程送出的案例,請看防範 npm 供應鏈入侵;機械式的檢查方法請看osv-scanner 入門。
如何檢查自己的伺服器(Linux 範例)
這些檢查是在找你不認識的東西。全部都只是讀取,不會變更任何設定。
檢查登入的途徑
查看每個使用者的 ~/.ssh/authorized_keys 裡是否有不認識的公鑰,以及 /etc/passwd 裡是否有陌生的使用者,或新出現的 UID 0 使用者。
檢查自動執行的項目
檢查 crontab -l(每個使用者)、/etc/cron.* 和 systemctl list-unit-files --state=enabled,看看有沒有不是你設定的排程工作或服務。
檢查檔案變更
用 find /var/www -type f -mtime -7 之類的指令找出網站根目錄中最近變更的檔案,看看有沒有在你沒有部署的時候出現的腳本。用 debsums -c(Debian 系)或 rpm -Va(RHEL 系)檢查套件檔案是否被竄改。
檢查外連連線
用 ss -tnp 查看是否有程序從伺服器連往不明的目的地。定期連往同一個目的地的流量,可能是 C2 通訊。
如果發現了什麼,不要只是刪掉就結束:隔離、保留紀錄、重建,並更換所有帳密。
以「有人會進來」為前提來規劃
後門危險的地方,在於它很容易不被發現。正因如此,只靠「把所有人擋在外面」並不實際。能夠說出「就算有人進來,也無法留下據點,而且我們很快就會發現」,才能防止事件拖成長期的問題。
本站的看法:修補漏洞後,要確認攻擊者是否留下了繼續存取的路徑
事件應變中常見的疏漏,是修補了漏洞就覺得結束了。本站的立場是:漏洞修補之後,必須繼續確認是否還留有後門或原因不明的常駐程序。攻擊者的目的從來不是只來一次,而是留下來。切斷這一點,應變才算完成。
資料來源(一手資料)
- NIST NVD, "CVE-2024-3094" — nvd.nist.gov(XZ Utils 後門,CVSS 10.0)
- SolarWinds Corporation, "Form 8-K"(2020 年 12 月 14 日)— sec.gov(受影響客戶數)
- CISA, "Emergency Directive 21-01" — cisa.gov
- CISA 等機關,關於 MOVEit Transfer 漏洞 CVE-2023-34362 的聯合公告(AA23-158A)— cisa.gov(web shell 的放置)
- MITRE ATT&CK, "Server Software Component: Web Shell (T1505.003)" — attack.mitre.org(偵測的觀點)
延伸閱讀
- 用語:遠端程式碼執行(RCE)是什麼/C2(命令與控制)是什麼
- 用語:路徑穿越是什麼(入口的一個例子)
- 案例:xz-utils 後門(直接植入發布原始碼)
- 案例:防範 npm 供應鏈入侵
- 案例:AI 寫的程式碼外洩了 API 金鑰:真正的原因
FAQ
Q後門和正當的遠端維護有什麼不同?
技術上兩者看起來可能很像。決定性的差別在於:是否經過授權、是否有人知道它存在、是否留在紀錄裡。正當的遠端存取是管理者知道的,並受到驗證、存取控制和稽核紀錄的管理。後門則是被偷偷植入、繞過驗證,而且刻意不留痕跡。同樣是「遠端操作機器」的能力,差別在於能否被看見、能否被控制。
Q後門是怎麼被植入的?
多數是在第一次入侵之後,作為長期留下的據點而安裝的。入口通常是沒有修補的漏洞(例如遠端程式碼執行)、被盜的帳密或 SSH 金鑰,或是被拉進建置流程的污染相依套件。本站不說明安裝或操作的方法。重要的是兩層目標:防止第一次入侵,並讓攻擊者即使進來也無法留下。
Q怎麼確認自己是否被植入後門?
沒有單一的檢查方法。有效的是同時從多個角度觀察:檔案完整性監控(是否出現陌生的執行檔或腳本)、外連流量監控(伺服器是否定期連到不明的目的地)、檢查意料之外的程序和 cron 項目,以及相依套件審查。任何一項單獨使用都容易被避開;組合起來,異常的變化就會浮現。
Q「後門」是什麼意思?為什麼叫「後門」?
意思是不走正門(正常登入,也就是驗證)的入口。典型的情況是攻擊者入侵後植入的,但開發者留下的隱藏維護帳號,或產品內建的固定密碼,如果使用者不知道也無法控制,也會被稱為後門。在密碼學領域,這個詞也用來指為了讓政府等第三方能夠解密而刻意加入的機制。
QWeb shell 是什麼?和後門一樣嗎?
Web shell 是放在網頁伺服器上的惡意腳本,讓人可以從瀏覽器等地方遠端操作伺服器。它是網頁伺服器上後門的典型形式。在 2023 年 MOVEit Transfer 的大規模外洩事件中,攻擊者利用漏洞放置了 web shell,再從背後的資料庫竊取資料。
Q發現後門後,刪掉就夠了嗎?
不夠。後門可能不只一個,入侵時用的帳密也可能已經被盜。請把伺服器從網路隔離、保留調查用的紀錄、從已知乾淨的狀態重建,並更換所有帳密:密碼、SSH 金鑰、API 金鑰。同時修補讓攻擊者進來的漏洞。