Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

Amazon GuardDutyの保護プランで実現する脅威検知とマルウェア対策

こんにちは、プロダクト本部プラットフォーム部SREチームの坪井(@boy2)です。

AWSをご利用のみなさん、Amazon GuardDuty (以下 GuardDuty)は活用されていますか? GuardDutyの設定を有効にしただけで、安心していませんか?それだけではGuardDutyの機能を十分に活用できているとは言えません。この記事では、GuardDutyの基本的な機能から、さらに効果的な活用方法までを解説していきます。GuardDutyをすでに利用されている方も、これから利用を検討されている方も、ぜひ最後までご覧ください。

要約

  • GuardDutyはAWSの脅威検知サービスであり、標準機能に加えて保護プランで検知範囲を拡大できる
  • 保護プランにはS3、EKS、ランタイム、マルウェア、RDSに対するものがある
  • ClassiではS3マルウェアProtection、RDS Protection、Lambda Protectionを有効化し、セキュリティを強化している
  • S3マルウェアProtection では、マルウェア検知時にオブジェクトにタグを付与し、アクセス制御に利用できる
  • GuardDutyの運用には、検出結果の通知、分析、対応策の実施といったルールを定めることが重要
  • 保護プランの導入前には、費用を見積もること

GuardDutyとは

GuardDutyは、AWSアカウントやワークロードを継続的にモニタリングし、悪意のあるアクティビティがないかを確認して脅威を検出するサービスです。標準機能は、AWS CloudTrail 管理イベント、Amazon VPC Flow Logs、DNS クエリログをモニタリングします。

特徴の一つとして、追加のインフラストラクチャのデプロイや保守が不要であることが挙げられます。導入はとても簡単で、ワンクリックで導入でき、フルマネージドであるため、インフラ管理やスケーラビリティを心配する必要がありません。

GuardDutyの保護プランとは

GuardDutyは標準的な基本データソースを監視できる便利なサービスですが、様々なリソースに対する保護プランを活用することで、脅威検出の対象範囲を大幅に拡大し、セキュリティを強化することができます。

GuardDutyコンソールを開くと、左側のメニューに以下の「Protection plans(保護プラン)」が表示されます。

  • S3 Protection:バケットへの不正なアクセスやデータの改ざんを検出
  • EKS Protection:EKSクラスターの不正なアクティビティを検出
  • 拡張脅威検出:AWSアカウント内の様々な情報源から、複数種類のAWSリソースにまたがり時間をかけて少しずつ進められる複雑な攻撃を検出
  • ランタイムモニタリング:EC2インスタンスやコンテナワークロードの不正なプロセスやネットワークアクティビティを検出
  • マルウェア Protection
    • EC2インスタンスにアタッチされたEBSボリュームをスキャンし、マルウェアの存在を検出
    • S3マルウェア Protection:Amazon S3にアップロードされたオブジェクトのマルウェアを検出
  • RDS Protection:データベースへの不正なアクセスを検出
  • Lambda Protection:不審な呼び出しパターンや悪意のあるペイロードを検出

GuardDutyを有効化すると、一部の基本的な保護プランが自動的に有効になります。ただし、追加の保護プランはオプションであり、個別に有効化する必要があります。最新の情報と詳細については、AWS公式ドキュメントをご参照ください。 これらの保護プランには、多くの場合30日間の無料トライアルが提供されています。無料トライアルを活用することで、GuardDutyの機能を実際に体験し、自社の環境に最適な保護プランを選択できます。

Classiでのセキュリティ強化

保護プランを見直す

Classiでは、セキュリティ体制をより強固なものとするため、GuardDutyの保護プランの見直しを行いました。既存の保護プランに加え、未活用のプランの中に、Classiのシステム環境においてセキュリティリスクを低減する上で特に有効と考えられる、以下の3つのプランを選定し、有効化しました。

  • S3マルウェア Protection:特定アカウントのバケットで有効化
  • RDS Protection:全AWSアカウントで有効化
  • Lambda Protection:全AWSアカウントで有効化

ここでは、S3マルウェアProtection について例にあげて説明していきます。これは2024年6月に一般リリースされた保護プランです。オブジェクトをスキャンしたあとにS3にタグを付けて、そのタグの付いたオブジェクトに対するアクセス制御を実施することができます。 例えば、マルウェアが発見されたオブジェクトを「アクセス禁止」にしたり、lambda関数等の実装が必要ですがタグが付与されたタイミングで「オブジェクト削除」することも可能です。

プランを有効化して試す

