DNSとは? — ドメイン名をIPアドレスに変換する仕組み
DNS(Domain Name System)は、kurutann.comのようなドメイン名を163.44.99.209のようなIPアドレスに変換する仕組みです。電話帳に例えると「名前から电話番号を探す」役割です。
DNS名前解決の流れ
Step 1
ブラウザが リゾルバ(フルサービスリゾルバ) に問い合わせ
まずキャッシュを確認→なければStep2へ
まずキャッシュを確認→なければStep2へ
Step 2
リゾルバ → ルートDNSサーバ に問い合わせ → 「.comのサーバはここ」
Step 3
リゾルバ → .com TLDサーバ に問い合わせ → 「kurutann.comのサーバはここ」
Step 4
リゾルバ → 権威DNSサーバ に問い合わせ → IPアドレスを取得!
Step 5
結果をキャッシュして、ブラウザに返答(TTL期間中はキャッシュから返す)
DNSキャッシュポイズニング攻撃
攻撃者がリゾルバのキャッシュに偽のIPアドレスを注入する攻撃です。正規のサイトに見せかけて偽サイトへ誘導できます。
キャッシュポイズニング攻撃の流れ
攻撃準備
攻撃者は偽のIPアドレスを含む大量の偽DNS応答を用意
Step 1
リゾルバが権威DNSサーバに問い合わせるタイミングで攻撃者も偽応答を送りつける
Step 2
リゾルバがトランザクションIDの一致する偽応答を先に受け取ってしまうとキャッシュが汚染される
結果
ユーザーが
bank.example.comを開くと攻撃者のサーバへ誘導される(フィッシング・盗聴)
対策
DNSSEC
DNS応答にデジタル署名を付与。偽応答は署名検証で弾かれる。最も有効な根本対策
ランダムポート / トランザクションID
問い合わせのたびにポート番号とIDをランダム化してポイズニングを難しくする
DNS over HTTPS (DoH)
DNS通信をHTTPS(443)で暗号化。盗聴・改ざんを防ぐ
TTL設計
TTLを短くすることで汚染されたキャッシュが早く消える
試験ポイントまとめ
DNSキャッシュポイズニング = リゾルバのキャッシュに偽IPを注入する攻撃
対策の中心はDNSSEC(デジタル署名による検証)
DNSが使用するポートは UDP/53(通常クエリ)