Contents
バルス
目が目が
で同じみの破壊の言葉と知られているバルスですが
ここでは、システムの脆弱性をスキャンして確認できる Vuls(VULnerability Scanner)
をインストールして使ってみました。
ここでは、インストールして簡単なスキャンを実行してみます。 🙂
Vuls
ヒューチャーアーキテクトの中の人が開発してくれたツールです。
自分も脆弱性管理をどうすか?という課題を持っていたのですが、まさにその課題を解決してくれるツールになってくれるかもしれないと思っています。 🙂
Think IT記事
環境
環境図
ソフトウェア
項目 | バージョン |
---|---|
CentOS | 7.2 |
Vuls | 0.1.4 |
go | 1.6 |
Vulsインストール
インストール手順は、ほぼgithubに書かれている通りにしています。
サーバの準備
パッケージのインストール
(1) 必要なパッケージをインストールします。
1 2 |
[root@localhost ~]# yum -y install sqlite gcc git |
goのインストール
(1) goをダウンロードします。
1 2 |
[root@localhost ~]# curl -L https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz -O |
(2) goをインストールします。
1 2 3 |
[root@localhost ~]# tar zxvf go1.6.linux-amd64.tar.gz -C /usr/local/ [root@localhost ~]# mkdir go |
(3) goのパスを設定します。
1 2 3 4 5 6 |
[root@localhost ~]# vi /etc/profile.d/goenv.sh export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin [root@localhost ~]# source /etc/profile.d/goenv.sh |
(4) パスが通ったか確認してみます。
1 2 3 |
[root@localhost ~]# which go /usr/local/go/bin/go |
go-cve-dictionaryのインストール
(1) go-cve-dictionaryをインストールします。
1 2 3 4 |
[root@localhost ~]# mkdir /var/log/vuls [root@localhost ~]# chmod 700 /var/log/vuls/ [root@localhost ~]# go get github.com/kotakanbe/go-cve-dictionary |
(2) NVDから脆弱性データベースをダウンロードします。
1 2 |
[root@localhost ~]# for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done |
(3) JVNも対象にする場合は、脆弱性データベースをダウロードします。
JVNのダウンロードは時間(1時間程度でした)がかかります。
公式手順にもある通り nohup を入れておく方がいいかもしれません。
1 2 |
[root@localhost ~]# go-cve-dictionary fetchjvn -entire |
Vulsのインストール
(1) Vulsをインストールします。
1 2 |
[root@localhost ~]# go get github.com/future-architect/vuls |
SSH公開鍵の作成
(1) SSHの秘密鍵、公開鍵を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@localhost ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 8a:bb:3e:82:9d:98:5c:86:0b:8c:f9:da:4c:a6:c4:d2 root@localhost.localdomain The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | | |o.. S | |=+ o . . | |+OE.. . | |*O= .. | |o.oo+o | +-----------------+ |
(2) 公開鍵の内容をコピーする
以下の公開鍵をクライアントに作成します。
1 2 |
[root@localhost ~]# cat .ssh/id_rsa.pub |
Vulsクライアント準備
パッケージのインストール
(1) yum-plugin-changelog
をインストールします。
1 2 |
[root@localhost ~]# yum -y install yum-plugin-changelog |
公開鍵の作成
(1) サーバで作った公開鍵を作成します。
1 2 3 4 5 |
[root@localhost ~]# mkdir .ssh [root@localhost ~]# chmod 700 .ssh [root@localhost ~]# vi .ssh/authorized_keys (サーバで作った公開鍵を貼り付ける) |
Vulsでスキャンを実行
設定フィアル作成
(1) スキャン対象の設定ファイルを作成します。
1 2 3 4 5 6 7 8 9 |
[root@localhost ~]# vi config.toml [servers] [servers.172-31-4-82] host = "192.168.1.81" port = "22" user = "root" keyPath = "/root/.ssh/id_rsa" |
(2) 設定内容を確認して問題が無ければ設定を反映します。
1 2 3 |
[root@localhost ~]# vuls configtest [root@localhost ~]# vuls prepare |
スキャンを実行
(1) スキャンを実行します。
1 2 3 4 5 6 7 8 9 10 |
[root@localhost ~]# vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 (snip) CVE-2016-1908 ------------- Score ? NVD https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-1908 CVE Details http://www.cvedetails.com/cve/CVE-2016-1908 RHEL-CVE https://access.redhat.com/security/cve/CVE-2016-1908 (snip) |
(2) JVNを対象にした結果を出力させてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@localhost ~]# vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 -lang=ja (snip) CVE-2016-0609 ------------- Score 1.7 (Low) Vector (AV:N/AC:H/Au:M/C:N/I:N/A:P) Title Oracle MySQL の MySQL Server および MariaDB における Privileges に関する脆弱性 Description Oracle MySQL の MySQL Server および MariaDB には、Privileges に関する処理に不備があるため、可用性に影響のある脆弱性が存在します。 JVN http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-001093.html NVD https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0609 MITRE https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0609 CVE Details http://www.cvedetails.com/cve/CVE-2016-0609 CVSS Claculator https://nvd.nist.gov/cvss/v2-calculator?name=CVE-2016-0609&vector=(AV:N/AC:H/Au:M/C:N/I:N/A:P) RHEL-CVE https://access.redhat.com/security/cve/CVE-2016-0609 Package/CPE mariadb-libs-5.5.44-2.el7.centos -> mariadb-libs-5.5.50-1.el7_2 (snip) |
(3) 結果をJSONで出力してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
[root@localhost ~]# vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 -lang=ja -report-json [root@localhost ~]# cat results/20160815_1611/172-31-4-82.json | jq . (snip) "Jvn": { "Title": "Oracle MySQL の MySQL Server および MariaDB における Privileges に関する脆弱性", "Summary": "Oracle MySQL の MySQL Server および MariaDB には、Privileges に関する処理に不備があるため、可用性に影響のある脆弱性が存在します。", "JvnLink": "http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-001093.html", "JvnID": "JVNDB-2016-001093", "Score": 1.7, "Severity": "Low", "Vector": "(AV:N/AC:H/Au:M/C:N/I:N/A:P)", "References": [ { "Source": "CVE", "Link": "http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0609" }, { "Source": "CWE IPA JA", "Link": "http://www.ipa.go.jp/security/vuln/CWE.html#CWEnoinfo" }, { "Source": "NVD", "Link": "http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0609" } ], "Cpes": null, "PublishedDate": "2016-01-22T10:59:29+09:00", "LastModifiedDate": "2016-01-22T10:59:29+09:00" } }, "Packages": [ { "Name": "mariadb-libs", "Version": "5.5.44", "Release": "2.el7.centos", "NewVersion": "5.5.50", "NewRelease": "1.el7_2" } ], "DistroAdvisories": null, "CpeNames": [] } (snip) |
結果からCVEをキーにして対象のサーバを洗い出したり逆にホストをキーにして対象のCVE一覧を表示させたりすれば便利そうです!