NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

Amazon GuardDutyのマルウェア対策機能を使用する&通知方法

こんにちは、上野です。

少し前になりますが、Amazon GuardDutyがマルウェア対策機能に対応しましたね。

aws.amazon.com

GuardDutyは、CloudTrail、VPCフローログ、DNSクエリログなどAWSが管理するログ情報を元に、AWSアカウント内の脅威を検知するサービスですが、マルウェア対策機能はユーザーが管理するEBS内のデータを対象に検知するので、少し従来とは観点が異なるなーと個人的には驚きでした。

今回は機能の概要とEventBridgeを使用した通知方法を紹介します。

マルウェア検知の仕組み

GuardDutyはリアルタイムスキャンや定期タイムスキャンを実行するわけではなく、特定の既存Findingsを検知したタイミングで、マルウェアスキャンを実行します。トリガーとなるFindingsはドキュメントに記載されています。

トリガーとなるFindingsが検知されると、GuardDutyがEBS ボリュームのスナップショットを作成し、AWSが管理するMalware Protection サービスアカウントと共有します。そのスナップショットからEBSレプリカを作成し、その中をスキャンするという仕組みです。概要図をまとめてみました。

スキャン実行後、悪意のある、または疑わしいファイルを検知すると、GuardDuty上で検知します。検出結果タイプは以下のとおりです。

  • Execution:EC2/MaliciousFile
  • Execution:ECS/MaliciousFile
  • Execution:Kubernetes/MaliciousFile
  • Execution:Container/MaliciousFile
  • Execution:EC2/SuspiciousFile
  • Execution:ECS/SuspiciousFile
  • Execution:Kubernetes/SuspiciousFile
  • Execution:Container/SuspiciousFile

マルウェアプロテクション機能を有効にする

実際に検知を試していきます。

まずは機能を使用するためにGuardDutyの画面から有効にしていきます。

Organizations機能を使用してGuardDutyの結果を集約している場合は、集約(管理)アカウントから各アカウントのマルウェアプロテクション機能を有効にします。

管理アカウントを委任している場合は、事前にOrganizationsのマネジメントアカウントから権限設定をする必要があります。

権限をONにしたら、GuardDutyの集約アカウントから各アカウントの機能をONにできます。全アカウント一気に有効にすることもできます。

マルウェアを検知させてみる

Amazon Linux2のEC2を作成して試してみます。

実際にマルウェアを検知させるため、EICAR テストファイルをEC2上に置いておきます。

$ wget https://secure.eicar.org/eicar.com -O eicar.txt
--2022-08-21 14:38:28--  https://secure.eicar.org/eicar.com
Resolving secure.eicar.org (secure.eicar.org)... 89.238.73.97, 2a00:1828:1000:2497::2
Connecting to secure.eicar.org (secure.eicar.org)|89.238.73.97|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 68
Saving to: ‘eicar.txt’

100%[===============================================================================================>] 68          --.-K/s   in 0s

2022-08-21 14:38:30 (9.66 MB/s) - ‘eicar.txt’ saved [68/68]

スキャンを実行させるには、EC2の特定のFindingsを検知しないといけません。

今回は下記のコマンドを実行し、GuardDutyのEC2イベントBackdoor:EC2/C&CActivity.B!DNSを検知させます。(GuardDutyテスト検知用のドメインです)

$ nslookup guarddutyc2activityb.com
Server:         10.0.0.2
Address:        10.0.0.2#53

Non-authoritative answer:
*** Can't find guarddutyc2activityb.com: No answer

しばらくすると、以下のようにDNSクエリの検知とマルウェアの検知がGuardDuty上に表示されます。

結果の詳細には検知したインスタンスの情報や、ファイルのパスなどの情報が表示されています。

マルウェア専用のページもGuardDuty上に追加されており、こちらではスキャンされた容量やファイル数の情報が表示されています。

EventBridgeを使用した通知

