DNSの攻撃を受けてもわからないので、高価なサードパーティー製品を購入してお金で解決しようという人は多いのではないでしょうか?
そこで、「お金をかけたくない。」「コストをかけずになんとかしなくちゃならない。」と検討中の方々を対象として、DNSセキュリティ維持、のひとつの方法を取り上げたいと思います。
DNS Query LogsをOpenSearchに送信し、「Kibanaダッシュボード」で可視化するという方法です。
DNSクエリログは、セキュリティやトラブルシューティングの目的で使用されます。
たとえば、DNS攻撃やネットワークの問題を特定するために使用することができます。
また、DNSクエリログは、ネットワーク内でどのサービスが使用されているかを把握するために使用することもできます。
ただ、ログを眺めていても、ポイントがわかりにくいので、可視化して、分析する必要性があります。
DNSサーバーのログを監視することで、不審なアクティビティを検出する事が出来ます。
1).大量のリクエスト
一定期間に大量のDNSリクエストが発生した場合、DDoS攻撃の可能性があります。
2).おかしななクエリ
一般的でないドメイン名やクエリの種類など、不審なクエリが含まれる場合、攻撃の可能性があります。
3).クエリの変更
サーバーが期待しない回答を返した場合、DNSキャッシュのポイズニングやDNSハイジャックの可能性があります。
4).クエリの送信元
特定のIPアドレスから大量のリクエストが発生した場合、攻撃者の攻撃の可能性があります。
5).エラーコード
NXDOMAIN(ドメイン名が存在しない)やSERVFAIL(サーバー内部エラー)などのエラーコードが発生した場合、攻撃の可能性があります。
DNSクエリログ
DNSサーバーが受信したすべてのDNSクエリの情報を記録するログです。
DNSクエリは、インターネット上で名前解決を行うために使用されます。
つまり、DNSクエリは、ドメイン名をIPアドレスに変換するために送信されるメッセージです。
1.0 2017-12-13T08:16:02.130Z Z123412341234 example.com A NOERROR UDP Region 192.168.1.1 -
1.0 2017-12-13T08:15:50.235Z Z123412341234 example.com AAAA NOERROR TCP Region 192.168.3.1 192.168.222.0/24
1.0 2017-12-13T08:16:03.983Z Z123412341234 example.com ANY NOERROR UDP Region 2001:db8::1234 2001:db8:abcd::/48
1.0 2017-12-13T08:15:50.342Z Z123412341234 bad.example.com A NXDOMAIN UDP Region 192.168.3.1 192.168.111.0/24
1.0 2017-12-13T08:16:05.744Z Z123412341234 txt.example.com TXT NOERROR UDP Region 192.168.1.2 -
DNSクエリログには、次の情報が含まれます。
1).クエリの日付と時間
2).クエリを発行したクライアントのIPアドレス
3).問い合わせたドメイン名
4).問い合わせに使用されたクエリタイプ(例:A、MX、CNAMEなど)
5).応答の状態(成功、失敗、タイムアウトなど)
Amazon OpenSearch Service とは?
公式サイトによると、
1.AWS クラウドにおける OpenSearchクラスターのデプロイ、オペレーション、スケーリングを容易にする マネージドサービス。
2.OpenSearch はログ分析、リアルタイムのアプリケーションモニタリング、クリックストリーム分析などのユースケース向けの、完全なオープンソースの 検索および分析エンジン 。
https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/what-is.html
下記のサイトで、OpenSearch を使用する理由を確認すると、次の4つが該当します。
https://opensearch.org/docs/latest/
1.高速でスケーラブルな全文検索
ユーザーがアプリケーション、Web サイト、またはデータ レイク カタログ内で適切な情報を見つけられるようにします。
2.アプリケーションとインフラストラクチャの監視
ログ データを簡単に保存して分析し、パフォーマンス不足に対する自動アラートを設定します。
3.セキュリティとイベント情報管理
ログを一元化して、リアルタイムのセキュリティ監視とフォレンジック分析を可能にします。
4.オペレーショナル ヘルス トラッキング
オブザーバビリティ ログ、メトリクス、トレースを使用して、アプリケーションとビジネスをリアルタイムで監視します。
実現するための手順
①OpenSearchのドメインを作成する
OpenSearchのドメインを作成し、Kibanaのエンドポイントを設定します。
Amazon Elasticsearch Serviceと同様に、OpenSearchはドメインを作成して、インデックスやシャードの設定を構成することができます。
②Route 53でDNSクエリーログを有効にする
Route 53コンソールにアクセスし、「DNS query logging」を選択します。
③DNS Query LogsをOpenSearchに送信する
方法として、いくつかのパターンが考えられます。
【パターン1】
CloudWatch Logsサブスクリプションフィルターを使用
フィルターパターンに一致するログイベントが発生すると、アクションがトリガーされます。
1.IAMロールを作成する
CloudWatch Logsサブスクリプションフィルターで使用されるLambda関数にアクセスするための権限を持つロールを作成する必要があります。
2.Lambda関数を作成する
Lambda関数を作成し、DNS Query Logsを受信し、OpenSearchドメインに送信するコードを記述します。
3.Lambda関数をトリガーするために、Amazon CloudWatch Logsサブスクリプションフィルターを作成します。
CloudWatch Logsサブスクリプションフィルターを作成し、ロググループでDNS Query Logsをフィルタリングします。 Lambda関数をトリガーするようにサブスクリプションフィルターを構成し、Lambda関数で受信したログイベントをOpenSearchドメインに送信します。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_OpenSearch_Stream.html
【パターン2】
Amazon Kinesis Data Firehoseを使用
1.IAMロールを作成する
Amazon Kinesis Data FirehoseがOpenSearchにデータを転送できるようにするIAMロールを作成する必要があります。
IAMロールには、OpenSearchへのアクセスを許可するポリシーが含まれている必要があります。
※配信ストリームを設定する場合、Kinesis Data Firehose には「ワンクリック」の IAM ロールが用意されています。
https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/integrations.html
2.Amazon Kinesis Data Firehoseを設定する
Amazon Kinesis Data Firehoseコンソールにアクセスし、「Create delivery stream」を選択します。
1).Delivery stream nameを入力します。
2).Sourceを「Direct PUT or other sources」に設定します。
3).Destinationを「Amazon OpenSearch Service」に設定します。
4).OpenSearch domainを選択します。
5).Index nameとType nameを設定します。
6).Buffer conditionsを設定します。
7).Transformationを設定します。
8).設定の確認と、Delivery streamの作成を実行します。
これで、DNSクエリーログがOpenSearchに転送されます。
④最後に「Kibanaダッシュボード」を作成し、可視化します。
Kibanaでダッシュボードを作成する手順は次の通りです。
1.Kibanaにアクセスする
Kibanaのエンドポイントにアクセスします。
AWSマネジメントコンソールからKibanaダッシュボードにアクセスできます。
2.インデックスパターンを作成する
インデックスパターンを作成して、Elasticsearchに保存されているログをKibanaに表示できるようにします。
Kibanaのメインメニューから「Management」を選択し、「Index Patterns」をクリックします。
次に、インデックスパターンの名前を入力し、Elasticsearchに保存されているログのパターンを指定します。
3.ダッシュボードを作成する
Kibanaのメインメニューから「Dashboard」をクリックし、新しいダッシュボードを作成します。
次に、左側のメニューから「Visualize」をクリックし、ログのビジュアライゼーションを作成します。
4.ビジュアライゼーションをダッシュボードに追加する
作成したビジュアライゼーションをダッシュボードに追加します。
左側のメニューから「Dashboard」をクリックし、新しいダッシュボードを作成します。
次に、「Add」をクリックして、追加したいビジュアライゼーションを選択します。
5.フィルタを追加する(オプション)
必要に応じて、ダッシュボードにフィルタを追加します。
フィルタを使用すると、特定の条件に一致するログのみを表示することができます。
参考
https://aws.amazon.com/jp/blogs/news/configuring-and-authoring-kibana-dashboards/
これらの手順を実行することで、KibanaでカスタムのDNSクエリログダッシュボードを作成することができます。