はじめに
本記事はAWSのEC2使用時に、DNSに関するログを取得する方法について記載しています。
セキュリティインシデント発生時に、調査を行うために重要になってくるのが証跡です。
例えばインシデント対応で、DNSのクエリが行われたかどうかについて確認したい場合、リアルタイムならEC2インスタンスにログインして、tcpdumpコマンドなどを用いて通信をキャプチャすることは容易です。
しかし、事後検証の場合はOS及びMWでログを取得していない限り、立証が難しくなります。
本記事では、AWSで利用可能なDNSに関するログを取得する方法と、留意点についてまとめています。
VPCフローログ
VPCフローログは、VPCのネットワークインターフェイス間のIPトラフィックに関する情報をキャプチャすることができるVPCの機能です。
VPC、サブネット、またはネットワークインターフェイス毎にフローログを作成することができます。
また取得したVPCフローログをCloudWatch Logsに送信することもできます。
留意点としては、フローログに関する全てのIPトラフィックはキャプチャされません。
公式ドキュメントより、以下の通信はフローログの制限事項となっています。
フローログですべての IP トラフィックはキャプチャされません。以下のトラフィックの種類は記録されません。
- Amazon DNS サーバーに接続したときにインスタンスによって生成されるトラフィック。独自の DNS サーバーを使用する場合は、その DNS サーバーへのすべてのトラフィックが記録されます。
- Amazon Windows ライセンスのアクティベーション用に Windows インスタンスによって生成されたトラフィック。
- インスタンスメタデータ用に 169.254.169.254 との間を行き来するトラフィック。
- Amazon Time Sync Service の 169.254.169.123 との間でやり取りされるトラフィック。
- DHCP トラフィック。
- ミラートラフィック。
- デフォルト VPC ルーターの予約済み IP アドレスへのトラフィック。
- エンドポイントのネットワークインターフェイスと Network Load Balancer のネットワークインターフェイスの間のトラフィック。
従ってDNSクライアントにAWSのDNSサーバを用いて名前解決を行う場合は、記録されません。
Google Public DNSの8.8.8.8
などに対するDNSサーバの通信は記録できます。
VPCフローログの設定
取得対象のEC2インスタンスが起動していることを前提に、VPCフローログ(ネットワークインターフェース)の設定方法を以下に記載します。
マネジメントコンソールから作業する場合は以下の手順で実施します。
詳細はCloudWatch Logs へのフローログの発行をご参照ください。
- ロール及びポリシーの作成
- CloudWatch logsのロググループの作成
- VPCフローログの作成
ロール及びポリシーの作成
CloudWatch Logsに、フローログを発行するためには、適切なアクセス権が必要です。
IAMロールにアタッチするIAMポリシーには、少なくとも以下のアクセス許可が含まれている必要があります。
- 許可ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Resource": "*"
}
]
}
またロールに対して、以下の信頼ポリシーを設定します。
- 信頼関係
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
CloudWatch logsのロググループの作成
CloudWatchからロググループを選択し、任意のロググループを作成します。
VPCフローログの作成
ネットワークインターフェースのフローログを取得する場合は、以下の設定を行います。
EC2の「ネットワークインターフェース」ペインから、取得するEC2インスタンスのネットワークインターフェースの「フローログ」のタブを選択し、「フローログの作成」を押します。
「フローログの作成」画面に遷移します。
「フローログの設定」の「Name」を入力します。
上記で作成したロググループとIAMロールを選択し、「フローログの作成」を押します。
その他の設定は便宜上、デフォルトとしています。
しばらくすると、ステータスが「アクティブ」に変わったことが確認できます。
ロールに適切な権限がない場合、ステータスはエラーになります。
フローログ動作確認
EC2インスタンスのOSイメージは、Amazon Linuxです。
デフォルトの場合、クライアントのリゾルバは以下の設定です。
nameserver
については、公式ドキュメントのAmazon DNS サーバーから詳細が確認できます。
- /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 10.0.0.2
上記設定の場合は、DNSに関する通信についてフローログでは記録できないため、設定を変更します。
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 8.8.8.8
EC2インスタンスから名前解決が行われた場合、ログイベントを参照すると、以下の通りに8.8.8.8は記録できることが確認できます。
DNSクエリログ
DNSクエリログは、指定したVPCで発生するAWSのDNSサーバに対するDNSクエリを記録することができます。
設定はRoute 53から行います。
DNSクエリログでは、DNSクライアントに外部のDNSサーバを用いて名前解決を行う場合は、記録されません。
記録できるのはAWSのDNSサーバの通信のみです。
DNSクエリログの設定
「Route 53」の「クエリのログ記録」ペインから、「クエリログ記録の設定」を押します。
「名前」と、「CloudWatch Logs のロググループ」を入力します。
「VPCを追加」を押して、VPCを追加した後に、「クエリログの設定」を押します。
「クエリログの設定」が完了しました。
「クエリがログに記録される VPC」を見ると、ログ記録のステータスがACrtiveになっていることが確認できます。
クエリログ動作確認
DNSリゾルバの設定は以下の通りに、デフォルトの状態(AWSのDNSサーバ)です。
- /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 10.0.0.2
EC2インスタンスから名前解決が行われた場合、ログイベントを参照すると、以下の通りにAWSのDNSサーバは記録できることが確認できます。
またレコードをクリックすると、詳細についてJSON形式で確認することができます。
おわりに
セキュリティインシデントに備えて、必要に応じて証跡を取得することは、クラウドを利用する場合も変わりません。