Inspectorにいろいろ機能が追加されたのでまとめてみました

はじめに

Inspectorにいろいろ機能が追加されたのでまとめてみました

目次

ハイブリッドスキャンについて

まず、InspectorにはAgentベーススキャンとハイブリッドスキャンの二つがあります。
Agentベースのスキャンはわかりやすいと思います。SSM-Agentを利用した従来のスキャンですね。
ハイブリッドスキャンはAgentベースのスキャンとAgentlessのスキャンの両方ができます、という内容です。

ここで注意しておきたいのは、ハイブリッドスキャンを利用する設定にしていても、AgentベースのスキャンとAgentlessのスキャンの両方が行われるわけではない、ということです。

ここで、スキャン方法の切り替え方法について説明しておきます。
画面左側のメニューから「EC2 scanning settings」をクリックすると、上のような画面に遷移します。
現在はハイブリッドスキャンモードになっていることがわかります。

最近Inspectorを有効化したアカウントだと、デフォルトでハイブリッドモードになっているかと思いますが、ご確認ください。

画面右上の「編集」をクリックするとモードの切り替えができますが、基本的にはハイブリッドモードで問題ないと思っています。

SSMAgentがインストール及び設定されているインスタンスの場合はSSM-Agentベースのスキャンが行われますが、そうでないインスタンスに対してはAgentlessのスキャンが行われます。

SSMAgentベースのスキャンで動いているか、Agentlessスキャンで動いているかはInspectorコンソール上で確認することができます。

画面右下に記載のあるMonitoring usingという箇所を見てください。
今回は検証用として、2台のRHEL9インスタンスを用意しています。
1台ずつAgentベースとAgentlessで稼働をさせておりますが、どちらのタイプでInspectorが動いているのか一目でわかりますね。
隠してはいますが、インスタンスIDなどもこの画面で確認ができるので対象インスタンスを取り違えることはないと思います。

詳しくは後述しますが、SSMAgentベースのスキャンで動いているか、Agentlessスキャンで動いているかによってスキャンのタイミングなどが変わってくるので、
しっかりと把握しておくことをお勧めします。

Agentlessスキャンについて

上記で話題に挙げたエージェントレススキャンについて簡単にまとめておきます。

Agentlessスキャンとはその名の通りですが、SSMAgentを利用しないインスタンスに対するスキャンのことです。
何らかの理由でSSMAgentを入れられない環境の場合でも、Inspectorをハイブリッドモードで有効化している場合はAgentlessのスキャンが実行されます。

検出できる脆弱性はSSMAgentベースのスキャンと同一ではありますが、CISスキャンが利用できないという大きな違いがあります。

前提条件

・対応OS:こちらを確認してください。
・ファイルシステム:ext3,ext4,xfs
・ボリューム:ボリューム数が8未満で合計1200GB以下

基本的にはそれほどハードルが高い内容ではないと思っています。
古いOSは対象外ではあるものの、最近のOSであれば問題なく利用いただけるのではないでしょうか。

スキャン方法

Agentlessスキャンですが、SSMAgentがスキャンに利用できないため、自動で作成したEBSスナップショットから脆弱性の検出を行います。
作成されたスナップショットは自動で削除されるので安心ですね。

また、詳しくは後述しますがディープインスペクションという機能があります。
この機能を利用することで、従来は脆弱性の検出ができなかったプログラミング言語の脆弱性検出ができるようになりました。
Agentlessスキャンの場合、利用可能なすべてのパスがスキャンされるため、何も気にせずにプログラミング言語の脆弱性を検出できます。

検出できる脆弱性について

ドキュメントを読む限りでは、以下の通りです。

Linux オペレーティングシステムの検出は、デフォルトのパッケージマネージャーリポジトリ (rpm および dpkg) でのみサポートされており、サードパーティーアプリケーション、拡張サポートリポジトリ (BYOS RHELの場合は PAYG RHEL、、および SAP)RHEL、およびオプションのリポジトリ (アプリケーションストリーム) は含まれません。
RHELをご利用の場合、多くはAppStreamリポジトリからMWをインストールしていると思われますが、Inspectorではそのようなソフトウェアのサポートが(公式には)提供されていません。


