Amazon InspectorでAmazon LinuxのCVEによる評価をしてみた

Inspector

はじめに

Amazon Inspectorは、自動化されたセキュリティ評価サービスです。
ルールパッケージの1つとして、CVEを利用できます。

CVE(Common Vulnerabilities and Exposures)は、非営利団体のMITRE社が採番している識別子です。
脆弱性に識別番号(CVE-ID)を採番することで、主に相互参照や関連付けに利用されます。

Inspectorを使ってAmazon LinuxのCVEによる評価をしてみました。 以下のようにすすめ、Inspectorで検知された脆弱性がセキュリティアップデートで解消されることを確認します。

  • Amazon Linuxインスタンスの作成
  • Amazon Inspectorによる評価
  • 評価結果の確認(脆弱性あり)
  • セキュリティアップデートの適用
  • Amazon Inspectorによる評価(2回目)
  • 評価結果の確認(脆弱性なし)

Amazon Linuxインスタンスの作成

対応OSの確認

Inspectorには、AWSエージェントが必要です。
Linuxの場合以下がサポートされます(2016/10/30現在)最新のサポート状況はこちらをご覧ください。

  • Amazon Linux (2015.03 or later)
  • Ubuntu (14.04 LTS)
  • Red Hat Enterprise Linux (7.2)
  • CentOS (7.2)

Publicサブネットに作成

Inspectorを利用するためには、Inspectorとs3のパブリックエンドポイントに通信出来る必要があります。
s3はAWSエージェントの自動更新に利用されます。ユーザはエージェント更新を行う必要はありません。
EC2をインターネット接続可能なサブネット(=Publicサブネット)に作成します。
通信はアウトバウンドで行われるため、セキュリティグループ等でインバウンド許可を与える必要はありません。

初回起動時のセキュリティアップデートの無効化

Amazon Linux AMIは初回起動時に必須または重要なセキュリティアップデートをインストールします。
便利な機能ですが、脆弱性を検知したい今回の検証では無効化します。

インスタンス作成時にユーザーデータを指定することでアップデートを無効化出来ます。repo_upgrade: noneを指定します。
余談ですが、その他のオプションはこちらをご覧ください。

1

EC2にタグを設定

Inspectorは検査対象のEC2をタグで指定します。タグはユーザーが決める事が出来ます。
今回はInspector-linux-cveを用意しました。値がtrueの時に評価対象とします。

3

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

wgetコマンドでインストールスクリプトをダウンロードします。
sudo bash installを実行しエージェントを実行します。

$ wget https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
$ sudo bash install

エージェントの状態はsudo /opt/aws/awsagent/bin/awsagent statusコマンドで確認出来ます。

Amazon Inspectorによる評価

AWSマネージメントコンソールから、Inspectorを選択します。
[今すぐ始める]を選択します。

2

ステップ1 :前提条件

IAMロールの作成

InspectorがEC2インスタンスにアクセスしデータを収集するにはIAMロールが必要です。
[Amazon Inspector の使用開始] ページで、[ロールの作成または選択] を選択します。

1

IAMコンソールが起動するので、[許可]を選択します。

2

続行を選択し、ステップ2に進みます。

ステップ2 :評価ターゲットの定義

評価を行うEC2インスタンスを指定します。
事前に用意したInspector-linux-cveタグを指定します。

4

ステップ3 :評価テンプレートの定義

評価テンプレートにCVEを選択します。
複数の評価テンプレートを選択することも出来ます。所要時間はデフォルトの1時間です。

5

ステップ4: 確認

確認画面です。内容を確認し評価を開始します。

評価テンプレートの実行

左メニュー > 評価テンプレートを開きます。
先ほど作成したテンプレートを選択し実行します。

6

評価結果の確認(脆弱性あり)

左メニュー > 評価の実行を選択し、ステータスが「分析完了」になるまで待ちます。
結果列の「10」を選択します。

7

10個の脆弱性が見つかったことがわかります。
重要度Mediumが3個、Highが7個です。

8

個々を指摘は展開することで詳細を確認出来ます。
インスタンスID、CVE-ID、MITRE社へのリンクなどが表示されます。
以下の例(CVE-2016-6302)では、opensslパッケージのアップデートが推奨されています。

9

セキュリティアップデートの適用

yum updateに--securityフラグを追加し実行します。フラグにより、セキュリティアップデートのみ適用されます。
適用後にOSを再起動します。

$ sudo yum update --security
$ reboot

yum update --securityで行われた操作は以下の通りです。
カッコ内はバージョンです。

  • インストール
    • kernel(4.4.23-31.54.amzn1)
  • アップデート
    • bind-libs(32:9.8.2-0.37.rc1.49.amzn1)
    • bind-utils(32:9.8.2-0.37.rc1.49.amzn1)
    • kernel-tools(4.4.23-31.54.amzn1)
    • openssl(1:1.0.1k-15.96.amzn1)

Amazon Inspectorによる評価(2回目)

左メニュー > 評価テンプレートを開きます。
先ほど作成したテンプレートを選択し実行します。

評価結果の確認(脆弱性なし)

左メニュー > 評価の実行を選択し、ステータスが「分析完了」になるまで待ちます。
結果列の「1」を選択します。

10

結果に「No potential security issues found」とあります。
セキュリティ上の問題は解消されました。

11

おわりに

Amazon Inspectorを使ってAmazon LinuxのCVEによる評価をしました。
初回のセキュリティアップデートを無効にしたAmazon Linuxでは、10個の問題が発見されました。
yum updateに--securityフラグを追加することで、2回目の評価では問題が解消されました。

CVE情報をウォッチするのは骨が折れるので、Inspectorをうまく使っていきたいですね。
エージェントが自動更新される点もポイントが高いと思います。

参考

AWS Cloud Roadshow 2017 福岡