安全性

管理 Windows Vista 防火牆

Jesper M. Johansson

 

簡介:

  • 規則類型與案例
  • 防火牆設定檔
  • 網域隔離規則
  • 輸出篩選的問題

不久之前我在部落格裡寫了一篇關於 Windows Vista 防火牆的文章。那篇文章僅僅提及一些不錯的功能,關於部署建議倒是著墨不多。

本文我將詳細說明 Windows Vista® 防火牆中專為簡化企業管理而設計的功能,並且針對利用這項功能來簡化工作、以及確保使用者安全這兩點,提供一些建議。

隨著 Windows Vista SP1 的推出,一般預料企業也會跟進部署 Windows Vista (通常企業會等到第一個 Service Pack 發行之後,再移轉到新的作業系統)。如果您是一位為了企業環境而認真考慮 Windows Vista 的 IT 專業人員,那麼就該好好研究一下防火牆。一旦瞭解 Windows Vista 防火牆的功能之後,也許您就會重新協議協力廠商安全性套件的合約,將防火牆從套件中移除。

Windows 防火牆的今與昔

雖然原版 Windows® XP 的防火牆仍有很多有待改進的地方,不過已經足夠應付當時商務主機防火牆的安全性功能需求,所以並未再做任何新增或改革的動作。

但是到了 Windows XP SP2 之後,防火牆已經全然改貌,此時的防火牆完全是針對簡化企業管理而設計。Windows XP SP2 的防火牆具有輕量、有效、反入侵和集中管理等特性,相當引人注目。不過最吸引人的可能還是:Windows XP SP2 防火牆能夠在開機時保護系統。

最後一點可以說是最關鍵的一點。過去我見過許多系統在開機時中毒,即使已經開啟防火牆了還是無法悻免於難。事實上,在爆破手 (Blaster) 瘟疫流行的高峰期,攻擊率高達每四分鐘一次。換言之,如果您沒有做任何保護措施,就讓電腦暴露在網際網路中,它的中毒機率大約是每四分鐘一次。而如果您所信賴的防火牆未能在開機時保護系統,那麼在重新開機時,12 部系統裡面就有一部會中毒。這些數字在在鞭策著 Microsoft 做出可以確保開機時保護系統的 Windows XP SP2 防火牆。

Windows Vista 的防火牆還接受過一次徹底改造。從管理角度來看,最明顯的改變是它把網際網路通訊協定安全性 (IPsec) 和防火牆的管理介面合而為一。這是一項深富邏輯性的改變。IPsec 和防火牆的目的,都是要把不准通關的東西封鎖在外。兩者不同之處在於,防火牆中負責定義哪些東西獲准通關的參數不夠嚴密,而 IPsec 中封鎖或接受大量位址空間的程序卻是相當麻煩。

自從把兩種功能共同放在一個管理介面之後,系統管理員就可以輕鬆使用它們,而不必擔心哪些部分該套用 IPsec 規則,哪些部分該遵守防火牆篩選條件。也就是說,您現在只有一個系統網路攻擊面的檢視,而這一點可以把犯錯的風險降到最低。

Windows Vista 的 SP1 在防火牆功能當中新增了一些可靠性增強功能,同時也新增了可用於 IPsec 的新演算法,其中最值得注意當屬 Suite B 演算法。這是一組與加密有關的演算法,其中包含進階加密系統 (AES)、Elliptic Curve Cryptography (ECC) 以及安全雜湊演算法 (SHA) 256 和 384。

但最重要的是,Service Pack 1 多了網路存取保護 (NAP) 的支援。NAP 是一種原則強制工具,可以在受管理和未遭入侵的用戶端獲准連接網路之前,利用最新的安全性原則、更新和反惡意程式碼定義,確保它們保持最新狀態。雖然 NAP 無法阻止惡意主機連接網路,不過只要所有受管理的主機沒有受到主動侵害,就可以確保它們完全合格。

Windows Vista 防火牆又稱為「具有進階安全性的 Windows 防火牆」,同時它也是 Windows Server® 2008 的防火牆。Windows Vista 防火牆所有的功能都可以從遠端管理,而且可以利用群組原則進行跨網路設定。

規則類型與案例

