Slide 1

Slide 1 text

IPsecを用いた鍵管理プロトコルと VPNルータの開発 @RKX1209 OSC Kyoto 2016

Slide 2

Slide 2 text

自己紹介 @RKX1209 神戸大学 工学部 B4 - 型システム, セキュリティ(アクセス制御とか)の研究 OS,VMM,コンパイラ,サーバーなど、基盤技術をさわってる #QEMU contributor #seccamp14,15,16 #未踏16

Slide 3

Slide 3 text

話すこと ● IPsec-VPNルーターの自作 ● ルーターの開発(ARPの実装) ● IPsecデーモンの開発 - IKEv2 [RFC5996], - PFKeyv2 [RFC2376], - ESP [RFC4303] の実装 RKX1209/OpenVpnRouter https://github.com/RKX1209/OpenVpnRouter

Slide 4

Slide 4 text

IPsec-VPN SA(Security Association)による論理的なコネクションを使用 Configuring Cisco IOS Easy VPN Remote with 802.1x Authentication

Slide 5

Slide 5 text

IPsec AH, ESP AH,ESPいずれかの方式を選択。後者が比較的よく使われる Crypto map based IPsec VPN fundamentals - negotiation and configuration

Slide 6

Slide 6 text

ESP(Encapsulating Security Payload) ● データの機密性確保 - トンネルモードの場合はIPパケット全体を、トランスポートモードの場合 はIPペイロード部を暗号化 (3DES, RC5, IDEA, CAST-128, Blowfish-CBC….) ● データ送信元の認証 - 共有秘密鍵を用いた送信相手の認証 (HMAC-SHA-1-96) ● 送信データの完全性の確保 - 初期ベクトルIVを用いた認証付き暗号が利用できる (AES-GCM, AES-CCM) どのアルゴリズムを使用するのか選択する必要がある

Slide 7

Slide 7 text

SA(Security Association) IPsecで使用される単方向コネクション。SPIで判別 ● SPD (Security Policy Database) - IPパケットを受信した際、まず最初に参照されるポリシーデー タベース。 該当パケットにIPsecを適用するか否かを決定する ● SAD (Security Association Database) - 次にSPIなどをキーとして該当するコネクションSAを検索。SA が存在しない場合はIKEv2などの鍵管理プロトコルによって SAが生成される。

Slide 8

Slide 8 text

SA(Security Association) SAは単方向でかつプロトコルごとに1つ。 例えばESP,AH両方使用する場合4コネクション必要 CISCO: IPSec Overview Part Five: Security Associations

Slide 9

Slide 9 text

IKEv2(Internet Key Exchange version2) ● SAの管理と選択 - 提案されたSAパラメータを元にIKE_SA, CHILD_SAを作 成。CHILD_SAがIPsecのSA。IKE_SAは2本のCHILD_SAから なる。 ● 共有秘密鍵の管理 - 定期的な二者間での鍵の共有,変更を行う。鍵の変更はDiffie- Hellman鍵共有アルゴリズムを用いる。 ● 相手の認証 - 事前共有方式かデジタル署名により相手を認証 SAの作成や暗号化,認証アルゴリズムの決定,通知を二者間で行うプロトコル

Slide 10

Slide 10 text

IKEv2(Internet Key Exchange version2) IKEv2(ISAKMP)はUDPの500番ポートを使用

Slide 11

Slide 11 text

IKEv2(Internet Key Exchange version2) IKEv2 header Initiator cookie: 送信者のIKE_SA SPI Responder cookie: 応答者のIKE_SA SPI Next Payload: 次ペイロード番号(種類) ヘッダの後に数種類のペイロードが次々とつながっている。 ペイロードにはSA作成や鍵交換用途など様々な種類があり、 必要になったペイロードをヘッダの後につなげて送信する。

Slide 12

Slide 12 text

IKEv2(Internet Key Exchange version2) ペイロードの種類。これらを適時組み合わせて通信する

Slide 13

Slide 13 text

IKEv2(Internet Key Exchange version2) 両者間にSAが作成されるまでのやり取り IKE_SA_INIT: IKE_SAの選択,共有秘密鍵の生成 IKE_AUTH: 相手の認証, CHILD_SAの選択と共有秘密鍵の作成 VPNs mit Strongswan-IKEv2 Linux-Magazine

Slide 14

Slide 14 text

PFKeyv2 IKE鍵交換デーモンがSADBにSAを登録,選択,削除などを行う際に使用する、 鍵管理プロトコル Kazunori Miyazawa: Linux Conference 2001 - SADBとPFKEYv2

Slide 15

Slide 15 text

PFKeyv2 RFC2367: PF_KEY Key Management API, Version 2

Slide 16

Slide 16 text

OpenSwan ● KLIPS - カーネルにIPsec機能を実装するための パッチ郡(メインラインマージ済み) ● PLUTO - IKE鍵交換, PFKey鍵管理をつかさどるデーモン ● 管理用コマンド/スクリプト - KLIPSとPLUTOのための管理用スクリプト VPNルータの実装はOpenSwanのコードを参考にした

Slide 17

Slide 17 text

OpenSwan IKE_SA_INIT,AUTHなどのやり取りをオートマトンとして表現。 正しい通信の順番を保証するような実装が取られている。 state: 以前の状態 next_state: 次の状態 recv_type: 通信の種類(IKE_SA_INIT or IKE_SA_AUTO or…) processor: 次の状態に移る際に実行するルーチン (programs/pluto/ikev2.c)

Slide 18

Slide 18 text

OpenSwan

Slide 19

Slide 19 text

OpenSwan PFKeyはLinuxのXFRMインターフェース/proc/net/pfkeyと netlinkを利用してカーネルと通信するような実装 (programs/pluto/kernel_netlink.c) add_sa: SAをSADBに追加 del_sa: SAをSADBから削除 get_sa: SAをSADBから取得 get_spi: SPIを取得

Slide 20

Slide 20 text

自作VPNルータ ルーティングは同セグメントならARP、 別セグメントなら上位ルータに委譲 ルーターにVPNサーバーを実装。 OpenSwanを参考に開発したため、 似たような動作をする。 (動作がまだ不安定, 未完成です) https://github.com/RKX1209/OpenVpnRouter

Slide 21

Slide 21 text

自作VPNルータ ● IPsec-AHの実装 ● IPsecポリシーの実装 ● NAT Traversal ● チェックサム計算,暗号化などのオフローディング - FPGAで回路実装 TODO

Slide 22

Slide 22 text

Reference ● 馬場達也 “マスタリング IPsec” O'REILLY ジャパン2006 ● RFC 5996: Internet Key Exchange Protocol Version 2 (IKEv2) ● RFC2367: PF_KEY Key Management API, Version 2 ● RFC 4303: IP Encapsulating Security Payload (ESP) ● WIDE Project “第XIV部 IPパケットの暗号化と認証” 2004