Amazon Inspectorの導入

Amazon Inspectorを触る機会があったため、脆弱性診断におけるAmazon Inspectorの位置づけを軽く整理した上で、自分なりにその使い方をまとめました。

# Amazon Inspectorとは？

Amazon InspectorとはAWSが提供する脆弱性診断を行うサービスで、エージェントを利用したプラットホーム診断のためのサービスです。EC2に対して実施するもので有料です。またEC2のみのため、他社クラウドのインスタンスやデータセンターにあるサーバには実行できません。

# こうしたサービスが求められる背景（私見）
あくまで私見ですが、セキュリティへの取り組みにはまずは「リスクの可視化」が必要と言われてますが、これまではインフラ担当者という「人」に依存する形で、自分たちのサービスで利用しているサーバのOSやミドルウェアに脆弱性有無の可視化や対応が行われていることが多いように思います。

しかしAWSをはじめ、パブリッククラウドを利用したサービスではインフラ担当者がいないのは普通です。そうした背景を考えると、Amazon Inspectorのように自動にリスクが可視化されるようにすることは、今後は重要なことと考えています。

# Amazon Inspectorと脆弱性診断サービスの違い

Amazon Inspectorと外部会社を利用した（よくある）脆弱性診断サービスには、以下のような違いがある。（もちろん脆弱性診断サービスにはいろいろあるため、これが全てではない）

||Amazon Inspector|脆弱性診断サービス|
|---|---|---|
|診断の種類(トポロジー)|診断用エージェントを利用したホスト型診断|外部ネットワーク型診断など|
|診断の種類(レイヤー)|プラットホーム診断(ネットワーク/OS/ミドルウェア)|プラットホーム診断＋Webアプリケーション診断など選択可能|
|実施者|プログラム(エージェント)|セキュリティ診断の担当者|
|AWSへの事前申請|不要|必要|

詳細はこちらを参照
http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-amazon-inspector


そしてAmazon Inspectorでは以下のような項目とルールパッケージが用意されており、内容に沿ったテストが可能になっている。

|項目|ルールパッケージ名|内容|注意点|
|---|---|---|---|---|
|共通脆弱性識別子|Common Vulnerabilities and Exposures|EC2 インスタンス が一般的な脆弱性や曝露 (CVE) に曝露されているかを確認する||
|CIS オペレーティングシステムのセキュリティ設定ベンチマーク|CIS Operating System Security Configuration Benchmarks|アメリカにあるインターネット・セキュリティー・センター（CIS）が定義したセキュリティチェックリストに沿って確認する|Amazon Linuxでのみ利用可能|
|セキュリティのベストプラクティス|Security Best Practices|システムが安全に設定されているかどうかを判断するのに利用する|WindowsのEC2インスタンスでは結果が出ないので、LinuxのEC2インスタンスで利用すること。|
|実行時の動作の分析|Runtime Behavior Analysis|評価の実行中にインスタンスの動作を分析し、EC2 インスタンスのセキュリティを高めるためのガイダンスを提供する||

詳細はこちらを参照
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_rule-packages.html

# 費用の話
月250回までなら1台実行毎に$0.3かかる。

|Amazon Inspector の利用開始から 90 日間|エージェント評価ごとの料金|
|---|---|
|最初の 250 回のエージェント評価|0.00 USD|

|任意の月|エージェント評価ごとの料金|
|---|---|
|最初の 250 回のエージェント評価|0.30 USD|
|次の 750 回のエージェント評価|0.25 USD|

詳細はこちらを参照
https://aws.amazon.com/jp/inspector/pricing/

# Amazon Inspectorの使い方
Inspectorの実施条件は以下の通り。RHELやCentOSの場合、6以下では利用できない。またWindows向け対応はまだβ版のため、正式には対応していない。

- Amazon Linux (2015.03 以降)
- Ubuntu (14.04 LTS)
- Red Hat Enterprise Linux (7.2)
- CentOS (7.2)
- Windows Server 2008 R2 および Windows Server 2012（β版）