管理介面結合防火牆和 IPsec 兩種功能之後,規則類型也增為兩種:方向規則和連線規則。方向規則是標準的防火牆規則,負責定義哪一個流量獲准前往適當的方向。而連線規則負責為電腦之間的連線定義保護參數。如果要畫出關係圖的話,方向規則比較類似您所熟悉的舊版防火牆規則,而連線規則比較類似與 Windows XP SP2 防火牆搭配使用的 IPsec 規則。

許多相當有趣的情況,都是因為把防火牆和 IPsec 結合在同一個介面而產生。舉個例說,將網路上的系統彼此隔離,是目前最重要的安全性觀念。Microsoft 稱之為「伺服器和網域隔離」。

伺服器和網域隔離就同時採用了 IPsec 和防火牆兩種功能。新的防火牆管理介面體認到這一點,於是也加入了隔離規則專屬的功能。如果您要根據來源系統或目的地系統的屬性 (例如網域成員資格) 來限制連線,就很適合使用它們。

[圖 1] 所示,「新增連線安全性規則精靈」一開始會詢問您要建立哪一種類型的規則。如果您選擇 [隔離],精靈就會預先設定幾個適合隔離規則使用的設定。

[圖 1] 使用「新增連線安全性規則精靈」來建立隔離規則

[圖 1]** 使用「新增連線安全性規則精靈」來建立隔離規則 **(按一下影像可放大檢視)

也許您有注意到 [圖 1] 當中的隔離規則提到健康狀況。伺服器和網域隔離所用的規則,其實與您在 NAP 所用的規則一樣。

有些類型的流量是無法強制驗證的。比方說,您可能不希望對 DNS 解析進行驗證,而對於這類流量的端點,您需要的正是豁免驗證規則。豁免驗證規則正如其名 — 可以讓流量免受 IPsec 需求的限制。

而伺服器對伺服器規則就有點名不符實了。這個規則較常用於伺服器,但也可以用於用戶端。伺服器對伺服器規則只要求驗證連線。這與隔離規則不同,隔離規則不只要求驗證,也要求滿足其他額外的條件,例如網域成員資格或健康狀況。

通道規則主要是定義閘道之間的網站間虛擬私人網路 (VPN) 和通道。通道規則鮮少與 Windows Vista 一起使用,因為您不可能把 Windows Vista 用在閘道中。您可以建立完全自訂的規則,這可讓您自訂規則的每一個參數。

規則排序

規則排序乍看之下有點複雜。這是因為要瞭解規則排序,必須先忘記排序。與其說規則排序是在進行排序,不如說它是比對選擇。讓我們拿輸入流量作個例子吧。只要輸入流量不符合任何接受它的規則,這樣的輸入流量在預設情況下就會被封鎖。您可能會認為這是一種「優先考慮允許規則」的排序,但是這種假設是不正確的。如果某特定封包同時發現了允許規則和封鎖規則,獲勝的是封鎖規則。簡單來說,比對作業是指:

  1. 封鎖規則。如果封包或連線符合其中一項,它會被捨棄。
  2. 允許規則。如果封包或連線符合其中一項,它會被接受。
  3. 預設的方向設定檔行為。如果不符合任何一個封鎖規則或允許規則,則會根據指定為該設定檔中該方向流量預設值的行為,而決定如何對待流量。如果所有設定檔都是輸入方向,則封鎖預設設定中的流量。如果是預設的輸出方向,則接受預設設定中的流量。

比對程序是由已驗證的略過 (IPsec) 規則負責規範。使用該類型的規則時,無論已驗證的流量是否符合其他任何規則,只要符合該規則的其他參數,都會受到核准。已驗證的略過規則,是指勾選了 [覆寫封鎖規則] 選項的方向規則,如 [圖 2] 所示。優先考慮它們,是為了讓已驗證的流量一律都能到達系統。這就是容許您輕鬆接受來自已驗證主機的流量,卻封鎖其他人流量的關鍵所在。在排序時,您可以把這個規則視為 0。因此,完整的規則排序清單如下所示:

[圖 2] 勾選 [覆寫封鎖規則] 選項,設定已驗證的略過規則

[圖 2]** 勾選 [覆寫封鎖規則] 選項,設定已驗證的略過規則 **(按一下影像可放大檢視)

