3 Minutes NetWorking Supplement
No.22

3Minutes NetWorking Supplement

補講第22回IPsec(2) セキュリティポリシーとSA

■ セキュリティポリシー

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

さって〜。前回はIPsecのアーキテクチャについて話したわけね。

ほげたん

Security Architecture for the Internet Protocol。なんだっけ。セキュリティプロトコルと、鍵交換と、認証・暗号化アルゴリズムと…。

おねーさん

Security Asscociationね。今回はこのSAについての話。
SAってなんだっけ?

ほげたん

IPsecのコネクションみたいなものだって、前回話したよね。

おねーさん

じゃあ、コネクションって何かしら?

ほげたん

ん、ん〜〜〜。難しいこと聞くね。そうだなー、接続関係というか、なんというか。
論理的な回線? う〜ん。

おねーさん

そうね、結構感覚的に把握しているから「コネクションって何?」って聞かれると困るわよね。
簡単にいえば、「相手と接続を行うための合意」ってところかしらね。

ほげたん

前回も「合意」って話がでてたよね。SAはセキュア化のためのホスト間の合意だっけ。

おねーさん

そうそう。それにより、ホスト間での接続がセキュアにできるってことね。
IPsecはセキュリティプロトコルによるセキュアな通信を行う前に、ホスト間で合意を取るんだけど。

ほげたん

取るんだけど?

おねーさん

その前にも大事な手順があるのね。
それは何かと言うと、セキュリティポリシー

ほげたん

セキュリティポリシー? って、アレ? 組織の情報セキュリティについての文書?

おねーさん

まぁ、それもセキュリティポリシーなんだけど、IPsecでのセキュリティポリシーはちょいと違うのよ。そうねぇ、IP通信の処理についての記述かな? こんな感じで。

[FigureSP22-01:セキュリティポリシー]

ほげたん

ははぁ。受け取ったIPデータグラムをどう扱うかを記述しているんだね。IPsecによるセキュア化だったり、何もしなかったり、破棄したり。

おねーさん

そう、その3つね。

処理内容
PROTECTIPsecによるセキュア化
BYPASS通常の処理(セキュア化なし)
DISCARD破棄

[TableSP22-01:IPデータグラムに対する処理]

おねーさん

前回、IPsecの機能として「アクセス制御」っていったでしょ。それを担うのがこのセキュリティポリシー。

ほげたん

「特定の送信元・宛先、プロトコルを許可/拒否する 」だっけ? あぁ、なるほど。受け取ったデータグラムに対してセキュリティポリシーで破棄したり、転送したりして実現するわけだね。

おねーさん

そういうこと。で、セキュリティポリシーで3つの処理を決定するわけだけど。
問題は、「何を基準として処理を決定するか」ってこと。

ほげたん

ふむふむ。セキュリティゲートウェイが受信したデータグラムのどっかをみて、「セキュア」「通常」「破棄」って決定するわけだね。やっぱりIPアドレスかな?

おねーさん

そうそう。この処理を決定する対象をセレクタって呼ぶのね。もちろんIPアドレスもあるし、他にも次のものが対象になるわ。

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

[TableSP22-02:セレクタ]

ほげたん

IPアドレス、ポート番号、プロトコル……MHタイプ? 名前?
え〜〜っと、聞きたいことはいくつかあるけど、まず、「ローカル」と「リモート」って宛先と送信元?

おねーさん

あ、あぁ。その話先にしなきゃダメよね。それはセキュリティゲートウェイを中心にしてインバウンドとアウトバウンドで考えるんだけど。

[FigureSP22-02:ローカルとリモート]

ほげたん

ん〜、セキュリティゲートウェイの「内側」がローカルで、「外側」がリモートってことだね。あと、MHタイプとか、名前とか何?

おねーさん

MHタイプはIPv6の話なので、またいずれ。名前についてはIKEのところでまた話すとして。
つまり、IPヘッダなどの値によって処理を決めるってことね。セレクタのポイントその1。トンネルモードの場合。

