Amazon GuardDuty(1)GuardDutyの概要

GuardDutyとは

Amazon GuardDuty は、VPC フローログAWS CloudTrail イベントログDNS ログ を分析して、悪意のある操作や不正な動作を継続的にモニタリングする脅威検出サービス。AWS 環境内の予期しない潜在的に未許可なアクティビティや悪意のあるアクティビティを識別して、AWS アカウントとワークロードを保護を行う。

検出結果

潜在的に悪意のある予期しないアクティビティを検出すると、GuardDuty によって結果が生成される。またこれらの結果は、GuardDuty のマネージメントコンソールから閲覧できるだけでなく、 CloudWatch Events を利用して表示することもできる。

検出した脅威は以下のタイプに分類される。

タイプ 重要度 内容
Backdoor:EC2/Spambot EC2 インスタンスが ポート 25 でリモートホストと通信 して通常と異なる動作を示す。
Backdoor:EC2/C&CActivity.B!DNS EC2 インスタンスは、既知のコマンド&コントロールサーバーに関連付けられるドメイン名をクエリ している。
Backdoor:EC2/DenialOfService.Tcp EC2 インスタンスが、TCP プロトコルを使用したサービス拒否 (DoS) 攻撃の実行に利用されている可能性がある。
Backdoor:EC2/DenialOfService.Udp EC2 インスタンスが、UDP プロトコルを使用したサービス拒否 (DoS) 攻撃の実行に利用されている可能性がある。
Backdoor:EC2/DenialOfService.Dns EC2 インスタンスが、DNS プロトコルを使用したサービス拒否 (DoS) 攻撃の実行に利用されている可能性がある。
Backdoor:EC2/DenialOfService.UdpOnTcpPorts EC2 インスタンスが、TCP ポートで UDP プロトコルを使用したサービス拒否 (DoS) 攻撃の実行に利用されている可能性がある。
Backdoor:EC2/DenialOfService.UnusualProtocol EC2 インスタンスが、異常なプロトコルを使用したサービス拒否 (DoS) 攻撃の実行に利用されている可能性がある。
Behavior:EC2/NetworkPortUnusual EC2 インスタンスが 通常と異なるポート でリモートホストと通信している。
Behavior:EC2/TrafficVolumeUnusual EC2 インスタンスがリモートホストに対して通常と異なる 大量のネットワークトラフィック を生成している。
CryptoCurrency:EC2/BitcoinTool.B!DNS EC2 インスタンスは、 暗号通貨 関連のアクティビティに関連付けられているドメイン名をクエリしている。
CryptoCurrency:EC2/BitcoinTool.B EC2 インスタンスは、 暗号通貨 関連のアクティビティに関連付けられている IP アドレスをクエリしている。
PenTest:IAMUser/KaliLinux API が Kali Linux EC2 インスタンスから呼び出されました。
PenTest:IAMUser/ParrotLinux API が Parrot Security Linux EC2 インスタンスから呼び出されました。
PenTest:IAMUser/PentooLinux API が Pentoo Linux EC2 インスタンスから呼び出されました。
Persistence:IAMUser/NetworkPermissions プリンシパルが、通常 AWS アカウントの セキュリティグループ、ルート、ACL のネットワークアクセス許可を変更 するために使用される API を呼び出した。
Persistence:IAMUser/ResourcePermissions プリンシパルが、通常 AWS アカウントのさまざまなリソースの セキュリティアクセスポリシーを変更 するために使用される API を呼び出した。
Persistence:IAMUser/UserPermissions プリンシパルが、通常 AWS アカウントの IAM ユーザー、グループ、ポリシーを追加、変更、削除 するために使用される API を呼び出した。
Policy:IAMUser/S3BlockPublicAccessDisabled バケットの Amazon S3 ブロック パブリックアクセスが無効 になった。
Policy:IAMUser/RootCredentialUsage API が ルート認証情報を使用 して呼び出された。
PrivilegeEscalation:IAMUser/AdministrativePermissions プリンシパルが 許容度の高いポリシーを割り当て ようとしている。
Recon:EC2/PortProbeUnprotectedPort EC2 インスタンスの 保護されていないポートを既知の悪意のあるホストが探している
Recon:EC2/PortProbeEMRUnprotectedPort EMR クラスタの 保護されていないポートを既知の悪意のあるホストが探している
Recon:IAMUser/TorIPCaller API が Tor 出口ノード の IP アドレスから呼び出された。
Recon:IAMUser/MaliciousIPCaller.Custom API が カスタム脅威リストにある IP アドレス から呼び出された。
Recon:IAMUser/MaliciousIPCaller API が既知の 悪意のある IP アドレス から呼び出された。
Recon:EC2/Portscan EC2 インスタンスがリモートホストに アウトバウンドポートスキャン を実行している。
Recon:IAMUser/NetworkPermissions プリンシパルが、通常 AWS アカウントの既存のセキュリティグループ、ACL、ルートの ネットワークアクセス許可を検出 するために使用される API を呼び出した。
Recon:IAMUser/ResourcePermissions プリンシパルが、通常 AWS アカウントのさまざまなリソースに関連付けられた アクセス権限を検出 するために使用される API を呼び出した。
ResourceConsumption:IAMUser/ComputeResources プリンシパルが、通常 EC2 インスタンスなどの コンピューティングリソースを起動 するために使用される API を呼び出した。
Stealth:IAMUser/S3ServerAccessLoggingDisabled バケットの Amazon S3 サーバーアクセスログ記録が無効 になった.
Stealth:IAMUser/PasswordPolicyChange アカウントの パスワードポリシーが弱化 された.
Stealth:IAMUser/CloudTrailLoggingDisabled AWS CloudTrail の証跡が無効化 されている。
Stealth:IAMUser/LoggingConfigurationModified プリンシパルが、通常 AWS アカウントの CloudTrail ログ記録の停止、既存ログの削除 、その他アクティビティの痕跡を消去するために使用される API を呼び出した。
Trojan:EC2/BlackholeTraffic EC2 インスタンスは、ブラックホール と呼ばれるリモートホストの IP アドレスに通信しようとしている。
Trojan:EC2/DropPoint EC2 インスタンスは、マルウェア によって収集された認証情報やその他の盗難されたデータによって認識されているリモートホストの IP アドレスに通信しようとしている。
Trojan:EC2/BlackholeTraffic!DNS EC2 インスタンスは、ブラックホール IP アドレスにリダイレクトされるドメイン名へのクエリを実行している。
Trojan:EC2/DriveBySourceTraffic!DNS EC2 インスタンスは、Drive By Download 攻撃 の既知のソースであるリモートホストのドメイン名をクエリしている。
Trojan:EC2/DropPoint!DNS EC2 インスタンスは、マルウェア によって収集された認証情報やその他の盗難されたデータによって認識されているリモートホストのドメイン名をクエリしている。
Trojan:EC2/DGADomainRequest.B EC2 インスタンスで、アルゴリズムを使用して生成されたドメイン がクエリされている。
Trojan:EC2/DGADomainRequest.C!DNS EC2 インスタンスで、アルゴリズムを使用して生成されたドメイン がクエリされています。このようなドメインは、一般的にマルウェアによって悪用されることが多く、EC2 インスタンスが侵害されている場合がある。
Trojan:EC2/DNSDataExfiltration EC2 インスタンスが DNS クエリを通じて データを密かに抽出 しようとしている。
Trojan:EC2/PhishingDomainRequest!DNS EC2 インスタンスは フィッシング攻撃 に関与するクエリ実行のドメインである。
UnauthorizedAccess:EC2/MetadataDNSRebind Amazon EC2 インスタンスが、インスタンスメタデータサービスに解決される DNS ルックアップ を実行している。
UnauthorizedAccess:IAMUser/TorIPCaller API が Tor 出口ノードの IP アドレスから呼び出された。
UnauthorizedAccess:IAMUser/MaliciousIPCaller.Custom API が カスタム脅威リスト にある IP アドレスから呼び出された。
UnauthorizedAccess:IAMUser/ConsoleLoginSuccess.B 世界中でコンソールに対する複数の正常なログインが確認 された。
UnauthorizedAccess:IAMUser/MaliciousIPCaller API が既知の悪意のある IP アドレス から呼び出された。
UnauthorizedAccess:EC2/TorIPCaller EC2 インスタンスが Tor 出口ノードからのインバウンド接続を受信している。
UnauthorizedAccess:EC2/MaliciousIPCaller.Custom EC2 インスタンスが カスタム脅威リスト内の IP アドレス とアウトバウンド通信している。
UnauthorizedAccess:EC2/SSHBruteForce EC2 インスタンスが SSH ブルートフォース攻撃 に関与している。
UnauthorizedAccess:EC2/RDPBruteForce EC2 インスタンスが RDP ブルートフォース攻撃 に関与している。
UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration インスタンス起動ロールを通じて EC2 インスタンス専用に作成された 認証情報が外部 IP アドレスから使用されている
UnauthorizedAccess:IAMUser/ConsoleLogin AWS アカウントのプリンシパルによる 通常とは違うコンソールへのログイン が確認された。
UnauthorizedAccess:EC2/TorClient EC2 インスタンスは Tor Guard または Authority ノードに接続している。
UnauthorizedAccess:EC2/TorRelay EC2 インスタンスは、Tor リレーとして Tor ネットワークに接続中である。

Amazon GuardDuty のセットアップ

Amazon GuardDutyはCloudFormationに対応しているため、CloudFormation経由でGuardDutyをセットアップすることができる。

サービスロールの有効化

以下のサービスロールを有効化することで、EC2リストの読み込み権限GuardDuty に付与する。これは、悪意のあるアクティビティに関係する AWS 環境の EC2 インスタンスのメタデータを取得するためである。

Resources:
  ServiceLinkedRoleForGuardDuty:
    Type: AWS::IAM::ServiceLinkedRole
    DeletionPolicy: Retain
    Properties: 
      AWSServiceName: guardduty.amazonaws.com
      Description: A service-linked role required for Amazon GuardDuty to access your resources.

GuardDutyの有効化

GuardDuty を有効化する。有効化すると直ちにデータの取得と分析を開始する。 これらの処理は、通常のAWS CloudTrail、VPC フローログ、および DNS ログの保存とは独立している。

Resources:
  GuardDutyDetector:
    DependsOn:
      - ServiceLinkedRoleForGuardDuty
    Type: AWS::GuardDuty::Detector
    Properties:
      Enable: true

CloudFormation Launch Stack URL

以下のボタンから上のCloudFormationテンプレートを実行することが可能である。ソースコードは、aws-cloudformation-templates/security – GitHub にて公開。

作成されるAWSサービス CloudFormationテンプレート
セキュリティサービス全般 cloudformation-launch-stack
GuardDutyのみ cloudformation-launch-stack

AWS Config(1)Configの概要

AWS Configとは

AWS Configは、リソースごとの設定項目を生成し、履歴としてこれを保持するため、全ての変更を追跡することが可能で、AWSリソース間の関係と設定の履歴などを確認することができる。

  • リソースの設定が最適であるか
  • 現在のスナップショットの取得
  • リソース設定の取得
  • 設定履歴の取得
  • リソース間の関係の表示
  • 通知

これらの機能を用いて、リソースの管理監査とコンプライアンス設定変更の確認とトラブルシューティングセキュリティ分析などを行うことができる。

設定項目は、S3バケットに蓄積することが可能で、データはJSON形式で、S3に6時間ごとに送信される。また、リソースが変更されたタイミング等で、Amazon SNSを用いてEメール等で通知することも可能である。

AWS Configは、マルチアカウントマルチリージョンの データ集約 に対応しており、複数のアカウントやリージョンの設定、コンプライアンスデータを1つのアカウントに集約することができる。

https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-aws-cloudtrail-aws-config?ref=https://tech.blog.surbiton.jp/

AWS Configの概念

設定履歴と設定項目、スナップショット、レコーダ

設定履歴は、特定期間の特定リソースに関する設定項目のコレクションである。また、設定項目は、アカウント内のサポートされているAWSリソースの属性(メタデータ、関係、設定、関連イベントなど)を記録したものである。設定スナップショット は、設定項目のコレクションで、記録対象のリソースの全体像を示す。スナップショットは、S3 Bucketに配信が可能。

設定レコーダは、(標準設定では)Configがサポートしている全てのリソースの設定項目の評価と保存を行う。設定レコーダをオフにすると設定変更トリガによる評価は実行されない。一方で、定期実行トリガは引き続き指定した間隔で実行される

設定ストリーム

設定ストリームは、設定項目の自動更新リストで、リソースの作成や変更、削除が行われる度に、Amazon SNSを使用して通知を行うことができる。

ルール

AWS Configでは、望ましい設定をルールとして定めることができ、これに違反しているリソースに対しては、非準拠 のフラグを立てる。ルールは、事前に用意されたマネージドルールのほかに、ユーザが自ら作成したカスタムルールを適用することもできる。これらのルールは、リソースの設定変更時に評価されるのか、それとも定期的に評価されるのかを定義することができる。

AWS Configの仕組み

AWS Configは、サポートされているAWSリソースを検出し、リソースごとに設定項目を生成し、その記録を履歴として保持する。Configはリソースごとに、DescribeもしくはListのAPIコールによって、リソースの全ての変更を追跡する。Configルールを利用することで、定期的にこのルールに照らして、リソースの設定の評価を行うことができる。

また、この設定項目は、S3バケット もしくは Amazon SNS に配信することができる。SNSへ配信時のメッセージタイプは以下の通り。