0. 已驗證的略過規則

1. 封鎖規則

2. 允許規則

3. 預設的方向設定檔行為

每一個符合流量模式的類別當中是否含有多個規則,其實沒有多大關係。只要有任何規則找到相符的流量,規則處理就告停止。

公用、私用以及在網域上

網路資源

新的防火牆擁有三個設定檔:公用、私用和網域。而 Windows XP SP2 防火牆則擁有兩個網路設定檔:標準和網域。一旦電腦找到網域控制站,就會自動啟動網域設定檔。若找不到,則在 Windows XP 中則會用標準設定檔。這個方法為安全性系統管理員提供了強大的功能,他可以在電腦漫遊時完全鎖定電腦,但在電腦位處公司網路的同時允許所有必要的遠端管理功能。但是這個方法對於某些使用者來說會產生一些問題,尤其是那些家裡有個人網路的使用者更是。因為如果系統無法連接網域控制站,就一定會使用標準設定檔,因此系統會從使用者家裡鎖定起來。

而 Windows Vista 所包含的新私人設定檔,可以協助您解決這個問題。現在當您將系統連接到新網路時,它會先問您那個網路是公用 (就是舊標準設定檔的新名稱) 還是私用,然後再妥善設定系統。每當系統連接到那個網路時,系統都會根據網路上基礎結構伺服器呈現給它的網路參數而記住它。雖然這並非萬無一失的做法,不過因為它容許更多網路接受更妥善的鎖定,所以多少還是有點幫助。

另外,用來偵測系統是否在網域上的偵測邏輯,也比舊版更好。因此現在轉換作業比以前更快、更可靠,而且當實際位於網域上時,猶豫應該使用公用或私用設定檔的系統數量也沒那麼多了。

您可以將規則連結到某種特定類型的網路,以防止系統自發性的提供太多資訊,並且防止它們連接到不受信任網路上的系統。這就是防火牆和 IPsec 的整合開始有效發揮作用的地方。

您可以使用這些新的規則,提供一些之前不可能實施的限制。比方說,過去多年來入侵者不斷引誘使用者,將 Windows 網路用的伺服器訊息區 (SMB) 連接到不受信任的主機,以強迫驗證序列授予他們挑戰-回應組合來破解密碼。過去他們也會利用這類攻擊,將驗證降級為純文字驗證,或者將使用者的挑戰-回應組合反射回原始電腦。前者的技術早已在多年前破解了,後者的技術則隨著 Windows XP SP2 一起移轉,但是別忘了,自發性的挑戰-回應組合還是有欠周詳。

為了防止這種情況發生,您可以使用 Windows Vista 防火牆的另一種新功能 — 輸出篩選。比方說,系統管理員可以決定封鎖公用設定檔中所有的輸出 SMB 連線 (那些在連接埠 TCP 135、139、445 和 UDP 137、138、445 終止的連線)。這麼一來,就可以防止有心人士在引誘攻擊中,利用您的系統取得挑戰-回應組合,或者存取網際網路上不受信任的 Windows 檔案共用 ─ 至少不會那麼容易。

同樣的,這也不是萬無一失的做法。比方說,如果系統已遭入侵,這個規則就無法阻止系統對外通訊,因為攻擊者只要停用規則,大家就沒轍了。不過它倒是可以保護行為正常但是有曝光可能的系統。

另外您必須注意的是,就像在 Windows XP SP2 一樣,Windows Vista 和 Windows Server 2008 一次也只能有一個作用中的設定檔。如果系統中有兩個即時網際網路介面,其中一個是在網域上,另一個是在公用網路上,那麼兩者都會套用公用防火牆設定檔,這是因為套用的一定是限制最嚴格的設定檔。正如您所猜測,公用設定檔的限制比私用設定檔更多,而私用設定檔的限制又比網域設定檔更多。因此請注意,輸出 SMB 封鎖規則可能會中斷許多 VPN 連線的流量。

當電腦在公用或私用網路上時,若要讓流量透過 VPN 連線傳送,可以建立專門套用到 VPN 介面的方向規則。不過,VPN 介面必須由 Windows 辨識才行。如果不是使用 Microsoft® 路由及遠端存取服務 VPN 伺服器,請先測試這項功能之後,再廣泛部署它。這個問題主要是發生在通往用戶端的輸入流量,以及您所建立的任何自訂輸出規則。

