20. 使用IP安全保護IP通訊
如同原先的設計,在TCP/IP通訊協定套件中應用程式負責提供安全性,以保護它自己或它的使用者。以Microsoft Windows 2000之檔案共用為例,它使用一個使用者登入時所產生的存取權杖(access token)和存取控制清單(Access Control Lists),來確保只有授權的使用者才能執行它們被授權的動作。雖然它透過使用加總檢查的方式(例如:IP、TCP和UDP通訊協定),確實提供了一些防止實體資料錯誤的保護措施,但加總檢查的作用畢竟有限,而且它無法防範一個有經驗之駭客的攻擊。
對早期的ARPANET而言,其使用者主要是學術人員和研究人員,因此要求應用程式建置安全性是完全適合的方式,這種方法對今天的許多使用者來說也依然是足夠的。然而當TCP/IP的使用增加後,就開始要求在TCP/IP堆疊中能夠提供較低階的安全性。而日益商業化的網際網路以及需要防止內部攻擊的專用IP網路也開始要求這種安全性。
IP安全(IPSec)是一個通訊協定套件和一個加密演算法,延伸了IP通訊協定,並提供了認證和保密性。IPSec向所有使用IP的應用程式提供了強大的安全性,還允許網路管理員提供更高階的安全防護。
實質上來說,IPSec擴充了IP資料包的結構,從而提供了強大的認證和保密性。IPSec增加了額外的標頭到兩台主機間所傳送的安全IP資料包,以建置這些功能。顯然地,它為更高階的通訊協定提供了良好之點對點IP資料包的保護。
如 第9章〈網際網路通訊協定第6版(Ipv6)〉 所述,因為也是IP第6版發展計劃的一部分,所以IPSec也有了很大改進。然而,由於採用IPv6的過程很緩慢,所以基於IP第4版(IPv4)解決方案的需求就變得非常明顯了。結果使得IPSec先被修改,以便和IPv4一起運作,這樣就可以在現有的IPv4網路上實施IPSec機制,並減緩了升級至IPv6的緊迫性。
本章內容
本章介紹了在Windows 2000中實施的IPSec通訊協定。隨書光碟上有網路監視器的追蹤記錄,顯示了實施中的IPSec。本章包括了以下的部分:
IPSec主題和本書中的許多標題一樣,可以輕易地寫成一本書。但是在這裡我們省去了在金鑰管理中所使用的加密演算法以及IPSec管理控制方面的細節。參考書目中包含了進一步研究時所需要參考的書籍。更多關於在Windows 2000電腦上配置IPSec原則的資訊,請參閱在Windows 2000 Server之說明的內容。
IPSec概述
IPSec是一組相關通訊協定和服務的套件,它延伸了IP資料包的結構(在
第5章〈網際網路通訊協定(IP)定址〉 中有相關描述),並在IP資料包層提供了額外的安全性。在這部分,我們將回顧IPSec金鑰的組成元件。
IPSec是什麼?
IPSec的設計為網路的資料包傳送來提供額外的安全性,這種安全性遠勝過由應用程式所提供的。要實施這一點,首先要在兩台電腦間建立安全性的關聯(Security Association(SA)),然後用SA來轉換IP資料包,以增加IP封包的安全性。IPSec支援了兩種特定的轉換:即AH和ESP。
基於標準密碼技術之IPSec所提供的特定服務如下:
IPSec架構
圖20-1說明了在Windows 2000中,整個IPSec的架構。
| 圖20-1 IPSec架構圖 |
此圖列出了IPSec關鍵的組成部分,這些部分在後面會有詳細的介紹。圖中顯示了電腦1的應用程式與電腦2的應用程式之間的通訊。兩者間的通訊透過WINSOCK或呼叫NetBIOS應用程式介面(API)來實施,這會導致IP資料包將透過實體網路來傳輸。IPSec原則代理程式(IPSec Policy Agent)可以從AD取得IPSec的原則。原則代理程式使用Internet Key Exchange(IKE)通訊協定來協商如何保護資料。然後IPSec驅動程式會負責依據IPSec原則來執行IP資料包的傳輸。
IPSec原則(IPSec Policy)
IPSec原則描述在電腦上如何操作IPSec的內容。例如:原則可以要求與某些電腦進行的所有通訊都要經過加密,而且在無法協商適當的加密方法時,則不能進行通訊。或者,原則可也以規定電腦應該嘗試使用IPSec通訊協定,只有當對方電腦不支援IPSec時,才會退一步使用標準的純文字通訊。你可以定義各種命名的原則,但是在任一指定的時刻,一台電腦上只能執行一種原則。
IPSec原則包含了一系列詳細描述原則的規則。每個規則都包含了如下的內容:
IPSec之原則代理程式(IPSec Policy Agent)
IPSec之原則代理程式是一種執行在LSASS.EXE的程序環境中的Windows 2000服務,並可以從Windows 2000服務MMC之嵌入式管理單元裡的服務清單中看見它。原則代理程式負責檢索IPSec的原則資訊(從AD或本機登錄中),將它傳送到需要使用IPSec原則的其他IPSec元件。
IPSec之原則代理在系統啟動時會被載入並啟動,此時可取得到系統原則。然後代理程式會定期地輪流查詢AD(或者登錄),以獲取IPSec原則的任何更新內容。
IPSec之安全性關聯
在獲得電腦的IPSec原則後,IPSec原則將會被運用到該台電腦之收發的所有IP通訊上。然而在兩台電腦能夠使用IPSec特性來轉換IP封包之前,它們必須要先協商一個SA。SA定義了兩台電腦在使用IPSec的具體細節、所使用的金鑰、金鑰存留期以及應該使用何種驗證和加密通訊協定等。IPSec原則定義了兩台電腦可以協商的具體事項,例如:加密演算法。在協商SA後,就可以進行兩台電腦間的通訊。IP資料包會按照所使用的IPSec原則而被轉換。
IPSec有兩種SA。第一種SA是網際網路安全性關聯和金鑰管理(Internet Security Association and Key Management Protocol(ISAKMP))SA。建立此SA需要協商IPSec的原則(加密演算法,完整性演算法等等),包括ISAKMP SA的產生、初始的金鑰交換和機器驗證等。此SA可以確保兩台電腦都已經安全地確認了對方的身份,並已經擁有協商其他SA所必需的金鑰。
然後ISAKMP SA會被用來協商第二種SA,即IPSec SA。IPSec SA用來在電腦間傳送資料的實際轉換。IPSec SA的產生包括了兩台電腦透過IPSec所達成的通訊協定、產生用於請求轉換的金鑰、以及要使用的完整性和加密演算法等。當這些協商都已達成之後,它們就會被傳送給IPSec驅動程式。
網際網路之金鑰交換(Internet Key Exchange,IKE)
在兩台電腦之間建立SA的任務由IKE來執行。IKE是一個應用層通訊協定,它結合了ISAKMP和Oakley之金鑰決定演算法。這個通訊協定以前被稱做ISAKMP/Oakley。ISAKMP在管理上集中了與安全性相關的事項,而Oakley則產生和管理驗證金鑰。
說明
IKE是一個相當新的術語,許多IPSec著作依然稱其為ISAKMP/Oakley。
ISAKMP
IPSec使用ISAKMP通訊協定來協商SA。在ISAKMP中,定義了連線兩端的驗證、SA的產生和管理、金鑰產生技術以及威脅緩和(threat mitigation)(例如拒絕服務和重新發送攻擊)等等的程序。ISAKMP為金鑰管理定義了一個架構,而且ISAKMP並不受所使用的金鑰交換通訊協定、加密/完整性演算法以及驗證方法的支配。
請參閱
ISAKMP之具體細節超出了本書的範圍,但RFC2408詳細定義了此通訊協定。您可以在隨書光碟上的RFC資料夾中找到。
Oakley金鑰決定通訊協定(Oakley Key Determination Protocol)
金鑰的建立是密碼封包保護基礎的必要部分。Oakley是一個可延伸、安全的金鑰發送機制,它連同ISAKMP一起被使用於建立在IPSec之封包轉換中所使用的金鑰。Oakley基於Diffie-Hellman之金鑰交換演算法,並且做了一些改進。這個演算法使得兩台電腦不需要經過加密的程序就能協商可用在驗證和加密的過程的一個共用金鑰。
請參閱
Diffie-Hellman演算法以及Oakley通訊協定的細節超出了本書的範圍,但在RFC2412中詳細地加以定義。您可以在隨書光碟的RFC資料夾中找到。
IPSec驅動程式
IPSec驅動程式是一個核心模式的裝置驅動程式,它負責對發送至另一台電腦的封包或從另一台電腦接收的封包執行IPSec原則。IPSec驅動程式會監視在IPSec原則中,被要求轉換的輸出IP封包,也會監視需要檢查and/or解密的輸入IP封包。在將資料包傳到Network Driver Interface Specification(NDIS)驅動程式(為需要發送的封包)或TCP/IP驅動程式(為接收到的封包)之前,IPSec原則驅動程式會先執行其要求的轉換動作。
安全性參數索引(Security Parameters Index,SPI)
在兩台電腦間同時出現多個SA之前,接收與發送雙方都必須知道與每個IP資料包相關的SA之資訊。使用SPI正是為了這個目的。它是一個在每個IP資料包(在AH或ESP標頭中)中所傳輸的32位元之虛擬亂數,用來指示與其相關的輸出或輸入封包。
在ISAKMP協商期間,接收方的IPSec驅動程式會產生一個SPI。SPI會被傳送給發送端的ISAKMP,而由發送端的ISAKMP再將它傳遞給負責發送的IPSec驅動程式。負責發送之IPSec驅動程式會將SPI新增到每個AH或ESP標頭中。
IPSec模式
IPSec有兩種主要的操作模式:即傳輸模式(transport mode)和通道模式(tunnel mode)。傳輸模式主要用在端點對端點通訊的電腦上。透過在原始IP資料包與IP資料包之資料負載間新增額外的標頭,傳輸模式會為上層通訊協定提供保護的機制。IPSec通道模式被設計用在網路路由器上,它使得網路路由器能夠保護在不安全網路上的兩個啟用了IPSec的路由器之間所傳送的IP資料包。在通道模式下,原始的IP資料包會被封裝(被通道化)到一個新的資料包裡,這意味著整個原始IP資料包現在已被完全加密了。
IPSec傳輸模式為公司網路和安全性較差的網路提供了良好的點對點的安全性和驗證機制。通道模式提供了額外的安全性,更適合用於以網際網路作為主幹的虛擬私人網路(Virtual Private Network)上。
簡單的網路監視器追蹤記錄
網路監視器的追蹤記錄20-1和20-2(Capture 20-01和20-02,包含在隨書光碟上的Captures資料夾)顯示了使用PING指令後的SA建立過程。網路監視器追蹤記錄20-1顯示了支援兩台電腦間使用AH的SA建立程序,而20-2則顯示了ESP標頭的使用。在這兩個例子中,前6個封包是主模式協商(main mode negotiation),隨後四個封包是快速模式協商(quick mode negotiation)。在這之後即是實際的PING指令。兩個追蹤記錄都顯示了在正在傳輸模式中使用IPSec的情形。
IPSec如何運作
在這個部分,我們將仔細看看IPSec在Windows 2000電腦中是如何運作的。
說明
目前IPSec在Microsoft Windows 95、Windows 98或Windows NT中無法使用。不太可能會在Windows 95和Windows 98提供IPSec的功能,目前也沒有計劃在Windows NT中提供IPSec。
取得IPSec原則
您可以使用手動方式來配置IPSec原則,以套用到獨立的電腦上,而不用考慮電腦是否存在於Windows 2000 AD網域中。然而對於AD網域中的電腦而言,其站台、網域和組織單位(Organizational Unit,OU)原則會覆蓋任何本機的IPSec原則。IPSec部署的優先方案是使用儲存在AD中的資訊,並使用群組原則物件(Group policy Objects (GPOs))來套用IPSec原則資訊。
儲存IPSec原則的GPO可以被套用在AD站台、AD網域、或者AD OU上。在一個企業環境中,您可以建立GPO的階層關係,並將其套用到每個階層上。AD繼承規則與GPO物件為每個階層所定義的次序,決定了電腦中生效的IPSec原則。
GPO物件儲存在AD中。它們被儲存在網域名稱環境之系統容器的原則容器中。例如:在kapoho.com網域中,系統容器有專門的名稱CN=Policies、CN=System、DC=kapoho、DC=com。獨立的IPSec原則被儲存在AD中的安全容器中。
在kapoho.com網域中,系統容器有其專門的名稱CN=Policies、CN=System、DC=kapoho、DC=com。此容器會為每個被定義的IPSec原則儲存IPSec原則物件。
說明
使用GPO控制電腦原則是一個很複雜的主題,遠超出本書討論的範圍。GPO物件和IPSec原則的建立,以及它們在企業電腦上的應用需要十分仔細地規劃。如果可生效之IPSec原則設定得不正確,那麼會導致電腦無法和其他電腦通訊的情形。
當一台Windows 2000電腦第一次初始化時,IPSec原則代理程式會對AD發佈一個Lightweight Directory Access Protocol(LDAP)查詢,以獲得相關的IPSec原則。對於網域內的電腦,其使用的IPSec原則為群組原則。
雖然不是一個好的部署方案,但是管理員可以定義儲存在登錄中的本機電腦之IPSec原則。這對非Windows 2000網域成員的電腦非常有用。本機原則資料庫,類似於AD-held的IPSec原則,被儲存在登錄主機碼HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent\Policy\Local中。
套用IPSec原則
IPSec驅動程式負責套用IPSec原則。當IPSec驅動程式收到要傳送到另一台電腦的封包時,它會先進行檢查,以判定資料包是否和使用中的IPSec原則所指定的IP篩選器清單相符合。如果符合,且還沒有建立SA,則IPSec驅動程式會通知IKE,然後IKE會和其他電腦協商一種IPSec SA。如果有必要,會先建立一個IPSec SA。建立SA後,IPSec驅動程式會對IP資料包套用一個相關的IPSec轉換,然後再將它傳送給NDIS驅動程式,以繼續向前傳送。
輸入資料包的處理雖然和輸出的處理相反,但是卻很相似。當NDIS驅動程式向IPSec驅動程式發送一個IP資料包時,IP驅動程式會檢查篩選器清單以確定對應是否存在。如果對應存在,則IPSec會使用SA(由IPSec標頭裡的SPI指定)來決定對封包進行何種轉換。根據這個轉換,IPSec驅動程式會檢查封包的完整性,並在適當時機對封包進行解密的動作。如果發生錯誤(例如:封包在傳輸中被改變),那麼封包將會被沈默拋棄。當轉換完封包後,SA的IPSec驅動程式會將資料包路由至TCP/IP驅動程式,再由其將封包路由到合適的應用程式中。
建立安全性關聯(SAs)
建立SA以供應用程式使用的程序包括了兩個不同的階段和兩種特定的SA。在第一個階段,即主模式,兩台電腦會建立ISAKMP SA。這為其他SA的建立提供一個安全的環境。雖然在這裡我們談到有兩個階段,但我們只討論主模式,它是兩個階段中比較複雜的一個。為了要建立ISAKMP SA,發送端電腦會向回應端發送一個潛在安全性等級的清單。然後回應端會使用ISAKMP SA通訊協定來與發送端協商一個雙方同意的等級。
在ISAKMP SA建立後,兩台電腦便可以互相通訊,並協商在傳輸應用程式資料時所使用的SA。第二個SA即IPSec SA。ISAKMP SA提供了安全的連線,在這種連線裡可以協商一個IPSec SA。快速模式稍微簡單一些,其要求的交換也比較少。
在Windows 2000上協商一個ISAKMP SA和一個IPsec SA需要在發送端和回應端間傳遞10個資料包。可以在本章先前提到的網路監視器追蹤記錄中看到。
產生新金鑰
為了要進一步地提高應用程式之資料傳遞的安全性,IPSec可以在固定的時間後(例如30分鐘)或者在傳送了某些資料後建立一個新的金鑰原件。雖然會增加成本,但是卻提供了更多的安全性。可以透過重新協商ISAKMP SA或IPSec SA來實施以上的功能。上面提到的快速模式可以執行這種更新。
驗證標頭(Authentication Header,AH)細節
AH標頭被設計來為包含在IP資料包中的資料提供驗證,同時也是對原始IP標頭的延伸。正如RFC 2402中所定義的,AH透過對金鑰進行雜湊演算,來提供資料完整性。 Windows 2000支援了兩種雜湊演算法:HMAC MD5和HMAC SHA。實際使用的雜湊演算法是在建立SA時進行協商的。
請參閱
在RFC 2402中可以看到驗證標頭如何透過金鑰雜湊來提供資料完整性,您可以在隨書光碟上的RFC資料夾中找到。
除了在IP標頭中,那些透過網路傳輸時會發生改變的部分外(例如存活時間(TTL)或IP標頭加總檢查),AH標頭會透過雜湊IP標頭和資料負載的動作來提供資料和位址完整性。雜湊值會被包含在AH中。IP標頭中的IP位址和傳輸通訊協定標頭的通訊埠號碼都是雜湊的一部分,因此可以驗證位址是否已被修改。因為IP資料負載也經過雜湊的動作,所以也能驗證這些資料是否已被修改。
為反重新發送保護提供序列號碼,AH也提供了反重新發送的保護。序列號碼是被雜湊資料的一部分,因此可以被驗證是否未被修改。此外,每個到達的序列號碼欄位之序列號碼會與目前序列號碼做比較。如果號碼超出了順序或者和新的序列號碼相同,則封包會被認為是重新發送而加以拒絕。
AH標頭的格式
圖20-2列出了AH標頭的格式
| 圖20-2 AH標頭 |
如圖20-2所示,AH標頭包括了下述的欄位:
AH的封包轉換
圖20-3顯示了在原始資料包上使用AH的結果。
| 圖20-3 在IP資料包上使用AH標頭的結果 |
正如圖20-3和網路監視器追蹤記錄20-1(Capture20-01,包含在隨書光碟上的Captures資料夾)中所看到的,AH標頭被新增在IP資料包的IP標頭後面。IP會將AH標頭視為通訊協定標頭,即被識別為通訊協定51(0x33)。因為使用了AH標頭,所以增加了每個封包的成本。使用AH標頭還需要使用額外的CPU處理能力來計算驗證資料,儘管在Windows 2000中,硬體擔負了這個計算,大部分的計算可由網路卡來進行。請注意,原始IP標頭將未被修改;這允許中介路由器轉發封包,而不管它們是否支援IPSec。
計算驗證資料
AH驗證欄位值的計算包括:
封裝安全性資料負載(Encapsulating Security Payload,ESP)細節
ESP標頭被用來提供資料機密性(加密)和資料驗證。與AH標頭類似,ESP標頭也是原始IP標頭的延伸,這在RFC 2406中有詳細說明。ESP標頭的目的是透過對IP資料包加密,以提供機密性。Windows 2000支援的加密演算法是DES-CBC和Triple DES(a.k.a.3 DES)。ESP也提供了雜湊的功能,與AH一樣可使用MD5或SHA。
請參閱
請查閱RFC 2406取得ESP標頭的資訊,您可以在隨書光碟上的Captures資料夾中找到。
當一台電腦上的IPSec原則被設定為要求透過ESP標頭加密時,SA的協商將會決定使用何種加密演算法。
說明
如果您使用的是Windows 2000的出口版本或者是與美國以外的國家之電腦通訊,那麼要確保在IPSec原則中有內含DES。同樣的,如果您打算在美國或加拿大以外的地方部署ESP需要做一些額外規劃,以避免無意中違反了美國或其他國家的法律。
在套用ESP轉換時,除了IP和ESP標頭外,IPSec驅動程式會對整個IP資料包做加密和雜湊的動作。這意味著在IP標頭中的資訊(例如:來源和目的IP位址)是不受保護的。顯然的,對IP標頭加密意味著此裝置將無法看到定址資訊。您也可以一起使用AH和ESP。兩種安全方式都可以提供資料加密和檢驗以及位址檢查的機制。通常是先使用ESP,再使用AH。
ESP的標頭格式
圖20-4顯示了ESP標頭的格式。
| 圖20-4 ESP標頭 |
如圖20-4所示,ESP標頭包括了如下的欄位:
IPSec ESP封包的格式和轉換
使用ESP標頭時,其原始封包被轉換的方式和AH標頭相似。圖20-5顯示了IPSec封包的格式。
| 圖20-5 IPSec ESP封包的格式 |
如圖20-5和網路監視器追蹤記錄20-2 (Captures20-02,包含在隨書光碟上的Captures資料夾)所示,使用ESP時,其IP資料包的格式要比使用AH標頭時更複雜。圖20-6也顯示了在傳輸模式中使用ESP標頭時,IP資料包如何被轉換的過程。
如圖20-6所示,使用ESP將增加一個ESP標頭和兩個報尾欄位到IP資料包中。IP將ESP標頭視為一種新的通訊協定類型,即被識別為通訊協定50(0x32)。ESP報尾包括了填充欄位(0到255位元組)、填充長度欄位和下一個標頭欄位。
| 圖20-6 在IP資料包上使用之ESP標頭的結果 |
使用ESP報尾中的填充有若干個原因:
總結
IPSec的安裝和配置很複雜,但它為在兩台Windows 2000電腦之間,或在配置使用IPSec通道模式傳遞IP資料包的兩個IP路由器之間的通訊,提供了無感覺之應用程式以及點對點間傳送的安全性。