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
Ideas for defeating Anti-Deep-Fakes
rkx1209
0
31
セキュリティベンチャーのリスク管理
rkx1209
0
57
ファジング+トリアージ技術を用いた脆弱性解析自動化
rkx1209
0
57
Introduction to Fuzzing
rkx1209
6
4.2k
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
Other Decks in Programming
See All in Programming
PRレビューのお供にDanger
stoticdev
1
230
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.6k
機能が複雑化しても 頼りになる FactoryBotの話
tamikof
0
110
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
930
Datadog Workflow Automation で圧倒的価値提供
showwin
1
160
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
200
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
240
Unity Android XR入門
sakutama_11
0
180
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
290
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
210
SwiftUI Viewの責務分離
elmetal
PRO
2
270
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.2k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Agile that works and the tools we love
rasmusluckow
328
21k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Documentation Writing (for coders)
carmenintech
67
4.6k
Statistics for Hackers
jakevdp
797
220k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
Building Adaptive Systems
keathley
40
2.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
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