建置防火牆規則

在新防火牆當中建置防火牆規則,遠比在舊防火牆容易。「新增規則精靈」(如 [圖 3] 所示) 可讓您定義所有常用類型的規則,其中包括針對特定服務而預先定義的規則。

[圖 3] 「新增規則精靈」中預先定義的規則。

[圖 3]** 「新增規則精靈」中預先定義的規則。 **(按一下影像可放大檢視)

預先定義的規則相當重要。伺服器隔離的主要功能是限制服務的使用對象,只供那些需要使用它們的系統使用。雖然效果有限,不過您還是可以在伺服器產品上使用 Windows「資訊安全設定精靈」(SCW),讓這項工作更加容易 (我曾在 2008 年 3 月號的《TechNet Magazine》討論過 SCW)。

但是用戶端版的 Windows 一直到現在才具有類似的功能。當您使用預先定義的規則類型時,困難的工作部分 (也就是決定服務要使用哪些端點) 多半都交由它幫您完成了。防火牆不只能夠感知應用程式 (因為它知道「iSCSI 服務」代表哪一個程式);同時也包含描述特定功能的預先定義規則,因此您可以專心注意規則中需要涵蓋哪些電腦。雖然這仍是困難且耗時的工作,但至少是您環境特有的工作。

另外還有一個自訂規則 (被 [圖 3] 所示的下拉式清單遮住了),可以提供您所有驗證防火牆能夠提供的彈性。比方說,如果您希望規則只接受 IPsec 加密的流量,請在 [圖 2] 所示的精靈的 [活動] 頁選取這個選項,只接受安全連線。

您在選取這個選項的同時,也開啟了加密功能。如果您將選項保留空白,流量便會使用 ESP-NULL (具有 NULL 金鑰的封裝安全承載)。我們建議您以這種方式使用 IPsec 進行驗證。由於流量可以毫無阻礙的周遊網路,因此它也容許大部分的網路管理工具保持運作。如果您想要加密的話,只要勾選這個方塊即可。

在許多情況下,為網路流量加密,還不如拒絕來自惡意主機的流量。因為將網路流量加密,充其量只能封鎖已經取得網路本身存取權的壞蛋,不讓他看到封包內容。而要求驗證則可以防止您傳送封包,進而防止您受到攻擊。當然有時候非得進行網路層級加密不可,但有時候其實只需要驗證就行了。

建置網域隔離規則

通常在大部分的環境中,您都會希望只有數量有限的電腦能夠傳送流量到工作站。至少所有的工作站都應該以網域隔離規則加以設定。這項作業在 Windows XP 是有點複雜,但在 Windows Vista 卻很簡單。

首先,請開啟您所選擇的管理工具,選取 [連線安全性規則] 節點。接著在該節點按一下滑鼠右鍵,選取 [新增規則],這時候畫面會出現 [圖 1] 所示的對話方塊。請選取 [隔離規則],然後按 [下一步]。接著您得選擇要不要強制實施這項規則。如果是在工作站,您多半會要求驗證輸入流量。這是為了防止任何未加入網域的電腦傳送流量到工作站。但是,為了向基礎結構服務要求服務,系統必須容許部分輸出流量自由通行。因此最好的做法就是要求驗證輸入連線,以及要求驗證輸出連線。

接下來就是選擇驗證方法。預設選擇就稱為「預設值」 — 這樣的標題實在沒什麼幫助。您可以在每一部電腦的 IPsec 內容,設定預設的驗證方法 (存取方式是在 [具有進階安全性的 Windows 防火牆] 節點按一下滑鼠右鍵,選取內容)。預設的驗證方法一定是 Kerberos,因為這是最簡單也是最安全的方法。但是為了清楚起見,我建議您在建置規則時選擇它。在一般情況下,您只要驗證電腦就行了,不必連同使用者一起驗證。如果兩者都要求驗證,可能無法接受某些類型的管理流量,例如匿名傳輸的 SNMP 流量。

