発見的統制を実現するためにCloudTrailログに対してどのような監視設定を実装するべきか、具体的な設定手順・内容を整理します。
特にエンタープライズでAWSを使うなら最初に実装しておきたい内容になるので、ぜひ参考にしてみてください。
CloudTrailによる発見的統制とは
AWSやITに限らず、セキュリティリスクに対する対策には「予防的統制」と「発見的統制」があります。
予防的統制はリスクが顕在化しないよう未然に防止するコントロールです。
AWSに置き換えると、予防的統制はOrganizationsのSCPで操作できる内容を制御してしまうことがその一例になります。
顕在化しないという意味で全てのリスクに予防的統制を取れるのであれば良いですが現実には難しく、かつ操作できる作業をガチガチに固めてしまうと多数のサービスをアジリティ高く利用できるというパブリッククラウドの利点を阻害してしまうことになりかねません。
そこで実際には発見的統制もバランスよく利用し利便性とセキュリティの両者を損ねることなく運用するのがベストプラクティスです。
発見的統制は事後的になるべく早く是正措置をとり被害を最小限に抑えるコントロールです。
AWSにおける発見的統制を大別すると、Configで脆弱な設定がされたAWSリソースが無いかの監視と、CloudTrailによるリスクある操作をしたユーザがいないかの監視の2種です。
ここでは発見的統制の1種であるCloudTrailによる監視設定に踏み込んでいきます。
CloudTrailログの監視設定手順
CloudTrailの監視設定は下記①~③の3ステップで行います。
(出典)AWS Black Belt サービス別資料「CloudTrail」
今回ご紹介するおすすめ設定は、②のCloudWatchメトリクスフィルターの定義です。
CloudWatchコンソールから作成したロググループを選択し「メトリクスフィルターを作成」をクリックすると、何のログをフィルタするかをフィルターパターンとして定義できます。
この機能を使ってリスクがある操作をしたユーザがいないか監視を行います。
具体的な設定方法はCloudTrailユーザガイドで紹介されているので、そちらをご参照ください。
おすすめ監視設定
では、ここから具体的なおすすめ監視設定(=CloudWatchメトリクスフィルター定義)を紹介していきます。 もちろん環境によっては適切でなかったり十分でないこともあると思うので、これを参考にしながら適用要否をご判断ください。
ルートユーザ使用のアラーム
AWSではルートユーザの使用は極力避け、IAMユーザを使うことを推奨しています。 次のフィルターパターンを定義することでルートユーザが使用されるとアラームをあげます。
{$.userIdentity.type="Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType !="AwsServiceEvent"}
MFA未使用の検知アラーム
MFAを使用せずにAWSマネジメントコンソールにサインインされたことを検知します。
{ ($.eventName = "ConsoleLogin") && ($.additionalEventData.MFAUsed != "Yes") && ($.userIdentity.type = "IAMUser") && ($.responseElements.ConsoleLogin = "Success") }
アクセスキー作成のアラーム
アクセスキーは永続的なクレデンシャルとなるため、漏洩すると大きなセキュリティリスクとなります。 そのためAWSでは原則アクセスキーを作成しないことを推奨しています。
{($.eventName=CreateAccessKey)||($.eventName=UpdateAccessKey)}
S3バケットポリシー変更のアラーム
S3バケットポリシーが変更されると想定外のユーザからオブジェクトの参照・更新を許してしまう恐れがあります。
{($.eventSource=s3.amazonaws.com) && (($.eventName=PutBucketAcl) || ($.eventName=PutBucketPolicy) || ($.eventName=PutBucketCors) || ($.eventName=PutBucketLifecycle) || ($.eventName=PutBucketReplication) || ($.eventName=DeleteBucketPolicy) || ($.eventName=DeleteBucketCors) || ($.eventName=DeleteBucketLifecycle) || ($.eventName=DeleteBucketReplication))}
CloudTrail設定変更のアラーム
CloudTrail設定が変更されると、今回定義した監視設定も正常に稼働しなくなる恐れがあります。
{($.eventName=CreateTrail) || ($.eventName=UpdateTrail) || ($.eventName=DeleteTrail) || ($.eventName=StartLogging) || ($.eventName=StopLogging)}
Config設定変更のアラーム
冒頭で触れたようにAWS Configも発見的統制を担うサービスです。 この設定が変更されるとAWSリソースに対する監視が正常に稼働しなくなる恐れがあります。
{($.eventSource=config.amazonaws.com) && (($.eventName=StopConfigurationRecorder) || ($.eventName=DeleteDeliveryChannel) || ($.eventName=PutDeliveryChannel) || ($.eventName=PutConfigurationRecorder))}
IAMポリシー変更のアラーム
IAMポリシーを変更されるとユーザが想定外の操作をできるようになる恐れがあるため、CloudTrailで監視しておきます。
{($.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)}
特権IAMグループのメンバー変更アラーム
AdministratorAccessやIAMFullAccessなど、重要サービスへのフルアクセス権限が付与されたIAMグループを定義していた場合、そのグループメンバーが変更されると意図しないユーザが強力な権限を持つ恐れがあるため、CloudTrailで監視します。 下記のIAMグループ名には特権を持つIAMグループ名を代入してください。
{(($.eventName=AddUserToGroup) && ($.requestParameters.groupName="IAMグループ名")) || (($.eventName=RemoveUserFromGroup) && ($.requestParameters.groupName="IAMグループ名"))}
VPC変更のアラーム
VPCやPeeringが変更されると予期せぬ通信経路が生まれる可能性があるため、CloudTrailで監視します。
{($.eventName=CreateVpc) || ($.eventName=DeleteVpc) || ($.eventName=ModifyVpcAttribute) || ($.eventName=AcceptVpcPeeringConnection) || ($.eventName=CreateVpcPeeringConnection) || ($.eventName=DeleteVpcPeeringConnection) || ($.eventName=RejectVpcPeeringConnection) || ($.eventName=AttachClassicLinkVpc) || ($.eventName=DetachClassicLinkVpc) || ($.eventName=DisableVpcClassicLink) || ($.eventName=EnableVpcClassicLink)}
ネットワークゲートウェイ変更のアラーム
意図せずインターネットゲートウェイやカスタマーゲートウェイをVPCにアタッチされると、VPC外へ通信が流れデータ漏えいに繋がる恐れがあります。
{($.eventName=CreateCustomerGateway) || ($.eventName=DeleteCustomerGateway) || ($.eventName=AttachInternetGateway) || ($.eventName=CreateInternetGateway) || ($.eventName=DeleteInternetGateway) || ($.eventName=DetachInternetGateway)}
NACL変更のアラーム
NACLはVPC内への入力・出力トラフィックを制御しているため、NACLを変更されるとAWSリソースやサービスが意図せず公開される恐れがあります。
{($.eventName=CreateNetworkAcl) || ($.eventName=CreateNetworkAclEntry) || ($.eventName=DeleteNetworkAcl) || ($.eventName=DeleteNetworkAclEntry) || ($.eventName=ReplaceNetworkAclEntry) || ($.eventName=ReplaceNetworkAclAssociation)}
セキュリティグループ変更のアラーム
NACL同様、セキュリティグループも入力・出力トラフィックの制御を司っているため、同様にCloudTrailで監視します。
{($.eventName=AuthorizeSecurityGroupIngress) || ($.eventName=AuthorizeSecurityGroupEgress) || ($.eventName=RevokeSecurityGroupIngress) || ($.eventName=RevokeSecurityGroupEgress) || ($.eventName=CreateSecurityGroup) || ($.eventName=DeleteSecurityGroup)}
ルートテーブル変更のアラーム
ルートテーブルの変更をモニタリングすることで、VPC内外のトラフィックが想定通りのパスを通過することを担保します。
{($.eventName=CreateRoute) || ($.eventName=CreateRouteTable) || ($.eventName=ReplaceRoute) || ($.eventName=ReplaceRouteTableAssociation) || ($.eventName=DeleteRouteTable) || ($.eventName=DeleteRoute) || ($.eventName=DisassociateRouteTable)}
不正なAPIコールのアラーム
権限上許可されていないAWS APIコールがあったことを監視することで、悪意ある操作を検出する時間を短縮させます。
{($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")}
マネジメントコンソール認証失敗のアラーム
マネジメントコンソール認証の試行失敗を監視し、ブルートフォース攻撃などの検出時間を短縮させます。
{($.eventName=ConsoleLogin) && ($.errorMessage="Failed authentication")}
まとめ
発見的統制を実現するために、CloudTrailのおすすめ監視設定をご紹介しました。 実はそのほとんどはアメリカのセキュリティ団体が策定したベストプラクティスであるCIS Benchmarksに記載されている監視項目で、Security Hubで「CIS AWS Foundations Benchmark」を有効にすると上記監視が定義されているかがチェックされます。 そういう意味でも今回触れた監視項目は重要な観点ばかりだと思いますので、ぜひご自身が管理されている環境にも導入することをご検討ください。