Information Leaks#
概述#
駭客經常利用已公開的安全漏洞,特別是 zero-day vulnerabilities(零日漏洞)——在過去 24 小時內公開的安全缺陷。當某個軟體元件的零日漏洞被發布時,駭客會立即掃描運行該漏洞軟體的伺服器來利用這個安全漏洞。
如果你無意中透露了伺服器的技術資訊,就等於讓自己成為攻擊目標。確保你的 web server 不會洩漏你正在使用的軟體堆疊類型的資訊。
本章介紹 web server 洩漏技術選擇資訊的常見方式,以及如何緩解這些風險。
緩解措施#
緩解 1:停用洩漏資訊的 Server Headers#
確保在 web server 配置中停用任何揭露伺服器技術、語言和版本的 HTTP response headers。
- 預設情況下,web server 通常會在每個回應中發送
Serverheader,描述伺服器端運行的軟體 - 這對 web server 廠商來說是很好的廣告,但瀏覽器根本不使用它
- 它只是告訴攻擊者可以探測哪些漏洞
確保你的 web server 配置停用此
Serverheader。如果你想調皮一點,甚至可以讓它回報錯誤的 web server 技術!
緩解 2:使用 Clean URLs#
設計網站時,避免在 URL 中使用會洩漏資訊的檔案副檔名,例如 .php、.asp 和 .jsp。
- 改為實作 clean URLs——不會洩漏實作細節的 URL
- 帶有檔案副檔名的 URL 在舊版 web server 中很常見,這些 URL 明確引用了模板檔案名稱
- 確保避免使用這類副檔名
緩解 3:使用通用的 Cookie 參數名稱#
Web server 用來儲存 session state 的 cookie 名稱經常會揭露你的 server-side 技術。
- 例如,Java web server 通常將 session ID 儲存在名為
JSESSIONID的 cookie 中 - 攻擊者可以檢查這類 session cookie 名稱來識別伺服器類型
- 駭客工具(如 Metasploit)會檢查 session cookie 的名稱來偵測並嘗試入侵特定類型的伺服器
修改你的配置,為 session cookie 使用通用名稱(例如
session),確保 cookie 中不包含任何暗示技術堆疊的線索。
緩解 4:停用 Client-Side Error Reporting#
大多數 web server 支援 client-side error reporting,允許伺服器在 HTML 錯誤頁面中印出 stack traces 和路由資訊。
- 在測試環境中對除錯非常有用
- 但 stack traces 和錯誤日誌也會告訴攻擊者你正在使用哪些模組或函式庫
- 資料存取層發生的錯誤甚至可能揭露資料庫結構的細節
你必須在正式環境中停用 client-side error reporting。錯誤頁面應該完全通用,最多告訴使用者發生了意外錯誤且有人在處理。詳細的錯誤報告應保留在 production logs 和只有管理員能存取的錯誤報告工具中。
# Full error reports are disabled.
config.consider_all_requests_local = false緩解 5:Minify 或 Obfuscate 你的 JavaScript 檔案#
許多開發者在部署前會預處理 JavaScript 程式碼:
- Minifier:接受 JavaScript 程式碼,輸出功能相同但高度壓縮的檔案,移除所有多餘字元並用更短的語句替換部分程式碼
- Obfuscator:用簡短、無意義的 token 替換方法和函式名稱,刻意讓程式碼更難閱讀
開發者通常為了效能而 minify 或 obfuscate JavaScript(較小的檔案在瀏覽器中載入更快),但這也有一個正面的安全副作用:讓攻擊者更難偵測你正在使用哪些 JavaScript 函式庫。
研究人員或攻擊者會定期發現流行 JavaScript 函式庫中的安全漏洞。讓你使用的函式庫更難被偵測,可以在漏洞被發現時為你爭取更多緩衝時間。
緩解 6:清理你的 Client-Side 檔案#
- 進行 code reviews 並使用靜態分析工具,確保敏感資料不會出現在註解中,或死碼不會被傳送到客戶端
- 開發者容易在 HTML 檔案、template 檔案或 JavaScript 檔案中留下分享過多資訊的註解
- 駭客工具可以輕易爬取你的網站並提取你不小心留下的任何註解
- 駭客經常使用這種技術掃描註解中意外留下的私有 IP 位址
這通常是駭客嘗試入侵你網站時的第一個入口。
持續關注 Security Advisories#
即使你鎖定了所有安全設定,老練的駭客仍然可以對你使用的技術做出合理猜測:
- Web server 在回應特定邊緣情況時有明顯的行為特徵(例如故意損壞的 HTTP 請求或異常的 HTTP verbs)
- 駭客可以利用這些獨特的 server-technology fingerprints 來識別 server-side 技術堆疊
- 即使遵循了資訊洩漏的最佳實踐,仍然重要的是持續關注安全公告,並及時為你使用的技術部署修補程式
總結#
- 確保 web server 不會洩漏你正在運行的軟體堆疊類型的資訊
- 停用 telltale headers,使用通用的 session cookie 名稱
- 使用不包含檔案副檔名的 clean URLs
- Minify 或 obfuscate JavaScript 讓第三方函式庫更難被偵測
- 在正式環境關閉 verbose 的 client-side error reporting
- 清理 template 檔案和 HTML 中洩漏過多資訊的註解
- 持續關注安全公告,及時部署修補程式