1. 程式人生 > >IPSec安全策略及實現

IPSec安全策略及實現

  IP安全結構(SA):RFC2401,涉及IP安全技術的一般概念、安全目標、安全服務、構成元素和關鍵機制等方面,是整個協議棧的基礎和指導。
  IP認證報頭(AH):RFC2402,提供資料來源身份認證、資料完整性和重放攻擊保護幾項功能。
  IP封裝安全負載 (ESP,Encapsulating Security Payload):RFC2406,提供資料保密、資料來源身份認證、資料完整性和重放攻擊保護幾項功能,和AH協議一起構成協議棧的主體。
  因特網安全聯盟和金鑰管理協議(ISAKMP):RFC2408和因特網金鑰交換(IKE)-RFC2409,描述金鑰的產生、協商和交換的標準過程。
  加密和驗證演算法:RFC2403,RFC2404,RFC2405和RFC2410,描述用於AH和ESP協議中的各種加密和鑑別演算法,對安全協議的實現提供具體的演算法描述。
  IP安全DOI(Domain of Interpretation)文件:RFC2407,為其他文件提供標準程式碼。
  PF_KEY金鑰管理API:RFC2367,提供IKE模組和IPSec核心之間的介面。
3 總體介紹

  IPSec使用兩個協議來提供傳輸安全——認證報頭(AH)、封裝安全負載(ESP)。IPSec實現是通過在原始IP資料包中新增插入AH或ESP頭,達到IP資料加密和認證的目的。
  IPSec協議族在因特網中所處的位置可以認為和IP層平行,在具體的資料包外出處理中,一般都是在原始IP包新增插入IPSec報頭(AH&ESP)。故可確切的認為IPSec層處於IP層和資料鏈路層之間,更偏向IP層。
  IPSec安全體系既可用來保護一個完整的IP包,也可以保護某個IP包的上層協議。這兩種保護分別是由IPSec兩種不同的“模式”來提供。其中,傳輸模式(transport)用於兩臺主機之間,保護上層協議,在IP頭和上層協議頭之間插入IPSec頭,如:〔IP頭〕 〔IPSec頭〕〔上層協議〕;隧道模式(tunnel)保護整個IP包,只要安全聯盟的任意一端是安全閘道器,就必須使用隧道模式。在其外部新增IPSec頭,加密驗證原IP包,然後用外部IP頭封裝整個處理過的資料包。如:〔外部IP頭〕〔IPSec頭〕〔內部IP頭〕〔上層協議〕。
  另外,SA中如果應用不同的安全協議,所受保護資料包的內容範圍也有所不同。對於ESP,傳輸模式SA提供的安全服務只保護上層協議,而對IP頭和擴充套件頭不提供保護。隧道模式SA對外部頭並不提供保護;而對於AH,傳輸模式SA提供的安全服務還可以對IP頭、擴充套件頭和某些選項的部分內容進行保護。隧道模式SA可以對其外部頭的一部分提供保護。
  在IPSec中,安全聯盟(SA)就是兩個IPSec系統之間的一個單向邏輯連線,是安全策略的具體化和例項化,它提供了保護通訊的具體細節。通常用一個三元組唯一的表示:<安全引數索引(SPI),IP目的地址,安全協議(AH和ESP)識別符號>。
  SA規定了用於保密通訊的一組安全引數,包括:驗證演算法、加密演算法、協議模式、安全聯盟的源地址、SA的生存期(TTL)和序列號計數器等。
  通過使用AH或ESP之一,SA為它所承載的資料通訊提供安全服務。IPSec的實現需維護兩個與SA有關的資料庫,安全策略資料庫SPD和安全聯盟資料庫SAD。安全策略資料庫是為IPSec實現提供安全策略配置,包括源、目的IP地址、掩碼、埠,傳輸層協議,動作(丟棄、繞過、應用),進出標誌,識別符號,SA和策略指標。SAD是SA的集合,其內容(RFC要求的必須項)包括目的IP地址、安全協議,SPI,序列號計數器,序列號溢位標誌、抗重播視窗、SA的生命期、進出標誌,SA狀態,IPSec協議模式(傳輸或隧道)、加密演算法和驗證演算法相關專案。
3.1 SPD
  對於一個IPSec實施點,進入包和外出包都需要參考安全策略資料庫(SPD)。對於進入或外出的每一份資料包,都有三種可能的選擇:丟棄、繞過IPSec或應用IPSec。丟棄是指根本不允許離開主機、穿過安全閘道器,或最終傳遞到某一應用程式。繞過是指允許通過而不用額外IPSec保護的傳輸。應用是指需要IPSec保護的傳輸並且對於這樣的傳輸SPD必須規定提供的安全服務,所使用的協議、演算法等等。
  SPD包括策略入口的有序列表。每一個策略入口由一個或多個選擇符標識,這些選擇符定義了被這一策略入口包含的IP傳輸。這些選擇符定義了策略或IPSec處理的粒度。每一個入口包括一個標識,它標識匹配這一策略的傳輸是允許通過,丟棄,還是進行IPSec處理。如果運用IPSec處理,入口應包括SA(或SA束)的規範。該規範列舉了IPSec協議、模式和使用的演算法,包括了任何巢狀需求。
  對於每一個IPSec實現,必須由一個可供管理的介面。它允許使用者或系統管理員管理SPD。特別的,每一個輸入或輸出包受制於IPSec的處理,SPD必須定義在每一種情況下什麼行為將被接受。因此可供管理的介面必須允許使用者(或系統管理者)定義安全處理,這一安全處理被運用於任何進出系統的包。
