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
RubyKaigi 2023でのセキュアなDNSリゾルバの運用 / Secure DNS Re...
Search
Kasumi Hanazuki
November 21, 2023
Technology
0
98
RubyKaigi 2023でのセキュアなDNSリゾルバの運用 / Secure DNS Resolver at RubyKaigi 2023
Kasumi Hanazuki
November 21, 2023
Tweet
Share
More Decks by Kasumi Hanazuki
See All by Kasumi Hanazuki
Mackerelでの家庭用ルータの監視 / Monitoring home routers with Mackerel
hanazuki
5
4.2k
構成管理してるつもりだけにならない方法
hanazuki
10
8.5k
Other Decks in Technology
See All in Technology
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
620
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
Chasing the White Whale of Open Source - ROI
mrbobbytables
0
120
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
170
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
4
1.9k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.6k
SDN の Hype Cycle を一通り経験してみて思うこと / Going through the Hype Cycle of SDN
mshindo
3
270
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
430
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
130
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.8k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.8k
Taming you application's environments
salaboy
0
210
Featured
See All Featured
Happy Clients
brianwarren
98
6.7k
A Tale of Four Properties
chriscoyier
156
23k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Navigating Team Friction
lara
183
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
The Pragmatic Product Professional
lauravandoore
31
6.3k
How GitHub (no longer) Works
holman
310
140k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
850
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Transcript
RubyKaigi 2023での セキュアなDNSリゾルバの運用 ― DoT/DoHとDDR ― Kasumi Hanazuki <
[email protected]
> 2023-11-21
DNSOPS.JP BoF
花月かすみ • @京大マイコンクラブ(KMC) • Rubyとインターネットがすき • RubyKaigi NOC 2 •
2017 広島 • 2018 仙台 • 2019 福岡 • 2020 松本(中止) • 2022 津 • 2023 松本 • 2024 那覇(予定) 2023-11-21 DNSOPS.JP BoF
RubyKaigi プログラミング言語Rubyと処理系の国際会議 • 地方巡業 • 参加者: 約1,200人 • 有志で会場Wi-Fiを構築・運用 ◦
アクセスポイント: 約50台 ◦ 同時接続: 約1,300台(peak) ◦ DNS(フルサービス): 530 qps(peak), 370 qps(mean) (数字はRubyKaigi 2023実績) 3 2023-11-21 DNSOPS.JP BoF
京大マイコンクラブ(KMC) / AS59128 京都大学のマイコン(パソコン)なんでもサークル • 1977: 設立 • 1991: PIアドレス割当(歴史的PI)
• 2016: AS運用開始 ◦ 上流: AS20473, AS59105, AS59103 • 2022–23: RubyKaigiにインターネット接続を提供 4 2023-11-21 DNSOPS.JP BoF
DNSと暗号化DNS 5 2023-11-21 DNSOPS.JP BoF
今日のスコープ DNSのしくみ 6 クライアントはリゾルバを通してドメインを検索する クライアント (来場者) リゾルバ (NOCが用意) 権威サーバ 権威サーバ
再帰検索 反復検索 2023-11-21 DNSOPS.JP BoF
公衆Wi-Fiの盗聴・改竄可能性 • WPA2 Personalは事前共有鍵(PSK)が公知の場合, 盗聴・改竄に対して脆弱 • 転がしてあるケーブルは 抜ける 7 2023-11-21
DNSOPS.JP BoF 平文DNSが 流れている!
暗号化DNSプロトコル • DNS over TLS (DoT) ◦ TLSで暗号化 • DNS
over HTTPS (DoH) ◦ 通例,HTTP/2またはHTTP/3が使われる ▪ どちらもマルチストリームを実現するプロトコルで, クエリに対してレスポンスを順不同に返せる ▪ TLSで暗号化 8 2023-11-21 DNSOPS.JP BoF 主要OS・ ブラウザに 実装済み
DNSから暗号化DNSへ 9 2023-11-21 DNSOPS.JP BoF
DNSから暗号化DNSへ 10 2023-11-21 DNSOPS.JP BoF クライアントが暗号化DNSを使うように 自動構成するしくみが必要 • 従来のDHCPやIPv6 RA
(RDNSS)は リゾルバのIPアドレスのみクライアントに伝える → リゾルバがどのような暗号化に対応しているか分からない
日和見暗号化 (Opportunistic Encryption) リゾルバが対応していそうなら, クライアントが勝手に暗号化プロトコルにアップグレード • 853/tcpにTLS接続してみて, ◦ 接続できれば暗号化通信をする ◦
接続できなければ平文通信にフォールバック • DoHへのアップグレードは難しい ◦ HTTPのパスが分からないため 11 2023-11-21 DNSOPS.JP BoF systemd 239+ (2018-01) Disabled by default Android 9+ (2018-08)
Adaptive DNS Discovery クライアントを暗号化プロトコルに明示的に誘導する • DNR (RFC 9462) ◦ DHCPやIPv6
RAを拡張して クライアントに暗号化リゾルバを紹介する • DDR (RFC 9463) ◦ リゾルバとクライアントの間で 暗号化プロトコルをネゴシエーションする 12 Windows Insider 25982 (先月出た) macOS* 13+ iOS/iPadOS 16+ (2022-10) 2023-11-21 DNSOPS.JP BoF * Mac ChromeはDDRに未対応
Discovery of Designated Resolvers (DDR) • 初期状態: クライアントは「非暗号化リゾルバのIPアドレス」 だけ知っている •
リゾルバは特殊用途ドメイン名“resolver.arpa.”で 自身の対応プロトコルを公開する ◦ “arpa.”の権威サーバが答えるわけではない • クライアントはこの情報をもとに接続プロトコルを選ぶ 13 2023-11-21 DNSOPS.JP BoF
サービスバインディング・レコード _dns.resolver.arpa. IN SVCB 1 resolver.rubykaigi.net. ( alpn="h3,h2" dohpath="/dns-query{?dns}") IN
SVCB 2 resolver.rubykaigi.net. ( alpn="dot") 14 ターゲット A/AAAAを引くと 暗号化リゾルバの アドレスが分かる 対応プロトコル 優先度 2023-11-21 DNSOPS.JP BoF パラメータで DoHのパスを指定
DDR利用時のフロー 15 🔐 2023-11-21 DNSOPS.JP BoF クライアント DHCPサーバ 非暗号化リゾルバ 暗号化リゾルバ
非暗号化リゾルバの アドレス SVCB? _dns.resolver.arpa. 暗号化リゾルバのアドレス・プロトコル TLSハンドシェイク DNSクエリ・レスポンス 同じホストでもよい 検証
暗号化リゾルバの検証 SVCBで知った暗号化リゾルバを信頼して利用する条件 • Verified Discovery a. 証明書がトラストアンカーまで遡って検証可能 b. 証明書のSANが「非暗号化リゾルバのアドレス」を含む •
Opportunistic Discovery a. 「非暗号化リゾルバのアドレス」がプライベートアドレス b. 「非暗号化リゾルバのアドレス」と 「暗号化リゾルバのアドレス」が一致 16 2023-11-21 DNSOPS.JP BoF Appleデバイスには 実装されていない? 追試おねがいします
中間にDNSフォワーダがある場合 • 非暗号化リゾルバのアドレス ∉ サーバ証明書のSAN → Verified Discoveryではアップグレードされない • 非暗号化リゾルバのアドレス
≠ 暗号化リゾルバのアドレス → Opportunistic Discoveryでもアップグレードされない 17 2023-11-21 DNSOPS.JP BoF クライアント フォワーダ リゾルバ _dns.resolver.arpa. SVCB _dns.resolver.arpa. SVCB 1 one.one.one.one. (...) 192.168.0.1 1.1.1.1
DDRの限界 • 防げる攻撃 ◦ パッシブな盗聴 ◦ 正規のリゾルバへのなりすまし(Verified Discoveryの場合) • 防げない攻撃
◦ SVCBクエリを妨害して平文通信へダウングレード ◦ 経路ハイジャックでCAを騙して証明書を不正取得 ◦ 野良DHCP ◦ ハニーポットWi-Fi 18 2023-11-21 DNSOPS.JP BoF 多層防御が必要
RubyKaigi 2023での 暗号化DNSの実装 19 2023-11-21 DNSOPS.JP BoF
RubyKaigi 2023のリゾルバ AppleデバイスにDDRが実装されたと知り[WWDC] DNSを暗号化する実験を思いつく • DoT, DoH (HTTP/2, HTTP/3) •
DDR(2023-05当時ドラフト) • DNR(当時まだオプション番号が未割り当て・クライアント実装がない) [WWDC]: https://developer.apple.com/videos/play/wwdc2022/10079/ 20 2023-11-21 DNSOPS.JP BoF
使用したサーバソフトウェア 21 • Unbound ◦ DoTとDoH/2に対応するDNSリゾルバ ◦ DNSリゾルバとして折り紙付き ◦ 一方,DoHは?
▪ Ubuntu 22.04に含まれるv1.13.1では壊れていた (最新版では修正済) • Envoy ◦ HTTP/2と/3に対応するHTTPプロキシ・ロードバランサ ◦ 巨大トラフィックを捌く実績あり まだ枯れてなさそう… 汎用コンポーネントを 使えるHTTPの旨味 2023-11-21 DNSOPS.JP BoF
リゾルバの構成 Envoyを前段においてHTTP/2,/3両対応 (AWS NLBの制約で,同ポート番号のTCP/UDPは 同じターゲットに向ける必要もあった) 22 ロード バランサ クライアント unbound
envoy Unbound Envoy DoH/2 Do53 DoT DoH/2 DoH/3 権威サーバ 2023-11-21 DNSOPS.JP BoF local-data resolver. arpa.
リゾルバのTLSサーバ証明書 DDR対応には,SANにIPアドレスを含むサーバ証明書が必要 また,PKIで検証できる必要がある • パブリックCAはパブリックIPのSANのみ証明する → リゾルバはパブリックIPアドレスで運用する必要 (リゾルバ自体はインターネットから到達可能でなくともよい) • 社内環境等では,プライベートCAを使って
プライベートIPアドレスで運用可能?(未検証) 23 2023-11-21 DNSOPS.JP BoF subjectAltName
AWS VPC 会議場 パブリックIPアドレスでリゾルバを運用 会場ルータでパブリック→プライベートのNATをしていた 24 クライアント リゾルバ ロード バランサ
リゾルバ ルータ ルータ 10.0.12.34 10.0.56.78 (AZごとのアドレス) 192.50.220.164 192.50.220.165 NAT 2023-11-21 DNSOPS.JP BoF
RubyKaigi 2023での実験結果 25 2023-11-21 DNSOPS.JP BoF
1/3から1/2のトランザクションを暗号化 30分ごとに集計した プロトコル別のクエリ割合 26 プロトコル 講演中 昼休憩 平文 62% 43%
DoT 06% 09% DoH/2 30% 46% DoH/3 03% 03% Day1 10:30-11:00 Day1 12:30-13:00 macOS/iOS Android macOS/iOSが たまにHTTP/3を 使う(詳細不明) Matzのキーノートを PCで実況? PCを閉じて スマホを使っている? 2023-11-21 DNSOPS.JP BoF
DoTが少ないような 同時に802.1X認証の実験もしていた • Androidは選択肢の多い フォームの入力を要求 → 難しかったのではないか(予想) • Google製以外の端末でも 初期設定でOE有効になっている?
(未調査) 27 2023-11-21 DNSOPS.JP BoF
おわりに 28 2023-11-21 DNSOPS.JP BoF
それって意味あるの? 公衆Wi-Fiにおいて… • (プライバシーを気にする)管理者: ◦ 利用者を守るために暗号化リゾルバを提供したい ◦ 特定の第三者(公衆DNS)に情報を横流ししたくない • (プライバシーを気にする)利用者:
◦ そもそも管理者は攻撃者と同じくらい信用できない → 大手の公衆DNSを使う 29 …という気持ちで やっています 2023-11-21 DNSOPS.JP BoF
それって意味あるの? ② • オフィスLAN ◦ 利用者と管理者の利害は一致しているはず? • 商用ISP ◦ リゾルバから見た直接のクライアントはCPE(ルータ)?
→ 対応はまだまだ先? ◦ TLS化の計算負荷は大きい? 30 ご意見・ご感想 うかがいたいです 2023-11-21 DNSOPS.JP BoF
Acknowledgement • @sorah, RubyKaigi Organizer & NOC Lead ◦ L1-L4設計,L2-L4構築,その他すべて
• NOCチームメイトのみなさん ◦ L1構築,ブログ記事・発表資料のレビュー • RubyKaigiスポンサー各社 31 2023-11-21 DNSOPS.JP BoF
関連記事 • RubyKaigi 2023でのセキュアなDNSリゾルバの運用 ― DNS-over-HTTPSとDDR (@hanazuki) ◦ https://blog.kmc.gr.jp/entry/2023/05/10/165300 •
RubyKaigi 2023 Wi-Fi: 足回り徹底解説 (@sorah) ◦ https://techlife.cookpad.com/entry/2023/05/31/113000 • ソースコード ◦ https://github.com/ruby-no-kai/rubykaigi-nw 32 2023-11-21 DNSOPS.JP BoF
おまけ 33 2023-11-21 DNSOPS.JP BoF
RubyKaigi 2023ネットワークの概略 34
RubyKaigi 2023ネットワークの概略 35
36 クエリ数: 平文UDP(青) vs DoH/2(黄) vs DoT(橙) Grafana