網路代理自動發現協定

網路代理自動發現協定Web Proxy Auto-Discovery ProtocolWPAD)是一種客戶端使用DHCP和/或DNS發現方法來定位一個設定檔URL的方法。在檢測和下載設定檔後,它可以執行設定檔以測定特定URL應使用的代理。

歷史

WPAD協定僅概述了發現該檔案位置的機制,而最常被部署的檔案格式是最初由網景在1996年為Netscape Navigator 2.0設計的代理自動組態格式。[1]WPAD協定由一個包括Inktomi英語Inktomi Corporation微軟RealNetworks昇陽電腦(現為甲骨文公司)公司組成的聯盟起草。WPAD被文件化的網際網路草案已在1999年12月到期,[2]但WPAD仍被所有主要瀏覽器支援。[3][4]WPAD在Internet Explorer 5.0中被首次引入。

上下文

若要為組織中的所有瀏覽器提供相同的代理策略,而無需手動組態每個瀏覽器,需要使用下列兩種技術:

  • 代理自動組態(PAC)標準:建立和發布一個中央代理設定檔。細節詳見上述條目。
  • 網路代理自動發現協定(WPAD)標準:確保組織中的瀏覽器在非手動組態的情況下找到檔案。這是本條目的範疇。

WPAD標準定義了兩種備用方法,系統管理員可以用它們發布代理設定檔的位置,它們是使用動態主機設定協定(DHCP)或域名系統(DNS):

在取得第一個頁面前,實現有此方法的網頁瀏覽器給本地DHCP伺服器傳送一個DHCPINFORM查詢,並使用伺服器的回覆中的WPAD選項。如果DHCP伺服器沒有提供所需的資訊,則再使用DNS。假設使用者的電腦網路名稱為pc.department.branch.example.com,瀏覽器將依次嘗試下列URL,以期成功在客戶端的域中找到一個代理設定檔:

  • http://wpad.department.branch.example.com/wpad.dat
  • http://wpad.branch.example.com/wpad.dat
  • http://wpad.example.com/wpad.dat
  • http://wpad.com/wpad.dat(在不正確的實現中。參閱下面的「安全」章節)

(注意:上述例子不是實際「線上」的URL,其中的域名被採用保留域名「example.com」替代。)

在Windows上,如果DNS查詢不成功,那麼將使用本地鏈路多播名稱解析英語Link-Local Multicast Name Resolution(LLMNR)或NetBIOS。[5][6]

要點

DHCP比DNS有著更高的優先級:如果DHCP提供了WPAD URL,則不會進行DNS查詢。只能配合DHCPv4使用,WPAD-Option選項沒有在DHCPv6中定義。 應注意Firefox不支援DHCP,只進行DNS查詢,並且非Windows、ChromeOS平台以及版本號小於13的Chrome也是如此。[3][4]

當構造查詢封包時,DNS查詢將剔除域名的首個部分(客戶端的主機名)並以wpad取代。然後,它通過移除更多域名的部分來在階層中「向上移動」,直到它找到一個WPAD PAC檔案或者離開當前組織。

瀏覽器會猜測組織的邊界。這種猜測對於「company.com」或「university.edu」等是正確的,但對於「company.co.uk」出錯(見下面的「安全」章節)。

對於DNS查詢,設定檔的路徑始終為wpad.dat。對於DHCP協定,任何URL均可。由於傳統原因,PAC檔案通常名為proxy.pac(當然,此名稱的檔案將被WPAD DNS搜尋忽略)[來源請求]

設定檔的MIME類型必須為「application/x-ns-proxy-autoconfig」。參見代理自動組態了解更多資訊。

Internet Explorer和Konqueror是目前唯一同時支援DHCP和DNS方法的瀏覽器;大多數主要瀏覽器都支援DNS方法。[7]

前提條件

為使WPAD生效,需要具備幾個條件:

  • 為使用DHCP,伺服器必須組態為提供「site-local」選項252(「auto-proxy-config」及字串值「http://example.com/wpad.dat」(無須引號),其中「example.com」是網頁伺服器的位址(無論點分十進制格式的IP位址或一個DNS名稱)。
  • 為使用僅DNS模式,需要一個主機名為WPAD的DNS專案。
  • 在WPAD位址上的主機必須可以提供網頁
  • 在這兩種情況下,網頁伺服器必須組態為提供MIME類型為「application/x-ns-proxy-autoconfig」的WPAD檔案。
  • 如果使用了DNS方法,名為wpad.dat的檔案必須位於WPAD網頁伺服器的根目錄
  • PAC檔案的細節見代理自動組態條目。
  • 在一個虛擬主機環境中組態WPAD伺服器時請小心使用。在使用自動代理檢測時,Internet Explorer 6及更早版本中的WinHTTP和WinINET會傳送「Host: <IP address>」頭,在IE7+和Firefox中則傳送「Host: wpad」頭。因此,建議將wpad.dat檔案代管在預設虛擬主機而非其自身下。
  • Internet Explorer版本6.0.2900.2180.xpsp_sp2_rtm會向網頁伺服器請求「wpad.da」而不是「wpad.dat」。
  • 如果您使用Windows Server 2003(及更新版本)作為您的DNS伺服器,您可能必須禁用DNS伺服器全域查詢阻止列表(DNS Server Global Query Block List)或修改登錄檔以編輯阻止查詢的列表。[8][9]

安全

在極大簡化組織中瀏覽器組態的同時,WPAD協定必須被小心使用:簡單的疏失就可能留下漏洞,攻擊者可以篡改使用者瀏覽器中顯示的內容:

  • 網路內部的攻擊者可以建立一個DHCP伺服器,提供一個惡意PAC指令碼的網址。
  • 如果網路是「company.co.uk」並且http://wpad.company.co.uk/wpad.dat檔案未提供,瀏覽器將請求http://wpad.co.uk/wpad.dat。瀏覽器不會測定這是否仍處在公司內部。參見http://wpad.com/ (頁面存檔備份,存於網際網路檔案館)上的例子。
  • 同樣的方法已被http://wpad.org.uk使用。它提供一個wpad.dat檔案從而將使用者的所有流量重新導向到一個網際網路拍賣網站。
  • 實施DNS劫持的ISP可能阻斷WPAD協定的DNS查詢,從而將使用者引導至非代理伺服器的主機。
  • 洩露的WPAD查詢可能導致與內部網路命名方案的域名衝突。如果攻擊者註冊一個域來回答WPAD查詢並組態一個有效的代理,這有可能進行跨越網際網路的中間人攻擊[10]

通過WPAD檔案,攻擊者可以引導使用者的瀏覽器到他們自己的代理,攔截和修改所有WWW流量。儘管2005年對Windows WPAD的處理應用了一個簡單的修復,但它只解決了.com域的問題。在Kiwicon英語Kiwicon的一次演講表示,世界上的許多地方仍有極其脆弱的安全漏洞,在紐西蘭為測試目的註冊的一個範例域名在幾秒內收到了來自全國各地的代理請求。幾個wpad.tld域名(包括COM, NET, ORG和US)現在指向客戶端環回位址以幫助防範此安全漏洞,雖然還有一些名稱仍是註冊狀態(如wpad.co.uk)。

因此,管理員應確保使用者可以信任組織中的所有DHCP伺服器,並且組織內的所有可能的wpad域都在控制之下。此外,如果沒有為組織組態wpad域,使用者將轉向域階層中的下一個(更高層級)wpad站點並使用其組態。這允許能在頂級域註冊wpad子域名的人將自己的代理設為對所有流量或特定站點提供服務,從而施行對特定國家或區域的大範圍中間人攻擊

除了上述「陷阱」,WPAD方法是取得一個JavaScript檔案並在所有使用者瀏覽器上執行,即使使用者已禁用檢視網頁時使用的JavaScript。

參考資料

  1. ^ Navigator Proxy Auto-Config File Format. Netscape Navigator Documentation. March 1996 [2015-02-10]. (原始內容存檔於2007-03-07). 
  2. ^ Gauthier, Paul; Josh Cohen; Martin Dunsmuir; Charles Perkins. Web Proxy Auto-Discovery Protocol (INTERNET-DRAFT). IETF. 1999-07-28 [2015-02-10]. (原始內容存檔於2012-04-23). 
  3. ^ 3.0 3.1 Chromium #18575: Non-Windows platforms: WPAD (proxy autodetect discovery) does not test DHCP. 2009-08-05 [2015-02-10]. (原始內容存檔於2015-09-12).  參照錯誤:帶有name屬性「chrome」的<ref>標籤用不同內容定義了多次
  4. ^ 4.0 4.1 Firefox #356831 - Proxy autodiscovery doesn't check DHCP (option 252. 2006-10-16 [2015-02-10]. (原始內容存檔於2021-04-14).  參照錯誤:帶有name屬性「firefox」的<ref>標籤用不同內容定義了多次
  5. ^ Troubleshooting Web Proxy Auto Discovery (WPAD) issues. GFI Software英語GFI Software. [2015-02-10]. (原始內容存檔於2021-04-14). 
  6. ^ Hjelmvik, Erik. WPAD Man in the Middle. 2012-07-17 [2015-02-10]. (原始內容存檔於2020-08-14). 
  7. ^ Konqueror: Automatic Proxy Discovery. KDE. 2013-05-20 [2015-02-10]. (原始內容存檔於2015-02-11). 
  8. ^ King, Michael. WPAD does not resolve in DNS. 2010-02-17 [2015-02-10]. (原始內容存檔於2021-04-14). 
  9. ^ Removing WPAD from DNS block list. Microsoft TechNet. [2015-02-10]. (原始內容存檔於2017-02-14). 
  10. ^ 存档副本. [2016-12-23]. (原始內容存檔於2020-06-18). 

拓展閱讀