【Amazon GuardDuty】EC2 マルウェアスキャン を実施する

# 背景
セキュリティ対策の一環として、開発・テスト環境に存在するEC2インスタンスへのセキュリティ診断が必要となりました。
これにあたり、Amazon GuardDuty を利用したマルウェアスキャンを実施しましたので、その手順をまとめます。


# 目次
* [1. はじめに](#1-はじめに)
* [2. 実施方法](#2-実施方法)
    - [2-1. GuardDuty が開始するマルウェアスキャン](#2-1-guardduty-が開始するマルウェアスキャン)
        - [2-1-a. GuardDutyの有効化](#2-1-a-guarddutyの有効化)
        - [2-1-b. スキャン結果の確認](#2-1-b-スキャン結果の確認)
    - [2-2. オンデマンドのマルウェアスキャン](#2-2-オンデマンドのマルウェアスキャン)
        - [2-2-a. マネジメントコンソールでの実施](#2-2-a-マネジメントコンソールでの実施)
        - [2-2-b. AWS CLIでの実施](#2-2-b-aws-cliでの実施)
        - [2-2-c. スキャン結果の確認](#2-2-c-スキャン結果の確認)
* [補足. マルウェアスキャンを100台実施してみた](#補足-マルウェアスキャンを100台実施してみた)


# 1. はじめに
今回は起動中・停止中に関わらず、全てのインスタンスをスキャンの対象としました。
対象のインスタンスは、それぞれ以下のリージョンに配置されています。

* 米国西部 (北カリフォルニア)
* アジアパシフィック (シンガポール)
* アジアパシフィック (東京)
* 欧州 (フランクフルト)
* 南米 (サンパウロ)


# 2. 実施方法
Amazon GuardDuty では、以下の機能を利用して「自動」または「手動」によるマルウェアスキャンが可能です。

* GuardDuty が開始するマルウェアスキャン（自動）
* オンデマンドのマルウェアスキャン（手動）

今回はインスタンスを一つずつスキャンし、その結果を確認していく必要がありましたので、「オンデマンドのマルウェアスキャン」を選択しました。
一方で、自動スキャンも並行して実施していましたので、それぞれの手順をまとめていきます。

>EC2のマルウェア保護 - Amazon GuardDuty
https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/malware-protection.html


# 2-1. GuardDuty が開始するマルウェアスキャン
こちらの方法では、GuardDuty によって自動的にスキャンが実施されます。
スキャンのタイミングは、24時間に1回のペースです。
そのため、日常的にセキュリティ診断を実施する場合などに効果的です。


# 2-1-a. GuardDutyの有効化
まず最初に、「GuardDuty」のページから機能を有効化する必要があります。
有効化すると、GuardDuty によるスキャンが開始されます。
注意点として、30日間は無料トライアルになりますが、それ以降は有料です。
また、機能の有効化はリージョンごとに必要となります。

![2-1-a_GuardDutyの有効化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527980/9d215347-74cd-6e07-16e6-0efde4257005.png)


# 2-1-b. スキャン結果の確認
スキャンによってマルウェアが検知された場合、「検出結果」または「EC2 マルウェアスキャン」のページに該当するリソースが表示されます。
スキャン結果については、EventBridge または S3 に送信することも可能です。

![2-1-b_スキャン結果の確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527980/eefc3fae-f734-5a36-dc9e-348444a8af04.png)


# 2-2. オンデマンドのマルウェアスキャン
こちらの方法では、手動でEC2インスタンスを選択してスキャンを実施します。
スキャンのタイミングは、1時間に1回のペースです。
また、スキャン結果はマルウェアの検知が無かった場合にも表示されます。
そのため、速やかにインスタンスに対してスキャン・結果確認を実施したい場合などに効果的です。


# 2-2-a. マネジメントコンソールでの実施
オンデマンドのマルウェアスキャンは、「EC2 マルウェアスキャン」のページから実施します。
「GuardDuty が開始するマルウェアスキャン」とは異なり、機能を有効化する必要はありません。
対象のインスタンスの ARN を指定することで、スキャンが開始されます。

![2-2-a_マネジメントコンソールでの実施.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527980/d25621f5-c024-372f-7886-b7d623225728.png)


# 2-2-b. AWS CLIでの実施
オンデマンドのマルウェアスキャンでは、AWS CLI を利用することも可能です。
以下のコマンドを実行することで、スキャンを開始できます。

```
aws guardduty start-malware-scan --resource-arn "arn:aws:ec2:us-east-1:555555555555:instance/i-b188560f"
```
※「--resource-arn」以降を、対象のインスタンスの ARN に指定してください。


# 2-2-c. スキャン結果の確認
スキャン結果については、「EC2 マルウェアスキャン」のページから確認できます。
マルウェアの検知あり・検知なしに関わらず、スキャンしたインスタンスごとに結果が表示されます。

![2-2-c_スキャン結果の確認_修正版.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527980/88b662d4-0282-b03a-b60a-068f976e436a.png)


# 補足. マルウェアスキャンを100台実施してみた
今回のセキュリティ診断では、111台のEC2インスタンスに対してオンデマンドのマルウェアスキャンを実施しました。
オンデマンドのマルウェアスキャンは、EC2インスタンスにアタッチされているEBSボリュームの容量に応じて料金が決定されます。
そのため、実際にどれだけの容量がスキャンされ、どれだけのコストが発生したのかをまとめてみたいと思います。

### 実施結果
* 総インスタンス数
    * **111 台**
* 総容量
    * **5,544 GB**（約5.4 TB）
    ※内訳は以下の通りです

|     EBSボリューム    |         台数        |
|         :-:         |         :-:         |
|         8 GB        |         20          |
|        30 GB        |         11          |
|        40 GB        |         57          |
|        50 GB        |          1          |
|        64 GB        |          1          |
|       100 GB        |         12          |
|       160 GB        |          8          |
|       180 GB        |          1          |

* 総コスト
    * **$102.39**
    * **約14,726円**（1ドル＝150円換算）

### 実施した感想
100台以上スキャンした結果としては、想定よりもコストは抑えめでした。
その要因としては、利用しているEBSボリュームの容量がそこまで大きくなかったからだと思われます。
同じ100台のスキャンでも、容量の大きいインスタンスが多い場合は、コストの結果が異なりそうです。