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.9k
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.9k
カーネルエクスプロイトによるシステム権限奪取
rkx1209
13
7.7k
$Hell on Sony Snatch the Kernel privilage from Browser
rkx1209
6
25k
Linuxカーネルクローンの作り方
rkx1209
3
950
Other Decks in Programming
See All in Programming
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
1
450
traP の部内 ISUCON とそれを支えるポータル / PISCON Portal
ikura_hamu
0
180
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
150
Scaling your build logic
antalmonori
1
100
混沌とした例外処理とエラー監視に秩序をもたらす
morihirok
13
2.3k
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
370
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
950
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
130
2025.01.17_Sansan × DMM.swift
riofujimon
2
560
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
1.3k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Rails Girls Zürich Keynote
gr2m
94
13k
What's in a price? How to price your products and services
michaelherold
244
12k
GitHub's CSS Performance
jonrohan
1030
460k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
BBQ
matthewcrist
85
9.4k
Adopting Sorbet at Scale
ufuk
74
9.2k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Into the Great Unknown - MozCon
thekraken
34
1.6k
The Cult of Friendly URLs
andyhume
78
6.1k
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