こんにちは!
松田です!

爆速で2月になりましたね。
時間は容赦してくれません。

昨年の6月に登場した「Amazon GuardDuty Malware Protection for Amazon S3」をようやく実際に導入しました。
なので、機能についてと使用感を本記事にて紹介させていただきます。

GuardDuty Malware Protection for S3とは

GuardDuty Malware Protection for S3はS3バケットにアップロードされたオブジェクトを自動的にスキャンし、マルウェアを検出するというGuardDutyの機能の1つです。GuardDutyの機能の一つなので、SecurityHubとの連携も容易です。マルウェアを検出したら、SecurityHub/EventBridgeと連携して、運用者へ通知するようなユースケースが想定されます。

AWSユーザガイド : GuardDuty Malware Protection for S3

S3 Protectionとの違い

GuardDutyには「GuardDuty S3 Protection」という機能もあります。
名前が似ているので紛らわしいですが、Malware Protection for S3とは全くの別物です。
S3 ProtectionはS3バケットに対する不正な操作を検出する機能です。具体的に言うとCloudTrailログのS3へのAPIアクセスを監視して、機械学習によって不正な操作を検知します。

まとめると

機能 目的 検出対象 検出方法
S3 Protection S3バケットへの不正な操作を検出する CloudTrailログ 機械学習に基づく
Malware Protection for S3 S3バケット内のオブジェクトのマルウェアを検出する オブジェクトファイル スキャンエンジンに基づく

混同しないように注意しましょう。

Malware Protection for S3の深掘り

Malware Protection for S3の仕様についてもう少し詳細に見ていきます。

できること

Malware Protection for S3の機能単体でできることをざっくり言うと以下の通りです。

  • オブジェクトに対するマルウェアスキャン
  • スキャン範囲の指定
  • バケット単位でスキャン対象を指定可能
  • プレフィックスなどで対象オブジェクトをフィルタリングすることも可能
  • マルウェア検出したオブジェクトへタグ付け(キーがGuardDutyMalwareScanStatusで、値が検出結果)
  • オブジェクトがアップロードされたタイミングでのスキャン実行

逆に以下のことは機能単体ではできません。

  • スキャン対象の除外フィルタリング
  • オンデマンドスキャン
  • マルウェアを検出したオブジェクトの隔離

オブジェクトの隔離はEventBridgeで隔離を実行するLambdaをキックすれば実装はできそうですね。

ちなみに以前、S3のマルウェア対策として「Cloud Storage Security Antivirus for Amazon S3」という製品を利用していました。
この製品ではスキャン対象の除外フィルタリング/オンデマンドスキャン/マルウェアを検出したオブジェクトの隔離が可能でした。
今後アップデートがあるかもしれませんが、Malware Protection for S3ではできることは最低限な印象です。

「Cloud Storage Security Antivirus for Amazon S3」については以下ブログで紹介されていますので、ぜひご参照ください。

Cloud Storage Security Antivirus for Amazon S3 を使ってみた

料金

東京リージョンの価格は以下の通りです。
スキャン対象のオブジェクトのサイズと数に基づいた料金が発生します。

※このブログを書く直前に大幅値下げされたとのアップデートがありました。なんてタイミング。。。
Amazon GuardDuty Malware Protection for S3 announces price reduction

単位 料金
スキャンされるオブジェクトサイズ(GB/月) USD0.1185/GB
スキャンされるオブジェクト数(数/月) USD0.2825/1000個のオブジェクト

これとは別に1年間限定の無料枠があります。詳細についてドキュメントをご参照ください。

Amazon GuardDuty の料金

スキャンの仕組み

スキャン実行までの流れ

  • 検知 : GuardDutyはEventBridge経由で対象S3バケットにオブジェクトがアップロードされたことを検知する
  • スキャン環境へコピー : PrivateLink経由でオブジェクトをダウンロードし、隔離されたスキャン環境(リージョン内のインターネットアクセスがないAWS管理下のVPC)にオブジェクトのコピーを保存する
  • スキャン実行 : スキャン環境にてオブジェクトの読み取り、複合化、スキャンを実行する
  • コピーオブジェクトの削除 : スキャンが完了したら、コピーオブジェクトを削除する

AWSユーザガイド : How does Malware Protection for S3 work?

スキャンエンジン

具体的にどのスキャンエンジンを利用しているかについては明記されていません。(おそらくセキュリティの観点から)
ただユーザガイドには以下の記述があります。

Amazon GuardDuty has an internally built and managed scan engine and a third-party vendor

The fully managed GuardDuty scan engine continuously updates the list of malware signatures every 15 minutes.

AWSユーザガイド : GuardDuty malware detection scan engine

記述から以下のことがわかります。

  • AWS独自のエンジンとサードパーティーエンジン(Bitdefenderなど)を利用している
  • シグネチャ(コンピュータウイルスやマルウェアを特定するための識別情報(パターン))の取得は15分ごとに行われる

実際に利用する

Malware Protection for S3を有効にして、マルウェアファイルの検出がどのように行われるかを実際に見ていこうと思います。

有効化

マネジメントコンソールにログインして、GuardDutyの画面から「S3 の Malware Protection」をクリックします。
そして、「S3 の Malware Protection」をクリックします。

スキャン対象のバケットとプレフィックスを指定します。(今回はプレフィックスは指定していません)

スキャン結果タグをオブジェクトに付与するかを選択します。

サービスロールを指定します。今回は新しいサービスロールを作成することにします。

この設定で有効化します。
有効化できたようです。

スキャン対象にしたS3バケットを見てみると、malware-protection-resource-validation-objectというオブジェクトができていました。
どうやらMalware Protection for S3の対象バケットには、このテスト用オブジェクトが作成されるようです。

動作確認

マルウェアのテストファイルであるEICARテストファイルをS3バケットにアップロードします。

https://downloadcenter.trendmicro.com/index.php?regs=jp&prodid=1424&ossl=2

上記リンクからeicar.comをダウンロードして、S3にアップロードします。

1分も経たないうちに検出されました。

オブジェクト(eicar.com)をみると、検出結果タグが付与されていることがわかります。

最後に

以上、Malware Protection for S3の機能説明と使用感の共有でした。
機能単体ではあくまで検出までしかできないので、それを運用者への通知などはEventBridgeやSNS/Chatbotを利用して実装する必要があります。

ただ導入が非常に簡単でコストも控えめなので、前向きに利用を検討する機能だと思います。

では。