Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【Cyber-sec+】ログの森で出会った CloudTrail との奇妙な旅

【Cyber-sec+】ログの森で出会った CloudTrail との奇妙な旅

2024/3/12 Cyber-sec+ Meetup #3 発表資料
#CSecMeetup

Hisashi Hibino

March 12, 2024
Tweet

More Decks by Hisashi Hibino

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 ⽇⽐野 恒 - Hisashi Hibino Security Architect CISSP, CCSP,

    CISA, PMP, 情報処理安全確保⽀援⼠(000999) [執筆] Ø Elastic Stack 実践ガイド [Logstash/Beats 編](インプレス刊) Ø AWS 継続的セキュリティ実践ガイド (翔泳社刊) Ø セキュリティログ分析基盤活⽤⼊⾨(@IT) [略歴] l 2018 年までの 10 年間、IT コンサルティング会社に在籍 l 2019 年より⼤⼿ Web 系ユーザー企業のセキュリティ組織に所属 l 多くのログ基盤やクラウドセキュリティに関するプロジェクトを推進 l 現在はログスペクト株式会社の IT アーキテクトとして活動中 2
  2. なぜ、CloudTrail を本⽇のテーマにしたのか 3 • これまで企業のセキュリティ対策を評価させていただく 中で CloudTrail の証跡作成はされていたが、それ以上 にログを活⽤しているケースは稀であった •

    CloudTrail をセキュリティの脅威検知に活かすために は、有効な活⽤例とログの読み⽅(フィールド構造とそ の値)についての分かりやすい解説書が必要であると考 えた • もっと多くの⽅々に CloudTrail を⾝近に感じてもらい たい、有効活⽤できるようになってもらいたいと想って いる(実は書籍の裏テーマには ”CloudTrail を読める ようになること” を設定していた)
  3. アジェンダ 5 1. あらためて CloudTrail とは 2. CloudTrail 監査ログを活⽤しているサービス 3.

    証跡保存後のステップとは 4. CloudTrail 監査ログの分析⼿段 5. CloudTrail を活⽤した監視のユースケース 6. CloudTrail 監査ログの⾒るべきポイント 7. まとめ
  4. あらためて CloudTrail とは 6 AWS サービスに対する API 操作をイベント証跡として記録するサービスです AWS クラウド

    AWS CloudTrail (90⽇間) S3 バケット CloudWatch Logs (オプション) CloudTrailに 対応している AWSサービス マネジメントコンソール AWS CLI AWS SDK Assume Role 接続元 • ルートユーザー • IAMユーザー • アクセスキー • IAMロール ログイベントのカテゴリー • 管理イベント • データイベント(オプション) • インサイトイベント(オプション) ログ保存先 証跡 ログ取得 操作 操作ツール 【参考】AWS CloudTrail とは︖: https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-user-guide.html
  5. CloudTrail 監査ログを活⽤しているサービス 7 CloudTrail 監査ログは GuardDuty や Macie の脅威検出に活⽤されている Amazon

    GuardDuty Amazon Macie GuardDuty では、基礎データソースとして CloudTrail 管理イベント、VPC Flow Logs、DNS ログの 3 つのログを活⽤し、セキュリティの脅威検出を⾏う。 CloudTrail の管理イベント及び S3 データイベントが IAM 及び S3 の検出結果タイプで⽤いられている。 Macieでは、バケットのセキュリティとプライバシーの モニタリング精度を⾼めるため CloudTrail の管理イベント 及び S3 データイベントを活⽤している。 バケットのパブリックアクセスブロックの設定変更 バケットの作成や削除、バケットポリシーや バケット ACL の設定変更などをモニタリングしている。
  6. CloudTrail 監査ログの分析⼿段 9 # 確認⽅法 対象イベント ログ保持期間 対象リージョン 操作⽅法 内容

    1 CloudTrail イベント履歴 管理イベントのみ 90⽇ コンソールで操作を しているリージョン GUI CloudTrail のコンソールの [イベント履歴] 画⾯で検索する⽅法(追加設定なく簡単に検 索ができる) 2 CloudTrail Lake 管理イベント データイベント 最⼤7年 (2,557⽇) 組織内(マルチアカ ウント)の全リー ジョン SQL ベース 2022年1⽉にローンチされた⽐較的新しい⽅ 法でイベントデータストアを作成することで 利⽤開始できる (これまで S3 に保存していた監査ログに対 して、Athena から検索していたのと同じ使 ⽤感で分析ができる) 3 S3 + Athena 制約なし ※証跡の設定次第 制約なし ※S3 の設定次第 制約なし SQL ベース S3 に保存した監査ログに対して、Athena テーブルを作成して検索する⽅法 (多くのユーザーにおいて、もっともスタン ダードな分析⽅法) 4 CloudWatch Logs Insight 制約なし ※証跡の設定次第 制約なし ※CloudWatch Logs の設定次第 制約なし 独⾃クエリ⾔語 CloudWatch Logs のロググループに保存し た監査ログに対して、CloudWatch Logs Insight を使って独⾃のクエリ⾔語で分析す る⽅法 5 OpenSearch Service 制約なし ※証跡の設定次第 制約なし ※OpenSearch の 設定次第 制約なし GUI(OpenSearch Dashboard) または OpenSearch 検索 API S3 に保存した監査ログを ETL ツール (Logstash、Fluentd)や Lambda 関数を 利⽤し、OpenSearch Service のインデッ クスに取り込み、OpenSearch Dashboard で分析や可視化、監視に利⽤する⽅法 6 3rd パーティサービス 制約なし ※証跡の設定次第 制約なし ※S3 の設定次第 制約なし ツールによる 3rd パーティのツールにログを取り込んで活 ⽤する⽅法 (代表的なツールはDatadog、New Relic、 Sumo Logicなどが)
  7. CloudTrail を活⽤した監視のユースケース 10 Security Hub の CloudWatch に関するコントロールが有効なユースケースとして使える # コントロール

    ID コントロールの内容 利⽤するログ 重要度 1 CloudWatch.1 ルートユーザーの使⽤に対する監視設定 CloudTrail 低 2 CloudWatch.2 不正なAPI呼び出しに対する監視設定 CloudTrail 低 3 CloudWatch.3 MFAを使⽤しないマネジメントコンソールに対する監視設定 CloudTrail 低 4 CloudWatch.4 IAMポリシーの変更に対する監視設定 CloudTrail 低 5 CloudWatch.5 CloudTrailに関する設定変更に対する監視設定 CloudTrail 低 6 CloudWatch.6 マネジメントコンソールの認証失敗に対する監視設定 CloudTrail 低 7 CloudWatch.7 KMSの顧客管理キーの無効化またはスケジュールされたキー削除に対する監視設定 CloudTrail 低 8 CloudWatch.8 S3バケットポリシーの変更に対する監視設定 CloudTrail 低 9 CloudWatch.9 AWS Config設定変更に対する監視設定 CloudTrail 低 10 CloudWatch.10 セキュリティグループの変更に対する監視設定 CloudTrail 低 11 CloudWatch.11 Network ACLの変更に対する監視設定 CloudTrail 低 12 CloudWatch.12 ネットワークゲートウェイへの変更に対する監視設定 CloudTrail 低 13 CloudWatch.13 ルートテーブルの変更に対する監視設定 CloudTrail 低 14 CloudWatch.14 VPCの変更に対する監視設定 CloudTrail 低 【参考】Security Hub の CloudWatch コントロール: https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/cloudwatch-controls.html
  8. イベントに関連するフィールドを確認する 13 まずは、該当のイベントでどの AWS サービスの API が呼び出されたのかを把握する eventName eventType eventCategory

    eventSource 01 03 04 02 呼び出された API 名(イベント名) イベントの種類 イベントのカテゴリー名 呼び出された AWS サービス名 フィールドの説明 フィールド名 # 補⾜説明 いくつか値の種類はあるが、"AwsApiCall" と "AwsConsoleSingin" の2つの値だけを覚えておけば OK(前者は AWS サービスの API 呼 び出し、後者はコンソールログインに関するイベント) 各サービスの API Reference ページの Action で API 名を確認できる (S3 バケット ACL の設定変更の場合は、"PutBucketAcl" となる) S3 に関する API 呼び出しの場合、"s3.amazonaws.com" という値 になる(サービス名で条件を絞りたい時に利⽤するフィールド) 値は "Management"(管理イベント)、"Data"(データイベント)、 "Insight"(Insightsイベント)のいずれかとなる
  9. 3W(Who/When/Where) に関するフィールドを確認する 15 次は、該当の操作を実⾏したのは誰で・いつ・どこから実⾏されたのかを把握する userIdentity sourceIPAddress eventTime 01 03 02

    操作したユーザーに関する情報 (Who に関する情報) 操作者の送信元IPアドレス (Where に関する情報) イベントの発⽣⽇時 (When に関する情報) フィールドの説明 フィールド名 # 補⾜説明 API リクエストを実⾏したマシンのグローバル IP アドレスが記載され る(AWS サービスが実⾏した場合はサービス名、コンソールから実⾏ した場合は "AWS Internal" となる) 操作者がルートなのか、IAM ユーザーなのか、スイッチロールなのか でフィールドと値が異なる("userIdentity.type" の値が "Root", " IAMUser", "AssumeRole" となる) ISO8601 表記で UTC 時間で記録される(⽇本時間で 2024年3⽉11 ⽇ 16時19分25秒は "2024-03-11T07:19:25Z" となる)
  10. ログイン関連のイベント 16 userIdentity.type eventName IAMUser Root AssumeRole ConsoleLogin CheckMfa SwitchRole

    フィールド名 値 【凡例】 additionalEventData.MFAUserd responseElements.ConsoleLogin responseElements.CheckMfa responseElements.SwitchRole Yes No Success Failure Success Failure Success Failure userIdentity.userName additionalEventData.SwitchFrom マネジメントコンソール ログインイベント additionalEventData.MfaType U2F MFA Hardware MFA Virtual MFA "IAMユーザ名"
  11. API コール関連のイベント 17 "requestParameters" と "responseElements" のフィールドに API 操作内容が記載される "requestParameters":

    { "tagSpecificationSet": { "items": [ { "resourceType": "internet-gateway", "tags": [ { "key": "Name", "value": "test_igw" } ] } ] } }, "responseElements": { "requestId": "1b245752-d0b1-4073-b3b3-01c46c3a1584", "internetGateway": { "internetGatewayId": "igw-00ec58b652195d8a3", "ownerId": "123456789012", "attachmentSet": {}, "tagSet": { "items": [ { "key": "Name", "value": "test_igw" } ] }, "association": {} } } CreateInternetGateway イベントログの抜粋 "test_igw" という名前のインターネット GW の作成が リクエストされている AWS アカウント "123456789012" に "igw-00ec58b652195d8a3" という ID のインターネット GW が発番されている
  12. まとめ 18 ü ログを活⽤するために CloudTrail Lake を使ってログ分析してみよう ü まずは、ルートユーザーや MFA

    未使⽤のコンソールログインを監視してみよう ü 実⾏されること⾃体が不審な操作は、イベント名で監視すると良いでしょう 簡単ですが、以下総括です いきなり⼤掛かりなことをせず できることから少しずつ実装していくのがよき
  13. 【参考】CloudTrail 監査ログのフィールド構造(1/3) 21 # フィールド名 サンプル値 説明 1 eventVersion 1.08

    ログイベント形式のバージョン 2 userIdentity.type IAMUser ユーザ ID の種類(Root、IAMUser、AssumedRole など) 3 userIdentity.principalId AIDAILMY2GLOUWEUNCVCC 呼び出しを⾏ったエンティティの⼀意の識別⼦ 4 userIdentity.arn arn:aws:iam::123456789012:user/hibino 操作を実⾏したユーザーの ARN 5 userIdentity.accountId 123456789012 操作を実⾏したユーザーの AWS アカウント(12桁) 6 userIdentity.accessKeyId AKIA6BYSTFHIN3AYPVWR 操作を実⾏したユーザーの AWS アクセスキー 7 userIdentity.userName hibino 操作を実⾏したユーザー名 8 sessionContext.sessionIssuer.type Role ⼀時的なセキュリティ認証情報のユーザー種類 9 sessionContext.sessionIssuer.principalId AR0A3QV2SZ73AYPVWRDS ⼀時的なセキュリティ認証情報のエンティティの⼀意の識別 ⼦ 10 sessionContext.sessionIssuer.arn arn:aws:iam::123456789012:role/TestSwi tchRole ⼀時的なセキュリティ認証情報のユーザーの ARN 11 sessionContext.sessionIssuer.accountId 210987654321 ⼀時的なセキュリティ認証情報のユーザーの AWS アカウン ト(12桁) 12 sessionContext.sessionIssuer.username TestSwitchRole ⼀時的なセキュリティ認証情報のユーザー名 13 sessionContext.attributes.mfaAuthenticated true ⼀時的なセキュリティ認証情報で MFA 認証したか(true ま たは false) 14 sessionContext.attributes.creationDate 2023-01-31T08:32:51Z ⼀時的なセキュリティ認証情報が⽣成された⽇時(UTC 時 刻) サンプル値は、コンソールログインに関する操作を参考に記載している
  14. 【参考】CloudTrail 監査ログのフィールド構造(2/3) 22 "requestParameters" と "responseElements" フィールドの中⾝は、イベント名によって異なる # フィールド名 サンプル値

    説明 15 eventTime 2023-01-31T08:33:01Z イベントの発⽣⽇時(UTC 時刻) 16 eventSource signin.amazonaws.com リクエストが⾏われた AWS サービス 17 eventName ConsoleLogin イベント名(リクエストが⾏われた API アクション) 18 awsRegion us-east-1 操作対象の AWS リージョン名 19 sourceIPAddress 1.2.3.4 操作端末の送信元IPアドレス 20 userAgent Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 ... 操作を実⾏したユーザーエージェント名 21 errorMessage Failed authentication エラーのメッセージ 22 requestParameters null リクエストとともに送信されたパラメータ 23 responseElements.CheckMfa Success MFAチェックの成否(Success または Failure) 24 responseElements.ConsoleLogin Success コンソールログインの成否(Success または Failure) 25 responseElements.SwitchRole Success スイッチロールの成否(Success または Failure) 26 additionalEventData.MfaType Virtual MFA MFA の種類(U2F MFA、Hardware MFA、Virtual MFA) 27 additionalEventData.LoginTo https://console.aws.amazon.com/console/ home?region=us-east-1&... ログイン先 URL 28 additionalEventData.MobileVersion No モバイルバージョン
  15. 【参考】CloudTrail 監査ログのフィールド構造(3/3) 23 "requestID" や "resources" フィールドは、コンソールログインに関する操作では存在しない # フィールド名 サンプル値

    説明 29 additionalEventData.MFAUsed Yes MFAの利⽤有無(Yes または No) 30 additionalEventData.SwitchFrom arn:aws:iam::123456789012:user/hibino スイッチロールの接続元 ARN 31 additionalEventData.RedirectTo https://us-east- 2.console.aws.amazon.com/console/home? region=us-east-2# スイッチロールのリダイレクト先 URL 32 requestID - AWS API コールのイベントにおけるリクエスト ID 33 eventID 0f6a04f5-812a-44ed-bb2c-c7c013299db8 CloudTrail の中で⼀意となるイベント ID 34 readOnly false 読み取り専⽤の操作であるかどうか(true または false) 35 resources - API コールで操作した対象の AWS リソース 36 eventType AwsConsoleSignIn イベントレコードを⽣成したイベントのタイプ 37 managementEvent true 管理イベントかどうか(true または false) 38 eventCategory Management イベントの種類(Management、Data、Insightのいずれ か) 39 recipientAccountId 123456789012 イベントを受信した AWS アカウント (12桁) 40 tlsDetails.tlsVersion TLSv1.3 リクエストの TLS バージョン 41 tlsDetails.cipherSuite TLS_AES_128_GCM_SHA256 リクエストの暗号スイート (使⽤されるセキュリティアルゴリズムの組み合わせ) 42 tlsDetails.clientProvidedHostHeader sing.aws.amazon.com サービス API コールで使⽤されるクライアント提供のホスト 名(通常はサービスエンドポイントの FQDN)
  16. 24 # コントロール ID コントロールの内容 定義パターン、フィルターパターン 1 CloudWatch.1 ルートユーザーの使⽤に対する監視設定 {$.userIdentity.type="Root"

    && $.userIdentity.invokedBy NOT EXISTS && $.eventType !="AwsServiceEvent"} 2 CloudWatch.2 不正なAPI呼び出しに対する監視設定 {($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")} 3 CloudWatch.3 MFAを使⽤しないマネジメントコンソールに対する監視設定 { ($.eventName = "ConsoleLogin") && ($.additionalEventData.MFAUsed != "Yes") && ($.userIdentity.type = "IAMUser") && ($.responseElements.ConsoleLogin = "Success") } 4 CloudWatch.4 IAMポリシーの変更に対する監視設定 {($.eventSource=iam.amazonaws.com) && (($.eventName=DeleteGroupPolicy) || ($.eventName=DeleteRolePolicy) || ($.eventName=DeleteUserPolicy) || ($.eventName=PutGroupPolicy) || ($.eventName=PutRolePolicy) || ($.eventName=PutUserPolicy) || ($.eventName=CreatePolicy) || ($.eventName=DeletePolicy) || ($.eventName=CreatePolicyVersion) || ($.eventName=DeletePolicyVersion) || ($.eventName=AttachRolePolicy) || ($.eventName=DetachRolePolicy) || ($.eventName=AttachUserPolicy) || ($.eventName=DetachUserPolicy) || ($.eventName=AttachGroupPolicy) || ($.eventName=DetachGroupPolicy))} 【参考】CloudWatch の定義パターン、フィルタパターン(1/4)
  17. 【参考】CloudWatch の定義パターン、フィルタパターン(2/4) 25 # コントロール ID コントロールの内容 定義パターン、フィルターパターン 5 CloudWatch.5

    CloudTrailに関する設定変更に対する監視設定 {($.eventName=CreateTrail) || ($.eventName=UpdateTrail) || ($.eventName=DeleteTrail) || ($.eventName=StartLogging) || ($.eventName=StopLogging)} 6 CloudWatch.6 マネジメントコンソールの認証失敗に対する監視設定 {($.eventName=ConsoleLogin) && ($.errorMessage="Failed authentication")} 7 CloudWatch.7 KMSの顧客管理キーの無効化またはスケジュールされたキー削除に対する監視設定 {($.eventSource=kms.amazonaws.com) && (($.eventName=DisableKey) || ($.eventName=ScheduleKeyDeletion))} 8 CloudWatch.8 S3バケットポリシーの変更に対する監視設定 {($.eventSource=s3.amazonaws.com) && (($.eventName=PutBucketAcl) || ($.eventName=PutBucketPolicy) || ($.eventName=PutBucketCors) || ($.eventName=PutBucketLifecycle) || ($.eventName=PutBucketReplication) || ($.eventName=DeleteBucketPolicy) || ($.eventName=DeleteBucketCors) || ($.eventName=DeleteBucketLifecycle) || ($.eventName=DeleteBucketReplication))} 9 CloudWatch.9 AWS Config設定変更に対する監視設定 {($.eventSource=config.amazonaws.com) && (($.eventName=StopConfigurationRecorder) || ($.eventName=DeleteDeliveryChannel) || ($.eventName=PutDeliveryChannel) || ($.eventName=PutConfigurationRecorder))}
  18. 26 # コントロール ID コントロールの内容 定義パターン、フィルターパターン 10 CloudWatch.10 セキュリティグループの変更に対する監視設定 {($.eventName=AuthorizeSecurityGroupIngress)

    || ($.eventName=AuthorizeSecurityGroupEgress) || ($.eventName=RevokeSecurityGroupIngress) || ($.eventName=RevokeSecurityGroupEgress) || ($.eventName=CreateSecurityGroup) || ($.eventName=DeleteSecurityGroup)} 11 CloudWatch.11 Network ACLの変更に対する監視設定 {($.eventName=CreateNetworkAcl) || ($.eventName=CreateNetworkAclEntry) || ($.eventName=DeleteNetworkAcl) || ($.eventName=DeleteNetworkAclEntry) || ($.eventName=ReplaceNetworkAclEntry) || ($.eventName=ReplaceNetworkAclAssociation)} 12 CloudWatch.12 ネットワークゲートウェイへの変更に対する監視設定 {($.eventName=CreateCustomerGateway) || ($.eventName=DeleteCustomerGateway) || ($.eventName=AttachInternetGateway) || ($.eventName=CreateInternetGateway) || ($.eventName=DeleteInternetGateway) || ($.eventName=DetachInternetGateway)} 13 CloudWatch.13 ルートテーブルの変更に対する監視設定 {($.eventSource=ec2.amazonaws.com) && (($.eventName=CreateRoute) || ($.eventName=CreateRouteTable) || ($.eventName=ReplaceRoute) || ($.eventName=ReplaceRouteTableAssociation) || ($.eventName=DeleteRouteTable) || ($.eventName=DeleteRoute) || ($.eventName=DisassociateRouteTable))} 【参考】CloudWatch の定義パターン、フィルタパターン(3/4)
  19. 27 # コントロール ID コントロールの内容 定義パターン、フィルターパターン 14 CloudWatch.14 VPCの変更に対する監視設定 {($.eventName=CreateVpc)

    || ($.eventName=DeleteVpc) || ($.eventName=ModifyVpcAttribute) || ($.eventName=AcceptVpcPeeringConnection) || ($.eventName=CreateVpcPeeringConnection) || ($.eventName=DeleteVpcPeeringConnection) || ($.eventName=RejectVpcPeeringConnection) || ($.eventName=AttachClassicLinkVpc) || ($.eventName=DetachClassicLinkVpc) || ($.eventName=DisableVpcClassicLink) || ($.eventName=EnableVpcClassicLink)} 【参考】CloudWatch の定義パターン、フィルタパターン(4/4)
  20. 参考URL GuardDuty 基本データソース AWS CloudTrail イベントログ https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_data-sources.html#guardduty_cloudtrail Amazon Macie がAmazon

    S3 データセキュリティをモニタリングする⽅法 https://docs.aws.amazon.com/ja_jp/macie/latest/user/monitoring-s3-how-it-works.html CloudTrail コンテンツの記録 https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html CloudTrail userIdentity 要素 https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html 【CloudTrail解説編】AWSマネージメントコンソールのログイン監視 https://qiita.com/hssh2_bin/items/b71da0455cf21e4c823d 【CloudTrail解説編】IAM操作ってどんなログ出るの︖ https://qiita.com/hssh2_bin/items/3de9293bd56a8c8ffd39 【CloudTrail解説編】VPC操作ってどんなログ出るの︖ https://qiita.com/hssh2_bin/items/0cd863c6e357963b58d1 28