SIEM製品で AWS のセキュリティログ分析する観点を整理し CloudTrail ログを分析してみた

2024.05.15

AWS上のログ、みなさんどうされていますでしょうか?ログの活用どの程度されていますでしょうか?

ログ分析に関する取り組み状況として、以下のようなところで該当する項目もあるのではないでしょうか。

  • コンプライアンス要件で、システムのログを堅牢なストレージに定められた期間保管している
  • 何かあった時に取り出し、参照できるようになっている
  • 重要なログを選定し収集している
  • 利用ケースを定義した上可視化し、日頃からログ活用を行っている

セキュリティの取り組みの中では、一般的にログ分析は発見的対策という位置づけとされます。

脆弱性管理や通信・保存の暗号化などの予防対策は行っているが、ログ分析をはじめとする発見的対策は十分ではないと感じている方も多いのではないでしょうか。
AWSにおいては、CloudWatchをはじめ、EventBridge、Athena、QuickSight等を利用することでログ分析を行うことができます。
また、SIEM製品 を使うことでログの正規化や柔軟なクエリ、可視化やルールを使ったアラートの発生を一つのツールで実現させることができます。単一のクラウドインフラストラクチャだけでなく、マルチクラウド環境やオンプレも含んだ環境のログを一元的に管理することができるので、個人的にはログ分析を行う上で優れたソリューションと考えています。

AWS上のセキュリティ観点で重要なログ

早速ですが、先程あげたログ分析の取り組みの中で、ログの選定が十分に検討できていないという課題をお持ちの方も多いのではないでしょうか。
AWSにおいては、どんなログがセキュリティ観点で重要になってくるのかを考えてみたいと思います。

CloudTrail

やはり何と言ってもCloudTrailのログは最も重要なログと言えるでしょう。
CloudTrailはAWSリソースへのAPIコールをログとして記録するサービスです。
これはほんの一例ですが、IAMユーザーの作成や権限変更、EC2インスタンスの停止や削除、コンソールへのログインや、S3バケットの作成やポリシー設定、VPCのセキュリティグループの設定、RDSデータベースの作成やバックアップ、これらのサービスのあらゆるイベントの記録やその他のAWSサービスのイベントの記録などが該当します。
CloudTrailの証跡ログを分析することで様々な重要なアクションに関するインサイトを得ることができます。

VPC Flow Logs

AWSのVPC内のネットワークインターフェースを通過するIPトラフィックをキャプチャし、ログとして記録します。
トラフィックの送信元と宛先のIPアドレスおよびポート番号と通信の許可・拒否などを含むIPパケット情報が該当します。
AWS内のリソースが外部のどこと通信していたのかを追ったり、VPC内でリソース同士の横感染に関する通信を見たりするのに活用することができます。

Route 53 Resolver Logs

AWSのVPC内で提供される名前解決のためのDNSサービスによる、DNSクエリログを記録します。
DNSクエリでリクエストされたドメイン名、クエリタイプ(A、AAAA、CNAME、TXTなど)、応答コード、クエリの送信元IPアドレス、応答先のIPアドレスなどが含まれます。
ドメインの名前解決はネットワーク通信の根幹となる基本的な動作であり、通信の際に必ずと言っていいほど利用されます。
サイバー攻撃においては、DNSクエリを悪用してC&Cサーバーから命令を受け取ったり、窃取した情報を持ち出しに使ったり、HTTP通信に次ぎ色々な方法で悪用される事例があります。
DNSリゾルバログからこれらの不審なクエリがリクエストされていないかを分析することができます。

GuardDutyの検知ログ

上記の4つのログをソースとして不審な動作や既知の悪性なシグネチャやパターンを検出するマネージドサービスになります。
検出した情報をログとして分析することで、インシデントの起点として各種ログとの相関づけをし、影響範囲や根本原因を特定するため詳細なログ情報を深堀りするのに活用することができます。

Security Hubの検知ログ

