💡 什麼是伺服器端請求偽造(SSRF)?
隨著雲端服務與微服務架構的普及,許多 Web 應用程式都具備「從外部抓取資料」的功能(例如:輸入網址預覽網頁標題、從遠端下載頭像圖片、Webhook 通知等)。然而,如果應用程式在向外部發送請求時,沒有對使用者輸入的網址進行嚴格驗證與過濾,就可能導致 SSRF(Server-Side Request Forgery,伺服器端請求偽造) 漏洞。
在 SSRF 攻擊中,攻擊者無法直接從外網存取企業內網的資源,但他可以利用這台對外暴露的 Web 伺服器作為「跳板」或「代理人」,替攻擊者向內網或伺服器本地發送惡意請求,進而突破防火牆的防線!
⚠️ SSRF 的核心危害與經典情境
想像一下,某個網站有一個功能是「輸入圖片網址,系統幫你下載圖片」。
Plaintext
http://localhost:8080/admin
因為這個請求是由 Web 伺服器自己發出的,內網防火牆通常會完全信任它,導致攻擊者透過 SSRF 成功繞過驗證,看光內網的機敏數據。
探測內網通訊埠與主機(Port Scanning)
攻擊者可以透過修改 IP 與 Port(例如 http://192.168.1.5:3306、http://192.168.1.5:6379),藉由伺服器回應的時間差或錯誤訊息,探測內網有哪些機器活著、開了哪些服務。
雲端環境metadata 竊取(Cloud Metadata Service Abuse)
在 AWS、GCP 或 Azure 等雲端環境中,虛擬機通常可以透過一個固定的本機 IP(如 http://169.254.169.254/)來獲取機器的設定與暫時性憑證(IAM Role)。若發生 SSRF,攻擊者就能直接把這些最高權限的雲端金鑰偷走,徹底接管整個雲端資產!
🛡️ 如何有效防禦 SSRF 攻擊?
統一過濾與白名單機制(Allowlist):
絕對不要使用黑名單(因為攻擊者可以透過 IP 變體、DNS 重新綁定等方式繞過)。應嚴格限制網址的 Scheme 只能是 http 或 https,並建立允許存取的外部網域白名單。
禁用不需要的通訊協定:
防範應用程式支援過多的協定(如 file://、gopher://、dict://),避免攻擊者利用其他協定去讀取本地檔案或攻擊內網 Redis。
網段與權限隔離:
確保 Web 伺服器所在的網路環境無法直接存取敏感的內網服務與雲端 Metadata 節點。