では、本当にAppStream経由のMWは脆弱性の検出対象にならないのでしょうか。
試しにRHELにてAppstreamからApacheをインストールしたところ、脆弱性が検出できました。


該当の脆弱性をクリックすると、詳細が確認できます。
CVEの詳細やアップデートできるパッケージの情報も出ており、普段使いに問題なさそうです。


ご存じかもしれませんが、Vulnerability database searchというサービスがあります。
これはInspectorが利用している脆弱性データベースから脆弱性の内容などを検索できるものです。
画面左側のメニューから移動できます。


具体的なCVE IDを利用して検索をかけることで、Vulnerability database searchに脆弱性が登録されているかどうかの確認ができます。

おそらくではあるのですが、このVulnerability database searchに脆弱性が登録されているかどうかで脆弱性が検出できるかどうかが決まるのではないかと考えています。

CVSSのスコアが高くてもVulnerability database searchに脆弱性が登録されないケースもあるので、使い勝手としてはケースによるような気もしますね。
(とはいえ、PHPなどよく使うMWの脆弱性をいくつか検索してみましたが、すべて登録されていました。実際のところはかなりの部分の脆弱性を検出できるのではないかと思います)
個人的にはAppStreamからのインストールは公式にサポートしてほしいとは思うのですが、将来的なアップデートに期待といったところでしょうか。

ディープインスペクションについて

ディープインスペクションとはプログラミング言語の脆弱性検出機能です。
Inspectorで検出することができる脆弱性は、前述の通りパッケージインストールされたものに限定されており、ソースインストールされたものなどは脆弱性検出の対象外となっております。
そのため、これまではpipなどでインストールされたプログラミング言語について脆弱性検出ができませんでした。
ところが、ディープインスペクションを利用することでプログラミング言語の脆弱性検出が利用できるようになったんですね。

これはLinux限定の機能であり、WindowsやMacでは利用することができません。

スキャンすることができる言語はこちら
2024/10現在だと、Java,Javascript,Pythonの3種類が対象となっていました。

スキャン方法

AgentベースとAgentlessによりスキャン方法がことなります。
Agentベースのスキャンだと、デフォルトでは以下の4パスだけがスキャン対象です。
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64

それ以外のカスタムパスをスキャンさせたい場合は別途設定が必要となります。

左メニューから「EC2 scanning settings」を選択し、「編集」を押下します。

カスタムパスの入力欄が出てくるので、スキャン対象に加えたいパスを加えて「保存」を押下します。
これで次のスキャンからはカスタムパスにインストールされた言語も脆弱性が検出されるようになります。

次にAgentlessスキャンですが、デフォルトですべてのパスがスキャンされます。
Agentベースのスキャンに比べて利便性が高いですね。
このため、同じように設定しているインスタンスでも、AgentベースのスキャンなのかAgentlessスキャンなのかで脆弱性の検出結果に差異が生じる可能性があります。

ちなみにスキャン間隔は6時間とのことですが、InvokeInspectorLinuxSsmPlugin-do-not-deleteを編集することによってスキャン間隔を変更することが可能です。

AgentベースのスキャンとAgentlessベースのスキャンの違いについて

AgentベースのスキャンとAgentlessスキャンにはAgentの利用有無以外にも違いがあります。
下記にまとめておきますので、確認してください。

Agentベース Agentless
脆弱性情報の取得もと SSMAgent EBSスナップショット
SSMAgent 必要 不要
脆弱性スキャン間隔 OSにより変動 ※1 24時間に1回 ※2
ネットワーク到達性スキャン間隔 24時間に1回 24時間に1回
CISスキャン ×
ディープインスペクション デフォルトパス以外はカスタムパスが必要 全てのパス
スキャン対象からの除外 〇 ※3 〇 ※3
1インスタンスあたりの料金 1.512USD 2.0808USD

※1
デフォルトのスキャン間隔は下記のとおりです。
Linux:30分に1回
Windows:6時間に1回。

ただし、監視間隔を変更することはできます。
(デフォルト値より短くすることはできません)

上が実際のステートマネージャの画面です。
関連付けられているドキュメントの一覧が出ており、エラーもでていません。

