NRIネットコム Blog

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

GuardDuty の機能を使って S3 のウィルスチェックをしよう!

はじめに

こんにちは、大林です。今回のブログでは、AWS re:Inforce 2024 Keynoteで発表されたAmazon GuardDuty Malware Protection for Amazon S3の導入を検討する上で直面した課題と解決策を書いていきたいと思います。
この機能は、S3に新たにアップロードされたオブジェクトに対して、マルウェアスキャンを実行する機能です。 Amazon GuardDuty EKS ProtectionやAmazon GuardDuty Lambda Protectionなどの保護機能とは違い、Amazon GuardDutyを有効化していなくても使用できます。
しかし、GuardDutyを有効化しておくことで脆弱性や不正なIPアドレスからのアクセスなどの脅威を検知することができるため、有効化しておいた方が良いです。
GuardDutyを運用する上でのポイントなどを以下のブログにまとめていますので、よろしければ読んでみてください。

tech.nri-net.com


GuardDuty Malware Protection for Amazon S3は何が嬉しいのか

GuardDuty Malware Protection for Amazon S3は、S3バケットに新しくアップロードされたファイルをスキャンしてマルウェアを検出してくれる機能です。この機能はGuardDutyのマネジメントコンソール上からスキャンしたいS3バケットまたはS3バケット内のパスを指定してスキャンをしていきます。
任意でGuardDuty Malware Protection for Amazon S3によるスキャンされたオブジェクトにGuardDutyMalwareScanStatusタグを付与することができ、スキャン結果に応じてタグの値が変わります。 GuardDutyによるタグ付けを有効化しない場合には、GuardDutyのマネジメントコンソールにある「検出結果」ページに遷移して、検出結果タイプを「Object:S3/MaliciousFile」でフィルタリングすることでマルウェアが検出されたファイルを確認することができます。 この機能はS3にアップロードできる全てのファイル形式をスキャンしているのですが、パスワードで保護されたファイルはスキャンすることができません。GuardDutyがパスワードで保護されたファイルをスキャンしようとすると「UNSUPPORTED」のタグが付与されます。

タグの値 説明
NO_THREATS_FOUND 潜在的な脅威が検出されなかった場合
THREATS_FOUND 潜在的な脅威が検出された場合
UNSUPPORTED スキャンしようとしたオブジェクトがスキャン条件を満たしていなかった場合
ACCESS_DENIED 権限が足りずオブジェクトにアクセスできない場合
FAILED エラーが発生してスキャンが実行されなかった場合


GuardDuty Malware Protection for Amazon S3のコスト

GuardDuty Malware Protection for Amazon S3によるスキャンコスト

料金は従量課金制となっており、スキャンしたオブジェクトサイズとオブジェクト数によって変わってきます。
以下の料金は、東京リージョンのコストです。

項目 コスト
オブジェクトサイズ / 月 0.79USD / GB
オブジェクト数 / 月 0.282USD / 1K

料金 - Amazon GuardDuty | AWS

オブジェクトタグの使用コスト

GuardDuty Malware Protection for Amazon S3でオブジェクトにタグをつけることはオプションとして用意されています。S3 オブジェクトタグ付けを有効にした場合、東京リージョンでは月々10000タグにつきUSD 0.01のタグ付けコストが発生します。

項目 コスト
10000タグ / 月 0.01USD

aws.amazon.com

S3 API コールのコスト

GuardDuty Malware Protection for Amazon S3はS3バケット内のオブジェクトをスキャンする際にS3 APIリクエストを行うため、S3 API コールのコストが発生します。 S3 API コールのコストは以下を参照してください。

aws.amazon.com


GuardDuty Malware Protection for Amazon S3の運用する上で直面した課題と解決策

AWS Security Hubに統合されていないため、検知に気づきにくい

