
AWS を使用してオンプレミスサーバー上のファイルベースのマルウェアスキャンを実行する
セキュリティチームが予算やリソースの制約により、すべてのオンプレミスサーバーを継続的に監視することは困難な場合があります。シグネチャベースのアンチウイルスだけでは不十分であり、現代のマルウェアはさまざまな難読化手法を使用します。サーバー管理者は、過去のすべてのサーバーにわたるセキュリティイベントを可視化できない可能性があります。インシデント発生時に、侵害されたシステムと復元に安全なバックアップを特定することは、一元化された監視とアラートがなければ困難です。サーバー管理者が高度な脅威検出のために追加のセキュリティツールをセットアップおよび維持することは面倒です。感染の平均検出時間と修復時間を短縮することは重要ですが、適切な自動化ソリューションがなければ達成するのは困難です。
包括的な脅威インテリジェンスがなければ、インシデント発生時にどのバックアップイメージから復元しても安全かを判断することも別の難しい問題です。バックアップが利用可能であっても、システムがいつ侵害されたかを正確に知らなければ、バックアップから盲目的に復元するのはリスクがあります。これにより、マルウェアを復元し、インシデント対応中にさらに貴重なデータやシステムを失う可能性が高まります。侵入のタイムラインを特定し、復元に安全なバックアップを推奨する自動化ソリューションが必要です。
このソリューションは、AWS Elastic Disaster Recovery (AWS DRS)、Amazon GuardDuty、AWS Security Hubを活用して、オンプレミスサーバーのマルウェア検出の課題に対処します。
これらのサービスの組み合わせにより、パフォーマンスに影響を与えることなく、オンプレミスサーバーを継続的に監視するための費用対効果の高い方法を提供します。また、一元化された脅威分析を通じて侵害のタイムラインを特定し、復元のための安全な復旧時点のバックアップを判断するのに役立ちます。
AWS Elastic Disaster Recovery (AWS DRS) は、手頃な価格のストレージ、最小限のコンピューティング、ポイントインタイムリカバリを使用して、オンプレミスおよびクラウドベースのアプリケーションの高速かつ信頼性の高い復旧により、ダウンタイムとデータ損失を最小限に抑えます。
Amazon GuardDuty は、AWS アカウントとワークロードを継続的に監視し、悪意のあるアクティビティを検出し、可視性と修復のための詳細なセキュリティ検出結果を提供する脅威検出サービスです。
AWS Security Hub は、セキュリティのベストプラクティスチェックを実行し、アラートを集約し、自動修復を有効にするクラウドセキュリティ体制管理 (CSPM) サービスです。

マルウェアスキャンソリューションは、オンプレミスサーバーがすでに AWS DRS でレプリケートされており、Amazon GuardDuty と AWS Security Hub が有効になっていることを前提としています。このリポジトリの cdk スタックは、アーキテクチャ図で DRS Malware Scan とラベル付けされたボックスのみをデプロイします。
AWS アカウント。
Amazon Elastic Disaster Recovery (DRS) が設定されており、少なくとも 1 つのソースサーバーが同期中であること。設定されていない場合は、このドキュメントを確認してください。レプリケーション設定では、AWS Key Management Service (AWS KMS) のカスタマーマネージドキー (CMK) を使用した EBS 暗号化を考慮する必要があります。Amazon GuardDuty Malware Protection は、EBS のデフォルトの AWS 管理キーをサポートしていません。
このソリューションのコンポーネントをデプロイするための IAM 権限。
Amazon GuardDuty が有効であること。有効でない場合は、このドキュメントを確認してください。
Amazon Security Hub が有効であること。有効でない場合は、このドキュメントを確認してください。
警告
現在、Amazon GuardDuty Malware スキャンは、EBS 管理キーで暗号化された EBS ボリュームをサポートしていません。このソリューションを使用して、DRS でレプリケートされたオンプレミス (または他クラウド) サーバーをスキャンする場合は、KMS で独自の暗号化キーを使用して DRS レプリケーションを設定する必要があります。現在、レプリケートサーバーで EBS 管理キーを使用している場合は、DRS コンソールで暗号化設定を独自の KMS キーを使用するように変更できます。
Cloud9 環境を作成し、Ubuntu イメージ (パフォーマンス向上のため少なくとも t3.small) を AWS アカウントに作成します。Cloud9 環境を開き、このリポジトリのコードをクローンします。注: Amazon Linux 2 には node v16 が含まれていますが、2023-09-11 以降サポートされていません。
git clone https://github.com/aws-samples/drs-malware-scan
cd drs-malware-scan
sh check_loggroup.sh
CDK スタックをデプロイするには、Cloud9 ターミナルで次のコマンドを実行し、デプロイを確認します。
npm install
cdk bootstrap
cdk deploy --all
注
このソリューションは 2 つのスタックで構成されています:
cdk deploy DrsMalwareScanStack を実行できます。cdk deploy ScanReportStack を実行できます。両方のスタックをデプロイする場合は、cdk deploy --all を実行します。
DRS ソースサーバーが継続的にレプリケートされ、正常なレプリケーション状態であることを確認します。これは、GuardDuty API の制限によるものです。本稿執筆時点では、DRS スナップショットをスキャンするパブリック AWS API はありません。DRS ソースサーバーのデータに対してマルウェアスキャンを実行する唯一の方法は、AWS DRS が管理するレプリケーションサーバー (Amazon EC2 インスタンス) に対してスキャンを実行することです。レプリケーションが正常な状態で実行されていない場合、DRS マルウェアスキャンが正常に完了しない可能性があります。ReadyforRecovery=Ready を確認する必要があります。
スキャンするソースサーバーを特定します。AWS DRS でレプリケートされているすべてのサーバーから、スキャンする候補サーバーのリストを決定します。AWS DRS コンソールから、ソリューションでスキャンするソースサーバー名をコピーし、テキストエディタに貼り付けます。これは次のステップで使用します。





