BINDのlogを適切に設定して攻撃の予兆を察知しよう


投稿日:2014年8月13日
  • 7
  • 0



ハッカーの攻撃対象になりやすいBIND DNSサーバ

bind_log

BINDのセキュリティについて、以前の投稿でchroot化やDNS Amp攻撃の対処方法などを解説しました。

性善説に基づいて設計されたBINDはその他にも数々の脆弱性が発見され、その度に緊急のアップデートを繰り返しています。ハッカーもその点は心得ていて、手っ取り早く踏み台を探すためにまずはBINDを狙ってきます。

困った状況と言えますが、逆手に取れば「BINDのログを監視すれば攻撃の意思を持つアクセスを特定できる」と言い換えることもできます。

そこでこのページではBINDで適切なログを収集する方法を解説します。


一般的なロギングの例

BINDには予めログを制御する方法が用意されています。
設定は「/etc/named.conf」で行います。いきなり細かな設定を追うよりも、実際の例を通して解説したほうが理解が早いと思います。

まずは下準備としてログを書き出すディレクトリを作成します。今回は「/var/log/named/」に書き出す設定にしました。

# mkdir /var/log/named/
# chown named.named /var/log/named/

以下、一般的なログを出力する設定の例です。「/etc/named.conf」に追記してください。