選完驗證方法之後,只要再選擇您希望規則能夠用在哪些設定檔就行了。因為這個規則是套用在加入網域的電腦上,可以呈現 Kerberos 票證,因此無需在私用或公用設定檔開這個洞。接下來只要再儲存規則,就大功告成了。

現在,基本隔離規則不再像以前那麼複雜了。但是為了充分利用 IPsec 的隔離威力,您必須實作伺服器隔離,即使在工作站上也不例外。這麼做是為了不讓工作站接聽其他用戶端,而只讓它們回應適當的管理工作站。想想看光是讓用戶端系統拒絕接聽其他用戶端,就可以減輕多少因為各種惡意程式碼突圍所造成的影響。

以指令碼編寫防火牆

新的防火牆附隨一個相當好用的 API,可讓您以指令碼編寫部署和評量。當然在理想情況下,最好盡量使用群組原則來進行部署,但是群組原則不見得隨時都能使用,因此一定要利用適當的 API-set 來設定防火牆才行。API 是以 INetFWPolicy2 分類成組。雖然軟體開發套件和 MSDN® Library 含有更完整的使用方法詳細資訊,但是只有少數範例可以說明這一點。

其中一個常見範例是需要判斷是否要開啟一組規則。比方說,假設某應用程式或系統管理員需要判斷是否能夠接受來自系統的檔案及印表機共用,他可以透過 INetFWPolicy2::IsRuleGroupCurrentlyEnabled 完成。[圖 4] 所提供的 VBScript 範例,就是在說明這項功能。

Figure 4 使用 INetFWPolicy2::IsRuleGroupCurrentlyEnabled

' Create the FwPolicy2 object.
Dim fwPolicy2
Set fwPolicy2 = CreateObject("HNetCfg.FwPolicy2")

' Get the Rules object
Dim RulesObject
Set RulesObject = fwPolicy2.Rules

'Create a profile object
Dim CurrentProfile
CurrentProfile = fwPolicy2.CurrentProfileTypes

'Check whether File and Printer Sharing is on, and turn it on if not
if fwPolicy2.IsRuleGroupEnabled(CurrentProfile, "File and Printer Sharing") <> TRUE then
    fwPolicy2.EnableRuleGroup CurrentProfile, "File and Printer Sharing", TRUE
end if

假設現在檔案和印表機共用是在關閉狀態下,而您需要開啟它,那麼首要任務就是確保開啟動作能夠順利完成,而且不會被群組原則覆寫。完成它的就是 INetFWPolicy2::LocalPolicyModifyState API。下面就是可以填上實際程式碼的概略大綱:

Const NET_FW_MODIFY_STATE_OK = 0
Const NET_FW_MODIFY_STATE_GP_OVERRIDE = 1
Const NET_FW_MODIFY_STATE_NO_EXCEPTIONS = 2

Dim PolicyModifyState
PolicyModifyState = fwPolicy2.LocalPolicyModifyState
Select Case PolicyModifyState
  Case NET_FW_MODIFY_STATE_OK
  Case NET_FW_MODIFY_STATE_GP_OVERRIDE
  Case NET_FW_MODIFY_STATE_NO_EXCEPTIONS
End Select

命令列和介面類型

沒有適當的命令列進行管理,防火牆就不算完整。Netsh 下面還有一個稱為 advfirewall 的子內容。advfirewall 內容可讓您透過命令列存取在圖形化 UI 內所能做的一切。比方說,如果您要在連接埠 445 實作輸出區塊,可以從已提高權限的命令提示字元執行下述命令:

netsh advfirewall firewall add rule name="Block CIFS Out in the Public profile"
dir=out action=block enable=yes profile=public
localIP=any remoteIP=any remoteport=445 protocol=TCP interfacetype=any

接著再執行同一個命令,把 TCP 換成 UDP,完成下述區塊。這樣就完成規則實作了。

防火牆中有一個很酷的功能,就是您能根據網路介面類型來設定規則。記得前面提過嗎?有的規則可能會影響 VPN 連線。但只要 Windows 認出該介面是 VPN 介面,您就可以使用這類型的規則,免除該介面上的流量:

netsh advfirewall firewall add rule name="Allow CIFS on VPN interfaces"
dir=out action=allow enable=yes profile=public localIP=any
remoteIP=any remoteport=445 protocol=TCP interfacetype=RAS

