BIND9 RPZによるDNSファイアウォール:マルウェアやフィッシングを「水際」で防ぐ

Security tutorial - IT technology blog
Security tutorial - IT technology blog

なぜDNSファイアウォールが必要なのか?

ネットワーク管理者はレイヤー4ファイアウォールやWAFに注力しがちですが、意外な「急所」であるDNS層を見落としがちです。Ciscoのレポートによると、マルウェアの約92%がコマンド&コントロール(C2)サーバーからの命令受領やデータ窃取にDNSを利用しています。

ネットワーク内のPCがランサムウェアに感染した場面を想像してみてください。感染したPCが最初に行うのは、暗号化キーを取得するために未知のドメインを通じて「実家に電話(外部通信)」することです。このクエリを内部DNSサーバーで即座に遮断できれば、マルウェアが被害をもたらす前に無力化することが可能です。

BIND9 RPZ(Response Policy Zones)は、これを実現するための強力なツールです。フィッシングサイトの実際のIPを返す代わりに、DNSサーバーがNXDOMAIN(ドメイン不在)エラーを返したり、Sinkhole IP(内部の警告ページ)へ誘導したりします。これは、低コストかつ極めて効果的な能動的防御手法です。

BIND9のインストール

Ubuntu Serverはパッケージのリポジトリが安定しているため、最適な選択肢です。以下の基本的なコマンドだけで開始できます:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc -y

サービスが正常に準備できているかステータスを確認します:

sudo systemctl enable bind9
sudo systemctl start bind9

RPZによるDNSファイアウォールの設定

構築プロセスは、ポリシーの宣言とブラックリストの定義の2つのパートで構成されます。

ステップ1:named.conf.optionsでの宣言

/etc/bind/named.conf.optionsファイルを開きます。フィルタリング機能を有効にするために、optionsブロック内にresponse-policyセクションを追加する必要があります。

options {
    directory "/var/cache/bind";

    # 内部IPレンジからのクエリのみを許可
    allow-query { localhost; 192.168.1.0/24; };

    forwarders {
        8.8.8.8;
        1.1.1.1;
    };

    # RPZを有効化
    response-policy { 
        zone "rpz.blacklist"; 
    };
};

ステップ2:named.conf.localでのゾーン宣言

次に、rpz.blacklistゾーンを定義します。注意:これはポリシーゾーンであり、通常のドメイン名前解決用のゾーンではありません。

zone "rpz.blacklist" {
    type master;
    file "/etc/bind/db.rpz.blacklist";
    allow-query { none; };
};

ステップ3:ブラックリストデータファイルの作成

ここに悪意のあるドメインをリストアップします。/etc/bind/db.rpz.blacklistファイルを以下の内容で作成します:

$TTL 60
@            IN  SOA  localhost. root.localhost. (
                          2023102701 ; シリアル番号
                          3H         ; リフレッシュ
                          1H         ; リトライ
                          1W         ; 有効期限
                          1H )       ; 最小TTL
             IN  NS   localhost.

; --- ドメインのブロック ---

; NXDOMAIN(ドメインが存在しない)を返す
evil-malware.com     IN  CNAME  .
*.evil-malware.com   IN  CNAME  .

; 警告ページ(シンクホール)へ誘導
phishing-site.net    IN  A      192.168.1.100
*.phishing-site.net  IN  A      192.168.1.100

CNAME .を使用するのが最もスマートな方法です。これにより、ブラウザは30秒のタイムアウトを待つことなく、即座に接続を中断します。

テストと監視

ネットワークの中断を避けるため、再起動前に構文エラーをチェックします:

sudo named-checkconf
sudo systemctl restart bind9

結果の確認

クライアント端末からdigコマンドを使用して、ルールが適用されているか確認します:

dig @192.168.1.10 evil-malware.com

ステータス欄にNXDOMAINと表示されれば、システムは保護されています。

マルウェアの痕跡を追跡する

RPZの最大の利点は、感染した端末を特定できることです。クライアントが不正なサイトにアクセスしようとすると、BIND9が詳細なログを記録します。以下のコマンドでリアルタイムに監視できます:

tail -f /var/log/syslog | grep "rpz"

特定のIPがマルウェアドメインに対して繰り返しクエリを投げている場合、それは直ちに起動用USBを持ってそのPCの「救急措置」に向かうべき合図です。

ブロックリストの自動化

数千ものドメインを手動で入力するのは不可能です。Bashスクリプトを使用して、URLHausSpamhausから24時間ごとにデータを取得(クロール)することをお勧めします。ゾーンファイルを更新した後、rndc reloadを実行するだけで、サービスを停止することなく新しい設定を適用できます。

現在、多くの企業ではBIND9をスレーブゾーンとして構成し、専門のセキュリティベンダーからRPZリストを自動同期させています。この方法により、新しいマルウェアが出現してからわずか数分でシステムを最新の状態に保つことができます。

まとめ

BIND9 RPZによるDNSファイアウォールの導入は、あらゆるネットワークにおいて非常にコストパフォーマンスの高い手法です。プロキシのような強力なハードウェアを必要とせず、極めて信頼性の高い多層防御を実現します。将来のランサムウェア攻撃のリスクを軽減するために、今日15分かけて設定を行ってみてはいかがでしょうか。

Share: