5分で理解するAmazon Inspector

# はじめに
本記事はAWSで提供されているAmazon Inspectorについて記載しています。

Amazon Inspectorは、OSやソフトウェアの脆弱性管理に関するセキュリティ対策のソリューションです。
前々から存在は知っていたものの、実際に使ったことがなかったため、検証した結果についてまとめています。

これからAmazon Inspectorの導入検討を考えている方の参考になれば幸いです。

## Amazon Inspector
Amazon Inspectorは、アプリケーションのセキュリティとコンプライアンスの向上を目的に開発されて、2016年にリリースされたサービスです。

リリース当時は、Amazon EC2だけでしたが、現在はAWS Lambdaもサポートされています。

https://aws.amazon.com/jp/inspector/

### 特徴
主な機能は、**ネットワーク接続性**や**パッケージの脆弱性**を継続的にスキャンして、その結果をダッシュボードに可視化することができます。

また、影響を受けるリソースを特定し、脆弱性の評価や修復ガイダンスを提供します。

- ネットワーク接続性
    - EC2インタンスに対して、外部から到達可能であるSSHやHTTPなど、よく使われるポートを検出し、評価します。
- パッケージの脆弱性
    - CVEに基づき、OSやソフトウェアなどのパッケージについて、構成変更時に環境評価が可能です。
    - CVEについては、ベンダーのセキュリティアドバイザリによってリリースされてから24時間以内に追加されます。WindowsのCVEは、マイクロソフトからリリースされてから48時間以内に追加されます。

::: note
Amazon Inspectorの詳細については、公式ドキュメントの[「Amazon Inspector とは」](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/what-is-inspector.html)から確認できます。
:::

