Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
140
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
Ruby meets secure DNS & modern Internet protocols
hanazuki
0
170
Mackerelでの家庭用ルータの監視 / Monitoring home routers with Mackerel
hanazuki
5
4.5k
構成管理してるつもりだけにならない方法
hanazuki
10
8.9k
Other Decks in Technology
See All in Technology
手動から自動へ、そしてその先へ
moritamasami
0
280
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
5k
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
130
学習データって増やせばいいんですか?
ftakahashi
1
260
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
160
“決まらない”NSM設計への処方箋 〜ビットキーにおける現実的な指標デザイン事例〜 / A Prescription for "Stuck" NSM Design: Bitkey’s Practical Case Study
bitkey
PRO
1
590
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1k
AWS Trainium3 をちょっと身近に感じたい
bigmuramura
1
130
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
1
160
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
150
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
540
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
570
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
490
How to Ace a Technical Interview
jacobian
280
24k
Faster Mobile Websites
deanohume
310
31k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Designing Experiences People Love
moore
143
24k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
4 Signs Your Business is Dying
shpigford
186
22k
Bash Introduction
62gerente
615
210k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
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