トンネルモードでのセレクタの対象

[FigureSP22-03:トンネルモードでのセレクタの対象]

おねーさん

AH/ESPでカプセル化される前の、もともとのIPヘッダをセレクタの対象として、チェックするってことね。

ほげたん

ん、でもさ。AHはともかく、ESPだと暗号化されちゃってない? 暗号化されてるとIPヘッダの値を読み取れないような気がするけど?

おねーさん

もちろん、復号してから確認するのよ。
あと、ポイント2。ANYとOPAQUE。

ほげたん

おぱきゅー?

おねーさん

毛が三本のアレね。

ほげたん

そうそう、犬が苦手な。

おねーさん

…、読みは普通「おぺーく」「おぺいく」ね。「不透明な」とか「くすんだ」とかそういう意味。
セレクタの値に「ANY」または「OPAQUE」を指定できるの。意味はそれぞれこう。

  • ANY … 任意。その値をチェック対象としない
  • OPAQUE … 値が確認できない。フラグメント化されている、暗号化されているなど。ANYに含まれる
おねーさん

例えば、ローカルIPアドレスがANYだったら、ローカルIPアドレスはなんでもいい=チェックしないってことね。
さて。このセレクタを判断材料にして、セキュリティポリシーにより処理を決定するわけね。

ほげたん

うんうん。IPヘッダなどの情報から、「セキュア化」「通常」「破棄」を決定するんだね。

■ SPD

おねーさん

でね、このセキュリティポリシーを集めて登録したものをSPDと呼ぶわけね。

ほげたん

セキュリティポリシーデータベース。そのまんまだね。

おねーさん

まぁ、そうね。このSPDにはSPD-ISPD-OSPD-Sの3種類が存在するの。それとSPDキャッシュ

ほげたん

IとOとSとキャッシュ? なにがなにやら〜。

おねーさん

まぁ、実際はSPDとSPDキャッシュなんだけど。こういう事。

[FigureSP22-04:SPDとSPDキャッシュ]

ほげたん

ん、ん〜〜と。SPDキャッシュは、SPDのキャッシュ。これはいいけど。
SPDのIとOとSの区別がいまいち…。

おねーさん

SPD-Iはインバウンド、SPD-Oはアウトバウンドの通常の処理のポリシーで、SPD-Sはセキュア化のイン/アウトバウンドのポリシーが入ってるってこと。

ほげたん

あぁ、I、O、SはそれぞれInbound、Outbound、Secureの略か。

おねーさん

そういうことね。実際の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

[TableSP22-03:SPD]

ほげたん

セレクタがあって、処理があって。セレクタにはパケットの判断する値があって。PFP?

おねーさん

PFPは後で話すからいいとして。上2行がSPD-Iか、SPD-Oの記述。最後の1行がSPD-Sね。
SPD-SではIPsecで使用する設定が入っているわけね。このSAを構築ことになる。

ほげたん

なるほどなるほど? 上の例でいえば、192.168.0.0/24がローカルで、172.16.1.0/24がリモートの場合、ESPトランスポートモードで、暗号化がAES-CBCで、認証が、認証?

おねーさん

前回説明したメッセージ認証ね。これは先の回で説明するけど、ここではHMAC-SHA1-96が使われるってこと。

ほげたん

ふむふむ。上の2つは、BYPASSとDISCARDだから、192.168.0.0/24がローカル、10.1.1.0/24がリモートの場合は通常のIP通信で、10.1.2.0/24がリモートなら破棄ってことだね、おね〜さん。

おねーさん

そゆことね。ここでのポイントは、SADは上から検索されて、適用した時点でそこから下は見ないってことね。例えば次のSPDで。

セレクタ処理
ローカルIPリモートIPプロトコルその他
192.168.0.0/2410.1.1.5/32ANYANYBYPASS
192.168.0.0/2410.1.1.0/24ANYANYDISCARD

[TableSP22-03:SPDの順番]

おねーさん

