技術について調べるブログ

技術について調べるブログです

IPsecについて その2

IPsecとは

セキュアなIP通信の為にコネクションを設定する技術。 セキュリティプロトコル(AH/ESP)、鍵管理(IKE)、セキュリティアソシエーション(SA)、認証・暗号化アルゴリズム の4つの技術で成り立っている。 SAによって確立された仮想的な通信路の中をAH/ESPによってセキュア化されたデータグラムが流れるイメージ。

では、「SAによって仮想的な通信路を確立する」というのはどういうことなのか?

セキュリティポリシー

GWでは、

  • パケットをそのまま通す : BYPASS
  • パケットを破棄する : DISCARD
  • パケットをセキュア化する : PROTECT

のいずれかを行う仕組みがあり、それをセキュリティポリシーという。 上記のどれを行うか判断するためにパケットの一部を確認する。確認する部分のことをセレクタと呼ぶ。

セレクタとしては以下のものが存在する。

セレクタ 内容
ローカルIPアドレス GWの内側IPアドレス(送信側なら送信元、受信側なら宛先)
リモートIPアドレス GWの外側IPアドレス(送信側なら宛先、受信側なら送信元)
ローカルポート番号 GWの内側ポート番号
リモートポート番号 GWの外側ポート番号
プロトコル IPヘッダの上位プロトコル番号
IPv6モビリティヘッダ IPv6で次ヘッダがモビリティヘッダだった場合、そのタイプ(MHタイプ)
ICMPタイプ/コード 上位プロトコルがICMPの場合、そのタイプとコード
名前 主にIKEで交換されるID

引用 : 3 Minutes Networking Supplement No.22

トンネルモードの場合、IPアドレスとして参照されるのはAH/ESPヘッダでカプセル化される前の値(元々のIPアドレス)である。

これらのセキュリティポリシーを集めて登録したものをSPD(Security Policy Database)と呼ぶ。 SPDには以下の3つとSPDキャッシュが存在する

  • SPD-O : 送信(Outbound方向の通信)の際に使用するポリシー、各ポリシーにBYPASSまたはDISCARDの値を持つ
  • SPD-I : 受信(Inbound方向の通信)の際に使用するポリシー、各ポリシーにBYPASSまたはDISCARDの値を持つ
  • SPD-S : パケットのセキュア化に使用するポリシー、各ポリシーにPROTECTの値を持つ

SPDに記載される内容の例を以下に示す。

セレクタ処理
ローカルIPリモートIPプロトコルその他
192.168.0.0/2410.1.1.0/24ANYANYBYPASS
192.168.0.0/2410.1.2.0/24ANYANYDISCARD
192.168.0.0/24
PFP:オフ
172.16.1.0/24
PFP:オフ
ANY
PFP:オフ
ANY
PFP:オフ
PROTECTESPトランスポートモード
ESP暗号化:AES-CBC
ESP認証:HMAC-SHA1-96

引用 : 3 Minutes Networking Supplement No.22

表の上2行はSPD-OまたはSPD-Iの記述であり、例えば1行目のルールは
SPD-Oに記載されているのであれば
192.168.0.0/24が送信元で、10.1.1.5/32が宛先であるパケットはそのまま通す(BYPASS)ことを示している。
SPD-Iに記載されているのであれば
192.168.0.0/24が宛先で、10.1.1.5/32が送信元であるパケットはそのまま通す(BYPASS)ことを示している。

実際にSPDが使用される様子は以下の図のようになる。 f:id:bonity:20180512221229p:plain

SAとSAD

SPD-SがPROTECTであった場合、
送信側ではセキュリティパラメータに従ってパケットをセキュア化する。
受信側では送信側と同じセキュリティパラメータを持っていればパケットのセキュア化を解除できる。
送信側と受信側のセキュリティパラメータが一致する時、送信側と受信側で仮想的な通信路ができているとみなせる。
このセキュリティパラメータの一致(つまり仮想的な通信路)のことをSAと呼ぶ。

セキュリティパラメータはSAD(Security Association Database)と呼ばれるデータベースに格納されている。 SADの例を以下の図に示す。 f:id:bonity:20180512215431p:plain

SPI(Security Parameter Index)はSAを識別するIDの様なものである。
送信側と受信側で同一のパラメータを持つ = SPIが一致するパラメータが送信側SADと受信側SADの両方に存在するということである。

SADは以下の図の様に使われる。 f:id:bonity:20180512222650p:plain

SPDがPROTECTであった場合、送信側ではSADからセレクタを使ってセキュリティパラメータを検索し、パラメータに従ってセキュア化する。 受信側ではセキュア化されたパケットを受け取るとSPIを使ってパラメータを検索し、パラメータに従ってパケットのセキュア化を解除する。

送信側と受信側で同じパラメータを持つ方法として、静的と動的の2つの方法がある。
静的な方法では双方のGW(ホスト)に同じパラメータを手動で設定しておく。
動的な方法ではそSA構築の前にIKE(Internet Key Exchange)による交渉によってパラメータが決定する。 SADに対応するエントリがない場合もIKEで自動設定することになる。

まとめ

SAとは、セキュリティポリシーによるアクセス制御セキュリティパラメータを使った、
送信側と受信側の合意(=パラメータの一致)によるセキュアな仮想通信路の構築である。

同じパラメータを持っているホスト同士でしか解読できないパケットをやり取りすることで仮想的な通信路を構築したとみなせるということである。

参考

3 Minutes Networking Supplement No.22

『マスタリングIPsec』サポートページ