logging {
        channel "default-log" {
                file "/var/log/named/default.log" versions 5 size 10M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
		
        category default { "default-log"; };
};

1行目、「loggingセクション」でロギングに関する設定を開始します。

2行目、「default-log」というチャンネルを定義。

3行目、「file」でログファイルの場所と、ローテーションして残しておくバージョンの数、ログファイルのサイズを指定。

4行目、「severity」でログレベル(重要度)を指定。

5行目、「print-time」は時刻の出力。「No」とすることで出力しないこともできます。

6行目、「print-severity」は「severity」で指定したレベルを出力。

7行目、「print-category」は後述するカテゴリーを出力。

10行目、カテゴリーで「default」を選択。このカテゴリーで指定した内容のログが、チャンネルの形式で出力されます。

設定が終わったらBINDを再起動します。

# /etc/init.d/named restart

指定したディレクトリにlogファイルが作成されているか確認して下さい。

# cat /var/log/named/default.log

以上の設定が一般的なロギングの例です。

BINDの設定ファイルだけで細かなログの制御ができることが理解できたと思います。次は各設定の詳細について解説します。


channel(チャンネル)について

channel名は自由に決めることができます。
通常はログレベルに合わせて、「default-log」や「config-log」等とすることが多いようです。

デフォルトで以下の様なチャンネルが用意されています。

null

logを破棄するためのチャンネル。

channel "null" {
	null;
};

default_stderr

標準エラーへ出力するためのチャンネル。

channel "default_stderr" {
	stderr;
	severity info;
};

default_debug

デバッグモードのためのチャンネル。

channel "default_debug" {
	file "named.run";
	severity dynamic;
};

fileについて

fileではログの出力先を指定します。
上の例のように特定のファイルへ書き出す方法だけでなく、複数の方法が用意されています。

ファイルへ書き出す方法

上の解説にある通り、特定のディレクトリにlogファイルを出力します。

上記の例のように特定のディレクトリにファイルを書き出す例。

file "/var/log/named/default.log" versions 5 size 10M;

versionsにはログローテーションした際に保存しておくファイルの数を指定します。このオプションがあることでログが無限に作成されてしまう事態を防ぐことができます。

sizeで指定したファイルサイズに達するとログをローテーションします。サイズには「K/k、M/m、G/g」を指定することができます。

syslogへ書き出す方法

ログの管理を行うsyslogへlogを渡す方法です。CentOS6だとlogの収集はrsyslogになっているので注意してください。
そもそもBINDのロギングだけで細かく制御できるのでわざわざsyslogやrsyslogへ書き出す必要もあまりないと思います。(BINDだけでサーバを構成していてログを専用のサーバへセキュアに転送したいといった場合はrsyslog等を利用します。)

rsyslogについては以前の投稿でまとめた」ので必要な方は参照してください。

syslogへファシリティinfoで書き出す例

file syslog (info);

標準エラー出力へ書き出す方法

file stderr;

ログを破棄する方法

file null;

named.runへ書き出す方法

named.runへの書き出しは通常BINDのデバック作業で利用します。
デバッグモードではログレベルを詳細に指定できるため、細かなログの制御が可能です。

named.runは、設定ファイル「named.confのoptionセクション」で指定したワークディレクトリに作成される。デフォルトだと「/var/named」。

ワークディレクトリに「data」というディレクトリを作成してnamed.runに書き出す例。

file "data/named.run";

デバッグメッセージの制御は起動時に指定します。デバッグレベルは0から99まで用意されています。数字が多いほど詳細なログになる。

起動時にデバッグレベルを指定する例

# /usr/local/sbin/named -u named -d デバッグレベル
または
# /usr/sbin/named -u named -d デバッグレベル

このデバッグモードのログは前出のチャンネルdefault_debugに出力される。出力場所を変えたい場合は「file “named.run”;」の部分を変更する。


severityについて

セキュリティはログレベル(重要度)を指定するオプションです。
ログレベルはそれぞれ以下のものを指定することができます。criticalが重大なエラーのみ出力。dynamicは全てのログを出力します。

critical、error、warning、notice、info、debug、dynamic

print-xxxについて

print-timeはタイムスタンプ、
print-severityはセキュリティレベル、
print-categoryはカテゴリ名、をそれぞれyesにするとログに記載されます。デフォルトだと無効になっています。


categoryについて

チャンネルでは出力の形式を指定しましたが、カテゴリーでは出力の内容を指定します。カテゴリに指定できるものは以下の通りです。

カテゴリ 内容
database ゾーン情報やキャッシュ情報など、データベースに関連する記録
security 要求の承認/否認の記録
config 構成ファイルの構文解析と処理の記録
resolver クライアントに代わって実行されるキャッシュサーバの動作に代表される、再帰検索のようなDNS解決の記録
xfer-in サーバが受信したゾーン転送の記録
xfer-out サーバが送信したゾーン転送の記録
notify NOTIFY(通知)プロトコルの記録
client クライアント要請の処理記録
network ネットワーク操作の記録
update DDNSの記録
queries 問い合わせクエリーの記録
dispatch サーバモジュールへ入ってくるパケットを処理するCPU割り当て(ディスパッチ)の記録
dnssec DNSSECやTSIG処理の記録
lame-servers DNS解決の際にほかのサーバで見つけた設定ミス(lame)の記録
general 上記以外の多くのログはカテゴリが未分類であり、それらはgeneralに分類される
default categoryで意図的に指定された以外のカテゴリがここで定義される

http://www.atmarkit.co.jp/ait/articles/0310/15/news001.htmlより


以上でBINDのロギングについて解説しました。
チャンネルとカテゴリを組み合わせて意図したログが出力されるように設定してください。


現在のページを共有する



現在のページに関連する記事

BINDのlogを適切に設定して攻撃の予兆を察知しよう BIND DNS サーバの正引き用ゾーンファイルと、逆引き用ゾーンファイルの作成方法
BINDのlogを適切に設定して攻撃の予兆を察知しよう DNS Amp攻撃の解説と、踏み台にされないためのBIND DNSの設定
BINDのlogを適切に設定して攻撃の予兆を察知しよう Swatchでログを監視して、攻撃に合わせた対策を自動で実行する方法
BINDのlogを適切に設定して攻撃の予兆を察知しよう BIND DNSで行う名前解決と、各種ネットワークの設定
BINDのlogを適切に設定して攻撃の予兆を察知しよう IPアドレスとドメインを結びつける、DNSサーバの役割と名前解決の仕組み
BINDのlogを適切に設定して攻撃の予兆を察知しよう BINDで構築したDNSサーバと、各種ネットワークの動作確認
BINDのlogを適切に設定して攻撃の予兆を察知しよう レジストリへの権威ネームサーバの登録と、名前解決に関するネットワークの設定

おすすめの記事

iptablesで設定したパケットフィルタリングが正しく動作しているかテスト

iptablesで設定したパケットフィルタリングが正しく動作してい…

ページ編集の手間を劇的に減らす、Custom Field Templateでカスタムフィールドを作る方法

ページ編集の手間を劇的に減らす、Custom Field Templateでカス…

知らなきゃ損!WordPressの表(テーブル)はExcelで作ろう!

知らなきゃ損!WordPressの表(テーブル)はExcelで作ろう!

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

エンティティとデコード用プラグイン「Entity Decode Button」を作成しました

エンティティとデコード用プラグイン「Entity Decode Button」…

プロ根性のあるデザイナーやブロガーにお勧めする4つの画像編集ソフト

プロ根性のあるデザイナーやブロガーにお勧めする4つの画像編集…

rsyslogを利用したログファイル作成と、logrotateを利用したログのローテーション

rsyslogを利用したログファイル作成と、logrotateを利用したロ…

Linuxの基本の基本。Linuxの基本的なディレクトリ構成

Linuxの基本の基本。Linuxの基本的なディレクトリ構成


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。