3.2 選擇符
  SA的粒度取決於選擇符。例如,兩主機之間所有的傳輸可以通過單一SA來傳輸,並且給予一個統一的安全服務集。另外,一對主機間的傳輸可以通過多重SAs,而不同的SAs提供不同的安全服務,這有賴於使用的應用程式(正如下一代協議和埠域中定義)。
3.3 SAD
  SAD中的記錄項定義了與SA相關的引數。每個SA都應在SAD中有一條記錄項相對應。對於進入處理,SAD的記錄用三元組<目的IP地址,SPI,安全協議>標識。對於外出處理,應在SPD中查詢指向SAD中SA的指標,從而查詢對應的SA或SA束。如果未建立SA,則應建立SA,並將SPD中的項與SAD的記錄項關聯起來。
3.4 AH和ESP的處理過程
  AH處理:AH報頭格式和內容見RFC2402。設有兩臺配置IPSec的主機或閘道器、處理IPSec資料包的傳送和接收。在傳送方,程序根據SPD和SAD選擇恰當的協議模式和驗證演算法。然後將AH頭插入到IP包中,將資料包中的不定欄位清零,用驗證演算法和金鑰摘要驗證(預設為HMAc_MD5_96)整個封裝後的資料包、將摘要資料送到AH頭的驗證資料欄位。最後,IPSec層將資料包轉發到資料鏈路層。最終將安全資料包傳送到接收方。在接收方,程序配置有相應的SPD和SAD。接收到傳送方發來的安全資料包後,可選進行序列號檢查和抗重播檢查。然後,同樣對資料包的不定欄位清零,儲存驗證資料欄位內容並清零之。對整個資料包運用驗證演算法和金鑰處理,將驗證結果和儲存的驗證資料比較,匹配則驗證成功。然後,剝去AH頭和外部IP頭(隧道模式)。最後,再進行策略檢查。AH處理只負責對資料的完整性檢查,而不實現資料的加密。還要注意PMTU的問題,一般來說,儘量防止對資料包的分段,我們綜合考慮巢狀模式中所能新增的AH頭和ESP頭尾的最大位元組數,保證傳送到IPSec層的原始IP包比相應MTU少於AH頭和ESP頭尾的最大位元組數,這樣就不會導致在IPSec層的分段處理,減少IPSec的功能和負擔。
  ESP處理:ESP報頭和報尾的格式和內容見RFC2406。ESP處理和AH處理類似。ESP處理完成AH處理的全部功能,並提供資料加密功能。對於輸出資料包處理,首先根據SPD和SAD進行加密處理(預設加密演算法為3DES,加密金鑰IKE協商生成或人工協商)。對傳輸模式,加密項包括上層協議頭(如TCP頭),資料內容和ESP尾。對隧道模式,加密項還要包括內部IP頭(IP-in-IP)。然後,才是資料包的驗證。必須注意的是,驗證項不包括ESP頭外面的IP頭。ESP外出資料包處理的最後一步是重新計算位於ESP前面的IP頭的校驗和。其他處理同AH處理。對於輸入資料包處理,處理流程基本同AH。要注意的是,必須先驗證後解密。演算法和金鑰由通訊雙方協商的SA確定。策略檢查完之後,還要重新計算IP校驗和。
3.5 IPSec資料流處理
  資料流輸入處理:
  1)模組接收一個IP包;
  2)如果IP包下一下協議proto=UDP&&port=500,繞過不處理,傳給上層協議;
  3)判斷下一個協議proto是否AH或ESP,如果不是,根據其地址查SPD,如果有對應策略則丟棄該包否則繞過;(IPSec只負責IPSec包的處理)
  4)查三元組,得said指標;
  5)根據said查詢SAD
  if SA為空
  〔查詢策略;(根據selector,查詢相應的SPD,取SPD中的action)
  if統過 不處理;
  if丟棄 丟包;
  if應用 丟包;
  if無策略 不處理〕
  if SA期滿 丟包;
  if SA狀態異常 丟包;
  6)檢查序列號seq,抗重播撿查;
  7)根據下一個協議為AH或ESP,分別送交AH/ESP處理模組進行驗證解密,並剝去AH頭或ESP頭和尾;
  8)從策略(或SA)中獲知是採用傳輸模式,還是隧道模式;
  9)If tunnel mode,移走外部IP頭;
  10)對這個處理後的新的IP包進行策略檢查(如果沒有策略則宣告失效);
  11)檢查新的內部IP頭的“nextproto”欄位,如果不是IPSec頭,處理結束、返回。
  12)如果IP頭的目的地址不是自己,則轉發。
  13)如果仍為IPSec包,轉4)。
  資料流輸出處理:
  1)模組取出一個IP包;
  2)根據selector查詢策略資料庫SPD,根據action判斷是否應用或丟棄,若沒有SPD,則繞過;
  3)查詢SPD對應的SA或SA束(真正的目的地址所有的)
  if 沒有SA
  手工建立;或IKE動態建立;或繞過;
  if 有SA
  SA生命期、狀態的判斷;
  4)將策略,SA和原始IP包送給AH/ESP模組處理(負責根據傳輸模式和通道模式,插入AH頭(ESP頭和尾)和外部IP頭(此時可將外部IP頭源、目的地址設為和內部頭一樣));
  5) if策略中有閘道器應用且到該閘道器有策略;
  6)根據策略查詢相應的SA
  if 沒有SA
  手工建立;或IKE動態建立;或繞過;
  if 有SA
  SA生命期、狀態的判斷;
  7)將策略,SA(束)和處理後的IPSec包送結AH/ESP模組處理。(此時IP頭目的地址為閘道器);
  8)IPSec處理完畢。