メインコンテンツまでスキップ
Sumo Logic Japanese

Amazon GuardDuty アプリケーションのログの収集

このページでは Amazon GuardDuty アプリケーションでログを収集する方法について説明します。

収集の概要

  1. Amazon GuardDuty は、新しい知見が生成されたり、既存の知見が再び発生したりした時点で、CloudWatch イベントに基づいて通知を送信します。
  2. CloudWatch イベント ルールにより、CloudWatch は Lambda 関数の Sumo CloudWatchEventFunction に GuardDuty の知見に関するイベントを送信できます。
  3. Lambda 関数は、ホストされる Sumo Collector 上の HTTP Source にイベントを送信します。

この設定は、AWS Serverless Application Repository (サーバレス アプリケーション リポジトリ) で公開される AWS Serverless Application Model (SAM) 仕様で定義されています。必要な AWS リソースを手動で作成する必要はありません。下記のステップ 2 に従って設定をデプロイするだけです。

ステップ 1: HTTP Source を設定する

  1. Sumo Logic で、Hosted Collector を設定します。
  2. Sumo Logic で、HTTP Source を設定します。  Source を設定するには、ページの [Advanced Options for Logs (ログの詳細オプション)] セクションで以下を行います。
    1. [Format (形式)]yyyy-MM-dd'T'HH:mm:ss.SSS'Z' と指定します。 
    2. [Timestamp locator (タイムスタンプ ロケータ)] を .*"updatedAt":"(.*)".* と指定します。
      timestamp-format.png

ステップ 2: Sumo GuardDuty イベント プロセッサのデプロイ

このステップでは、イベント プロセッサをデプロイします。これにより、「収集の概要」で説明されている AWS リソースが作成されます。

  1. https://serverlessrepo.aws.amazon.com/applications にアクセスします。
  2. 「sumologic-guardduty-events-processor」を検索します。 
    repo.png
  3. Sumo アプリケーションのページが表示されたら [Deploy (デプロイ)] をクリックします。
    deploy.png
  4. [Configure application parameters (アプリケーション パラメータの設定)] パネルで、上記で作成した HTTP Source の URL を入力します。
    app-params.png
  5. [Deploy (デプロイ)] をクリックします。

省略可能な環境変数の設定

  1. AWS Lambda コンソールに移動します。
  2. 「aws-serverless-repository-CloudWatchEventFunction-<接尾辞>」関数を探してクリックします。
  3. [Environment variables (環境変数)] セクションまで下にスクロールします。
    lambda6.png

    次の省略可能な変数を設定できます。
    • ENCODING (省略可能)。CloudWatch ログ イベントをデコードするときに使用するエンコーディング。デフォルトは utf-8 です。
    • SOURCE_CATEGORY_OVERRIDE (省略可能)。HTTP Source で設定された _sourceCategory の値を上書きします。
    • SOURCE_HOST_OVERRIDE (省略可能)。HTTP Source で設定された _sourceHost の値を上書きします。
    • SOURCE_NAME_OVERRIDE (省略可能)。HTTP Source で設定された _sourceName の値を上書きします。

ログ メッセージのサンプル