GuardDutyを有効化して保護機能を活用している方は既にSecurity Hubと統合していると思います。その場合、Security Hubと統合されたセキュリティ系サービスの通知はSecurity Hubを通して実装できます。
GuardDuty Malware Protection for Amazon S3はGuardDutyの機能ですが、Security Hubと統合することはできません。そのため、GuardDuty Malware Protection for Amazon S3によっていつ、どのバケットで、どのオブジェクトをスキャンしたか、スキャン結果はどうだったのかを通知するためには作りこみが必要になってきます。
上記の図では、GuardDutyのマルウェアスキャンでマルウェアが検知されると、Amazon EventBridge、AWS Lambda、Amazon SNSを使用して通知する仕組みを実装しています。

GuardDuty Malware Protection for Amazon S3は、Security Hubと統合することはできませんが、Lambdaで検知内容をインポートする処理を作ることで他の統合されているサービスと同様にSecurity Hubで検知内容を管理することができます。 Security Hubで検知内容を管理することで、GuardDuty Malware Protection for Amazon S3以外の検知と統合的に管理することができます。また、GuardDuty Malware Protection for Amazon S3用の通知の仕組みを実装する必要がなくなり、Security Hub用に実装している通知の仕組みを活用できます。

パスを柔軟に指定してスキャンができない

上記で紹介したようにGuardDuty Malware Protection for Amazon S3のスキャンコストは従量課金制なので、スキャン対象を絞ってよりコスト効率良くセキュリティを向上させたいと思います。
スキャン対象を絞る手段としては、特定のパスにアップロードされたオブジェクトだけをスキャンしたり、ワイルドカードを使用して柔軟にパスを指定することが挙げられます。 ですが、GuardDuty Malware Protection for Amazon S3ではパスの指定に以下の制限があります。

  • 指定できるパスは最大5個までの制限がある

  • ワイルドカードを使用したパスパターンを設定できない

そこで、上記の構成でスキャン対象のオブジェクトを柔軟に指定することで、Malware Protection for Amazon S3を活用できます。
上記の構成は、EventBridgeでS3バケット特定のパスにファイルがアップロードされたときにLambdaを起動して、アップロードされたファイルをスキャン用のS3バケットにアップロードします。スキャン用のS3バケットにアップロードされるとGuardDuty Malware Protection for Amazon S3でファイルをスキャンするという仕組みになっています。
このようにEventBridgeを使用してフィルタリングすれば、ワイルドカードやパスの制限を気にせずにスキャン対象を絞ってコスト効率の良い運用を実現できます。 ただ、この構成を導入すると運用するリソースが増えるので、AWS環境を運用する体制が十分でない場合は向いていないかもしれません。

マルウェアが検知された場合の隔離機能がない

GuardDuty Malware Protection for Amazon S3の制限内でスキャン・隔離・削除する場合

柔軟なパス指定をしてスキャン・隔離・削除する場合

スキャンしたファイルでマルウェアが検知された場合、感染拡大を防ぐためにすぐに隔離・削除する必要があります。
しかし、GuardDuty Malware Protection for Amazon S3はスキャンしたファイルでマルウェアが検知されたとしても、そのファイルを隔離する機能はありません。そのため、マルウェアが検知されたファイルを隔離するためには作りこみが必要になってきます。 例えば、EventBridgeとLambda関数でマルウェアが検知されたら別の隔離用バケットにアップロードするという方法です。 自動で隔離・削除すれば、影響を最小限に抑えられるので、運用負荷を抑えつつセキュアな運用が実現できます。

おわりに

GuardDuty Malware Protection for Amazon S3は、S3バケットにアップロードされた新規ファイルをスキャンできる優れた機能ですが、コスト効率良く運用するためには作りこみが必要になってくるケースもあります。
個人的には、Amazon EFS内のファイルもスキャンできるようになるとかなり嬉しいかなと思いました。GuardDuty Malware Protection for Amazon S3を使用して、マルウェアが検出されなかったファイルをEFSにアップロードすればいいのですが、直接EFS内をスキャンできるようになると手間が省けるので。。
GuardDuty Malware Protection for Amazon S3はありがたい機能なので、活用していきたいですね。

執筆者:大林 優斗

クラウドエンジニア
2024 Japan AWS Jr. Champions


執筆記事一覧:https://tech.nri-net.com/archive/author/y-obayashi