AWS Configと連携し、AWSセキュリティの設定上のベストプラクティスから逸脱した状態かを検出するマネージドサービスになります。
その他にAmazon InspectorやGuardDutyなどと連携し、Security Hubに検出結果を一元的に集約することができます。
Security Hubに集約された検出結果をログとして分析することで、インシデントの起点として各種ログとの相関づけをし、影響範囲や根本原因を特定するため詳細なログ情報を深堀りするのに活用することができます。

エンドポイントログ

EC2インスタンスから出力されるログの中で、WindowsサーバーであればWindows Event Logsのセキュリティログや、Linuxサーバーであれば認証ログ(authログやsecureログ)を中心に収集します。
AWSの侵害においては、EC2インスタンスのユーザーアカウントの乗っ取りからサービスロールの権限を利用して行動を広げていくパターンも少なくありません。
EC2インスタンスのユーザーアカウントへブルートフォース攻撃を受けていないかを検知したり、権限昇格やマルウェアの感染につながるようなイベントがないか分析します。
また、EDRやEPPを導入している場合はこれらの検知ログも分析の対象とし、GuardDutyの検知ログと同様、インシデントの起点として各種ログとの相関付を行うために利用します。

CloudTrail のログ分析

AWSのセキュリティ観点で重要なログについて理解したところで、ログの活用方法、つまりログ分析の観点を見ていきます。
今回は最も重要と考えるCloudTrailのログを中心にSIEM製品の一つである Splunk を使ってログ分析を行っていきます。

※尚、この後ご紹介するクエリはログの取り込みとデータの正規化を行うSplunk Add on for AWSをインストールしていることを前提とした内容となっています。
Splunk Add on for AWS についてや、ログの取り込みに関しては、こちらのブログあたりを参照してください。

#0. CloudTrail のログ構造をある程度把握しておく

実際のCloudTrailログの大部分を切り取っていますが、特に見るべきポイントとして構造を把握しておきます。

{
  "awsRegion": "ap-northeast-1",
  "eventName": "RunInstances",
  "eventSource": "ec2.amazonaws.com",
  "requestParameters": {},
  "sourceIPAddress": "203.0.113.1",
  "userIdentity": {
    "type": "IAMUser",
    "arn": "arn:aws:iam::111111111111:user/pipeline",
    "accountId": "111111111111",
    "userName": "pipeline"
  }
  ...
}
フィールド 意味
eventName AWSサービスのアクション
eventSource AWSサービス
requestParameters アクションを実施する時の様々なパラメータ
sourceIPAddress APIコールの送信元
userIdentity.type アイデンティティタイプ(IAMUserやAssumeRole)
userIdentity.arn 誰が実行したか

大きくはこの内容をまずおさえてください。その他に、サービスやアクションごとのリクエストに様々なパラメータが存在するので、その内容に応じて分析するポイントを見ていく感じになります。

#1. CloudTrail - MFA設定を有効化していないIAMユーザーのログイン

ログイン認証について、MFAを有効化するべき、というのは一般的によく知られる対策となってきていると思います。
Security Hubによる設定構成のチェックからも確認できますが、MFA設定を有効化していないIAMユーザーでログインが成功したことをリアルタイムに分析可能にしておくことが大事です。
(予防対策として、MFA設定を有効化しておくことも大事ですが、発見対策としてログイン実施が発生したことやインシデント時に確認できるようにしておくことも大事です。)

sourcetype=aws:cloudtrail ConsoleLogin "additionalEventData.MFAUsed"!=Yes 
"userIdentity.type"=IAMUser
| dedup "userIdentity.arn", sourceIPAddress
| table "userIdentity.accountId", "userIdentity.arn", sourceIPAddress, 
"responseElements.ConsoleLogin"

#2. CloudTrail - MFA設定を有効化していないIAMユーザーのログインと地理情報

