Vulsのロゴ
はじめに
昨日知りました、Vuls( VULnerability Scanner )という素晴らしい脆弱性診断ツールがあります、ソースコードはGitHubの【future-architect/vuls】に上がっています。日本にいる方々が開発したものですので、このサービスに非常に期待しています。
Vulsができることについては、下記vuls/README.ja.mdに記載されることを引用させていただきます。
Vulsは上に挙げた手動運用での課題を解決するツールであり、以下の特徴がある。
● システムに関係ある脆弱性のみ教えてくれる
● その脆弱性に該当するサーバを教えてくれる
● 自動スキャンのため脆弱性検知の漏れを防ぐことができる
● CRONなどで定期実行、レポートすることで脆弱性の放置を防ぐことできる
Dockerを使えば、簡単にインストールができて、ちょっとした設定ですぐVulsを利用できます。
恥ずかしいながら、自分はDockerすらよく触ったことがなく、今回は、Dockerの学習も兼ねて、自分がやったことを共有します。
話がそれますが、昨年度、脆弱性対応の業務にすこし携わったことがあります。その時は、脆弱性の通知がセキュリティ部門から来るたびに、各システムのサーバにSSHログインして、脆弱性ありのパッケージがインストールされているかを調査して対応していましたので、正直に言って、嫌な作業でした。ですので、Vulsのことを知ってから、ずっと頭から離れられず、触りたいと思っていたので、早速インストールして、触ってみました。
Vulsを触ってみよう
動作環境
- Vulsのホスト
OS | Amazon Linux |
---|---|
AMI | amzn-ami-hvm-2016.03.3.x86_64-gp2 |
Docker | Version 1.11.2 |
- スキャン対象のインスタンス
OS | Amazon Linux |
---|---|
AMI | amzn-ami-hvm-2016.03.1.x86_64-gp2 |
##手順
-
Vuls用のインスタンスを作成
- セキュリティグループ周りは割愛
-
Vuls用のインスタンスを作成されると、SSHログイン
これからはEC2内の作業
- とりあえず、yum update
$ sudo yum update -y
- docker、docker-compose、gitをインストール
$ sudo yum -y install docker
$ sudo pip install -U docker-compose
$ sudo yum -y install git
- バージョン確認
$ docker --version
Docker version 1.11.2, build b9f10c9/1.11.2
$ docker-compose -v
docker-compose version 1.7.1, build 6c29830
$ git --version
git version 2.7.4
- Dockerを起動
$ sudo service docker start
- Vulsのソースコードを取得
$ git clone https://github.com/future-architect/vuls.git
- イメージのビルド、コンテナを作成して、起動
- 少し時間がかかる
$ cd vuls/setup/docker
$ sudo /usr/local/bin/docker-compose -p docker -f docker-compose.yml up -d
$ sudo docker ps
- Vulsの設定
- Target instanceにSSHログイン用のkeyをvuls/docker/conf/に格納
- Target instanceにSSHログイン用のconfigファイル(config.toml)をvuls/docker/conf/に作成
[servers]
[servers.172-31-21-119]
host = "172.31.21.119"
user = "ec2-user"
keyPath = "conf/*****.pem"
- NVDから、脆弱性情報を取得
- 少し時間がかかる
$ sudo docker exec -t vuls scripts/fetch_nvd_all.sh
0 / 1 [-----------------------------] 0.00%[Jul 25 16:06:26] INFO Fetching... https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2002.xml.gz
...
...
...
[Jul 25 16:19:26] INFO Refreshed 6297 Nvds.
0 / 1 [-----------------------------] 0.00%[Jul 25 16:19:26] INFO Fetching... https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2016.xml.gz
[Jul 25 16:19:30] INFO Fetched 3109 CVEs
[Jul 25 16:19:30] INFO Opening DB. datafile: /opt/vuls/cve.sqlite3
[Jul 25 16:19:30] INFO Migrating DB
[Jul 25 16:19:30] INFO Inserting CVEs...
3109 / 3109 [===================================================================================================================================] 100.00% 14s
[Jul 25 16:19:45] INFO Refreshed 3109 Nvds.
- スキャンを実行
$ sudo docker exec -t vuls vuls prepare -config=conf/config.toml
INFO[0000] Start Preparing (config: conf/config.toml)
[Jul 25 16:23:26] INFO [localhost] Detecting OS...
[Jul 25 16:23:26] INFO [localhost] Detecting OS of servers...
[Jul 25 16:23:26] INFO [localhost] (1/1) Detected: 172-31-21-119: amazon 2016.03
[Jul 25 16:23:26] INFO [localhost] Detecting OS of containers...
[Jul 25 16:23:26] INFO [localhost] SSH-able servers are below...
172-31-21-119
[Jul 25 16:23:26] INFO [localhost] Installing...
[Jul 25 16:23:26] INFO [172-31-21-119] Nothing to do
[Jul 25 16:23:26] INFO [localhost] Success
$ sudo docker exec -t vuls scripts/scan_for_vulsrepo.sh
INFO[0000] Start scanning
INFO[0000] config: /opt/vuls/conf/config.toml
INFO[0000] cve-dictionary: /opt/vuls/cve.sqlite3
[Jul 25 16:23:32] INFO [localhost] Validating Config...
[Jul 25 16:23:32] INFO [localhost] Detecting Server/Contianer OS...
[Jul 25 16:23:32] INFO [localhost] Detecting OS of servers...
[Jul 25 16:23:32] INFO [localhost] (1/1) Detected: 172-31-21-119: amazon 2016.03
[Jul 25 16:23:32] INFO [localhost] Detecting OS of containers...
[Jul 25 16:23:32] INFO [localhost] SSH-able servers are below...
172-31-21-119
[Jul 25 16:23:32] INFO [localhost] Detecting Platforms...
[Jul 25 16:23:32] INFO [localhost] (1/1) 172-31-21-119 is running on aws
[Jul 25 16:23:32] INFO [localhost] Scanning vulnerabilities...
[Jul 25 16:23:32] INFO [localhost] Check required packages for scanning...
[Jul 25 16:23:32] INFO [localhost] Scanning vulnerable OS packages...
[Jul 25 16:23:34] INFO [172-31-21-119] Fetching CVE details...
[Jul 25 16:23:34] INFO [172-31-21-119] Done
[Jul 25 16:23:34] INFO [localhost] Scanning vulnerable software specified in the CPE...
[Jul 25 16:23:34] INFO [localhost] Insert to DB...
[Jul 25 16:23:46] INFO [localhost] Reporting...
172-31-21-119 (amazon2016.03)
=============================
CVE-2016-1762 10.0 (High) libxml2 in Apple iOS before 9.3, OS X before 10.11.4, Safari before 9.1, tvOS before
9.2, and watchOS before 2.2 allows remote attackers to execute arbitrary code or
cause a denial of service (memory corruption) via a crafted XML document.
CVE-2016-4448 10.0 (High) Format string vulnerability in libxml2 before 2.9.4 allows attackers to have
unspecified impact via format string specifiers in unknown vectors.
CVE-2016-1978 7.5 (High) Use-after-free vulnerability in the ssl3_HandleECDHServerKeyExchange function in
Mozilla Network Security Services (NSS) before 3.21, as used in Mozilla Firefox
before 44.0, allows remote attackers to cause a denial of service or possibly have
unspecified other impact by making an SSL (1) DHE or (2) ECDHE handshake at a time
of high memory consumption.
CVE-2016-0758 7.2 (High) Integer overflow in lib/asn1_decoder.c in the Linux kernel before 4.6 allows local
users to gain privileges via crafted ASN.1 data.
CVE-2016-4557 7.2 (High) The replace_map_fd_with_map_ptr function in kernel/bpf/verifier.c in the Linux
kernel before 4.5.5 does not properly maintain an fd data structure, which allows
local users to gain privileges or cause a denial of service (use-after-free) via
crafted BPF instructions that reference an incorrect file descriptor.
CVE-2016-4565 7.2 (High) The InfiniBand (aka IB) stack in the Linux kernel before 4.5.3 incorrectly relies on
the write system call, which allows local users to cause a denial of service (kernel
memory write operation) or possibly have unspecified other impact via a uAPI
interface.
...
...
...
- スキャン結果を **http://ホストIPアドレス/vulsrepo/**に アクセスして、見てみると、スゲ~~~ UI結構イケてる!
- Target instanceをyum updateしてから、もう一回やってみる
$ sudo docker exec -t vuls vuls prepare -config=conf/config.toml
INFO[0000] Start Preparing (config: conf/config.toml)
[Jul 25 16:34:19] INFO [localhost] Detecting OS...
[Jul 25 16:34:19] INFO [localhost] Detecting OS of servers...
[Jul 25 16:34:20] INFO [localhost] (1/1) Detected: 172-31-21-119: amazon 2016.03
[Jul 25 16:34:20] INFO [localhost] Detecting OS of containers...
[Jul 25 16:34:20] INFO [localhost] SSH-able servers are below...
172-31-21-119
[Jul 25 16:34:20] INFO [localhost] Installing...
[Jul 25 16:34:20] INFO [172-31-21-119] Nothing to do
[Jul 25 16:34:20] INFO [localhost] Success
$ sudo docker exec -t vuls scripts/scan_for_vulsrepo.sh
INFO[0000] Start scanning
INFO[0000] config: /opt/vuls/conf/config.toml
INFO[0000] cve-dictionary: /opt/vuls/cve.sqlite3
[Jul 25 16:34:31] INFO [localhost] Validating Config...
[Jul 25 16:34:31] INFO [localhost] Detecting Server/Contianer OS...
[Jul 25 16:34:31] INFO [localhost] Detecting OS of servers...
[Jul 25 16:34:32] INFO [localhost] (1/1) Detected: 172-31-21-119: amazon 2016.03
[Jul 25 16:34:32] INFO [localhost] Detecting OS of containers...
[Jul 25 16:34:32] INFO [localhost] SSH-able servers are below...
172-31-21-119
[Jul 25 16:34:32] INFO [localhost] Detecting Platforms...
[Jul 25 16:34:32] INFO [localhost] (1/1) 172-31-21-119 is running on aws
[Jul 25 16:34:32] INFO [localhost] Scanning vulnerabilities...
[Jul 25 16:34:32] INFO [localhost] Check required packages for scanning...
[Jul 25 16:34:32] INFO [localhost] Scanning vulnerable OS packages...
[Jul 25 16:34:33] INFO [172-31-21-119] Fetching CVE details...
[Jul 25 16:34:33] INFO [172-31-21-119] Done
[Jul 25 16:34:33] INFO [localhost] Scanning vulnerable software specified in the CPE...
[Jul 25 16:34:33] INFO [localhost] Insert to DB...
[Jul 25 16:34:33] INFO [localhost] Reporting...
172-31-21-119 (amazon2016.03)
=============================
No unsecure packages.
結果は No unsecure packagesになりました! やはり、Vulsが超~~便利ですね!これで、運用も楽になれます!
最後
クラウドを前提とした設計が「ニューノーマル」になった今、セキュリティがますます重要になってきました。
AmazonもInspectorという診断用のサービスがあります。Vulsと違って、完全にAmazonのマネジドサービスですので、サーバの運用が不要です。それぞれの特徴がありますので、利用者が自分のニーズにあったものを利用すればよいと思います。
まだまだ全然DeepDiveできていませんが、VulsはもAmazon Inspectorも本当に素晴らしいサービスだと思っています。これから、是非活用したいです。