您也可以在 GUI 執行這項作業,但是必須等到規則建立之後才行。接著請在規則上面按一下滑鼠右鍵,選取 [內容],然後按 [進階] 索引標籤。這時候畫面會出現一個 [介面類型] 區段,您只要在這裡選出正確的介面類型就行了。

輸出篩選

Windows XP SP2 防火牆中缺乏輸出篩選,而被視為內建式防火牆不足以保護安全的主要原因。過去不知道有多少篇文章,把 Windows XP SP2 防火牆不安全完全歸咎於缺乏輸出篩選 (其實真正的原因是 Windows XP 上沒有一個防火牆可以安全提供輸出篩選)。

Windows XP 根本沒有一種基本功能,可以將輸出篩選從障礙物 (或者是我之前用過的原則強制工具) 變成有用的安全性功能。但是 Windows Vista 有。因此,新的防火牆當然可以利用這項功能。在預設的情況下,會封鎖大部分的輸入流量,並允許大部分的輸出流量。

根據預設值,新 Windows Vista 防火牆中的輸出篩選,只會封鎖來自服務的非必要流量 。其實這麼做就足以防止提供輸出篩選器的主機遭到入侵,因此在 Windows XP 進行這個動作根本毫無意義。

Windows Vista 中的服務可以利用限制嚴格的權杖執行。基本上,每一項服務都有專屬於它自己的安全性識別元 (SID)。您可以利用這個服務 SID 來限制資源 (例如,網路連接埠) 的存取權。這個與我們之前在研究限制傳送給使用者的流量時所看到的功能一樣。也就是說,即使您以 NetworkService 的身分執行兩個服務 ,也無法管理彼此的處理程序,不過您可以設定防火牆,只容許其中一個向外通訊。如果被封鎖的服務遭到入侵,它也無法劫持已接受的服務,並且使用已接受的連接埠對外通訊,因為這個連接埠會受到服務 SID 的限制。

這是 Windows Vista 另一項很棒的安全性新功能,新的防火牆就是利用它,以輸出防火牆篩選實際提供真正的安全性價值。

事實上,新防火牆預設會在服務 SID 進行防火牆篩選,但是卻沒有 GUI 可以設定它。規則是在 HKLM\System\CurrentControlSet\services\sharedaccess\parameters\firewallpolicy\RestrictedServices 登錄機碼中預先定義的。不過,您在手動修改機碼時必須非常小心,因為它並沒有受到支援。

防火牆篩選能夠提供多少安全性?

安全性社群一直對安全性存有一個極大的誤解,就是安全性價值是由防火牆篩選提供。到目前為止,我曾經提過兩個經由輸出篩選提供安全性的案例,但是這兩個案例所用的都是 Windows Vista 之前沒有的新功能。儘管如此,一般人仍然認為輸出篩選整體來說相當不錯,因此在決定購買防火牆時,這一點是他們的主要考慮因素。

諷刺的是,許多公司是以輸出篩選功能主導購買決策,但是在實作防火牆之後,輸出篩選卻根本派不上用場。這種誤導徒令資訊安全性小組浪費不少時間和精力。但是有時候採取一些與安全性有關的行動,讓大家得到心理上的安慰,反而比實際分析真正的威脅更能主導人們的決策。決策常常是由人們對於這類型「安全性劇場」(security theater) 的需要所主導,而不是由事實真相主導 (雖然後者才是正確的做法)。

這是相當簡單的輸出篩選真相,但是提倡者卻沒有把這一點考慮進去。主機防火牆廠商最常提出的論點是,如果系統遭到入侵,無論是受到蠕蟲還是互動式惡意使用者的侵害,輸出篩選都會阻止蠕蟲傳染給其他系統,或者阻止入侵者對外通訊。其實不然。

事實上,在其他條件不變的情況下,輸出篩選都會阻止一些過去曾經出現的惡意程式碼。但是如果 Windows XP 已經附有輸出篩選,那麼我們到目前為止所看到的蠕蟲,很可能早就將它關閉或是迴避。

