鹿色のIT雑記

エンジニアの鹿色がIT技術を追いかけていくブログです

UbuntuでDNSサーバを動かして攻撃のことも少し探ってみる

前回、以下の記事でドメインIPアドレスの関係を調べてみました。

shikairo.hatenablog.com

 

世の中にはこの関係をおかしくさせる攻撃もあるようなので、今回まとめてみます。

 

 

攻撃って?

DNSキャッシュポイズニングという攻撃手段があるようです。

詳しくは、DNSスプーフィング - Wikipediaを参照いただきたいのですが、ドメイン名とIPアドレスの対応を教えてくれるDNSサーバのIPアドレスがキャッシュされていない時に、偽の応答を送信してIPアドレスを騙して覚えさせるもののようです。

なお、DNSSECのような電子署名を利用して、偽の応答を受け取らないように対策されていることが多いようですので、最近はあまり身構えなくても良さそうです。

ただし、よくわからないDNSサーバに優先して接続するような場合は注意が必要かもしれません。

 

構築してみる

というわけで実際にDNSサーバを構築して動きを見てみようと思います。

Bindのインストール

UbuntuServerの公式に設定方法があるので、そのまま使ってみます。

https://ubuntu.com/server/docs/service-domain-name-service-dns

$ sudo apt update && sudo apt -y upgrade && sudo apt install -y bind9 dnsutils

設定ファイルを変えてみる

/etc/bind/配下に設定ファイルがあるようなので、そこをいじってみます。

 

/etc/bind/named.conf.optionsに、一般的なDNSサーバに問い合わせる設定を記述するようです。

ここをうっかり設定してしまうと、インターネットに存在する権威DNSサーバへの攻撃になってしまいそうなので、あえてスキップして進めます。

 

ただ、この時点で存在しないドメインに問い合わせるにしても、localhostサブドメインで試せば権威DNSサーバに行かないので良いのかもしれません。

$ dig shikairo.sonzaishinai.localhost +noall +answer
shikairo.sonzaishinai.localhost. 0 IN    A    127.0.0.1

 

このドメインのZoneを/etc/bind/named.conf.localで設定してみます。

$ cat /etc/bind/named.conf.local

zone "shikairo.sonzaishinai.localhost" {
    type master;
    file "/etc/bind/db.example.com";
};

読み込むファイルは例にあるようにコピーして作ってみます。

$ sudo cp /etc/bind/db.local /etc/bind/db.example.com

デフォルトだとlocalhost向けの設定になっているようです。

$ cat /etc/bind/db.example.com
;
; BIND data file for local loopback interface
;
$TTL    604800
@    IN    SOA    localhost. root.localhost. (
                  2        ; Serial
             604800        ; Refresh
              86400        ; Retry
            2419200        ; Expire
             604800 )    ; Negative Cache TTL
;
@    IN    NS    localhost.
@    IN    A    127.0.0.1
@    IN    AAAA    ::1

一旦このままサービスを再起動してみます。

$ sudo systemctl restart bind9.service

すると何も変わりませんでした…

$ dig shikairo.sonzaishinai.localhost +noall +answer
shikairo.sonzaishinai.localhost. 0 IN    A    127.0.0.1

 

resolve.confも修正する

どうも、クライアント側のresolve.confの設定変更が必要なようなのでやってみます。

$ cat /etc/resolv.conf

nameserver 127.0.0.53
search shikairo.sonzaishinai.localhost

これでも変わらない…

 

と思ってよくよくみたんですが、このファイルでlocalhostの設定はされてしまっているんですね。

/etc/bind/named.conf.default-zones: default zones such as localhost, its reverse, and the root hints

 

なぜか動かない…

原因としては、以下のコマンドを実行しても127.0.0.53が返ってこないことかなと思うのですが、今回はここまでの調査とします。

$ resolvectl status

 

感想

普段何気なく使わせてもらっているDNSサーバですが、自前で作るとなるとつまづきポイントがいろいろあるように感じました。

またリベンジしてみます。