Stories from the Infrastructure · VI
世界に名前をつけるシステム、DNSと、それが自分自身に向けられた日
「DNSは、ほとんどの人が聞いたことのない、インターネットで最も重要なインフラだ」 引用元:特定の一篇なし(ネットワークエンジニアの間でよく引用される評)
I.
ブラウザに名前を入力したとき——どんな名前でも、どんなウェブサイトでも——コンピュータはそれがどこにあるか知らない。知っているのは名前だけだ。接続が確立される前に、名前は数字に変換されなければならない。IPアドレス——到達しようとしているサーバーの実際の場所。この変換はドメインネームシステムが行い、あまりに素早く、あまりに目に見えない形で行われるため、ほとんどの人はそれが起きていることにすら気づかない。
DNSは階層構造だ。頂点にはルートネームサーバーがある——Jon Postelが1998年に一時的に支配下に置いた十三の論理サーバー——すべてのトップレベルドメインの権威ネームサーバーを知っている。.com、.net、.jp、.ukなど。それらの権威ネームサーバーはそのTLD内のすべてのドメインのネームサーバーを知っている。そしてそれらのネームサーバーは各ドメイン内のすべてのホスト名のIPアドレスを知っている。一つの名前の解決はこの階層をミリ秒で降りていき、複数のサーバーから答えを組み立て、ブラウザに返す。
ほとんどの場合、答えはキャッシュされている。コンピュータ、ルーター、ISPのリゾルバ——すべてが最近の答えを記憶し、再び尋ねることなく提供する。このキャッシングがDNSを速くする理由だ。それはまた、DNSが脆弱点を抱える理由でもある。システムはリゾルバが受け取った答えを信頼することに依存しており、それらの答えを提供するネームサーバーが利用可能で正直であり続けることに依存している。
Paul MockapetrisはJon Postelと並んでISIで働きながら、1983年にDNSを発明した。DNS以前、名前とアドレスの対応はHOSTS.TXTという単一ファイルで管理されていた——スタンフォード研究所から配布される。インターネット上のすべてのコンピュータが定期的にこのファイルをダウンロードした。インターネットが数百のホストを持っていた頃は管理可能だった。1983年にはそうではなかった。Mockapetrisは無限にスケールできる分散階層システムを設計した。十億のドメインまでスケールした。そしてその四十年の間に、現代のインターネットがとうに乗り越えた信頼についての前提を積み重ねてきた。
II.
東部時間の朝七時、Dynという会社——そのサービスが大手ウェブサイトの大部分を支えるDNSプロバイダー——は膨大な量のトラフィックを受け取り始めた。通常のトラフィックではない。クエリだ。毎秒数千万のDNSクエリが、数千万の異なるIPアドレスから、同じ名前を求めて、すべて同時に届いた。
これはDDoS——分散型サービス拒否攻撃——だったが、特定の種類のものだった。Miraiと呼ばれるボットネットを使用したDNS増幅攻撃。Miraiは前の数ヶ月にわたって、デフォルトまたは弱いパスワードで動くEmbedded Linuxを実行しているセキュリティカメラ、デジタルビデオレコーダー、ルーター、ベビーモニターなど数十万台のインターネット接続デバイスを侵害することで組み立てられた。これらのデバイスは自分がボットネットの一部であることを知らなかった。設計された通りにクエリに答えていただけだ——ただ今はクエリがMiraiのコマンドサーバーから来て、応答がDynに向けられていた。
DynのインフラはこのDNSリクエストの洪水の下で機能不全に陥った。その日のほとんどの間、顧客のDNS解決は断続的に失敗した。Twitterがダウンした。Spotifyがダウンした。Reddit、CNN、ニューヨーク・タイムズ、PayPal、Amazon。GitHub。PlayStationネットワーク。米国東海岸のユーザーには、インターネットの大部分が単に動かなくなったように見えた。ウェブサイト自体は問題なかった——サーバーは動作し、コンテンツは無事だった——しかしDNSなしには到達不能だった。名前に数字がなかった。
攻撃は最終的に、Minecraftゲームで優位を得るためにMiraiを最初に作った米国の三人の若者に遡った。彼らはインターネットの半分をダウンさせるつもりはなかった。ただ自分たちが理解している以上に強力なものを作り、それが意図を完全に逸脱してしまっただけだった。
III.
2016年のDyn攻撃が明らかにしたことには、哲学的に眩暈がする何かがある。ウェブサイトは壊れていなかった。サーバーはダウンしていなかった。物理インフラ——ケーブル、ルーター、データセンター——は完全に無事だった。失敗したのは名前だった。そして名前がなければ、何も機能しなかった。
DNSはしばしばインターネットの電話帳と呼ばれ、この例えはおおむね正確だ。しかし電話帳は受動的だ——棚に置かれ、参照されるのを待つ。DNSは能動的だ。応答し、変換し、クエリが届いた瞬間に利用可能でなければならない。それを取り除けば、それを可能にするすべてのものが他に存在していても、接続は確立できない。
この命名への依存は、最初に見えるより深い。IPアドレスはスケールして人間が読めるものではない。172.217.14.206をブックマークする人はいない。151.101.1.140を訪問するよう友人に伝える人もいない。名前は単に便利なのではない——インターネットがユーザーによって理解される方法であり、人間のデジタル生活のすべてが組織化される層だ。DNSへの攻撃はインターネットのインフラへの攻撃ではない。インターネットの可読性への攻撃だ。
Mockapetrisは信頼できる仲間のネットワークのためにDNSを設計した。それが今サービスを提供するインターネットはそうではない。Miraiは公共インターネットに公開されるべきではなかったデバイスから組み立てられ、デフォルトパスワードで出荷されるべきではなかったソフトウェアで動き、尋ねられるべきではないクエリに答えていた。その連鎖のすべての失敗は既知の問題だった。2016年10月21日以前に修正されたものはなかった。
今も完全には修正されていない。
了
本文はAIアシスタント(Claude / Anthropic)により執筆されており、内容の正確さは保証できません。挿絵は生成AIにより制作しました。