Learning Objectives
- 由封包內容判斷 HTTP 與 HTTPS 分別有哪些資訊可以被網路上的第三方看見
- 以預設拒絕與最小開放設計防火牆規則
- 說明有狀態防火牆如何處理回應流量,以及網路分段的作用
- 說明防火牆的限制,並指出哪些攻擊需要在應用程式層處理
網路上可見的資訊
資料從使用者的電腦到網站,會經過區域網路、無線基地台、路由器與多個網路服務供應商。沿途的設備都必須讀取封包的標頭才能轉送。若應用層沒有加密,內容也一併可見。
網路工程軌第 20 課介紹過封包的擷取與顯示過濾,本課以安全的角度重看同一件事。下方的封包是課程編寫的,主機與帳號皆為虛構,位址使用文件專用的保留範圍。
擷取封包需要權限。只有在自己負責或獲得授權的網路上才可以進行,未經同意擷取他人的通訊可能違反法律與校園網路規範(第 1 課)。本課不教掃描,也不討論如何探測他人的網路或主機。
本課的模擬環境。 封包檢視與防火牆規則都在瀏覽器內計算,沒有擷取任何真實的網路流量,也不會送出任何封包。
HTTP 與 HTTPS 的差異與限制
| 資訊 | HTTP | HTTPS |
|---|---|---|
| 來源與目的 IP、連接埠 | 可見 | 可見 |
| 資料量與時間 | 可見 | 可見(TLS 不隱藏長度) |
| DNS 查詢的名稱 | 可見 | 一般 DNS 查詢仍可見 |
| 網域名稱(TLS 交握的 SNI) | 不適用 | 通常可見,除非使用 Encrypted Client Hello |
| 網址路徑與查詢字串 | 可見 | 加密 |
| Cookie、表單、頁面內容 | 可見 | 加密 |
HTTPS 保護的是傳輸過程,不代表網站可信(第 4 課)。連到釣魚網站的連線同樣可以是 HTTPS;伺服器被入侵時,資料抵達後的處理也不受 TLS 保護。
防火牆的規則設計
防火牆依規則決定哪些連線可以通過。NIST SP 800-41 Rev. 1 指出,由於主機、網路、協定與應用程式不斷變動,預設拒絕(deny by default)比「允許所有未明確禁止的流量」更安全。規則設計有幾個原則:
- 最小開放:只開放業務需要的來源、目的與連接埠。規則越精確,影響越小
- 同時考慮進出兩個方向:管制對外連線可以降低資料外洩與 SSRF(第 12 課)的影響
- 定期檢視:不再需要的規則要移除,每一條規則都應該能說明用途
有狀態檢查(stateful inspection)會追蹤連線的狀態。放行一條新連線後,相關的回應封包可以依連線表通過,不需要另外開放用戶端的臨時連接埠。無狀態的封包過濾每次只看單一封包,要放行回應就需要範圍過大的規則。
網路分段(network segmentation)把不同用途的主機分到不同區域,區域之間的流量都要經過防火牆。對外提供服務的主機常放在 DMZ(demilitarized zone)。分段的目的是限制一台主機被入侵後的影響:網站主機只能連到資料庫的 3306 埠,便難以進一步接觸辦公室的電腦。入侵者在內部網路逐步擴大控制範圍的行為,稱為橫向移動(lateral movement)。
防火牆的限制
防火牆是重要的一層防護,但它不能解決所有問題:
| 情況 | 為什麼防火牆無法處理 |
|---|---|
| SQL 注入、XSS、CSRF | 流量走的是允許的連接埠,要在應用程式修補(第 7 至 9 課) |
| 加密的流量 | 一般防火牆無法讀取加密內容;NIST 也指出防火牆不理解的流量可能被錯誤處理 |
| 被竊取的合法憑證 | 使用者身分看起來正常,要靠多因素驗證與行為監控(第 5、16 課) |
| 內部人員或已入侵的主機 | 同一區域內的流量通常不經過邊界防火牆,所以需要分段與內部的存取控制 |
| 規則本身過於寬鬆 | 防火牆只會執行規則,不會判斷規則合理與否 |
Web 應用程式防火牆(WAF)能檢查應用層內容,但同樣不能取代程式的修補。防護的設計應該假設每一層都可能失效,這是第 7 課提過的縱深防禦。
重點整理
- HTTP 以明文傳送,網路上的第三方可以讀到帳號、密碼與 Cookie
- HTTPS 加密應用層內容,但 IP、連接埠、資料量與時間仍然可見,一般 DNS 查詢與 SNI 通常也可見
- HTTPS 不代表網站可信,只保護傳輸過程
- 防火牆規則採預設拒絕、最小開放,並同時考慮進出兩個方向
- 有狀態防火牆以連線表處理回應;無狀態過濾要放行回應就需要範圍過大的規則
- 網路分段限制被入侵後的影響範圍
- 防火牆無法處理走允許連接埠的應用層攻擊,也不能取代程式修補
- 擷取封包與測試網路只應在自己負責或獲得授權的環境進行
下一課討論日誌與偵測:如何由紀錄找出攻擊的痕跡。
小測驗
網站使用 HTTPS 後,下列何者仍然可能被網路上的第三方得知?
為什麼 NIST 建議以預設拒絕作為防火牆的政策?
網站主機被入侵後,防火牆規則只允許它連到資料庫的 3306 埠。這項分段設定的效果是什麼?
有狀態防火牆與無狀態封包過濾在處理回應流量時的主要差別是什麼?
下列哪一項問題最不可能靠調整防火牆規則解決?