[アップデート] Amazon GuardDuty マルウェア保護がオンデマンドスキャンに対応しました

Amazon GuardDuty のマルウェア保護がオンデマンドスキャンに対応したため試してみました。
2023.05.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon GuardDuty のマルウェア保護がオンデマンドスキャンに対応しました!

これまでは、C&C サーバとの通信検知など、GuardDuty が別のイベントを検知したことをトリガーとしてマルウェアスキャンが開始されていました。今回のアップデートでユーザーの任意のタイミングで Amazon EC2 インスタンス(Amazon EBS)をスキャンできるようになりました。

マルウェア保護のオンデマンドスキャン機能について

これまでのマルウェア保護機能については下記ブログにまとまっています。

アップデートされたオンデマンドスキャンに関するユーザーガイドの記載箇所は次のページです。2023/5/3 時点では英語ページのみです。


オンデマンドスキャンの概要です。

  • これまで同様に Amazon EC2 インスタンスにアタッチされた Amazon EBS ボリュームのスナップショットを作成し、スナップショットからレプリカ EBS ボリュームを作成してスキャンする
    • 実行中のワークロードのパフォーマンスに影響を与えないように設計されている
  • マネジメントコンソール、もしくは、API (AWS CLI) から実行できる
  • 同じリソースに対して、前回のスキャン(GuardDuty 契機スキャンとオンデマンドスキャンの両方)から 1 時間はオンデマンドスキャンができない

料金はこれまでのマルウェア保護と同様の考え方です。ただし、オンデマンドスキャンは 30 日の無料期間の対象外である点に注意が必要です。

試してみた

事前準備として 8GB の EBS をアタッチした EC2 インスタンス(Amazon Linux 2023)に EICAR テストファイルを作成しておきます。

EICAR テストファイルとは、マルウェア対策ソフトをテストするためのファイルです。

$ cat /home/ec2-user/eicar.com
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*


オンデマンドスキャンは、マルウェア保護の設定画面から対象としたい EC2 インスタンスの ARN を指定して実行します。

もしくは「マルウェアスキャン」のページからも実行できます。

EC2 インスタンスの ARN は次の形式です。

arn:aws:ec2:<Region>:<AccountId>:instance/<InstanceId>

EC2 インスタンスの ARN の例です。

arn:aws:ec2:ap-northeast-1:111122223333:instance/i-039e5f5bc1example


実行結果は「マルウェアスキャン」画面から確認できました。

想定通り、スキャン結果がInfected (感染した) になっています。

詳細を確認してみます。

検出された脅威はEICAR-Test-File (not a virus)として記録されており、ファイルパス/home/ec2-user/eicar.comも分かります。


一度スキャンするとスキャン結果から再スキャンを選択することができました。毎回、ARN を調べる必要はなさそうです。

試しに実行してみましたが、前回のスキャンから 1 時間以内なので実行できませんでした。

スキャンログの確認

Amazon CloudWatch Logs にスキャンのログが出力されます。スキャンがスキップされた場合などに理由を確認することもできます。

スキャンが開始されたことを示すログの例です。requestTypeからオンデマンドスキャンであることが分かります。

{
    "eventDetails": {
        "accountId": "111122223333",
        "eventType": "EC2_SCAN_STARTED",
        "eventTime": "2023-05-03T15:18:23.920Z",
        "detectorId": "bcc364adabff5bb568a3aaa1bexample",
        "schemaVersion": "1.0"
    },
    "scanRequestDetails": {
        "requestType": "ON_DEMAND",
        "scanId": "77edffcf92e5213eccd742ae57ed8f66"
    },
    "resourceDetails": {
        "resourceType": "EC2_INSTANCE",
        "instanceDetails": {
            "instanceId": "i-039e5f5bc1example",
            "volumeDetailsList": [
                {
                    "volumeId": "vol-0a059021c3example",
                    "deviceName": "/dev/xvda",
                    "volumeSizeGb": 8
                }
            ]
        }
    }
}

スキャンが完了したことを示すログの例です。scanResultStatusから脅威が検出されたことが分かります。

{
    "eventDetails": {
        "accountId": "111122223333",
        "eventType": "EC2_SCAN_COMPLETED",
        "eventTime": "2023-05-03T15:28:25Z",
        "detectorId": "bcc364adabff5bb568a3aaa1bexample",
        "schemaVersion": "1.0"
    },
    "scanRequestDetails": {
        "requestType": "ON_DEMAND",
        "scanId": "77edffcf92e5213eccd742ae57ed8f66"
    },
    "resourceDetails": {
        "resourceType": "EC2_INSTANCE",
        "instanceDetails": {
            "instanceId": "i-039e5f5bc1example",
            "volumeDetailsList": [
                {
                    "volumeId": "vol-0a059021c3example",
                    "deviceName": "/dev/xvda",
                    "volumeSizeGb": 8,
                    "volumeSnapshotId": "snap-0d1ab82c1aexample"
                }
            ]
        }
    },
    "scanResultsSummary": {
        "scanResultStatus": "THREATS_FOUND",
        "scannedItemCount": {
            "totalGb": 2,
            "files": 39643
        }
    }
}

参考情報として、オンデマンドスキャンがスキップされた場合のログの例も掲載します(本ブログの検証とは異なるスキャンです)。skipReasonからスキャンがスキップされた理由が分かります。この例の場合は暗号化に対応していないことが理由として記録されています。

{
    "eventDetails": {
        "accountId": "111122223333",
        "eventType": "EC2_SCAN_SKIPPED",
        "eventTime": "2023-05-03T15:10:31.118Z",
        "detectorId": "bcc364adabff5bb568a3aaa1bexample",
        "schemaVersion": "1.0"
    },
    "scanRequestDetails": {
        "requestType": "ON_DEMAND",
        "scanId": "4de71fe8c3fbbbd1007d91ed27971f55"
    },
    "resourceDetails": {
        "resourceType": "EC2_INSTANCE",
        "instanceDetails": {
            "instanceId": "i-0d1690c9b01204cd7",
            "volumeDetailsList": [
                {
                    "volumeId": "vol-065de07f19f2f0849",
                    "deviceName": "/dev/xvda",
                    "volumeSizeGb": 8,
                    "skipReason": "UNSUPPORTED_KEY_ENCRYPTION"
                }
            ]
        }
    }
}

さいごに

Amazon GuardDuty のマルウェア保護がオンデマンドスキャンに対応したため早速試してみました。先日にも Lambda 保護のアップデートがあり、どんどん GuardDuty が便利になっていますね。

以上、このブログがどなたかのご参考になれば幸いです。