{
   "schemaVersion":"2.0",
   "accountId":"012345678910",
   "region":"us-east-1",
   "partition":"aws",
   "id":"38af75470eced5f1c6e4ee9895961baa",
   "arn":"arn:aws:guardduty:us-east-1:012345678910:detector/aaaf7420746be13be119afd94e417684/finding/38af75470eced5f1c6e4ee9895961baa",
   "type":"Recon:EC2/PortProbeUnprotectedPort",
   "resource":{
      "resourceType":"Instance",
      "instanceDetails":{
         "imageId":"ami-06db9a11",
         "instanceId":"i-0d6c314027f74dc82",
         "instanceType":"m4.xlarge",
         "launchTime":1481719450000,
         "platform":null,
         "productCodes":[


         ],
         "iamInstanceProfile":{
            "arn":"arn:aws:iam::012345678910:instance-profile/nodes.k8s.travellogic.info",
            "id":"AIPAJQDPNZCGEVVUZ4FEW"
         },
         "networkInterfaces":[
            {
               "ipv6Addresses":[


               ],
               "privateDnsName":"ip-172-20-45-123.ec2.internal",
               "privateIpAddress":"172.20.45.123",
               "privateIpAddresses":[
                  {
                     "privateDnsName":"ip-172-20-45-123.ec2.internal",
                     "privateIpAddress":"172.20.45.123"
                  }
               ],
               "subnetId":"subnet-1637825f",
               "vpcId":"vpc-c9c4f0ae",
               "securityGroups":[
                  {
                     "groupName":"nodes.k8s.travellogic.info",
                     "groupId":"sg-67e3bb1d"
                  }
               ],
               "publicDnsName":"ec2-54-89-171-133.compute-1.amazonaws.com",
               "publicIp":"54.89.171.133"
            }
         ],
         "tags":[
            {
               "key":"KubernetesCluster",
               "value":"k8s.travellogic.info"
            },
            {
               "key":"Name",
               "value":"nodes.k8s.travellogic.info"
            },
            {
               "key":"k8s.io/role/node",
               "value":"1"
            },
            {
               "key":"aws:autoscaling:groupName",
               "value":"nodes.k8s.travellogic.info"
            }
         ],
         "instanceState":"running",
         "availabilityZone":"us-east-1a"
      }
   },
   "service":{
      "serviceName":"guardduty",
      "detectorId":"aaaf7420746be13be119afd94e417684",
      "action":{
         "actionType":"NETWORK_CONNECTION",
         "networkConnectionAction":{
            "connectionDirection":"INBOUND",
            "remoteIpDetails":{
               "ipAddressV4":"180.70.170.34",
               "organization":{
                  "asn":9318,
                  "asnOrg":"SK Broadband Co Ltd",
                  "isp":"SK Broadband",
                  "org":"SK Broadband"
               },
               "country":{
                  "countryCode":"KR",
                  "countryName":"South Korea"
               },
               "city":{
                  "cityName":"Uijeongbu-si"
               },
               "geoLocation":{
                  "lat":37.7415,
                  "lon":127.0474
               }
            },
            "remotePortDetails":{
               "port":59740,
               "portName":"Unknown"
            },
            "localPortDetails":{
               "port":22,
               "portName":"SSH"
            },
            "protocol":"TCP",
            "blocked":false
         }
      },
      "resourceRole":"TARGET",
      "additionalInfo":{
         "additionalPorts":[
            22
         ]
      },
      "eventFirstSeen":"2017-11-01T21:31:05.542+0000",
      "eventLastSeen":"2017-11-01T21:31:05.542+0000",
      "archived":false,
      "count":743
   },
   "severity":2,
   "createdAt":"2017-11-01T21:31:05.542+0000",
   "updatedAt":"2017-11-01T21:31:05.542+0000",
   "title":"Unprotected port in EC2 Instance i-0d6c314027f74dc82 is being probed.",
   "description":"EC2 Instance i-0d6c314027f74dc82 has an unprotected port 22 which is being probed by a known malicious host with IP address 180.70.170.34."
}

クエリのサンプル

脅威の詳細

_sourceCategory=aws/guardduty
| json field=_raw "accountId", "region", "partition", "id", "arn", "type","service.serviceName","service.detectorId","service.action","severity","title","description" nodrop
| json field=_raw "resource.resourceType" as resourceType nodrop
| json field=%service.action "networkConnectionAction.remoteIpDetails.ipAddressV4" as ip nodrop
| json field=%service.action "networkConnectionAction.localPortDetails.port" as localPort nodrop
| parse "\"vpcId\": \"*\"" as vpcId, "\"subnetId\": \"*\"" as subnetId,"\"groupId\": \"*\"" as securityGroupId,"\"tags\": [*]" as tags,"\"groupName\": \"*\"" as securityGroupName nodrop
| json field=_raw "resource.instanceDetails.instanceId" as instanceid nodrop
| if(severity=2, "Low", if(severity=5, "Medium", if(severity=8, "High",severity))) as severity
| if(!isNull(instanceid),concat ("https://",region,".console.aws.amazon.com/ec2/v2/home?region=",region,"#Instances:search=",instanceid),"") as link
| json field=%service.action "networkConnectionAction.remoteIpDetails.geoLocation.lon" as longitude nodrop
| json field=%service.action "networkConnectionAction.remoteIpDetails.geoLocation.lat" as latitude nodrop
| json field=%service.action "networkConnectionAction.remoteIpDetails.organization.asnOrg" as asnOrg nodrop
| json field=%service.action "networkConnectionAction.remoteIpDetails.organization.org" as organization nodrop
| json field=%service.action "networkConnectionAction.remoteIpDetails.organization.isp" as isp nodrop
| count as count by title, accountId, resourceType, organization, isp, ip, link
| sort count

  • この記事は役に立ちましたか?