こんにちは、網中です。
今まで、AWSのマルウェア対策といえばトレンドマイクロ社のDeepSecurityのようなサードパーティ製品をインストールことがデフォルトだったかと思いますが、Amazon GuardDutyでもマルウェア対策ができるようになりました!
今回はこのうれしいアップデートについて、ご紹介したいと思います!
Amazon GuardDutyとは
Amazon GuardDuty は、Amazon S3 ログや AWS CloudTrail データイベント、CloudTrail 管理イベントログ、VPCフローログなどといったデータソースを分析・処理するセキュリティモニタリングサービスです。
悪意のある IP アドレスやドメインのリストなどの脅威情報と機械学習を使用して、悪意のあるアクティビティを特定します。たとえば、ビットコインをマイニングのために利用された EC2 インスタンスとコンテナワークロードを検出できます。
また、別途構築が必要にはなりますが、Amazon EventBridge・AWS Lambdaと連携すれば、Amazon GuardDutyで異常を検出した際に対象のリソースを削除・停止・隔離することも可能ですし、AWS Security Hubへ結果を集約し統合管理することも可能です。
Malware Protectionの基本動作
Malware Protectionを有効化するとEC2 で実行されている EC2 インスタンスまたはコンテナワークロードの 1 つが疑わしい動作をしていることを GuardDuty が検出すると、マルウェアスキャンが開始されるようです。
今回はわざとコインマイニングのサイトへアクセスして、マルウェアスキャンを実行させましたが、まずはざっくりとした処理の流れを確認したいと思います。
Malware Protectionの処理の流れ
概要としましては下記の図の通り。有効化しておけば、何かあった際にスキャンが動く仕組みです。
この図だけでは説明しきれなかったので、詳細については以降の文章を読んでいただけますと幸いです!
1. Malware Protectionを有効化する。
GuardDutyをすでに利用していた既存のAWSアカウントでは、手動でMalware Protectionを有効化する必要があります。とはいえ、有効化のボタンをポチっとクリックするだけですので、とても簡単です。
新規のAWSアカウントはGuardDutyを有効化した時点でマルウェア保護も有効化されます。
有効化すると、マルウェアスキャンを実行するためのIAMロールを自動的に作成され、マルウェアスキャンが実行できる状態になります。 ロール名は「AmazonGuardDutyMalwareProtectionServiceRolePolicy」で、スナップショットの作成削除・ボリュームの作成削除・KMSを利用した暗号化などのアクションが許可されています。
2. 特定の GuardDuty 検出結果を受けて、マルウェアスキャンを開始する。
EC2インスタンスが悪意のあることがわかっているC&Cサーバと通信しているときや、他の EC2 インスタンスに対してサービス拒否 (DoS) 攻撃やブルートフォース攻撃を実行しているときに、マルウェアスキャンが実行されます。
どんな検出結果がでたらマルウェアスキャンが実行されるか具体的な値については下記リンクをご確認ください。
3. 検出対象のリソースからスナップショットを作成する。
4. スナップショットからEBSボリュームを復元して、マルウェアスキャンを実施する。
ボリュームを復元してから、スキャンを行うため動作中のインスタンスに影響はありません。
また、タグを利用して、スキャンする対象のEC2 インスタンスをスキャンから含めたり除外したりできます。
5. 検出結果をGuardDutyに出力する。
マルウェアが見つかると「Execution:EC2/MaliciousFile」といった検出結果が表示されます。また、マルウェアファイルの詳細情報なども出力されるため、簡単に特定ができます。
6. 復元された EBS ボリュームをスキャン後に削除する。
必要に応じて、マルウェアが検出されたときにスナップショットを保持できます。
マルウェアが見つからない場合、スナップショットの保持設定に関係なく、EBS ボリュームのスナップショットは保持されません。
以下、設定次第で連携可能
- Amazon Eventbridge にイベント情報をプッシュして、Lambdaでインスタンスの隔離などの自動化が可能。
- AWS Security Hub にルーティングすることが可能。
- インシデント調査のために Amazon Detective で利用することが可能。
スキャン対象のAWSサービスについて
EC2 で実行されるコンテナーワークロード (カスタマー管理の Kubernetes クラスターや個々の Docker コンテナーなど) をサポートしています。コンテナが Amazon EKS または Amazon ECS)によって管理されている場合、検出結果にはクラスター名とタスクまたはポッド ID も含まれるため影響を受けるコンテナリソースをすばやく見つけることができます。
スキャン対象のファイルシステムタイプについて
WindowsおよびLinuxの実行可能ファイル、PDFファイル、アーカイブ、バイナリ、スクリプト、インストーラ、電子メールデータベース、プレーンメールなど、マルウェアの拡散または封じ込めに使用されることが知られている多くのファイルシステムタイプをサポートしています。
暗号化について
- 暗号化されていないボリュームと、顧客管理キーで暗号化されたボリュームの両方をサポートします。
- EBS ボリュームがカスタマー管理キーで暗号化されている場合、GuardDuty は同じキーを使用してレプリカ EBS ボリュームを暗号化します。
- 暗号化されていない EBS ボリュームの場合、GuardDuty は独自のキーを使用してレプリカ EBS ボリュームを暗号化します。
やってみた
事前設定
GuardDutyでログを拾えるよう確認するインスタンスのVPCのフローログを出力するよう設定しておいてください。
GuardDutyのマルウェア保護の有効化
GuardDutyのマネジメントコンソールにアクセスすると「Malware Protection」という項目があります。
早速有効化をクリックしてみます。
以下のような確認画面が出るので、内容を確認しつつ「有効にするMalware Protection」をクリックします。
無事有効化できたようです。赤枠内のところをオンにするとスナップショットの保持するよう設定できそうですね。
タグの設定については「スキャンオプション」を開けば設定できそうです。
※今回は両方とも設定しないことにいたします。
Eicarファイルのダウンロード
今回はたまたまDeepSecurityを入れた環境があったのでeicarファイルをダウンロードしてみます。
DeepSecurityで通知が出ましたね!
ここで気が付いたのが、DeepSecurityを入れているとそもそもEicarファイルをダウンロードできない件…
そこで、一旦DeepSecurityをアンインストールして、Eicarファイルをダウンロードしました。
マルウェアスキャンを実行させる
nslookupコマンドでコインマイニング用のドメイン(pool.supportxmr.com) の名前解決してみます。
※ 試しに同様の方法でLinuxでも並行して、検証をしてみました。
しばらく待つこと十数分…検出結果が出ました!
検出結果にはEC2のタグやネットワークの情報などや接続先のグローバルIPとLocationなどが記載されていました。
「マルウェアスキャン」の画面に移動するとスキャンが始まっていました。
※ WindowsもLinuxも同時にスキャンが開始していました。
さらにしばらく待っているとスキャンが完了したようで、マルウェアスキャンの画面のスキャンステータスが「Complete」になりました。
また今回は両サーバにEicarファイルを入れていたためスキャン結果が「Infected」となっています。
また、GuardDutyの検出結果では「Execution:EC2/MaliciousFile」といった検出結果が出てきました。
イメージ画像を見ていただければわかると思いますが、今回スキャンにかかった時間は、Linux(8GB)が11分ほど、Windows(30GB)が19分ほどかかりました。
ボリュームサイズによってスキャン時間が長くなる傾向がありそうですが、OSが違うため断定はできません・・・
スキャン時間を比較してから、OS揃えればよかったなとやや後悔…
今回はWindowsでもAmazon Linuxでも動くことが確認できたので、良しとします!
結果
GuardDutyの場合、ダウンロードしてしまった後の検知がメインになるため、ダウンロードする前に検知したい場合には引き続きDeepSecurityなどを利用する方がよさそうです。
なるべく運用コスト・ライセンスコストを抑えたい場合やSecurityHubなどで一元管理したい場合には、GuardDutyのマルウェア保護を検討するとよさそうです。
皆さんのご参考になれば幸いです。