おまかせでマルウェアを検知してくれるって本当!? GuardDuty Malware Protection for S3 がリリースされたのでやってみた

AWS re:Inforce 2024の様子 こんにちは。ソニー・ミュージックエンタテインメント しんろくです。

アメリカ フィラデルフィアで開催されたAWS re:Inforce 2024 (現地 6/10-12)にて、待望のマネージド型脅威検出サービス「Amazon GuardDuty Malware Protection for Amazon S3」が発表&GAされました。

この記事ではこれがどのように動作するのかを、実際に試して確認してみました。

https://docs.aws.amazon.com/guardduty/latest/ug/gdu-malware-protection-s3.html

さっそくやってみた

AWS マネジメントコンソール上で、GuarDutyの画面が更新されています。

AWS マネジメントコンソール画面。GuarDutyの画面が更新されている。

スキャン対象のバケットと、専用のIAM Roleを作ります。

AWS マネジメントコンソール画面。スキャン対象のバケットと、専用のIAM Roleを作っている。

完了です。

AWS マネジメントコンソール画面。操作が完了した。

マルウェアをアップロードするために、AWSが提供するサンプルマルウェアをお借りします。

https://s3-protection.awsworkshop.io/20_deploy/03_test_deploy.html

$ aws s3 cp eicar.com.txt s3://bucket-name/eicar.txt
upload: ./eicar.com.txt to s3://bucket-name/eicar.txt

Findingsを確認します。

AWS マネジメントコンソール画面。Findingsを確認。

[
  {
    "AccountId": "123456789012",
    "Arn": "arn:aws:guardduty:ap-northeast-1:123456789012:detector/94c31c743932f94a31fa8e9114e0239c/finding/18c8066a949163087d58541ce56e4c4c",
    "CreatedAt": "2024-06-12T14:22:59.612Z",
    "Description": "A malware scan on your S3 object arn:aws:s3:::bucket-name/eicar.txt has detected a security risk EICAR-Test-File (not a virus).",
    "Id": "18c8066a949163087d58541ce56e4c4c",
    "Partition": "aws",
    "Region": "ap-northeast-1",
    "Resource": {
      "S3BucketDetails": [
        {
          "Arn": "arn:aws:s3:::bucket-name",
          "Name": "bucket-name",
          "Type": "Destination",
          "CreatedAt": "2024-06-12T14:15:34.000Z",
          "Owner": {
            "Id": "3472e62dfdc985dc0839ffc7baac9cd3d584508ed40c2f7e587895241e94bb85"
          },
          "Tags": [
            {
              "Key": "aws:cloudformation:stack-id",
              "Value": "arn:aws:cloudformation:ap-northeast-1:123456789012:stack/Shinrock-CDKToolkit/ceb2ed00-bdbb-11ed-8abe-06f8d3e5f96d"
            },
            {
              "Key": "aws:cloudformation:stack-name",
              "Value": "Shinrock-CDKToolkit"
            },
            {
              "Key": "aws:cloudformation:logical-id",
              "Value": "StagingBucket"
            }
          ],
          "DefaultServerSideEncryption": {
            "EncryptionType": "aws:kms",
            "KmsMasterKeyArn": null
          },
          "PublicAccess": {
            "PermissionConfiguration": {
              "BucketLevelPermissions": {
                "AccessControlList": {
                  "AllowsPublicReadAccess": false,
                  "AllowsPublicWriteAccess": false
                },
                "BucketPolicy": {
                  "AllowsPublicReadAccess": false,
                  "AllowsPublicWriteAccess": false
                },
                "BlockPublicAccess": {
                  "IgnorePublicAcls": true,
                  "RestrictPublicBuckets": true,
                  "BlockPublicAcls": true,
                  "BlockPublicPolicy": true
                }
              },
              "AccountLevelPermissions": {
                "BlockPublicAccess": {
                  "IgnorePublicAcls": false,
                  "RestrictPublicBuckets": false,
                  "BlockPublicAcls": false,
                  "BlockPublicPolicy": false
                }
              }
            },
            "EffectivePermission": "NOT_PUBLIC"
          },
          "S3ObjectDetails": [
            {
              "ObjectArn": "arn:aws:s3:::bucket-name/eicar.txt",
              "Key": "eicar.txt",
              "ETag": "1ab9ea0e9e2e3933d30a559d36401102",
              "Hash": "275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f",
              "VersionId": "5ccXUSrvU2FzFWiA.NKu0dIJn5_mS_8p"
            }
          ]
        }
      ],
      "ResourceType": "S3Object"
    },
    "SchemaVersion": "2.0",
    "Service": {
      "Archived": false,
      "Count": 1,
      "DetectorId": "94c31c743932f94a31fa8e9114e0239c",
      "EventFirstSeen": "2024-06-12T14:22:59.612Z",
      "EventLastSeen": "2024-06-12T14:22:59.612Z",
      "ServiceName": "guardduty",
      "AdditionalInfo": {
        "Value": "{}",
        "Type": "default"
      },
      "FeatureName": "S3MalwareProtection",
      "MalwareScanDetails": {
        "Threats": [
          {
            "Name": "EICAR-Test-File (not a virus)",
            "Source": "Bitdefender"
          }
        ]
      }
    },
    "Severity": 8,
    "Title": "A malware scan on your S3 object arn:aws:s3:::bucket-name/eicar.txt has detected a security risk EICAR-Test-File (not a virus).",
    "Type": "Object:S3/MaliciousFile",
    "UpdatedAt": "2024-06-12T14:22:59.612Z"
  }
]

無事に検出されていることが確認できました。

また、検知されたオブジェクトのタグを確認すると、「THREATS_FOUND」のタグが付与されています。

AWS マネジメントコンソール画面。検知されたオブジェクトに「THREATS_FOUND」のタグが付与されている。

まとめ

待望のGuardDuty Malware Protection for S3 がリリースされましたので、さっそく検知テストしてみました。

GuardDutyで検知できればリアクションする機能(通知や対処)を実装したり、タグ制御を行うことで誰にもアクセスさせない制御やフォレンジックに利用したりすることも可能となります。

Trend Cloud One にもファイルストレージセキュリティというサービスがありますが、AWS内で完結できるのはうれしいですね。

それではまた!