Amazon InspectorでEC2(Windows)の脆弱性をスキャンしてみた

2024.03.18

はじめに

こんにちは。AWS事業本部コンサルティング部に所属している和田響です。

この記事ではAmazon Inspectorを開始方法を解説し、実際に東京リージョンに作成したWindowsのEC2をスキャンしてみます。

どなたかの参考になれば幸いです。

Amazon Inspectorとは

Amazon Inspectorとは、ソフトウェアの脆弱性や意図しないネットワークの露出を継続的にスキャンする脆弱性管理サービスです。

検知対象

Amazon Inspectorは以下のリソースの脆弱性を検知します。

  • Amazon EC2 インスタンス
  • Amazon Elastic Container Registry (Amazon ECR) のコンテナイメージ
  • AWS Lambda 関数

検知できる脆弱性の種類

Amazon Inspectorは大きく分けて「パッケージ脆弱性」「コードの脆弱性」「ネットワーク到達可能性」を検知可能です。

パッケージ脆弱性

パッケージ脆弱性の検出結果は、共通脆弱性識別子 (CVE) が露出されている AWS 環境内のソフトウェアパッケージを特定します。
攻撃者が、こうしたパッチが適用されていない脆弱性を利用し、データの機密性、完全性、可用性を侵害したり、他のシステムにアクセスしたりする可能性があるものを検知し、セキュリティ向上に役立てます。

Amazon InspectorではEC2インスタンスECRコンテナイメージ、およびLambda関数についてパッケージ脆弱性の検出することができます。

コードの脆弱性

コード脆弱性の検出結果は、攻撃者が悪用する可能性のあるコード内の行を特定します。コードの脆弱性には、インジェクションの欠陥、データ漏洩、脆弱な暗号化、コード内の暗号化の欠落などがあります。
Amazon Inspector は、自動推論と機械学習を使用して Lambda関数のアプリケーションコードを評価することができます。

ネットワーク到達可能性

ネットワーク到達可能性の検出結果は、環境内のEC2インスタンスへのネットワークパスが開いていることを示しています。 インターネットゲートウェイ (Application Load Balancer または Classic Load Balancer の背後にあるインスタンスを含む)、VPC ピアリング接続、または仮想ゲートウェイを介した VPN など、VPC エッジから TCP および UDP ポートに到達可能かどうかを検知します。

Amazon Inspectorのはじめ方

Amazon Inspectorを利用するためには以下の手順が必要になります。

Amazon Inspectorの有効化

マネージドコンソールから「Amazon Inspector」を開き、使用したいリージョンでAmazon Inspectorを有効化します。 Amazon Inspectorはリージョナルなサービスなので、使用したいリージョンごとに有効化する必要があります。

マネージドインスタンス化

Amazon Inspectorで「パッケージ脆弱性」をスキャンしたいEC2インスタンスはマネージドインスタンス化する必要があります。

※EC2インスタンスの「ネットワーク到達可能性」はAmazon Inspectorを有効化した時点で検知の対象になります。

SSM エージェントをインストールする

EC2インスタンスをマネージドインスタンス化するためには、対象のEC2インスタンスにSSM エージェントをインストールし有効化する必要があります。

しかしながら現在では多くのAMIでデフォルトでSSM エージェントがインストールされているため、この手順が不要になる場合もあります。
執筆時点では以下のAMIにデフォルトでSSM エージェントがインストールされているようです。

  • AlmaLinux
  • Amazon Linux 1 Base AMIs dated 2017.09 and later
  • Amazon Linux 2
  • Amazon Linux 2 ECS-Optimized Base AMIs
  • Amazon Linux 2023 (AL2023)
  • Amazon EKS-Optimized Amazon Linux AMIs
  • macOS 10.14.x (Mojave), 10.15.x (Catalina), 11.x (Big Sur), 12.x (Monterey), 13.x (Ventura), and 14.x (Sonoma)
  • SUSE Linux Enterprise Server (SLES) 12 and 15
  • Ubuntu Server 16.04, 18.04, 20.04, and 22.04
  • Windows Server 2008-2012 R2 AMIs published in November 2016 or later
  • Windows Server 2016, 2019, and 2022

最新情報はこちらからご確認ください。

SSM エージェントを有効化する

以下のドキュメントを参考に、EC2インスタンスにインストールされたSSMエージェントが有効化されているかどう確認します。

例えばWindowsサーバーの場合、PowerShellで以下のコマンドを実施します。

SSMエージェントのステータスを確認するコマンド
Get-Service AmazonSSMAgent

SSMエージェントを起動するコマンド
Start-Service AmazonSSMAgent

必要なIAMロールをアタッチする

Amazon EC2 インスタンスをマネージドインスタンスとして設定するためには必要なIAMポリシーを割り当てる必要があります。
公式ドキュメントでは、AmazonSSMManagedInstanceCoreの使用が推奨されてます。

やってみた

まずはマネージドコンソールから「Amazon Inspector」を開きます。

利用したいリージョン(今回は東京リージョン)で「使用を開始する」をクリックします。

検証用のEC2インスタンスを作成します。
今回はinspector-test-windows-ec2という名前で、OSはWindows Server 2022を選択しました。  

このタイミングでInspectorの検知を見てみます。
先ほど作成したEC2インスタンスのステータスが「アンマネージド EC2 インスタンス」となっています。

このインスタンスをクリックして検知結果を見てみます。
前述の通り、アンマネージドなEC2インスタンスでも「ネットワーク到達可能性」は検知されます。

続いて「パッケージ脆弱性」も検知するために、このEC2インスタンスをマネージドインスタンスにします。
マネージドコンソールから「IAM」-「ロール」を開き、「ロールの作成」をクリックします。

信頼されたエンティティタイプは「AWSのサービス」を選択します。

「EC2 Role for AWS Systems Manager」を選択し、「次へ」をクリックします。

許可ポリシーに「AmazonSSMManagedInstanceCore」が表示されていることを確認し、「次へ」をクリックします。

任意のロール名を入力し「ロールを作成」をクリックします。
これで「AmazonSSMManagedInstanceCore」のポリシーが許可されたIAMロールが作成できました。

続いて作成したIAMロールをEC2にアタッチします。
対象のEC2インスタンスを選択し、「アクション」-「セキュリティ」から「IAMロールを変更」をクリックします。

先ほど作成したIAMロールを選択し、「IAMロールを更新」をクリックします。

今回起動したWindowsのEC2は起動時のAMIにSSMエージェントがインストールされている想定なので、これでマネージドインスタンス化は完了です。
実際にマネージドインスタンスとしてAmazon Inspectorに検知されているか確認していきます。

先ほどまで「アンマネージド EC2 インスタンス」のステータスだったEC2が「アクティブにモニタリング中」となりました。これでEC2がマネージドインスタンスになったことが確認でき、Amazon Inspectorが「パッケージ脆弱性」を検知できる状態になりました。

もしステータスが変更されない場合は、数分時間を置いて再度確認するか、以下のドキュメントに従ってSSMエージェントのステータスを確認しましょう。  

最後に先ほどマネージドインスタンス化したEC2インスタンスの検知結果を見てみましょう。
合計37個の脆弱性が検知されました。

以上でAmazon Inspectorを東京リージョンで有効化しEC2インスタンスの脆弱性を検知することができました。
実務ではこれらの検知をもとにパッチを適応するなどの対応が求められます。

最後に

今回の記事ではAmazon Inspectorの解説と、実際の検知の仕方について記載してみました。
皆様のセキュリティ対策のお役に立てれば幸いです。