オプション: S3 上のマルウェアスキャンレポートファイルを確認します。ScanReportStack スタックをデプロイした場合、必要に応じてレポートを実行するようにスケジュールできます。レポートは、DRSVolumeAnnotationsDDBTable DynamoDB テーブルの内容を抽出し、スタックによって作成された Amazon S3 バケット (プレフィックス scanreportstack-scanreportbucket) に書き込みます。このレポートは、ルールがトリガーされるたびに上書き (累積) されます。


オプション: マルチアカウント設定の場合。マルチアカウント戦略の一環として、すべてのセキュリティ検出結果を一元化するための指定されたセキュリティアカウントがある場合、このソリューションも機能します。セキュリティチームはセキュリティアカウントに対して同じ分析を実行できます。リンクされたアカウントで報告された Security Hub と GuardDuty の検出結果は、自動的に一元化されたセキュリティアカウントにコピーされます。
すべての Lambda 関数はログを Amazon CloudWatch にルーティングします。各関数の実行を確認するには、各関数の適切な CloudWatch ロググループを調べ、/aws/lambda/DrsMalwareScanStack-* パターンを探します。
マルウェアスキャン操作の所要時間は、スキャンするサーバー/ボリュームの数 (およびそのサイズ) によって異なります。Amazon GuardDuty がマルウェアを検出すると、SecurityHub の検出結果を生成します。ソリューションはこのイベントをインターセプトし、$StackName-SecurityHubAnnotations Lambda を実行して、マルウェアを含む DRS ソースサーバーの名前を含むメモで SecurityHub の検出結果を拡張します。
SQS FIFO キューは、AWS SQS コンソールの Messages available および Message in flight メトリクスを使用して監視できます。
DRS Volume Annotations DynamoDB テーブルは、各マルウェアスキャン操作のステータスを追跡します。
Amazon GuardDuty には、スキャン操作をスキップする理由が文書化されています。詳細については、マルウェアスキャン中にリソースをスキップする理由 を確認してください。
Amazon GuardDuty マルウェアスキャン操作のログを分析するには、/aws/guardduty/malware-scan-events Amazon CloudWatch ロググループを確認できます。このロググループのデフォルトのログ保持期間は 90 日間で、その後ログイベントは自動的に削除されます。
ターミナルで次のコマンドを実行します:
cdk destroy --all
(オプション) Lambda 関数に関連付けられた CloudWatch ロググループを削除します。
この分析では、例として架空のシナリオを想定しています。以下のコスト見積もりは、米国東部 (バージニア北部) リージョンのサービスに基づいています。
| 月間コスト | 12 か月の総コスト |
|---|---|
| 171.22 USD | 2,054.74 USD |
| サービス名 | 説明 | 月間コスト (USD) |
|---|---|---|
| AWS Elastic Disaster Recovery | ソースサーバー 2 台 / レプリケーションサーバー 1 台 / ディスク 4 台 / 100GB / EBS スナップショット保持期間 30 日 | 71.41 |
| Amazon GuardDuty | 月間マルウェアスキャン量 3 TB | 94.56 |
| Amazon DynamoDB | 100MB / 読み取り 1 回/秒 / 書き込み 1 回/秒 | 3.65 |
| AWS Security Hub | アカウント 1 件 / セキュリティチェック 100 件 / 取り込まれた検出結果 1000 件 | 0.10 |
| AWS EventBridge | カスタムイベント 100 万件 | 1.00 |
| Amazon Cloudwatch | 月間取り込み量 1GB | 0.50 |
| AWS Lambda | ARM Lambda 関数 5 つ - 128MB / 10 秒 | 0.00 |
| Amazon SQS | SQS FIFO 2 つ | 0.00 |
| 合計 | 171.22 |
注 ここに示されている数値は、上記の前提に基づく見積もりであり、AWS 料金計算ツールから導き出されています。詳細については、参考としてこの料金計算ツールを確認してください。参照した計算ツールでサービスの設定を調整して、独自の見積もりを作成できます。 この見積もりには、該当する可能性のある税金や追加料金は含まれていません。実際の料金は、使用状況やこの分析でカバーされていない追加のサービスによって異なる場合があることに注意することが重要です。 重要な環境の場合は、Business Support プランを含めることをお勧めします (見積もりには含まれていません)。
詳細については、CONTRIBUTING を参照してください。
このサンプルコードは MIT-0 ライセンスの下でライセンスされています。LICENSE ファイルを参照してください。