在 Windows XP (和舊版的 Windows) 當中,任何假冒服務身分執行的蠕蟲 (和所有我們提到的常見蠕蟲也都是冒用服務身分執行) 都可能會這麼做。如果它們不這麼做,唯一的理由就是根本沒有使用輸出篩選的環境,因此也不必停用它。在互動式攻擊當中,攻擊者可以隨心所欲的迴避輸出篩選。如果攻擊者有能力執行任意程式碼,也一定很容易迴避輸出篩選。但在必要時,攻擊者也可以引誘使用者迴避輸出篩選器。

迴避輸出主機防火牆篩選器的方法有好幾種,這得視實際攻擊的案例而定。最簡單的方法是「商請」一位權限過大的使用者幫您執行。現在有太多環境的使用者仍以系統管理員的身分執行,因此那些使用者也有權隨心所欲的迴避安全性原則。攻擊者只要提出兩個選項,一是無形和非直接的安全性利益,另一個是使用者認為價值較高的東西 (例如,馬英久娃娃),然後請使用者擇其一就行了。

使用者因為看多了這類對話方塊,常常不假思索就按下去,根本沒有仔細瞭解上面寫的是什麼。這是輸出篩選的第一個問題。如果它提供的一個奬品是安全性,另一個是當今最夯的流行產物 (像是馬英久娃娃),勝出的一定是馬英久娃娃,因為大部分要求使用者做出安全性決策的對話方塊,都缺乏任何足以讓使用者做出安全決定的參考資訊。

但是要提供附上充分決策參考資訊的對話方塊,請使用者做出安全性決策,聽來容易做來難,因為安全性產品 (例如,防火牆) 不僅需要瞭解連接埠、通訊協定以及發出要求的應用程式,還要瞭解要求的真正目的,以及要求對使用者的意義。這些資訊很難以程式設計的方式取得。舉個例說,Microsoft Word 想要建立輸出連線,並不比 Word 想要以該連線做什麼來得有趣,。

我們需要做的是減少 (而不是增加) 無意義的對話方塊,但是輸出篩選防火牆沒辦法幫助我們做到這點。為了瞭解現況,提供重要資訊給使用者,我找出一家知名主機防火牆廠商的銷售文件。那些圖文並茂的文件偵查了防火牆的輸出篩選能力和建議能力。建議能力會偵測使用者想要做什麼,然後提供適當的建議 (至少理論上是如此)。宣傳小冊內的文字,還附了一張螢幕擷取畫面,內容寫著:「本程式尚無相關建議。請選擇下面的項目,或者按一下 [其他資訊] 尋求協助」。即使在行銷文宣中,廠商好像也不能產生參考性的對話方塊。

由於使用者沒有足夠的資訊可以做出適當的安全性決策,系統管理員只好義不容辭出面設定所有的輸出篩選,因為使用者也沒辦法這麼做。可是這麼一來,就等於無限制的加重系統管理員的系統管理負擔。

即使在防火牆詢問之後,使用者按了 [否,稍後再提醒我],惡意程式碼還是有辦法欺近防火牆身邊。只要被惡意程式碼冒充的使用者可以在某個連接埠開啟輸出連線,惡意程式碼就可以使用那個連接埠。因此,任何處理程序都可以藉由現有的處理程序進行。 舊版的作業系統接受這種做法。但是從 Windows Vista 開始,處理程序會受到適當的限制,這也是為什麼在預設情況下受到限制的服務,根據預設是使用輸出篩選加以封鎖的緣故。

無奈的是,大部分的人總認為輸出主機防火牆篩選,會阻止已遭侵害的資產攻擊其他資產。這是不可能的事。在已遭入侵的資產上加諸保護措施,並且要求它不侵害其他資產,這種事根本就是天方夜譚。保護措施是加諸在您要保護的資產上,而不是加諸在您要對抗的資產上。如果等壞蛋都闖進門了,再要求他們不要偷東西,還不如事先把他們擋在門外來得務實。

Jesper M. Johansson 是負責安全性軟體的軟體架構設計人員,也是《TechNet Magazine》的特約編輯之一。他擁有管理資訊系統 (MIS) 的博士學位,研究安全性長達 20 多年,是企業安全性領域的 Microsoft MVP。其最新著述為《Windows Server 2008 Security Resource Kit》。

© 2008 Microsoft Corporation 和 CMP Media, LLC.保留所有權利;未經允許,嚴禁部分或全部複製.