AWS - CloudTrail Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS CloudTrail は、AWS環境内のアクティビティを記録および監視します。それは、誰が何を、いつ、どこから行ったかを含む詳細なイベントログをキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrailは、ユーザーとリソースの動作を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。
各ログイベントには以下が含まれます:
呼び出されたAPIの名前: eventName
呼び出されたサービス: eventSource
時間: eventTime
IPアドレス: SourceIPAddress
エージェントメソッド: userAgent
。例:
Signing.amazonaws.com - AWS Management Consoleから
console.amazonaws.com - アカウントのルートユーザー
lambda.amazonaws.com - AWS Lambda
リクエストパラメータ: requestParameters
レスポンス要素: responseElements
イベントは約5分ごとにJSONファイルに新しいログファイルとして書き込まれ、CloudTrailによって保持され、最終的にログファイルは約15分後にS3に配信されます。 CloudTrailのログはアカウント間およびリージョン間で集約できます。 CloudTrailは、ログファイルの整合性を使用して、ログファイルがCloudTrailから配信された後に変更されていないことを確認できるようにします。これは、ダイジェストファイル内のログのSHA-256ハッシュを作成します。新しいログのSHA-256ハッシュは毎時作成されます。 トレイルを作成する際、イベントセレクターを使用して、ログを記録するトレイルを示すことができます:管理、データ、またはインサイトイベント。
ログはS3バケットに保存されます。デフォルトではサーバーサイド暗号化(SSE-S3)が使用されるため、AWSはアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのためにSSEをKMSと自分のキーで使用することもできます。
ログはこの名前形式のS3バケットに保存されます:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
バケット名は:aws-cloudtrail-logs-<accountid>-<random>
例:aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
各フォルダ内の各ログは、この形式に従った名前を持ちます:AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
ログファイル命名規則
さらに、ファイル整合性を確認するためのダイジェストファイルは、同じバケット内にあります:
ログファイルを配信するAWSアカウントでトレイルを作成します
CloudTrailのためにクロスアカウントアクセスを許可するように宛先S3バケットに権限を適用し、アクセスが必要な各AWSアカウントを許可します
他のAWSアカウントで新しいトレイルを作成し、ステップ1で作成したバケットを使用するように選択します
ただし、すべてのログを同じS3バケットに保存できる場合でも、複数のアカウントからのCloudTrailログを単一のAWSアカウントに属するCloudWatch Logsに集約することはできません。
アカウントには、異なるトレイルがCloudTrail で有効になっており、異なるバケットに同じ(または異なる)ログを保存できることを忘れないでください。
CloudTrailを作成する際、組織内のすべてのアカウントに対してCloudTrailを有効にし、ログを1つのバケットに取得するように指示することが可能です:
この方法で、すべてのアカウントのすべてのリージョンでCloudTrailを簡単に構成し、1つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。
ログが変更されていないことを確認するには、次のコマンドを実行します
CloudTrailは自動的にログをCloudWatchに送信できるため、疑わしい活動が行われたときに警告するアラートを設定できます。 CloudTrailがCloudWatchにログを送信できるようにするには、そのアクションを許可するロールを作成する必要があります。可能であれば、これらのアクションを実行するためにAWSのデフォルトロールを使用することをお勧めします。このロールはCloudTrailに以下を許可します:
CreateLogStream: CloudWatch Logsのログストリームを作成することを許可します
PutLogEvents: CloudTrailログをCloudWatch Logsのログストリームに配信します
CloudTrail Event Historyでは、記録されたログをテーブルで検査できます:
CloudTrail Insightsは自動的に管理イベントを分析し、異常な活動を警告します。たとえば、TerminateInstance
イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、異常なAPI活動を見つけて対応することをこれまで以上に容易にします。
インサイトはCloudTrailログと同じバケットに保存されます:BucketName/AWSLogs/AccountID/CloudTrail-Insight
CloudTrail Log File Integrity |
|
Stop unauthorized access |
|
Prevent log files from being deleted |
|
AWS Access Advisorは、過去400日間のAWS CloudTrailログを利用してインサイトを収集します。CloudTrailは、AWSアカウント内で行われたAWS APIコールと関連イベントの履歴をキャプチャします。Access Advisorはこのデータを利用して、サービスが最後にアクセスされた時期を表示します。CloudTrailログを分析することで、Access AdvisorはIAMユーザーまたはロールがどのAWSサービスにアクセスしたか、そしてそのアクセスがいつ行われたかを特定できます。これにより、AWS管理者は権限の精緻化に関する情報に基づいた意思決定を行うことができ、長期間アクセスされていないサービスを特定し、実際の使用パターンに基づいて過度に広範な権限を削減することができます。
したがって、Access Advisorはユーザーに与えられている不必要な権限について通知し、管理者がそれらを削除できるようにします
CloudTrail内でCSVインジェクションを実行することが可能で、ログがCSV形式でエクスポートされ、Excelで開かれると任意のコードが実行されます。 次のコードは、ペイロードを含む悪いトレイル名のログエントリを生成します:
For more information about CSV Injections check the page:
For more information about this specific technique check https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Honeytokensは機密情報の流出を検出するために作成されます。AWSの場合、これらは使用が監視されているAWSキーです。そのキーでアクションがトリガーされると、誰かがそのキーを盗んだに違いありません。
しかし、Canarytokens、 SpaceCrab、 SpaceSirenによって作成されたHoneytokensは、認識可能なアカウント名を使用するか、すべての顧客に対して同じAWSアカウントIDを使用しています。したがって、Cloudtrailにログを作成させることなくアカウント名やアカウントIDを取得できれば、そのキーがHoneytokenかどうかを知ることができます。
Pacuには、キーがCanarytokens、 SpaceCrab、 SpaceSirenに属しているかを検出するためのいくつかのルールがあります:
**canarytokens.org
**がロール名に表示されるか、アカウントID **534261010715
**がエラーメッセージに表示される場合。
最近テストしたところ、彼らはアカウント**717712589309
を使用しており、名前にcanarytokens.com
**の文字列がまだ含まれています。
エラーメッセージのロール名に**SpaceCrab
**が表示される場合。
SpaceSirenはユーザー名を生成するためにuuidsを使用します:[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
名前がランダムに生成されたように見える場合、高い確率でそれはHoneyTokenです。
アクセスキー内のエンコードされた情報からアカウントIDを取得でき、ここで説明されているようにそのアカウントIDをHoneytokens AWSアカウントのリストと照合できます:
Check more information in the orginal research.
これに対する最も効果的な手法は実際にはシンプルです。見つけたキーを使って、自分の攻撃者アカウント内のサービスにアクセスします。これにより、CloudTrailはあなた自身のAWSアカウント内にログを生成し、被害者のアカウント内には生成しません。
問題は、出力にアカウントIDとアカウント名を示すエラーが表示されるため、それがハニートークンかどうかを確認できることです。
過去には、CloudTrailにログを送信しないAWSサービスがいくつかありました(こちらにリストがあります)。これらのサービスのいくつかは、無許可の者(ハニートークンキー)がアクセスしようとすると、キー役割のARNを含むエラーで応答します。
このようにして、攻撃者はログをトリガーすることなくキーのARNを取得できます。ARNにはAWSアカウントIDと名前が表示され、ハニートークンの企業アカウントIDと名前を知るのは簡単なので、攻撃者はトークンがハニートークンかどうかを特定できます。
すべての公に発見されたAPIがCloudTrailログを生成しない問題は現在修正されているため、独自に見つける必要があるかもしれません...
詳細については、original researchを確認してください。
特定のAWSサービスは、データベースやKubernetesクラスター(EKS)などのインフラを生成します。ユーザーがこれらのサービス(Kubernetes APIなど)に直接話しかける場合、AWS APIを使用しないため、CloudTrailはこの通信を確認できません。
したがって、EKSにアクセスできるユーザーがEKS APIのURLを発見した場合、ローカルでトークンを生成し、CloudTrailに検出されることなくAPIサービスに直接話しかけることができます。
詳細は以下を参照してください:
AWS - EKS Post Exploitation最初の例では、単一のイベントセレクターが単一のオブジェクトを持つJSON配列として提供されています。"ReadWriteType": "ReadOnly"
は、イベントセレクターが読み取り専用イベントのみをキャプチャするべきであることを示しています(したがって、CloudTrailのインサイトは書き込みイベントをチェックしません)。
特定の要件に基づいてイベントセレクターをカスタマイズできます。
S3バケットを削除する
CloudTrailサービスからの書き込みを拒否するようにバケットポリシーを変更する
オブジェクトを削除するためにS3バケットにライフサイクルポリシーを追加する
CloudTrailログを暗号化するために使用されるKMSキーを無効にする
非対称キーを生成し、そのキーでCloudTrailがデータを暗号化し、秘密鍵を削除することでCloudTrailの内容を回復できなくすることができます。 これは基本的にS3-KMSランサムウェアで、以下に説明されています:
AWS - S3 Post ExploitationKMSランサムウェア
これは、異なる権限要件で前述の攻撃を実行する最も簡単な方法です:
AWS - KMS Post ExploitationAWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)