Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IPsecを用いた鍵管理プロトコルと VPNルータの開発
Search
Ren Kimura
July 29, 2016
Programming
1
3.8k
IPsecを用いた鍵管理プロトコルと VPNルータの開発
OSC/Kyoto 2016
Ren Kimura
July 29, 2016
Tweet
Share
More Decks by Ren Kimura
See All by Ren Kimura
Introduction to Fuzzing
rkx1209
6
4.1k
ARM TrustZone エクスプロイト入門
rkx1209
7
7.8k
The Game is Over. Nintendo switch has been totally compromised
rkx1209
9
5k
インサイドNintendo Switch
rkx1209
18
12k
More efficient remote debugging with Thin Hypervisor
rkx1209
3
2.5k
Reverse Debugging with radare2
rkx1209
6
1.8k
カーネルエクスプロイトによるシステム権限奪取
rkx1209
13
7.6k
$Hell on Sony Snatch the Kernel privilage from Browser
rkx1209
6
25k
Linuxカーネルクローンの作り方
rkx1209
3
940
Other Decks in Programming
See All in Programming
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
200
たのしいparse.y
ydah
3
120
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
330
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
200
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
130
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
Zoneless Testing
rainerhahnekamp
0
120
.NET 9アプリをCGIとして レンタルサーバーで動かす
mayuki
1
770
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
240
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
The Cult of Friendly URLs
andyhume
78
6.1k
Designing Experiences People Love
moore
138
23k
Site-Speed That Sticks
csswizardry
2
190
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
The Invisible Side of Design
smashingmag
298
50k
Facilitating Awesome Meetings
lara
50
6.1k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Typedesign – Prime Four
hannesfritz
40
2.4k
Transcript
IPsecを用いた鍵管理プロトコルと VPNルータの開発 @RKX1209 OSC Kyoto 2016
自己紹介 @RKX1209 神戸大学 工学部 B4 - 型システム, セキュリティ(アクセス制御とか)の研究 OS,VMM,コンパイラ,サーバーなど、基盤技術をさわってる #QEMU
contributor #seccamp14,15,16 #未踏16
話すこと • IPsec-VPNルーターの自作 • ルーターの開発(ARPの実装) • IPsecデーモンの開発 - IKEv2 [RFC5996],
- PFKeyv2 [RFC2376], - ESP [RFC4303] の実装 RKX1209/OpenVpnRouter https://github.com/RKX1209/OpenVpnRouter
IPsec-VPN SA(Security Association)による論理的なコネクションを使用 Configuring Cisco IOS Easy VPN Remote with
802.1x Authentication
IPsec AH, ESP AH,ESPいずれかの方式を選択。後者が比較的よく使われる Crypto map based IPsec VPN fundamentals
- negotiation and configuration
ESP(Encapsulating Security Payload) • データの機密性確保 - トンネルモードの場合はIPパケット全体を、トランスポートモードの場合 はIPペイロード部を暗号化 (3DES, RC5,
IDEA, CAST-128, Blowfish-CBC….) • データ送信元の認証 - 共有秘密鍵を用いた送信相手の認証 (HMAC-SHA-1-96) • 送信データの完全性の確保 - 初期ベクトルIVを用いた認証付き暗号が利用できる (AES-GCM, AES-CCM) どのアルゴリズムを使用するのか選択する必要がある
SA(Security Association) IPsecで使用される単方向コネクション。SPIで判別 • SPD (Security Policy Database) - IPパケットを受信した際、まず最初に参照されるポリシーデー
タベース。 該当パケットにIPsecを適用するか否かを決定する • SAD (Security Association Database) - 次にSPIなどをキーとして該当するコネクションSAを検索。SA が存在しない場合はIKEv2などの鍵管理プロトコルによって SAが生成される。
SA(Security Association) SAは単方向でかつプロトコルごとに1つ。 例えばESP,AH両方使用する場合4コネクション必要 CISCO: IPSec Overview Part Five: Security
Associations
IKEv2(Internet Key Exchange version2) • SAの管理と選択 - 提案されたSAパラメータを元にIKE_SA, CHILD_SAを作 成。CHILD_SAがIPsecのSA。IKE_SAは2本のCHILD_SAから
なる。 • 共有秘密鍵の管理 - 定期的な二者間での鍵の共有,変更を行う。鍵の変更はDiffie- Hellman鍵共有アルゴリズムを用いる。 • 相手の認証 - 事前共有方式かデジタル署名により相手を認証 SAの作成や暗号化,認証アルゴリズムの決定,通知を二者間で行うプロトコル
IKEv2(Internet Key Exchange version2) IKEv2(ISAKMP)はUDPの500番ポートを使用
IKEv2(Internet Key Exchange version2) IKEv2 header Initiator cookie: 送信者のIKE_SA SPI
Responder cookie: 応答者のIKE_SA SPI Next Payload: 次ペイロード番号(種類) ヘッダの後に数種類のペイロードが次々とつながっている。 ペイロードにはSA作成や鍵交換用途など様々な種類があり、 必要になったペイロードをヘッダの後につなげて送信する。
IKEv2(Internet Key Exchange version2) ペイロードの種類。これらを適時組み合わせて通信する
IKEv2(Internet Key Exchange version2) 両者間にSAが作成されるまでのやり取り IKE_SA_INIT: IKE_SAの選択,共有秘密鍵の生成 IKE_AUTH: 相手の認証, CHILD_SAの選択と共有秘密鍵の作成
VPNs mit Strongswan-IKEv2 Linux-Magazine
PFKeyv2 IKE鍵交換デーモンがSADBにSAを登録,選択,削除などを行う際に使用する、 鍵管理プロトコル Kazunori Miyazawa: Linux Conference 2001 - SADBとPFKEYv2
PFKeyv2 RFC2367: PF_KEY Key Management API, Version 2
OpenSwan • KLIPS - カーネルにIPsec機能を実装するための パッチ郡(メインラインマージ済み) • PLUTO - IKE鍵交換,
PFKey鍵管理をつかさどるデーモン • 管理用コマンド/スクリプト - KLIPSとPLUTOのための管理用スクリプト VPNルータの実装はOpenSwanのコードを参考にした
OpenSwan IKE_SA_INIT,AUTHなどのやり取りをオートマトンとして表現。 正しい通信の順番を保証するような実装が取られている。 state: 以前の状態 next_state: 次の状態 recv_type: 通信の種類(IKE_SA_INIT or
IKE_SA_AUTO or…) processor: 次の状態に移る際に実行するルーチン (programs/pluto/ikev2.c)
OpenSwan
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を取得
自作VPNルータ ルーティングは同セグメントならARP、 別セグメントなら上位ルータに委譲 ルーターにVPNサーバーを実装。 OpenSwanを参考に開発したため、 似たような動作をする。 (動作がまだ不安定, 未完成です) https://github.com/RKX1209/OpenVpnRouter
自作VPNルータ • IPsec-AHの実装 • IPsecポリシーの実装 • NAT Traversal • チェックサム計算,暗号化などのオフローディング
- FPGAで回路実装 TODO
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