## 準備
### IAMロールの作成
0. AWS Webコンソール上のInspectorを開いて、「今すぐ始める」→「ロールの選択または作成」をクリック
![ロール作成](https://qiita-image-store.s3.amazonaws.com/0/77532/4518b35c-41ab-4b34-26d3-3aad0b86bcf3.png "ロール作成")

0. IAMロール名"inspector"、ポリシー名「新しいロールポリシーの作成」を選び、右下の「許可」をクリック。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/77532/fb8663a1-3d03-9fc7-84a0-d73b5e4580b0.png)

なおこのポリシーはec2 describe-instancesのアクションのみ許可するもの。またロール名は他の名前でも問題ない。

### タグを付ける
Amazon Inspectorを実行するEC2インスタンスに対してタグを付ける。GUIから実施するか、以下のようにaws-cliを使ってタグをつける。

```shell-session
# テスト実行
aws ec2 create-tags --dry-run --resources i-XXXXXXXXXXXXX --tags Key=inspector,Value=True

# 本番実行(--dry-runなし)
aws ec2 create-tags --resources i-XXXXXXXXXXXXX --tags Key=inspector,Value=true
```

- --resources の後にEC2インスタンスのリソースIDを指定します。
- 上記例だと「Key: inspector, Value: true」というタグが設定される。

参考資料
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_applications.html

### エージェントのインストール

Amazon Inspectorを実行するEC2インスタンス上で、以下のようにコマンドを実行する

#### ファイルの入手

```shell-session
# installファイルの入手
wget https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
```

```shell-session:実行例
# wget https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
--2016-11-18 11:45:51--  https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
Resolving d1wk0tztpsntt1.cloudfront.net (d1wk0tztpsntt1.cloudfront.net)... 54.192.233.79, 54.192.233.106, 54.192.233.110, ...
Connecting to d1wk0tztpsntt1.cloudfront.net (d1wk0tztpsntt1.cloudfront.net)|54.192.233.79|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23648 (23K)
Saving to: ‘install’

100%[==================================================================================>] 23,648      --.-K/s   in 0.002s

2016-11-18 11:45:51 (14.8 MB/s) - ‘install’ saved [23648/23648]
```
#### インストール

```shell-session
# installスクリプトを実行してエージェントをインストール
bash install
```

```shell-session:実行例(CentOS7.2利用)
# ls -ltr
total 24
-rw-r--r-- 1 root root 23648 Nov 16 23:59 install

# bash install
Distribution of the machine is CentOS Linux.
Distribution type of the machine is centos.
Revision of the distro is 7.
Kernel version of the machine is 3.10.0-327.13.1.el7.x86_64.
...
(略)
...
Installation script completed successfully.

Notice:
By installing the Amazon Inspector Agent, you agree that your use is subject to the terms of your existing
AWS Customer Agreement or other agreement with Amazon Web Services, Inc. or its affiliates governing your
use of AWS services. You may not install and use the Amazon Inspector Agent unless you have an account in
good standing with AWS.
*  *  *
Current running agent reports to arsenal endpoint:
Current running agent reports version as: 1.0.551.0
This install script was created to install agent version:1.0.551.0
In most cases, these version numbers should be the same.
#
```
### セキュリティグループ確認(オプション)
EC2からAmazon Inspector および Amazon S3 サービス用のパブリックエンドポイントへのアウトバウンド許可されているか確認する。なお、インバウンドの許可は不要。

## 評価ターゲットを作る
どのタグがついているものをAmazon Inspectorの調査対象とするかを設定するために、評価ターゲットを作成します。ここでは「キー: inspector、値：True」となっているものをAmazon Inspectorの調査対象とするようにしてます。