SSMコンソールからステートマネージャを選択し、OSに合わせてドキュメントの設定を編集することでスキャン間隔を変えられます。
Linux→InspectorInventoryCollection-do-not-delete
Windows→InvokeInspectorSsmPlugin-do-not-delete

※2
初回スキャンには検出に1時間程度かかります。
自分の環境で試したときは毎日1時間ずつ最終スキャン時刻が伸びていました。

※3

EC2に「InspectorEc2Exclusion」
というタグを付与することでスキャン対象から除外することが可能です。
除外することで上記の通り、Inspectorのステータスが「タグで除外済み」に変わります。
また、ボリュームの暗号化に使用した AWS KMS キーに同様のタグを付けることで、暗号化された EBS ボリュームをエージェントレススキャンから除外できます。

CISについて

以前はv1(Inspector Classic)でしか対応していなかったCISスキャンがv2でも対応できるようになりました。
これにより、最新OSであってもCISスキャンが利用できるようになり、利便性が大きく向上しています。

ただし、CISスキャンを利用する前提条件がいくつか存在します。下記にまとめてありますのでご確認ください。

前提条件

https://docs.aws.amazon.com/ja_jp/inspector/latest/user/scanning-cis.html
詳しくは上記URLを参照いただきたいのですが、簡単にまとめてみました。

・CISスキャンに対応したOSであること。詳しくは下記URLをご覧ください。以前は未対応だったRHEL系がCISスキャンに対応されています。
https://docs.aws.amazon.com/inspector/latest/user/supported.html#supported-os-cis
・SSMマネージドインスタンスであること。
・AmazonInspector2ManagedCisPolicyロールが紐づいていること。

色々書いてますが、要約するとこんな感じかなと……。
SSMAgentがインストールされていて、適切なロールが紐づいていて、SSMAgentで管理されているインスタンスであればおおよそ問題ないかと思います。

では、これらの要件を満たさない状態だとどうなるでしょうか。

1.AmazonInspector2ManagedCisPolicyがない場合
→失敗しました。SSMマネージドインスタンスであっても、上記ロールが紐づいていない場合はスキャンができないようです。

2.エージェントレス環境の場合
→AmazonInspector2ManagedCisPolicyの有無にかかわらず場合、上記と同様に失敗しました。

やはりSSMAgentで管理されているOSでないとCISスキャンができないようです。
エージェントレスにするメリットも特になさそうなので、SSMAgentベースのスキャンにしたほうがよさそうですね。

実際にやってみた

左メニューの「On-demand scans」をクリックしてください。
画面右上の「Create new scan」をクリックすると、CISスキャンの設定が作成できます。

Inspectorを有効化するだけではCISのスキャンは有効にならないためご注意ください。

実際の設定画面がこちら。
非常にシンプルでわかりやすいですね。
「Target resource tags」という項目ですが、これはCISスキャンのターゲットインスタンスを識別するためのタグです。
こちらで指定したタグを紐づけているインスタンスに対してCISスキャンが行われます。

他は見ての通りかなと思います。
CISのレベルであったり、Organizationを組んでいる場合は特定のアカウント内にスキャンを行うことができたりします。

一度きりのスキャンなのか、スケジュールスキャンなのかも選択することができます。
ただし、曜日単位での指定しかできません。
毎月〇日や、毎月第〇月曜日などの指定は現状できません。
このあたりは将来的なアップデートに期待しましょう。

実際のスキャン結果がこちら。
ほぼ立ち上げただけのインスタンスなのですごいことになっています。
タイトルをクリックすると、より詳細な説明を見ることができます。

昨今セキュリティの重要性がニュースでも叫ばれているので、Insepctorを通したCISスキャンができるのはかなり便利になったのではないでしょうか。
Inspector ClassicはOSの制限など問題があったので、最新OSでもCISスキャンができるのはうれしいですね。

まとめ

いかがでしたでしょうか。
以前のInspectorに比べて使いどころがぐんと広がったように思います。
ただ、あくまでも脆弱性を検出するサービスであることに注意が必要です。
検出した脆弱性をどう通知するのか、どう対応していくのかなどフロー設計が必要になると思いますので、うまく自分なりの付き合い方を見つけていただければ幸いです。

投稿者プロフィール

takeshige
そろそろGCPに手を出したい