### 料金
[Amazon Inspector の料金表](https://aws.amazon.com/jp/inspector/pricing/)から料金について確認できます。

基本的に以下の種別毎に発生したスキャンの量に基づいて決定されます。

- Amazon EC2 インスタンス
- Amazon ECR コンテナイメージ
- AWS Lambda 関数

:::note
15日間の無料トライアルが利用できます。
:::

## 検証
ECインスタンスに対するネットワーク接続性とパッケージの脆弱性について、検証した結果を以下に記載しています。

### アクティブ化
AWS マネジメントコンソールから、Amazon Inspectorを検索して表示後、「使用を開始する」を押します。

![スクリーンショット 2023-07-19 15.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/464e9cd1-363b-2c0a-582b-1cc463bee151.png)

以下のような画面に遷移するため、「Inspectorをアクティブ化」を押します。

![スクリーンショット 2023-07-19 15.54.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/260955c1-424a-671b-dec4-29bb39b766c9.png)

Inspectorがアクティブ化され次第、利用できるようになります。

![スクリーンショット 2023-07-19 15.55.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/f276c26a-10c3-641e-dbbe-ded294cb2580.png)

ダッシュボード画面には、全体の検出結果が確認できます。

![スクリーンショット 2023-07-19 16.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/164cf254-e070-4234-bc8f-2f1df81db79d.png)

### AWS Systems Manager
ネットワーク接続性はAmazon Inspectorを有効化するだけで試すことができますが、パッケージの脆弱性については、AWS Systems Manager（以下、Systems Manager）の機能を使用します。

利用する環境によって導入されていない場合は、必要に応じてSSM Agentのインストールが必要です。
詳細については公式ドキュメントの [「Working with SSM Agent」](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)をご参照ください。

::: note warn
SSM Agentはインストールされているが、パッケージの脆弱性について評価できない場合、EC2インスタンスに対するSystems Managerの権限をご確認ください。
:::

以下はSystems Managerの権限がないため、`/var/log/amazon/ssm/amazon-ssm-agent.log`のログファイルにエラーが出力されている例です。

```console
2023-08-01 09:22:54 INFO [ssm-agent-worker] Entering SSM Agent hibernate - EC2RoleRequestError: no EC2 instance role found
caused by: EC2MetadataError: failed to make EC2Metadata request
        status code: 404, request id: 
caused by: <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>
```

上記のようなエラーが出力されている場合は、**AmazonSSMManagedInstanceCore**のポリシーを付与したIAMロールをEC2インスタンスにアタッチします。

::: note
類似のポリシーとして`AmazonSSMManagedEC2InstanceDefaultPolicy`がありますが、一部アクションに差異があります。
基本的には、`AmazonSSMManagedInstanceCore`のポリシーで大丈夫だと思います。
:::

### 検証方法
Amazon Inspectorのスキャンは基本的に自動で行われるため、Amazon Inspectorのコンソール上にオンデマンドでスキャンを実行するためのボタンなどはありません。

以下にAmazon Inspectorのスキャンに関するポイントを記載します。

- ネットワーク接続性
    - 24時間に1回、EC2インスタンスのネットワーク到達可能性のスキャンを実行
- パッケージの脆弱性
    - 新しいEC2 インスタンスを起動したタイミング
    - 既存の EC2 インスタンス（Linux のみ）に新しいソフトウェアをインストールする場合
    - Amazon Inspectorが新しい共通脆弱性と危険性 (CVE) 項目をデータベースに追加し、そのCVEが影響している場合

2023年4月、[Amazon Inspector で EC2 インスタンスのディープインスペクションのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2023/04/amazon-inspector-deep-inspection-ec2-instances/)が公開されています。

従ってOSのパッケージに加えて、Python、Java、Node.jsパッケージなどのプログラミング言語に関するパッケージの脆弱性がスキャンできるようになりました。
**ディープインスペクション**という言葉が出てきますが、デフォルトで有効になっているため、特に設定は不要です。

本記事では、効率的に検証を行うために、ディープインスペクションに関する`InvokeInspectorLinuxSsmPlugin-do-not-delete`を用いて検証を行います。

端的に言うと、プログラミング言語に関するパッケージの脆弱性スキャンは、を6時間ごとに行われるため、手動でディープインスペクションに関する`InvokeInspectorLinuxSsmPlugin-do-not-delete`を実行して検証を行います。以下に実行手順を記載します。

AWS Systems ManagerからState Managerを開きます。

![スクリーンショット 2023-08-03 20.47.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/4df8d5db-9ce4-00cf-2de3-28c8d2d18bcf.png)

`InvokeInspectorLinuxSsmPlugin-do-not-delete`にチェックを入れます。

![スクリーンショット 2023-08-03 20.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/25f24c24-31ea-b39c-7d19-b40e0bafcf68.png)

「関連付けを今すぐ適用」のボタンを押す。

![スクリーンショット 2023-08-03 20.59.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/092c8534-f83d-89a2-62a4-55e22a2bff8d.png)

「関連付けを今すぐ適用」のボタンを押した後に、該当するEC2インスタンスの`/var/log/amazon/ssm/amazon-ssm-agent.log`のログファイルを見ると、スキャンが行われていること（State Managerによる関連付けの処理）が確認できます。

::: note
スキャンの仕組みや上記ディープインスペクションに関する`InvokeInspectorLinuxSsmPlugin-do-not-delete`については、公式ドキュメントの[「アマゾンインスペクターで Amazon EC2 インスタンスをスキャンする」](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/scanning-ec2.html)から確認できます。
:::

### ネットワーク接続性
ネットワーク接続性の検証を行うため、適当にEC2インスタンスを1台起動します。

本記事の例では、Webサービスとしてapacheを起動し、セキュリティグループの22番ポートと80番ポートが空いている状態です。

しばらくすると、脆弱性の画面に以下のような検出結果が表示されました。

![スクリーンショット 2023-07-19 17.00.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/617ae53a-9ca3-9a8a-03be-c59997e0109f.png)

試しに80番ポートに関する項目を押すと、以下のような検出結果が表示されます。

![スクリーンショット 2023-07-19 17.00.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/03189f85-d9ca-1061-4c74-f65cf598bebe.png)


タイトルを押すと、詳細が確認できます。

![スクリーンショット 2023-07-19 17.00.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/47da927c-53f2-0948-01e7-71e31541cc27.png)

:::note
検出されるポート番号や重要度の評価は、公式ドキュメントの[「Amazon インスペクターによる調査結果の重大度レベル」](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-understanding-severity.html)から確認できます。
:::

### パッケージの脆弱性
検証として以下のAMIを使用しています。

No.1は古いAmazon Linux 2のイメージ、No.2は本記事執筆時点で最新のAmazon Linux 2023のイメージです。

| No. | AMI ID | AMI 名 |
|:-:|:-:|:-:|
| 1 | ami-02d36247c5bc58c23 | amzn2-ami-hvm-2.0.20211005.0-x86_64-gp2 |
| 2 | ami-08c84d37db8aafe00 | al2023-ami-2023.1.20230725.0-kernel-6.1-x86_64 |

それぞれSSM Agentは最初からインストールされているため、上記に記載した通りにEC2インスタンスに対するSystems Managerの権限を設定します。

#### OSの脆弱性
スキャンを実行すると、以下のようにカーネルに関する脆弱性が132件検出されました。

![スクリーンショット 2023-08-01 18.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/80dca1df-c593-0759-4b28-aa49b51047a0.png)

検出された脆弱性から任意の項目を選択して詳細が確認できます。
影響を受けるパッケージの情報を見ると、修正されたカーネルのバージョンが確認できます。

![スクリーンショット 2023-08-01 18.45.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/faca300f-922c-e40d-0a94-3f72e4b8388a.png)

カーネルをアップグレード及びOS再起動後に再スキャンを実行すると、検出結果が削除されました。

![スクリーンショット 2023-08-02 19.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/7e828f23-e12b-0b19-566a-caf227faf59d.png)

#### 脆弱性のあるパッケージ
以下の例では、脆弱性のあるパッケージをインストールした状態でスキャンを行いました。
脆弱性のあるパッケージは、pythonのAIフレームワークを利用しています。

![スクリーンショット 2023-08-02 19.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/75b006c0-2b34-f18b-90c1-9cfd8ed3250b.png)

検出された脆弱性から任意の項目を選択して詳細が確認できます。
影響を受けるパッケージの情報を見ると、修正されたパッケージのバージョンが確認できます。

![スクリーンショット 2023-08-02 19.28.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/16e8aede-ffb6-c6ef-d052-a932ceb88aa6.png)

パッケージをアップグレードして再スキャンを実行すると、検出結果が削除されました。

![スクリーンショット 2023-08-02 19.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/7e828f23-e12b-0b19-566a-caf227faf59d.png)

::: note alert
pythonのパッケージによっては、マルウェアが含まれている場合もあるため、検証を行う場合はくれぐれもご注意ください。
検証するパッケージを確認したい場合は、Snykの[脆弱性DB](https://security.snyk.io/vuln)が便利だと思います。
:::

### Export SBOMs
興味深いのがAmazon Inspectorは、SBOMに関する情報を出力することができます。
（※本記事執筆時点でWindowsのEC2インスタンスに関するSBOMのエクスポートはサポートされていないようです。）

2023年6月、[AWS が Amazon Inspector のソフトウェア部品表のエクスポート機能を発表](https://aws.amazon.com/jp/about-aws/whats-new/2023/06/software-bill-materials-export-capability-amazon-inspector/)が公開されています。

SBOMは、**Software Bill of Materials**の略称です。
ソフトウェア製品に含まれるコンポーネントやライブラリ、依存関係などの情報をリスト化した文書またはデータ（JSONやXMLなど）のことを指します。

SBOMの目的は、セキュリティの観点から法的コンプライアンスや脆弱性管理などリスク評価を行うことです。
従ってソフトウェアの構成要素を正確に識別し、その関係性や依存関係を明確にするために使用されます。

昨今では、ソフトウェアサプライチェーンの透明性を高める手段としても注目されています。

Export SBOMsを利用したい場合は、Export SBOMsの画面を開いてエクスポートします。
なお、Export SBOMsの機能を利用するためには、ファイルを出力するためのS3バケットやKMS keyが必要です。

![スクリーンショット 2023-08-08 19.24.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/d4855ead-45b1-e1c8-7606-408d9f6e52c2.png)

:::note
経済産業省から[「ソフトウェア管理に向けたSBOM（Software Bill of Materials）の導入に関する手引」を策定しました](https://www.meti.go.jp/press/2023/07/20230728004/20230728004.html)が公開されています。SBOMに関する基本的な情報を提供するとともに、SBOMを実際に導入するにあたって認識・実施すべきポイントが記載されています。
:::

### EC2 scanning settings
Amazon Inspector は、以下のデフォルトパスに合わせてカスタムパスをスキャンの設定が可能です。

- /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib64

カスタムパスを設定したい場合は、EC2 scanning settingsの画面を開き、「編集」のボタンを押します。

![スクリーンショット 2023-07-20 17.53.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/6b64e794-7ec7-1e96-deee-67970fb63cd5.png)

必要に応じてカスタムパスを設定します。

![スクリーンショット 2023-07-20 17.54.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/41f11743-7411-5db6-f8b5-3b86f4b60340.png)

::: note
個々のアカウントでは最大5つのカスタムパスを定義できます。
組織の委任管理者の場合は、組織全体に適用されるパスを5つ追加で定義できるため、組織内のアカウントごとに合計で最大10のカスタムパスの設定が可能です。
:::

### Vnlnerability database search
Amazon Inspectorの脆弱性データベースからCVEに関する詳細を検索することができます。

![スクリーンショット 2023-08-08 18.26.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/cc07262e-2e32-1651-0fca-7daad3f088ee.png)

脆弱性データベース画面の検索ボックスに、任意のCVE番号を入力して「Search」ボタンを押します。

![スクリーンショット 2023-07-20 18.36.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/232fda23-e5c2-537d-707f-506b511ea839.png)

CVEに関する詳細が確認できます。

![スクリーンショット 2023-07-20 18.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/e2b06ba8-214d-de8d-fe4f-4f06d9528e1c.png)

## 評価
EC2を利用していて、以下のStrengths（強み）に示す条件が適合する場合、Amazon Inspectorは適しているのではないかというのが個人的な見解です。

### Strengths
- 前提
    - 組織内で脆弱性に対する考え方や、運用方法（CVEに対する評価基準など）が決まっている
    - 定常的にEC2インスタンスを運用している
- 目的
    - システム管理のサービスをAWSで統一及び管理したい
    - 既に稼働している環境に対して、EC2インスタンスの脆弱性を評価したい

### Weaknesses   
Amazon Inspectorでは、以下のような脅威は検出できません。

- マルウェア感染
- C&Cサーバに対する不正な通信
- クラウドの設定評価（例：S3バケットをパブリックにしているなど）

AWSで統合管理を行うにせよ、ネットワーク接続性の機能は、Security Hubでカバーできる部分もあるため、既にSecurity Hubを導入していて、ネットワーク接続性のみを利用するなどのケースは、コスト的にもったいないと思いました。

脆弱性のあるパッケージについては、昨今の**シフトレフト**の考え方を踏まえて**Snyk**などの素晴らしいサービスがあります。

::: note
Synkについては、以前書いた[「SnykではじめるDevSecOps」](https://qiita.com/Brutus/items/f3aed88abdeaeb9e048a)をご参照ください。
:::

# おわりに
SBOMをサポートしているのは面白いなと思いました。

SBOMについては、業界的にもこれから活発化してくると思われるため、そのあたりは良い試みだと思います。

まとめると、何事も目的と手段を混合することなく、組織の実態に合わせた最適な運用が理想です。

## 参考
- [AWS Systems Manager State Manager](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-state.html)
- [Amazon Inspector AWS Black Belt Online Seminar](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AmazonInspector_0228_v1.pdf)
- [SBOM (ソフトウェア部品表) を作成してオープンソースサプライチェーンのセキュリティを高める](https://snyk.io/jp/blog/building-sbom-open-source-supply-chain-security/)