S3マルウェアProtection を有効化した際、マルウェア検知されどのような動作をするのか試してみました。EICARテストファイルをS3バケットへアップロードして実施します。 EICARテストファイルは、ウイルス対策ソフトの動作を安全に確認するための無害なファイルです。以下の手順で簡単に作成できます。 テキストエディタを開きます 以下の文字列をコピーして貼り付けます

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

ファイルを任意の名前で、拡張子を.comとして保存します。 このファイルをウイルス対策ソフトでスキャンすることで、検出機能や警告動作などをテストできます。

S3マルウェアProtectionの有効化

試しに、作成したEICARテストファイルをS3バケットにアップロードします

% aws s3 cp eicar.com s3://classi-malware-protection-test/

アップロード後、即時にスキャンが実行されオブジェクトに、キー「GuardDutyMalwareScanStatus」、値「THREATS_FOUND」にてタグ付されました。

EICARファイルスキャン後のタグ

正常なファイルをアップロードした際の値は「NO_THREATS_FOUND」です。

画像ファイルスキャン後のタグ

タグキーと値のペアを利用してユーザーのアクセスをコントロールする例については、AWSドキュメントを参照ください。 GuardDutyの検出結果です。

GuardDutyの検出結果

詳細を開きます。

脅威の内容詳細

権限設定に関する注意点:スキャンされたオブジェクトにタグが付与されるため、リソースにオブジェクトを操作する権限がないとオブジェクトのコピーに失敗します。オブジェクトを操作する場合には、操作元のIAMロールポリシーにs3:GetObjectTagging と s3:PutObjectTagging の権限が付いていることを確認ください(参考)。

GuardDutyの運用ルールを決める

GuardDutyの運用を始める前に、運用ルールを定義しておくことを推奨します。ClassiではSREチームが中心となってGuardDutyの運用を担当していますが、セキュリティに関わる重要な情報であるため、SREチームのメンバーに限らず、社内の誰もが参照できるように運用ルールを詳細に文書化し、共有しています。 検出結果の通知:Slackアラートチャンネルに検出結果を通知

  • 重要度「高」以上を通知する
  • 検出結果の分析:検出結果の詳細を分析し、誤検出か否か、および脅威の性質を特定する
    • 重要度「重大」については可及的速やかに「高」については優先的に対応する
    • 保護プロテクションにおいては悪意ある攻撃や不正利用の可能性が高いため
  • 対応策の実施
    • 脅威に対応するために必要な対策(侵入防止、アクセス制限、システム修復など)を実施する

脅威の重要度と内容によっては既に不正なアクセスが行われている可能性があるため、アラート通知を設定してすぐに気付く仕組みを取り入れます。脅威は、重要度が中程度以下であっても、定期的に検出内容を確認し影響を受けているリソースを速やかに確認するのをおすすめします。

保護プランの費用を見積る

いよいよ運用開始ですね!でも、その前にちょっと待ってください。 費用を見積もることで、後々「こんなはずじゃなかった…」という事態を避けられます。東京リージョンをご利用の場合は、以下のような料金体系になっているので、事前に確認しておくことをおすすめします。

S3マルウェアProtection の料金  (東京リージョン)

  • GB あたり/月:USD 0.1185/GB
  • 評価されるオブジェクト数/月:USD 0.282/1,000 個のオブジェクト *最新の費用は公式ページにてご確認ください。

費用算出例 例えば、東京リージョンにて1ヶ月あたり100GBのデータをスキャンし、100,000個のオブジェクトを評価する場合、以下の費用が発生します。

  • データ量による費用:0.1185USD/GB * 100GB = 11.85USD
  • オブジェクト数による費用:0.282USD/1,000オブジェクト * 100 = 28.2USD
  • 合計費用:11.85USD + 28.2USD = 40.05USD

したがって、このケースでは1ヶ月あたり約40.05USDの費用が発生します。S3バケットのデータ量やオブジェクト数に応じて、費用は大きく変動する可能性があるため、事前にAWSの料金計算ツールを活用し、詳細な見積もりを行うことをおすすめします。 また、S3のStorage Lensを有効化しておくと、無料の範囲内で過去14日間のS3バケットのオブジェクト増加数とストレージの合計サイズが閲覧できるため、費用の算出に役立ちます。

さいごに

GuardDutyの保護プランは、脅威検知の範囲を広げ、よりセキュリティの高い環境を構築するために非常に有効な手段です。ぜひ、ご自身の環境に合わせて活用してみてください。

© 2020 Classi Corp.