はじめに
こんにちは。 SRE部の原口です。普段はITインフラ本部のSRE部でクラウドインフラやアプリケーションの改善活動などをしています。
本記事では、AWSのサービスであるAmazon GuardDutyのMalware Protectionを実際に導入した際の注意点を紹介します。
GuardDutyのMalware Protectionを導入してみた
先日発表された、Malware Protectionを僕が担当するサービスで導入する機会がありましたのでご紹介します。
今まではAWS標準でマルウェア対策はありませんでしたので、期待に胸を膨らませて早速導入しました。
Malware Protection とは
マネージド型脅威検出サービスのAmazon GuardDutyに、マルウェアスキャンに対応したMalware Protectionが追加されました。
Malware Protection は GuardDuty のサポート機能として、マルウェアを検出します。
Amazon GuardDuty の Malware Protection
Malware Protectionのサービス仕様
マルウェアの感染が疑われた場合は、EBSのスナップショットを取ってスキャンします。
市販されているマルウェア対策ソフトと異なり、リアルタイムのスキャンやマルウェアの排除・停止などは行いませんが、EBSのスナップショットに対してスキャンするので、サービスに影響なく利用できるのが特徴だと思います。
(ウィルス対策ソフトで、サーバーが落ちたり、PCが重たくなって業務ができない・・・なんてことも過去にはありました)
定期的なスキャンやリアルタイムのスキャンには対応していません。
このような機能が必要な場合は、サードパーティーのマルウェア対策ソフトを利用する必要があります。
Malware Protectionの仕組み
Malware Protectionの実行には、GuardDutyが「あれ?マルウェアに感染していないか?」と思うトリガーが必要になります。
動作フローは以下のとおりです。
- GuardDutyがマルウェア感染が疑われる挙動を検出します
- Malware ProtectionによりEBSにスナップショットが作成されます
- スナップショットに対してマルウェアスキャンが実施されます
上記のように、マルウェアの感染を示す疑わしいアクティビティや潜在的に悪意のあるアクティビティをGuardDutyが検出すると、そのようなアクティビティを検出したリソースにアタッチされたEBSのスナップショットを取り、そのスナップショットに対してスキャンを行います。
そのため、サーバーが高負荷になるなどのサービスへの影響はないのでとりあえず導入しておいて損はないと思います。
利用料金
東京リージョンだと、 スキャンした対象のEBSボリューム1GBあたり $0.05 の料金がかかります。最初の30日は無料枠があります。
最新の料金は、以下のページでEBS Data Volume Scan Analysisを確認してください。
Amazon GuardDuty Pricing
検出対象
基本的にEBSが対象となりますが、スキャンされない条件があるので注意が必要です。
EBSの暗号化方法によるスキャンの可否
デフォルトのKMSキーで暗号化されたボリュームはスキャンされませんので注意が必要です。
暗号化方法 | 対応 |
---|---|
暗号化されていないボリューム | ○ |
カスタマーマネージドキーで暗号化されたボリューム | ○ |
デフォルトのKMSキーで暗号化されたボリューム | ✗ |
ECS 実行環境によるスキャンの可否
EBSをスキャンするのでECS on EC2やEKS on EC2はスキャン対象ですが、ECS Fargateは残念ながら対象外です。
将来的には、Fargateも対象になるといいですね。
実行環境 | 対応 |
---|---|
ECS on EC2 | ○ |
EKS on EC2 | ○ |
Fargate | ✗ |
Malware Protectionの有効化
マネジメントコンソールより実施します。ワンクリックで有効にできます。
有効になったら以下のような画面になります。
今回対象としたサービスはGuardDuty管理者が別途いるので、私のアカウントでは有効にできませんでした。
そのため、管理者に依頼して有効にしてもらいました。
別途管理者がいる場合は、以下のようなメッセージが表示されています。
この機能は GuardDuty 管理者 (アカウント番号 0000000000) によってユーザーに代わって管理されます。
Malware Protectionの挙動について検証
せっかく有効にしたので、早速検出できるかテストしました。
マルウェアを置くだけでは動作してくれないため、工夫が必要です。
マルウェアを仕込む
本物のマルウェアは危ないので、EICAR (European Institute for Computer Antivirus Research)が公開しているEICARテストファイルを用いました。
EC2にログインして、EBSの任意の場所に保存します。
curl https://secure.eicar.org/eicar.com -o eicar.txt
GuardDutyに検出を実行してもらう
前述したようにGuardDutyに「あっ?怪しい。スキャンしなきゃ!」と思ってもらう必要があります。
というわけで、今回はGuardDutyのテスト用ドメインの"guarddutyc2activityb.com"を名前解決してMalware Protectionを起動しました。
GuardDuty EC2 の検出結果タイプ
$ dig guarddutyc2activityb.com
しばらく待つと、GuardDutyが起動して以下の2つが検出されました。
詳細を確認することもできます。
Execution:EC2/MaliciousFile
EICARテストファイルがちゃんと検出されました!
Backdoor:EC2/C&CActivity.B!DNS
最初のトリガーとなった"guarddutyc2activityb.com"を名前解決も検出されています。
マルウェアのは、実際のスキャンが終わるまで20分程度の時間がかかりましたが、無事に検出されました!
利用時の注意点方
MarketplaceのAMIから起動したEC2は対象外!!!
実は、最初にマルウェア検出をテストした際には検出されませんでした。
マルウェアが検出されない理由をいろいろと調べていたところ、AWS Marketplaceより入手したAMIから起動したEC2は、スキャン対象外となっていることに気がつきました。
今回テストした環境は、偶然にもMarketplaceで入手したAMIから起動したEC2インスタンス(CentOS)だったので、EBSはスキャンされていなかったというわけです。
Malware Protectionの検出をテストのログを見ていると以下のようにエラーがでて、スキップされていました。
"resourceDetails": {
"resourceType": "EC2_INSTANCE",
"instanceDetails": {
"instanceId": "i-xxxxxxxxxxxxxxxxx",
"skipReason": "UNSUPPORTED_PRODUCT_CODE_TYPE"
}
}
後からよく調べると、「Marketplaceで入手したAMIから起動したEC2インスタンスはスキャンの対象とならない」と記載がありました。
GuardDuty は、marketplace としての productCode を使用したインスタンスのスキャンをサポートしていません。
GuardDuty Malware Protection の CloudWatch Logs とスキップ理由を理解する
おとなしくAmazon Linuxを利用した方が良いのかもしれません。
今後サポート範囲が広がっていくのか注目していますし、増えていってほしいと思います。
この問題に気がついて再度テストを実施して、本当にマルウェアが検出されたときはとてもうれしかったです。
おわりに
今回は、GuardDutyのMalware Protectionを紹介しました。
安価に利用することができますし、スナップショットへのスキャンなのでサービスへの影響が出ることはありません。
しかも、今後はデフォルトで有効化されます、現時点でも使わない手はなさそうです。
ただし、Marketplaceで入手したものは対象外だったり、リアルタイムのスキャンやマルウェアの無効化や削除も行われませんので、既存の製品と使い分けしていく必要がありそうです。
また、マネジメントコンソール上では検知結果を確認できますが、見逃してしまう場合が多そうです。
EventBridgeを利用した通知も一緒に検討する必要がありそうです。
この記事が、導入の手助けになれば幸いです。