MFA有効化されていないIAMユーザーのログイン試行が行われたことに加え、地理的位置のどこからログインしてきたかを分析します。
通常日本でしかビジネスしていないのにも関わらず、海外からログインを試されている場合は攻撃を受けている可能性が高いので特に注目できるようにしておきます。

sourcetype=aws:cloudtrail ConsoleLogin "userIdentity.type"=IAMUser 
"additionalEventData.MFAUsed"!=Yes
| dedup userIdentity.arn, sourceIPAddress
| iplocation sourceIPAddress
| search Country!="Japan"
| table "userIdentity.accountId", "userIdentity.arn", sourceIPAddress, 
City, Country, "responseElements.ConsoleLogin"

#3. CloudTrail - 10xlarge以上の大きいインスタンス作成

AWSアカウントが侵害されていた場合、クリプトマイニングのための高額なインスタンスを立ち上げられる被害はAWSにおいてよくあることです。
こういったインスタンスを作成する際には、企業内のワークフロー承認が必要であったりするかもしれません。
ログから分析できるようにすることで、リアルタイムに検知することができます。
すぐに気付けるようアラート化しておきたい項目ですね。

sourcetype=aws:cloudtrail eventName=RunInstances
| regex "requestParameters.instanceType"=\d{2}xlarge
| dedup userIdentity.arn
| table "userIdentity.accountId", "userIdentity.arn", 
sourceIPAddress, "requestParameters.instanceType"

#4. CloudTrail - VPCセキュリティグループのリモートアクセスプロトコルのポート開放

攻撃者はリモートアクセスプロトコルのポートを開放し、外部からの侵入を試みる手段を広げようとします。
Security Hubによる設定構成のチェックでも気づくことは可能ですが、インシデントが疑われる場合に相関分析ができるよう、ログから分析が可能なようにしておきます。

sourcetype=aws:cloudtrail eventName=AuthorizeSecurityGroupIngress 
"requestParameters.ipPermissions.items{}.ipRanges.items{}.cidrIp"="0.0.0.0/0" 
"requestParameters.ipPermissions.items{}.fromPort"=22 OR 
"requestParameters.ipPermissions.items{}.fromPort"=3389
| table userIdentity.arn, sourceIPAddress, "requestParameters.groupId", 
"requestParameters.ipPermissions.items{}.ipRanges.items{}.cidrIp", 
"requestParameters.ipPermissions.items{}.fromPort"

#5. CloudTrail - IAMユーザーの作成

攻撃者はさらなるセキュリティ侵害を行うことを目的とした権限昇格のためのIAMユーザー作成を行います。
IAMユーザーの作成イベントを分析できるように準備しておきます。
ただしIAMユーザーの作成イベントは日常的に通常業務で発生することは当然あり、攻撃との関連性を調べる必要が出てきます。
例えば、IAMユーザーの作成はCloudformationから行うような運用ルールにしている場合であれば、Cloudformation以外からのAPIコールが攻撃の可能性を示唆することになります。
さらにAPIの呼び出し元を地理的情報で分析できるようにしておくと、異常なイベントかの判断に役立たせることができます。

sourcetype=aws:cloudtrail eventName="CreateUser" sourceIPAddress!="*.amazon.com"
| iplocation sourceIPAddress
| stats count by Country
| sort - count

呼び出し元がビジネスを行っている地域以外かどうかを分析することも効果的なので、そういった観点も取り入れるとよいでしょう。

sourcetype=aws:cloudtrail eventName="CreateUser" sourceIPAddress!="*.amazon.com"
| iplocation sourceIPAddress
| search Country!="Japan"
| stats count by Country
| sort - count

まとめ

今回はAWSでセキュリティ上重要なログソースを整理し、最も重要と考えるCloudTrailのログ分析方法についていくつか紹介しました。
ログ分析は、ログを出力するサービスの特徴とそのログ構造を把握することから始まりますが、まずは大きくログ構造を理解し、いくつかのユースケースに沿って分析してみることが良いと考えています。
ぜひ、皆様もAWSのログ分析はじめてください。