|項目|設定値|
|:--|:--|
|名前|任意の名称(下記では"inspector")|
|キー|Keyの値(下記では"inspector")|
|値|Valueの値(下記では"True")|
![image.png](https://qiita-image-store.s3.amazonaws.com/0/77532/c767b0e6-d5bb-3ed7-06ed-312d846bf93c.png)


## 評価テンプレートを作る
以下のようにして評価テンプレートを作成し、「作成および実行」でAmazon Inspectorが実行される。
なお評価テンプレートの修正はできない。削除＆作成が必要となる。

|項目|設定値|
|:--|:--|
|名前|任意の名称(下記では"inspector_templete")|
|ターゲット名|先程作成したターゲット名を記載(本資料では"inspector")|
|ルールパッケージ|前述のルールパッケージを選択(下記では"Security Best Practices-1.0"を選択)|
|所要時間|時間を選択。長ければ長いほど詳細のテストができるが推奨は1時間|
|SNSトピック|検出されたものをSNSに通知する場合は設定する(オプション)|
|タグ|必要に応じて設定(オプション)|
|結果に追加された属性|必要に応じて設定(オプション)|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/77532/1a7e534b-91bf-1c96-bf91-ac76c2c078fb.png)



またaws-cliでAmazon Inspectorを実行する場合は以下のように行う

```shell-session
aws inspector start-assessment-run --assessment-run-name (評価テンプレート名) --assessment-template-arn (評価テンプレートのARN)
```

```shell-session:実行例
# aws inspector start-assessment-run --assessment-run-name inspector_templete --assessment-template-arn arn:aws:inspector:ap-northeast-1:XXXXXXXXXXXX:target/xxxxxxxx/template/xxxxxxxx
```

## 結果確認
実行開始すると、検出されたものから左ペインにある「評価の実行」内に出力される。検出件数をクリックすると以下のような画面が表示されるので、検出された内容や推奨事項を確認して対応を行う。
<img width="947" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/77532/a247624f-9464-a951-cd67-2de08ce2fbd4.png">

# まとめ
Amazon Inspectorは、GUIでもaws-cliでもあっけないほど簡単に実行できました。
またaws-cliとcronやRundeckやjenkinsなどが利用して自動実行もできるため、有料サービスですが定期的に実行してリスクの可視化を行うとよさそうです。

# 資料
## 診断実行中のプロセスと負荷
診断実行中は以下のようなプロセスが起動してました。

```text:
root     14202  0.0  0.0      0     0 ?        S<   Nov17   0:00 [kworker/0:2H]
root     14203  0.0  0.0      0     0 ?        S<   Nov17   0:00 [kworker/0:0H]
root     21393  0.0  0.0      0     0 ?        S    10:40   0:00 [kworker/0:0]
root     21430  0.0  0.4 140788  5060 ?        Ss   10:42   0:00 sshd: root@pts/0
root     21434  0.0  0.2 115384  2112 pts/0    Ss   10:42   0:00 -bash
root     21994  0.0  0.0      0     0 ?        R    11:46   0:00 [kworker/0:1]
root     22054  0.0  2.9 470424 30116 ?        Ssl  11:46   0:01 /opt/aws/awsagent/bin/awsagent
root     22231  0.0  0.2 176024  2412 ?        S    12:03   0:00 /usr/sbin/CROND -n
root     22232  0.0  0.1 113120  1200 ?        Ss   12:03   0:00 /bin/bash -c /bin/sleep $[ ( $RANDOM % 3420 ) + 1 ]s; /opt/aws/awsagent/bin/update > /var/log/awsagent-update.log 2>&1
root     22233  0.0  0.0 107896   616 ?        S    12:03   0:00 /bin/sleep 3324s
root     22293  0.0  0.0      0     0 ?        S<   12:12   0:00 [inspector_task_]
root     22294  0.0  0.0      0     0 ?        S<   12:12   0:00 [inspector_libra]
```

CloudWatchで負荷をみたところ、インストール時のみ一瞬負荷があがりましたが、診断中はあまり負荷が上がりませんでした。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/77532/b68ffc48-ca9f-0d87-12d0-2b5755188f12.png)

## 参考資料
http://dev.classmethod.jp/cloud/aws/aws-inspector/
http://dev.classmethod.jp/cloud/aws/blackbelt2016-inspector/
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_introduction.html
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_settingup.html