メッセージタイプ 内容
ComplianceChangeNotification コンプライアンスタイプの変更時
ConfigRulesEvaluationStarted リソースの評価開始時
ConfigurationSnapshotDeliveryStarted スナップショット配信開始時
ConfigurationSnapshotDeliveryCompleted スナップショット配信完了時
ConfigurationSnapshotDeliveryFailed スナップショット配信失敗時
ConfigurationHistoryDeliveryCompleted 設定履歴配信完了時
ConfigurationItemChangeNotification リソース変更時
OversizedConfigurationItemChangeNotification SNSの最大サイズ超過時

AWS Configのセットアップ

AWS ConfigはCloudFormationに対応しているため、CloudFormation経由でConfigをセットアップすることができる。

サービスロールの有効化

以下のサービスロールを有効化することで、AWSリソースの読み込み権限 および S3への書き込み権限Config に、IAMとSystemManagerへの書き込み権限Config Remediation にそれぞれ付与する。

Resources:
  ServiceLinkedRoleForConfig:
    Type: AWS::IAM::ServiceLinkedRole
    DeletionPolicy: Retain
    Properties: 
      AWSServiceName: config.amazonaws.com
      Description: A service-linked role required for AWS Config to access your resources.
  ServiceLinkedRoleForConfigRemediation:
    Type: AWS::IAM::ServiceLinkedRole
    DeletionPolicy: Retain
    Properties: 
      AWSServiceName: remediation.config.amazonaws.com 
      Description: A service-linked role required for AWS Config Remediation to access your resources.

Configの有効化

DeliveryChannelConfigurationRecorder を作成する。

Resources:
  ConfigDeliveryChannel:
    Type: AWS::Config::DeliveryChannel
    Properties:
      Name: default
      S3BucketName: !Ref S3ForConfig
      SnsTopicARN: !Ref SnsTopicARN
  ConfigConfigurationRecorder:
    Type: AWS::Config::ConfigurationRecorder
    Properties:
      Name: default
      RecordingGroup:
        AllSupported: true
        IncludeGlobalResourceTypes: true
      RoleARN: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig

すでにAWS Configをセットアップ済みの状態で上記テンプレートを実行すると、 the maximum number of delivery channels エラーが発生する。その場合は既存の DeliveryChannel を削除した上で、上記テンプレートを再度実行する。

aws configservice delete-delivery-channel --delivery-channel-name default
aws configservice delete-configuration-recorder --configuration-recorder-name default

S3バケットの作成

設定情報 (履歴ファイルやスナップショット)を保存するために使用する、Amazon S3 バケットと、それに紐づくバケットポリシーを作成する。

Resources:
  S3ForConfig:
    Type: 'AWS::S3::Bucket'
    DeletionPolicy: Retain
    Properties:
      BucketName: !Sub defaultsecuritysettings-config-${AWS::Region}-${AWS::AccountId}
      LifecycleConfiguration:
        Rules:
          - Id: ExpirationInDays
            ExpirationInDays: 60
            Status: Enabled
      PublicAccessBlockConfiguration: 
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
  S3BucketPolicyForConfig:
    Type: AWS::S3::BucketPolicy
    Properties: 
      Bucket: !Ref S3ForConfig
      PolicyDocument:
        Version: 2012-10-17
        Id: !Ref S3ForConfig
        Statement:
          - Effect: Allow
            Principal:
              Service: config.amazonaws.com
            Action:
              - 's3:GetBucketAcl'
              - 's3:ListBucket'
            Resource:
              - !GetAtt S3ForConfig.Arn
          - Effect: Allow
            Principal:
              Service: config.amazonaws.com
            Action:
              - 's3:PutObject'
            Resource:
              - !Join
                - ''
                - - !GetAtt S3ForConfig.Arn
                  - /AWSLogs/
                  - !Sub ${AWS::AccountId}
                  - /Config/*
            Condition:
              StringEquals:
                s3:x-amz-acl: bucket-owner-full-control

CloudFormation Launch Stack URL

以下のボタンから上のCloudFormationテンプレートを実行することが可能である。ソースコードは、aws-cloudformation-templates/security – GitHub にて公開。

作成されるAWSサービス CloudFormationテンプレート
セキュリティサービス全般 cloudformation-launch-stack
Configのみ cloudformation-launch-stack

モニタリング

他のAWSサービスを利用して、AWS Configのリソースをモニタリングすることができる。例えば、Amazon SQSAmazon CloudWatch Eventsを利用することで、AWSリソースが作成、変更、削除された際に通知を受け取ることが可能となる。