この例だと、192.168.0.1がローカル、10.1.1.5がリモートの場合のパケットの処理はどうなるの、ほげたん?

ほげたん

え? 1行目に適応するから、BYPASS。

おねーさん

うん。でも、2行目も一致するわよね。リモートの10.1.1.5/32は10.1.1.0/24にも含まれるから。
このように、複数の行に一致する場合は、一番上の行が適用されるってことね。

ほげたん

「適用した時点でそこから下は見ない」。だから、結局BYPASSになるってことだね。

おねーさん

そういうことね。でで。SPD-IとSPD-Oの処理はDISCARDまたはBYPASSだからいいとして。
問題は、PROTECT、つまりIPsecによるセキュア化がセキュリティポリシーにより選択された場合よね。その場合、どうするのかしら、ほげたん?

ほげたん

あれだよね、SPD-Sに書かれた設定を使って、SAを構築すればいいんだよ。

おねーさん

んじゃ、SAを構築ってどうするの? SAって何?

ほげたん

それはホラ、今からおね〜さんが説明してくれないと。

■ SAとパラメータ

おねーさん

そりゃ説明するけどね。こう、会話の受け答えによる……あぁ、もういい。説明する。
SAってのはさっきも言ったとおり、「セキュア化のためのホストの合意」なわけね。で、合意って何?

ほげたん

合意? ホスト間で意見が一致すること?

おねーさん

意見、つまり、IPsecで使われるセキュア化のためのパラメータの一致、これがSA。まぁ、次のほげたんの科白は「セキュア化のためのパラメータ?」だと思うから、先に説明するけど、これらの事。

  • Security Parameter Index(SPI)
  • シーケンス番号カウンタ、オーバフローフラグ
  • リプレイ防御ウィンドウ
  • ESP暗号化アルゴリズム・共通鍵・IV
  • AH/ESP認証アルゴリズム・鍵
  • SA有効期間
  • IPsecモード(トランスポート/トンネル)
  • ステートフルフラグメントチェックフラグ・バイパスDFビット・Path MTU
  • DSCP、バイパスDSCP
  • トンネルモード始点アドレス、終点アドレス
ほげたん

……何これ?

おねーさん

IPsecを行うために必要なパラメータ、でしょ? よく見て、ほげたん。
これらのパラメータが一致しないと、IPsecによるセキュア化ができないじゃない。

ほげたん

暗号化アルゴリズムや認証アルゴリズム、それに使う鍵ってのはわかるよ。
他のものが意味がわからない。

おねーさん

他のはちゃんと説明するから。ともかく、わかりやすい暗号化アルゴリズムと鍵、IVで説明するわね。

[FigureSP22-05:SA]

ほげたん

うぇ? ちょ、ちょいタンマ、おね〜さん。
えっと〜。ホスト間は同じセキュア化のためのパラメータを持つ?

おねーさん

じゃないとセキュア化が解除できないからね。暗号化したアルゴリズムと復号に使うアルゴリズムが違ったり、鍵が違ったらダメでしょ?

ほげたん

う、うん。じゃ、じゃあ、どうやって同じパラメータを持つの?
送ってきたパケットが使っているパラメータはどれかってどこで判断するの?

おねーさん

それは説明するから大丈夫。

ほげたん

う、うん。で、この合意されたパラメータを使ったやりとりがでSAが構築?

おねーさん

合意されたパラメータでSAが「構築されている」ことになるわけね。
つまり、2点間でセキュアである仮想的な通信路ができているわけ。

ほげたん

仮想的な通信路……コネクション…。

おねーさん

TCPコネクションだって、シーケンス番号やMSSなど信頼性のある通信を行うためのパラメータをスリーウェイハンドシェイクで交換してるでしょ? 似てるわよね。

ほげたん

似てるっていえば似てるかな。

おねーさん

まぁ、実際はコネクションはそれ以外の点もあるから、SA=コネクションってのはちょっと乱暴なんだけどね。だから「アソシエーション」って呼んでるのよ。でもまぁ、コネクションがわかりやすいかな、と。