検知した内容をEventBridge経由で通知させてみます。 EventBridgeのルールに以下を記載する(+ターゲットにSNSトピックを指定する)ことで、マルウェア検知を通知できます。

  • GuardDuty経由のイベント通知
{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"],
  "detail": {
    "type": [
      "Execution:EC2/MaliciousFile",
      "Execution:ECS/MaliciousFile",
      "Execution:Kubernetes/MaliciousFile",
      "Execution:Container/MaliciousFile",
      "Execution:EC2/SuspiciousFile",
      "Execution:ECS/SuspiciousFile",
      "Execution:Kubernetes/SuspiciousFile",
      "Execution:Container/SuspiciousFile"
    ]
  }
}
  • Security Hub経由のイベント通知
{
  "detail-type": ["Security Hub Findings - Imported"],
  "source": ["aws.securityhub"],
  "detail": {
    "findings": {
      "ProductName": ["GuardDuty"],
      "Types": [
        "TTPs/Execution/Execution:EC2-MaliciousFile",
        "TTPs/Execution/Execution:ECS-MaliciousFile",
        "TTPs/Execution/Execution:Kubernetes-MaliciousFile",
        "TTPs/Execution/Execution:Container-MaliciousFile",
        "TTPs/Execution/Execution:EC2-SuspiciousFile",
        "TTPs/Execution/Execution:ECS-SuspiciousFile",
        "TTPs/Execution/Execution:Kubernetes-SuspiciousFile",
        "TTPs/Execution/Execution:Container-SuspiciousFile"
      ]
    }
  }
}

マルウェア検知も通常のGuardDuty検知イベントとして検知しますので、タイプを絞ってあげればOKです。GuardDutyやEventBridgeの基本を理解している方であれば、このルールさえわかれば設定できるかと思います。 すでにGuard Dutyの通知を一律で行っていれば、追加の設定は不要です。マルウェア検知を個別に通知したい場合はこのルールを使用します。

ターゲットにSNSトピック、AWS Chatbotを設定すると以下のように通知されます。※Chatbotの設定方法は省略します。コチラの記事がわかりやすいです。

  • GuardDutyの通知

  • SecurityHub経由の通知

メール通知の場合は、Input Transformerを使用して通知内容をわかりやすくしたほうが良いでしょう。

その他マルウェア対策機能のカスタマイズ

ドキュメントに詳細が書かれていますので簡単にまとめておきます。

  • スナップショットの保持

通常GuardDutyがマルウェア検知した際に取得したスナップショットは削除されますが、それを保持する設定ができます。有効にするとマルウェアを検出した場合にのみ保持されます。

  • 特定EC2 インスタンスの除外/含める

スキャン対象のEC2を限定できます。特定のタグを付与したインスタンスを除外したり、逆にタグを付与したインスタンスのみをスキャン対象にできます。

どちらの設定もGuardDutyの設定画面から変更可能です。Organizationsで集約している場合は、GuardDutyの管理アカウントから設定変更します。

料金について

スキャンされたEBS容量に応じて料金が発生します。東京リージョンで1 GB あたり0.05USDです。スキャンされた容量は先ほどの検知結果の詳細で確認できます。EC2が不審なアクティビティをしない限りスキャンは実行されないため、あまり料金が大きくなることは無いと思いますが、定期的に多くのEC2が検知されているような環境があれば料金には注意が必要です。(そもそもEC2が不審なアクティビティを検知しているのであればそのアクティビティに対して対応を行うべきでしょう。)

まとめ

機能概要、設定方法と検知内容を中心に紹介しました。GuardDutyもどんどんパワーアップしてきましたね。ちなみにこの機能はボストンで行われたAWSのセキュリティカンファレンスre:Infoceで発表されました。大きいイベントがあると大きいアップデートが発表されますね。私も初回の2019年に行ったきりなので、来年は行きたいです。

執筆者上野史瑛

Japan APN Ambassador
AWSを中心としたクラウドの導入、最適化を専門に行っています。