[AWS入門] Amazon Inspectorでセキュリティチェックを行う

はじめに

Amazon Inspectorは、EC2サーバの脆弱性やセキュリティ評価を自動で行えるサービスです。

たとえば、「Instance i-xxxx is configured to allow users to log in with root credentials over SSH. This increases the likelihood of a successful brute-force attack.(ユーザーがrootでSSHでログインできるように設定されています。これにより、ブルートフォース攻撃が成功する可能性が高くなります。)」などの脆弱性を自動で検知してくれるので、サーバセキュリティ管理を行う際の手助けとなります。

AWSでは「責任共有モデル」を採用しているため、AWSは物理セキュリティ、ネットワークインフラ、コンピューティングやデータベースなどの仮想インフラに責任を持ち、OSレイヤーやその上で動くアプリケーション、データなどはユーザ自身が責任をもって管理する必要が出てきます。そこでAmazon Inspectorを使えば、OS内部でネットワーク、ファイル システム、プロセス、アクティビティなどのデータを収集して検知してくれるので、潜在的なセキュリティ上の問題への対応を仕組み化して行えるようになることが大きなメリットです。

サポートされているOSとリージョンは、下記の通りです。

* Amazon Linux (2015.03 以降)
* Ubuntu (14.04 LTS)
* Red Hat Enterprise Linux (7.2)
* CentOS (7.2)
* Windows Server 2008 R2 および Windows Server 2012

* 米国西部(オレゴン)
* 米国東部(バージニア北部)
* 欧州 (アイルランド)
* アジアパシフィック(東京)

 

EC2にエージェントをインストール

では早速、EC2インスタンスを作成して、Amazon Inspectorを設置してみましょう。

まずはいつも通りインスタンスを作成して、作成したばかりの状態のセキュリティチェックを行いたいと思います。東京リージョンで、Amazon Linux AMI 2017.03.0(HVM)を選択

Amazon Inspectorの検査対象インスタンスはタグで判別させるので、Inspector=Trueというタグを設定します。(キーと値は判別できれば何でも大丈夫です)

このインスタンスにSSHで接続して、エージェントをインストールします。エージェントはネットワーク、ファイル システム、プロセス、アクティビティなどのOS情報を収集して、Inspectorへデータを送る役割ですね。

$ curl -O https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
$ sudo bash install

インストールは簡単、これで完了です。インストールするだけで起動しているはずですが、基本的なコマンドは

# 確認
$ sudo /opt/aws/awsagent/bin/awsagent status
# 起動
$ sudo /etc/init.d/awsagent start
# 終了
$ sudo /etc/init.d/awsagent stop

インスタンス側でやることはこれだけです。既存環境に影響が少ない、ほとんどないのでいいですね。

 

Amazon Inspectorを設定する

まずはロールの割り当てが必要なので、「ロールの選択または作成」をクリックしてIAMロールを作成します。

評価ターゲット(チェック対象インスタンス)を特定するために、先ほど入力したタグのキーと値をここで設定します。

検査内容を指定して、評価テンプレートの定義を行います。Amazon Inspectorではルールパッケージと呼ばれる検査項目が予め用意されているので、それを選択するだけで設定できます。

検査できる項目の詳細はそれぞれ、

CIS Operating System Security Configuration Benchmarks
http://docs.aws.amazon.com/inspector/latest/userguide/inspector_cis.html
https://learn.cisecurity.org/benchmarks

Security Best Practices
http://docs.aws.amazon.com/inspector/latest/userguide/inspector_security-best-practices.html

Common Vulnerabilities and Exposures
http://docs.aws.amazon.com/inspector/latest/userguide/inspector_cves.html
https://s3-us-west-2.amazonaws.com/rules-engine/CVEList.txt

Runtime Behavior Analysis
http://docs.aws.amazon.com/inspector/latest/userguide/inspector_runtime-behavior-analysis.html

これで評価内容が作成できました。

このまま実行してももちろん問題ありませんが、時間のかかる処理のため、ステータスチェンジごとにSNSでメールが来るように設定しておきます。

 

SNSでメール通知

SNSで新しいトピックを作成して、「Edit Topic Policy」を選択します。

BasicViewで、両方の項目でOnly these AWS usersを選択して「arn:aws:iam::406045910587:root」を入力します。これはリージョンによって異なるので、利用しているリージョンのものを入力してください。
https://docs.aws.amazon.com/inspector/latest/userguide/inspector_assessments.html

* for US West (Oregon) – arn:aws:iam::758058086616:root
* for EU (Ireland) – arn:aws:iam::357557129151:root
* for US East (N. Virginia) – arn:aws:iam::316112463485:root
* for Asia Pacific (Incheon) – arn:aws:iam::526946625049:root
* for Asia Pacific (Mumbai) – arn:aws:iam::162588757376:root
* for Asia Pacific (Tokyo) – arn:aws:iam::406045910587:root
* for Asia Pacific (Sydney) – arn:aws:iam::454640832652:root

Subcriptionを作成して送信先Emailアドレスを設定しておきます。

最後にAmazon Inspectorの評価テンプレートに紐付けておけば完成です。

 

実行結果

さて、いよいよ実行してみましょう。評価テンプレートの一覧から対象のテンプレートにチェックを入れて「実行」ボタンを押します。今回の検査内容では、およそ1時間ほどEC2インスタンスからデータを収集して、分析が行われて、「分析完了」のステータスになりました。

SNSで設定しておいたので、ステータスが変更になるたびにメールで通知が来ています。

起動したばかりでyum updateなども行っていないAmazon Linuxインスタンスなので、いくつかのセキュリティ上の問題が検出されています。

Highであがってきてるのは、4.9.11までのlinux kernelの脆弱性(CVE-2017-5986)ですね。socket.c中のsctp_wait_for_sndbuf()関数にバグがあって、ローカルユーザによるassertion failureとpanicが発生する可能性という話です。その下に、推奨事項として対応策が記載されています。

これはlinuxカーネルのバージョンアップで解消されるはずなので、対応しておきましょう。

$ sudo yum update

を行うと、この記事の時点では4.9.20-10.30.amzn1のkernelがインストールされます。

再度、Amazon Inspectorを実行すると、


いくつかの問題が解消されています。

インスタンスの脆弱性チェックがこれだけ手軽にできるのは素晴らしいですね。CloudWatchで定期実行しておけば、よりセキュアな環境を保てると思います。

APN Consulting Partner
スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。