ほげたん

なるほど。

おねーさん

はい、まとめるわよ。SAとは2点間で同一のセキュア化のパラメータを持つことにより構成される仮想的な通信路ってことね。

ほげたん

そのパラメータによる通信路で、セキュア化、暗号化や認証が行われたパケットが流れるってことだね。

おねーさん

そういうこと。SAの注意点。SAは一方通行である。

SAの方向

[FigureSP22-06:SAの方向]

おねーさん

パラメータは「行き」「帰り」で別々に設定されるの。同じものを使うわけじゃないってことね。
で、パラメータが別なんだから、SAも別ってこと。

ほげたん

同じでもいい気がするけど…。

おねーさん

同じでもいいけど、SAは別という扱いね。だから、行き帰りで2本のSAを構築する必要があるってこと。

ほげたん

パラメータが別なら、別のSAになる、と。

■ SADの検索

おねーさん

SA用のパラメータのセットの集合体をSADと呼ぶの。

ほげたん

SPDの次はSAD。間違えそうだね。で、パラメータセット?

おねーさん

SAの「セキュア化のためのパラメータ群」ね。鍵とかアルゴリズムとかIVとか。
で、ここでIPsecの動きを考えてみると〜、まずSPDでパケットの処理が決まるわね。

ほげたん

「BYPASS」「DISCARD」「PROTECT」だね。

おねーさん

そう。次に、「PROTECT」だった場合、SAを構築するんだけどそのためのパラメータを取得しなければならないわけでしょ。つまり、SADの検索を行いパラメータを取得するという作業を行う必要があるわけ。

ほげたん

IPsecによるセキュア化を行うためにパラメータがいるもんね。

おねーさん

でしょ。で、SADのセレクタから該当するSAパラメータを取得するわけね。ここで登場するのが、さっきSPDにあったPFP

ほげたん

ちょちょ、ちょい待ち。えっと、まずSADにもセレクタがあって、それを使ってSADを検索する?

おねーさん

そうよ。セレクタとして使うものはSPDと同じね。

ほげたん

ってことは、ローカル/リモートアドレスとかプロトコルとかだね。で、PFPって何?

おねーさん

SADを検索する際に、SPDのセレクタの値をそのまま使うか、パケットの値を使うかを決定する値ね。PFPがオンならパケットの値を使う

ほげたん

???

おねーさん

つまり、こう。

[FigureSP22-07:SADの検索]

ほげたん

ははぁ、PFPによって、より細かくSAの適用範囲を決めることができるんだ。

おねーさん

そう、パケットごとにパラメータを変更できるってこと。
よって、上の例だと、送信元が192.168.0.1と192.168.0.2のパケットは別の暗号化鍵で暗号化されることになるのよ。

ほげたん

へへぇ、面白いね。SPDとSADは1対1じゃなくって、1対多だってことだね。

おねーさん

PFPがオンだとそうなるわね。
ともかく、これでSAに使われるパラメータが決定されるわけでしょ。後は、パラメータに従ってセキュア化を行う、と。

ほげたん

……、そうだ。これ送信側だよね。受信側はどうなるの? さっきも聞いたけど、受信側はどうやって同じパラメータを入手するの?送ってきたパケットが使っているパラメータはどれかってどこで判断するの?

おねーさん

順番に行きましょう。まず、どうやって受信側は同じパラメータを入手するかだけど。静的と動的なパラメータの設定方式があるの。

ほげたん

静的と動的? 静的ってことは、手動入力する?

おねーさん

そういうことね。双方のホスト・ゲートウェイに同じパラメータを手動で設定しておくわけ。同じ暗号化アルゴリズム、同じ鍵、同じメッセージ認証方式、ね。

ほげたん

まぁ、確かにそうすればいいよね。で、動的な? 動的だから自動設定?

おねーさん

そう。SA構築の前にIKEによる交渉によりパラメータが決定する。SADに対応するエントリがない場合もIKEで自動設定することになるわ。

