脆弱性管理ツールFutureVulsを利用した脆弱性診断手順
こんにちは、坂巻です。
脆弱性管理ツールFutureVulsを利用して、EC2に対し脆弱性診断(スキャン)を実施してみたいと思います。
FutureVulsは、脆弱性検知や、脆弱性管理(判断、計画、パッチ適用)を行うことができる脆弱性管理ツール(SaaS)です。検出された脆弱性はタスクとしてFutureVulsに登録されるので、検出から対応までのフローをFutureVuls上で管理することが可能です。
スキャンでは、脆弱性に対する高い検知能力があるオープンソースの脆弱性スキャナ「Vuls」をベースにしたスキャナが利用されます。
本エントリでは、初期状態(アカウント未登録)から、脆弱性検出までのステップを関連用語と共に説明していきたいと思います。
目次
アカウント登録
FutureVulsのアカウント(ユーザ)登録を行います。
FutureVulsではトライアル期間が設けられており、すべての機能を2週間無料で利用することが可能です。2週間以降も継続して利用する場合はお支払い(クレジットカード)の登録が必要となります。
アカウント登録を行いますのでFutureVulsにアクセスし、「新規登録・ログイン」をクリックします。
「新規登録」をクリックします。
メールアドレス、パスワードを入力し、規約を確認後「送信」をクリックします。
認証コードを入力し「送信」をクリックします。
認証コードは、アカウント登録の際に指定したメールアドレスに送付されています。
以下のようなユーザ設定の画面に切り替われば、アカウント登録は完了です。
オーガニゼーションとグループ作成
オーガニゼーション作成
オーガニゼーションは請求先として利用され、多くの場合、会社名がオーガニゼーション名として利用されています。
「オーガニゼーションを作成する」をクリックします。
オーガニゼーション名、会社名等を入力し「次へ」をクリックします。
オーガニゼーションの連絡先を入力し「送信」をクリックします。
オーガニゼーションが作成できると、以下のようなメッセージが表示されます。
こちらでオーガニゼーションの作成は完了です。
グループ作成
脆弱性情報、サーバ情報は「グループ」に属します。以下は、オーガニゼーションとグループ、ユーザの関係についてのイメージです。オーガニゼーション内にグループがあり、1ユーザで複数のオーガニゼーション、グループを管理できる仕組みとなります。
脆弱性情報、サーバ情報を管理する単位でグループを作成することが推奨されており、部署やチームごとに分ける場合が多くあります。
「グループ作成」をクリックします。
グループ名を入力し「送信」をクリックします。
グループが作成できると、以下のようなメッセージが表示されますので「移動する」をクリックします。
こちらでグループの作成は完了です。
スキャナインストール/スキャン実施
FutureVulsのスキャナプログラムを対象サーバに導入します。この後、実際にスキャンを行いますが、先ずはスキャン実施前のダッシュボードを確認してみたいと思います。
スキャン実施前のダッシュボード確認
脆弱性
スキャンで検出された脆弱性はこちらで確認できます。フィルタ条件を設定すると、脆弱性を振り分けることができます。
サーバ
スキャンが実行されたサーバを確認できます。現時点でスキャンを実行したサーバはありません。
タスク
対応すべきタスクの一覧が確認できます。検出された脆弱性は自動的にタスクとして起票されます。対応要否や担当者、アップデート予定日等を各タスクごとに設定し、脆弱性を管理することが可能です。アップデートコマンドの生成や、複数タスクの一括更新、スコアの情報が更新されるまで非表示にすることも可能です。
ロール
登録されたサーバはロールという単位でまとめることができます。複数のサーバをロールという単位にまとめて、脆弱性やタスクを管理できます。
最新AMIにスキャナインストール/スキャン実施
スキャンを実施するための、該当サーバにスキャナプログラムをインストールします。
インストールコマンドは、グループ設定の「スキャナ」より確認することができます。
curl
コマンドを使いインストールを行いますので、スキャン対象のサーバはインターネットへの接続が必要となります。ここでは、現時点で最新バージョンのAmazon Linux 2(ami-0c3fd0f5d33134a76
)を利用しました。
該当のサーバにログインし、以下のコマンドを実行しました。(VULS_SAAS_TOKEN
は環境により値が異なります。)
[root@ip-172-31-33-72 ~]# curl -s http://installer.vuls.biz/vuls-installer.sh | VULS_SAAS_GROUPID="508" VULS_SAAS_TOKEN="XXXXXX" VULS_SCAN_MODE="fast-root" bash -s inst 2019/07/21 23:55:32 [START ]: Install scanner. 2019/07/21 23:55:32 [SUCCESS ]: Check root user. 2019/07/21 23:55:32 [SUCCESS ]: Check distribution. [OS: amazon] 2019/07/21 23:55:32 [SUCCESS ]: Check Architecture [arch: x86_64] 2019/07/21 23:55:33 [SUCCESS ]: Install package. [yum-utils lsof] 2019/07/21 23:55:33 [SUCCESS ]: Create group. [group: vuls-saas] 2019/07/21 23:55:33 [SUCCESS ]: Create user. [user: vuls-saas] 2019/07/21 23:55:33 [SUCCESS ]: Create directory. [/opt/vuls-saas] 2019/07/21 23:55:33 [SUCCESS ]: Create directory. [/var/log/vuls] 2019/07/21 23:55:34 [SUCCESS ]: Download binary. [/opt/vuls-saas/vuls type: linux_x86_64] 2019/07/21 23:55:34 [SUCCESS ]: Download script. [/opt/vuls-saas/vuls-saas.sh] 2019/07/21 23:55:34 [SUCCESS ]: Create config. [/opt/vuls-saas/config.toml] 2019/07/21 23:55:34 [SUCCESS ]: Create sudoers. [/etc/sudoers.d/vuls-saas] 2019/07/21 23:55:34 [SUCCESS ]: Create cron. [/etc/cron.d/vuls-saas-scan] 2019/07/21 23:55:34 [END ]: Install scanner finish.
インストールが正常に完了すると、インストールを実施した時刻+5分で、毎日自動的にスキャンが実行されるようにcronが設定されます。本環境では以下の設定となりました。
[root@ip-172-31-33-72 ~]# cat /etc/cron.d/vuls-saas-scan 00 00 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh >/dev/null 2>&1
cronの設定に従い、スキャンが自動実行されました。ダッシュボードを確認すると、スキャンが行われたサーバが表示されます。
脆弱性は検出されませんでした。
スキャン等が失敗した場合は、該当のサーバにて以下を確認してください。
/opt/vuls-saas/scan.log
- スキャンの成否が記載されます。スキャンが失敗している場合、レポート情報はFutureVulsにアップロードされません
/opt/vuls-saas/report.log
- スキャン結果レポートと、FutureVulsへのアップロードエラーなどが記載されます
- アップロードができない場合、proxy等が原因の考えられます
旧AMIにスキャナインストール/スキャン実施
検証用に脆弱性を検出させたいので、旧バージョンのAMI(ami-df470ede
)を利用してみたいと思います。旧バージョンのAMI検索方法については、以下が参考になると思います。
こちらのサーバでも、さきほどと同様のコマンドでインストールを実施しました。
[root@ip-172-31-41-32 ~]# curl -s http://installer.vuls.biz/vuls-installer.sh | VULS_SAAS_GROUPID="508" VULS_SAAS_TOKEN="XXXXXX" VULS_SCAN_MODE="fast-root" bash -s inst 2019/07/22 00:32:53 [START ]: Install scanner. 2019/07/22 00:32:53 [SUCCESS ]: Check root user. 2019/07/22 00:32:53 [SUCCESS ]: Check distribution. [OS: amazon] 2019/07/22 00:32:53 [SUCCESS ]: Check Architecture [arch: x86_64] 2019/07/22 00:33:02 [SUCCESS ]: Install package. [yum-utils lsof] 2019/07/22 00:33:02 [SUCCESS ]: Create group. [group: vuls-saas] 2019/07/22 00:33:02 [SUCCESS ]: Create user. [user: vuls-saas] 2019/07/22 00:33:02 [SUCCESS ]: Create directory. [/opt/vuls-saas] 2019/07/22 00:33:02 [SUCCESS ]: Create directory. [/var/log/vuls] 2019/07/22 00:33:04 [SUCCESS ]: Download binary. [/opt/vuls-saas/vuls type: linux_x86_64] 2019/07/22 00:33:04 [SUCCESS ]: Download script. [/opt/vuls-saas/vuls-saas.sh] 2019/07/22 00:33:04 [SUCCESS ]: Create config. [/opt/vuls-saas/config.toml] 2019/07/22 00:33:04 [SUCCESS ]: Create sudoers. [/etc/sudoers.d/vuls-saas] 2019/07/22 00:33:04 [SUCCESS ]: Create cron. [/etc/cron.d/vuls-saas-scan] 2019/07/22 00:33:04 [END ]: Install scanner finish.
本環境のcronは以下の設定となりました。
[root@ip-172-31-41-32 ~]# cat /etc/cron.d/vuls-saas-scan 38 00 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh >/dev/null 2>&1
cronの設定に従い、スキャンが自動実行されますので、スキャン実行後にダッシュボードを確認しました。スキャンが正常に完了しているようで、サーバが追加されていることが確認できました。
重要な未対応223件、その他の未対応479件の、合計702件の脆弱性が検出されました。
検出された脆弱性は、自動的にタスクとして起票されます。
ここでは、任意の脆弱性をピックアップして対応してみたいと思います。
検出した脆弱性をクリックすると、CVEのケース番など、脆弱性についての詳細が確認できます。
「タスク×サーバ」をクリックすると、該当のタスクが表示されます。
タスクのステータスや担当者を変更してみました。
「タスク」-「優先度高」をクリックすると、変更したタスクのみ表示されました。
該当のタスクを選択し「アップデートコマンド」をクリックします。
該当の脆弱性に対するアップデートコマンド等が表示されます。
該当サーバにログインし、「アップデート作業」に表示されたコマンドを実行しました。
[root@ip-172-31-41-32 ~]# yum update glibc glibc-common Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.5 kB 00:00:00 Resolving Dependencies --> Running transaction check (省略) Updated: glibc.x86_64 0:2.17-260.175.amzn1 glibc-common.x86_64 0:2.17-260.175.amzn1 Dependency Updated: nspr.x86_64 0:4.19.0-1.43.amzn1 nss-softokn-freebl.x86_64 0:3.36.0-5.42.amzn1 nss-util.x86_64 0:3.36.0-1.54.amzn1 Complete!
アップデート結果をFutureVulsに反映させるため、以下のコマンドを実行しました。
[root@ip-172-31-41-32 ~]# su - vuls-saas [vuls-saas@ip-172-31-41-32 ~]$ /opt/vuls-saas/vuls-saas.sh
上記コマンド実行後にタスクを確認すると、タスクのステータスがpatch_applied
に変化していることが確認できました。
脆弱性を確認すると、重要な未対応204件、その他の未対応466件、対応済みが32件に変化しました。
「対応済み」を確認すると対応した脆弱性が表示されます。
本エントリでの脆弱性診断は以上となりますが、実際の環境で脆弱性が検出された際は、深刻度等を鑑みて、脆弱性に対する対応(許容するものの選別や、優先度付)が必要になります。
さいごに
僅かな設定で脆弱性診断(スキャン)を実施することができました。ダッシュボードがシンプルでわかりやすく、また、ローカライゼーションされており、直感的に操作を行うことができました。マニュアル(FUTURE VULS ご利用ガイド)も整備されているため、利用する上で安心感がありました。 今後は、実際の運用を考慮した設定等にも触れていきたいと思います。