シーケンス図で理解する「DNS」

## はじめに
◆この記事は何？
DNSに関連する技術をシーケンス図を用いて説明します。

◆対象
DNSを理解したい人、試験のために覚えたい人

◆この記事のねらい
シーケンス図を書くことでDNSの理解が深まり、覚えやすくなります。
より効率良く勉強できるような一助になれば幸いです。

## DNS(Domain Name System)
DNSはドメイン名とIPアドレスの対応を管理するための仕組みです。

ドメイン名とIPアドレスを変換する仕組みを**名前解決**といいます。

もしDNSがないと、Webサイトにアクセスする際にIPアドレスを指定しなければなりません。利便性が著しく低くなります。

## DNSサーバ

### コンテンツDNSサーバ

コンテンツDNSサーバは、管理しているドメインないのドメイン名とIPアドレスの対応を管理します。

### キャッシュDNSサーバ
クライアントはキャッシュDNSサーバーにコンテンツDNSサーバへの問い合わせを代行してもらいます。

もしキャッシュDNSサーバがなければ、コンテンツDNSサーバにアクセスが集中してしまいます。

```title:DNSサーバの役割
sequenceDiagram
    participant クライアント
    participant キャッシュDNSサーバ
    participant コンテンツDNSサーバ
    autonumber
    クライアント ->> キャッシュDNSサーバ: IPアドレスの問い合わせ
    キャッシュDNSサーバ ->> コンテンツDNSサーバ:IPアドレスの問い合わせ
    コンテンツDNSサーバ -->> キャッシュDNSサーバ :IPアドレス
    キャッシュDNSサーバ -->> クライアント :IPアドレス
    
```

```mermaid
sequenceDiagram
    participant クライアント
    participant キャッシュDNSサーバ
    participant コンテンツDNSサーバ
    autonumber
    クライアント ->> キャッシュDNSサーバ: IPアドレスの問い合わせ
    キャッシュDNSサーバ ->> コンテンツDNSサーバ:IPアドレスの問い合わせ
    コンテンツDNSサーバ -->> キャッシュDNSサーバ :IPアドレス
    キャッシュDNSサーバ -->> クライアント :IPアドレス
    
```

◆キャッシュDNSサーバーの目的
キャッシュDNSサーバを利用することで、コンテンツDNSサーバへの不要な通信を削減し、クライアントへの応答時間を短縮できます。

## DNSキャッシュポイズニング

DNSキャッシュポイズニングは、キャッシュDNSサーバに偽の情報を記憶させることで偽サイトに誘導する攻撃です。

```title:DNSキャッシュポイズニング
sequenceDiagram
    participant 攻撃者
    participant キャッシュDNSサーバ
    participant コンテンツDNSサーバ
    autonumber
    攻撃者 ->> キャッシュDNSサーバ : IPアドレスの問い合わせ
    キャッシュDNSサーバ ->> コンテンツDNSサーバ : IPアドレスの問い合わせ
    攻撃者 ->> キャッシュDNSサーバ : 偽情報を先に回答
    コンテンツDNSサーバ -->> キャッシュDNSサーバ: IPアドレス(回答)
```
    

```mermaid
sequenceDiagram
    participant 攻撃者
    participant キャッシュDNSサーバ
    participant コンテンツDNSサーバ
    autonumber
    攻撃者 ->> キャッシュDNSサーバ : IPアドレスの問い合わせ
    キャッシュDNSサーバ ->> コンテンツDNSサーバ : IPアドレスの問い合わせ
    攻撃者 ->> キャッシュDNSサーバ : 偽情報を先に回答
    コンテンツDNSサーバ -->> キャッシュDNSサーバ: IPアドレス(回答)
    
```
攻撃者は正規のコンテンツDNSサーバよりも先に偽の応答を送ることで、キャッシュDNSサーバに偽の情報を記憶させることができます。

また、カミンスキー攻撃はDNSキャッシュポイズニングの一つです。

◆カミンスキー攻撃
攻撃対象の名前にランダムなラベルを付加した名前を用いることで、連続での攻撃を可能にしました。攻撃試行を増やしています。


◆DNSキャッシュポイズニングの対策
①オープンリザルバにしないこと
オープンリゾルバとは、不特定多数の外部からの要求を受け付ける状態のことです。
オープンリゾルバにしないことで、第三者がキャッシュDNSサーバを利用できないようにします。

②ポート番号をランダムにする（ソースポートランダマイゼーション）
キャッシュDNSサーバは、正規の応答をトランザクションIDとポート番号で判断しています。
ポート番号をランダムにすることで、応答の偽装が成立しにくくなります。

③キャッシュの時間を長くする
キャッシュの時間を長くすることで、更新頻度が低くなるため、攻撃の機会が減ります。

④DoH(DNS over HTTPS)
DNSへの問い合わせを平文で通信するのではなく、HTTPSの暗号化通信にすることで、盗聴・なりすまし・改ざんを防ぎます。

攻撃者がネットワークトラフィックを盗聴しても内容を読み取ることができなくなります。

DNSSECはDNSキャッシュポイズニングを根本的に防ぐ対策になります。

## DNSSEC
DNSSECは、コンテンツDNSサーバの応答にデジタル署名をつけて正当性を確認する仕組みです。

DNSSECは、DNS Security Extensionsを意味します。

```mermaid
sequenceDiagram
    participant キャッシュDNSサーバ
    participant コンテンツDNSサーバ
    autonumber
    note over キャッシュDNSサーバ, コンテンツDNSサーバ: 公開鍵の共有
    キャッシュDNSサーバ ->> コンテンツDNSサーバ : IPアドレスの問い合わせ
    コンテンツDNSサーバ ->> コンテンツDNSサーバ: 署名の付与（秘密鍵を使用して暗号化）
    コンテンツDNSサーバ -->> キャッシュDNSサーバ: 応答（DNSデータと署名）
    キャッシュDNSサーバ ->> キャッシュDNSサーバ : 公開鍵で復号して署名の検証
    
```
コンテンツDNSサーバの公開鍵を**DNSKEY**、リソースレコードに対するデジタル署名を**RRSIG**といいます。

RRSIGはResource Record digital SIGnatureの略です。

## おわりに
この記事では、DNS、DNSキャッシュポイズニング、DNSSECについてシーケンス図を用いて説明しました。

参考になれば幸いです。

## 参考

[「ゼロからスタート! 教育系YouTuberまさるの情報処理安全確保支援士1冊目の教科書」](https://amzn.asia/d/8xrjsct)

[「2024　情報処理安全確保支援士「専門知識＋午後問題」の重点対策」](https://amzn.asia/d/55OW7VH)