ほげたん

IKE? 前回のIPsecのアーキテクチャででてきた、インターネット鍵交換[Internet Key Exchange]?

おねーさん

そう。これについては先の回で説明するから。ともかく、静的・動的な手段によって、ホスト・ゲートウェイで同じパラメータを設定するってこと。で、なんだっけ?

ほげたん

送ってきたパケットが使っているパラメータはどれかってどこで判断するか、だよ。

おねーさん

それは受信したAH/ESPパケットのSPI値から判断するの。

ほげたん

SPI? SAのパラメータであった値だよね、Security Parameter Index?

おねーさん

そう、それ。AH/ESPヘッダにはSPIを入れる場所があるから、受け取った側はそれを見て判断するの。じゃ、送受側の処理をまとめると、こう。

[FigureSP22-08:IPsecの動作]

ほげたん

なるほど。ヘッダにあるSPIを使って判断する、と。つまり、SAの構築とかコネクションとかアソシエーションとか言ってるけど、要約すると。

おねーさん

すると?

ほげたん

「前に話しといた3番の方式でセキュア化したパケットだよ〜」「あい。前に話していた3番ね、OK。セキュア化解除できた」ってやりとりをするわけだね。

おねーさん

ん、まぁ、そんな感じよね、確かに。

ほげたん

SAってのは「合意されたパラメータ」で、「そのパラメータを使って通信すること」ってことなんだね。

おねーさん

そうね、だから「セキュア化された仮想的な通信路」としかいいようがないというか。「コネクション」と言うべきか。

ほげたん

確かにコネクションっぽいって言えばそうだし、そうじゃないって言えばそうだね。

おねーさん

ともかく、これがSA。

ほげたん

ん〜っと、SPDとSADの順番がいまいちわからないというか。おね〜さん、両方を同時に説明してよ。

おねーさん

確かにバラバラに説明したからわかりづらくなってるかも。じゃ、まとめて説明するわね。
んと、わけて説明した方がいいから、まずセキュア化しない場合ね。

[FigureSP22-09:処理の流れ(セキュア化なし)]

ほげたん

うん。SPDを検索して、BYPASSかDISCARDをそれぞれ送受側で行うんだね。
これだけだったら、ファイアウォールだよね。

おねーさん

ん? まぁ、そうね。じゃあ、次はセキュア化する場合。

[FigureSP22-10:処理の流れ(セキュア化)]

ほげたん

SADからパラメータを見つけてセキュア化するんだね。
…あれ? 受信側はSPD-Sを使ってアクセス制御しないんだね。

おねーさん

SADの方で決定するからSPD-Sを使わないってことじゃないかな。

ほげたん

受信側は、SADにSPIが存在しなかったり、セレクタの内容と違ったりしたら破棄するから、そこでアクセス制御してるってことかな。

おねーさん

そうね。さて、ほげたん? たぶんIPsecを難解だと思わせているSAについて理解できた?

ほげたん

あー、確かにこれはややこしいというか、わかりづらいというか。

おねーさん

でしょ。でもかなりぶっちゃけると、IPsecって何?ってきかれると、このSAが要って言えると思うのよ。同意されたパラメータを使ったセキュアな仮想通信路の構築、これがないとどうしようもならないからね。

ほげたん

確かにそうだね。

おねーさん

じゃ、また次回にしましょ。
おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!

セレクタ
[Selector]
SPD
[Secuirty Policy Database]
SAD
[Security Association Database]
PFP
[Populata From Packet]
ほげたんほげたんの今日のポイント
  • セキュリティポリシーによりアクセス制御を行う。
    • セレクタからSPDを検索する。
    • BYAPSS、DISCARD、PROTECTのいずれかが決定される。
  • ホスト間で同意されたパラメータによるセキュア化を行う。
    • それにより構築された仮想通信路がSA。
    • SADを検索し、パラメータを決定する。

3 Minutes NetWorking Supplement No.22

管理人:aji-ssz(at)selene.is.dream.jp