CloudTrail ログファイルの整合性の検証機能は有効化しておきましょう

地味な機能ですが CloudTrail ログファイルが攻撃者によって改ざんされる可能性も 0 ではありません。CloudTrail ログファイルの整合性の検証機能は有効化しておきましょう。
2021.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSアクセスキーセキュリティ意識向上委員会って何?

昨今、AWS のアクセスキーを漏洩させてしまうことが原因でアカウントへの侵入を受け、
多額の利用費発生・情報漏洩疑いなど重大なセキュリティ事案が発生するケースが実際に多々起きています。

そこで、アクセスキー運用に関する安全向上の取組みをブログでご紹介する企画をはじめました。

アクセスキーを利用する場合は利用する上でのリスクを正しく理解し、
セキュリティ対策を事前に適用した上で適切にご利用ください。

はじめに

昨今、AWS のアクセスキーを不正利用した攻撃が増加してきております。
攻撃方法はどんどん巧妙化されており、CloudTrail ログファイルを改ざんすることで、攻撃した痕跡を残さないようにする可能性もあります。

今回は、CloudTrail ログファイルが改ざんされているか確認する機能として、CloudTrail 整合性の検証機能を紹介させていただきます。

ログファイルの整合性の検証機能とは

公式ドキュメントの記載を引用させていただきます。

CloudTrailログファイルの整合性の検証

CloudTrail が配信した後でログファイルが変更、削除、または変更されなかったかどうかを判断するには、CloudTrail ログファイルの整合性の検証を使用することができます。この機能は、業界標準のアルゴリズムを使用して構築されています。ハッシュ用の SHA-256 とデジタル署名用の RSA を備えた SHA-256。これにより、CloudTrail ログファイルを検出せずに変更、削除、または偽造することは計算上実行不可能になります。「」を使用できます。AWS CLICloudTrail が配信した場所のファイルを検証します。

使用する理由
検証されたログファイルは、セキュリティおよびフォレンシック調査で非常に重要です。たとえば、検証されたログファイルを使用すると、ログファイル自体が変更されていないこと、または特定のユーザーの認証情報が特定の API アクティビティを実行したことを確実にアサートできます。CloudTrail ログファイルの整合性の検証プロセスでは、ログファイルが削除または変更されたかどうかを知ることもできます。また、指定された期間内にログファイルがアカウントに配信されていないことを確実にアサートします。

設定方法

CloudTrailの証跡を作成または変更する際に、その他の設定の中からログファイルの検証の有効にチェックしましょう。
デフォルトではすでに有効になっています。

出力先の S3 バケットを確認すると、CloudTrail-Digest/ プレフィックスおよびダイジェストファイルが作成されていることを確認できます。
ダイジェストファイルが保存されるプレフィックスとなります。
ログファイルの検証を無効にしている場合、CloudTrail-Digest/ プレフィックスおよびダイジェストファイルは作成されません。

整合性検証の実行

AWS CLI コマンドを実行することで整合性検証が可能です。
以下のコマンドを実行する必要があります。

aws cloudtrail validate-logs --trail-arn <CloudTrail の ARN> --start-time <開始時間> --end-time <終了時間>

特に --trail-arn オプションと --start-time オプションは必須ですのでご注意ください。
今回は --end-time オプションも追加しました。

その他の使用可能なオプションや詳細は、以下のドキュメントをご参照ください。

validate-logs

動作確認① CloudTrail ログファイルに変更・削除などが行われていない場合

まずは CloudTrail ログファイルに変更・削除などの改ざんが行われていない場合、どのような動作になるか確認してみましょう。
特にログファイルが改ざんされていることを示すようなメッセージは表示されていないですね。

$ aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail --start-time 20210625T08:00:00Z --end-time 20210625T09:00:00Z
Validating log files for trail arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail between 2021-06-25T08:00:00Z and 2021-06-25T09:00:00Z

Results requested for 2021-06-25T08:00:00Z to 2021-06-25T09:00:00Z
Results found for 2021-06-25T08:46:47Z to 2021-06-25T09:00:00Z:

2/2 digest files valid
66/66 log files valid

動作確認② CloudTrail ログファイルが変更されている場合

次に CloudTrail ログファイルの内容が変更されている場合、どのような動作になるか確認してみましょう。
ログファイル名とともに INVALID: hash value doesn't match (ハッシュ値が一致しない) というメッセージが出力されていますね。
ログファイルの内容が変更されていることを確認することが出来ました。

$ aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail --start-time 20210625T08:00:00Z --end-time 20210625T09:00:00Z
Validating log files for trail arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail between 2021-06-25T08:00:00Z and 2021-06-25T09:00:00Z

Log file        s3://aws-cloudtrail-logs-012345678901-6dcc1cc6/AWSLogs/012345678901/CloudTrail/ap-northeast-1/2021/06/25/012345678901_CloudTrail_ap-northeast-1_20210625T0850Z_u2yP2rHzsTN7wogh.json.gz                                     INVALID: hash value doesn't match

Results requested for 2021-06-25T08:00:00Z to 2021-06-25T09:00:00Z
Results found for 2021-06-25T08:46:47Z to 2021-06-25T09:00:00Z:

2/2 digest files valid
65/66 log files valid, 1/66 log files INVALID

動作確認③ CloudTrail ログファイルが削除されている場合

次に CloudTrail ログファイル自体が削除されている場合、どのような動作になるか確認してみましょう。
ログファイル名とともに INVALID: not found (ファイルが見つからない) というメッセージが出力されていますね。
ログファイルが削除されていることを確認することが出来ました。

$ aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail --start-time 20210625T08:00:00Z --end-time 20210625T09:00:00Z
Validating log files for trail arn:aws:cloudtrail:ap-northeast-1:012345678901:trail/MyCloudtrail between 2021-06-25T08:00:00Z and 2021-06-25T09:00:00Z

Log file        s3://aws-cloudtrail-logs-012345678901-6dcc1cc6/AWSLogs/012345678901/CloudTrail/ap-northeast-1/2021/06/25/012345678901_CloudTrail_ap-northeast-1_20210625T0855Z_7NuSu6ISdFyaeNwu.json.gz                                     INVALID: not found

Results requested for 2021-06-25T08:00:00Z to 2021-06-25T09:00:00Z
Results found for 2021-06-25T08:46:47Z to 2021-06-25T09:00:00Z:

2/2 digest files valid
65/66 log files valid, 1/66 log files INVALID

注意点

  • S3 オブジェクトのダイジェストファイルのストレージ使用料は発生します
  • ダイジェストファイルは 1 時間毎に作成されます。よって状況によっては整合性検証が可能となるまで 1 時間待たないといけません
  • ダイジェストファイルとログファイルは、CloudTrail が配信した元の S3 の場所から移動してはいけません
  • AWS CLI では S3 上に保存されたログファイルのみ整合性検証が可能です (ログファイルをローカルにダウンロードするなどして整合性検証はできません)

まとめ

正直、かなり地味な機能ではあります。
しかし、CloudTrail ログファイルはアクセスキーが漏洩してしまった際の調査には必須となります。
CloudTrail ログファイル自体が改ざんされてしまうと、調査は非常に困難となります。

CloudTrail ログファイルの整合性の検証機能は必ず有効化しておきましょう。

参考情報