これを思い出す人も多いと思いますが、
まったく違いますので注意!w
今回はCentOS6.9にVulsを導入して、リモート先もスキャンできるか試してみました。
■Vulsとは
https://github.com/future-architect/vuls
「Vulnerability Scanner」
略してVuls。(Goで出来てる)
そもそも脆弱性はインフラエンジニア(SRE)はマストで対応しなければなりません。
毎回メールで連絡来るか、ネットでざわついたらすぐ!!
その前に既存で動いてるサーバのミドルウェアやサーバ自体の脆弱性を調べたいものです。
特徴は以下。
・Linuxサーバに存在する脆弱性をスキャン
Ubuntu, Debian, CentOS, Amazon Linux, RHELに対応、dockerも
・OSパッケージ管理対象外のミドルウェアをスキャン
プログラミング言語のライブラリやフレームワーク、ミドルウェアの脆弱性スキャン
CPEに登録されているソフトウェアが対象
・エージェントレスアーキテクチャ
スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作
・設定ファイルのテンプレート自動生成
CIDRを指定してサーバを自動検出、設定ファイルのテンプレートを生成
・EmailやSlackなど通知可能(日本語でのレポートも可能)
・付属するTerminal-Based User Interfaceビューアでは、Vim風キーバインドでスキャン結果を参照可能
早速インストール!!したいところだが…
Vulsのメイン開発者である神戸(かんべ)氏、(サウナおじさん)
このブログをリツイートありがとうございます!!!
ビジネスプランについて語る林氏。
こちらのお二人でVulsが生まれました!
参考
(https://thinkit.co.jp/article/10092)
さらにVulsRepoによる脆弱性可視化ツールを作成したうっしーさんなど、
今後のアップデートにも期待です!
■Vulsインストール(公式より)
・まずはvulsユーザー作成
1 2 |
$ sudo useradd vuls $ sudo passwd vuls |
・必要なパッケージ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo yum install sqlite git gcc make yum-plugin-changelog Loaded plugins: fastestmirror Setting up Install Process Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.yz.yamagata-u.ac.jp * extras: ftp.iij.ad.jp * remi-safe: ca.mirror.babylon.network * updates: ftp.iij.ad.jp Package sqlite-3.6.20-1.el6_7.2.x86_64 already installed and latest version Package git-1.7.1-8.el6.x86_64 already installed and latest version Package gcc-4.4.7-18.el6.x86_64 already installed and latest version Package 1:make-3.81-23.el6.x86_64 already installed and latest version Nothing to do |
入ってたわ。
・goのインストール
最新のgoを引っ張ってきてくださいな。
1 2 3 4 5 6 7 |
# sudo su - vuls vuls $ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz vuls $ sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz vuls $ mkdir $HOME/go vuls $ ls go go1.10.3.linux-amd64.tar.gz vuls $ rm go1.10.3.linux-amd64.tar.gz |
・go環境変数のセットアップ
1 2 3 4 5 6 7 8 9 10 |
vuls $ sudo vim /etc/profile.d/goenv.sh export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin vuls $ sudo chmod 755 /etc/profile.d/goenv.sh vuls $ source /etc/profile.d/goenv.sh vuls $ go version go version go1.7.1 linux/amd64 |
※ちなみにgo最新バージョンでももちろん動きます。
・Vuls環境セットアップ(go-cve-dictionary/goval-dictionaryまで)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
vuls $ sudo mkdir /var/log/vuls vuls $ sudo chown vuls /var/log/vuls vuls $ sudo chmod 700 /var/log/vuls vuls $ mkdir -p $GOPATH/src/github.com/kotakanbe vuls $ cd $GOPATH/src/github.com/kotakanbe vuls $ git clone https://github.com/kotakanbe/go-cve-dictionary.git Initialized empty Git repository in /home/vuls/go/src/github.com/kotakanbe/go-cve-dictionary/.git/ remote: Counting objects: 392, done. remote: Compressing objects: 100% (12/12), done. remote: Total 392 (delta 11), reused 16 (delta 10), pack-reused 370 Receiving objects: 100% (392/392), 119.96 KiB, done. Resolving deltas: 100% (190/190), done. vuls $ cd go-cve-dictionary vuls $ make install go get -u github.com/golang/dep/... dep ensure go install -ldflags "-X 'main.version=v0.1.0' -X 'main.revision=d47709b'" vuls $ cd $GOPATH/src/github.com/kotakanbe vuls $ git clone https://github.com/kotakanbe/goval-dictionary.git vuls $ cd goval-dictionary vuls $ make install |
・脆弱性データベースを取得
1 2 3 4 5 6 7 8 9 10 11 12 |
vuls $ cd $HOME vuls $ mkdir vuls vuls $ cd vuls vuls $ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done vuls $ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done [May 23 15:11:20] INFO Fetching CVE information from JVN. 0 / 1 [---------------------------------------------------------------------------------------------------------------------] 0.00%[May 23 15:11:20] INFO Fetching... http://jvndb.jvn.jp/ja/rss/years/jvndb_1998.rdf [May 23 15:11:20] INFO Fetched 13 CVEs [May 23 15:11:20] INFO Opening DB (sqlite3). [May 23 15:11:21] INFO Migrating DB [May 23 15:11:21] INFO Inserting fetched CVEs... 13 / 13 [========================================================================================= |
・各OSごとのgoval-dictionary取得(Alpine,redhat/centos,ubuntu)
https://github.com/kotakanbe/goval-dictionary
1 2 3 4 |
vuls $ cd ~/vuls vuls $ goval-dictionary fetch-alpine 3.3 3.4 3.5 3.6 vuls $ goval-dictionary fetch-redhat 5 6 7 vuls $ goval-dictionary fetch-ubuntu 12 14 16 |
・Vulsデプロイ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vuls $ mkdir -p $GOPATH/src/github.com/future-architect vuls $ cd $GOPATH/src/github.com/future-architect vuls $ git clone https://github.com/future-architect/vuls.git Initialized empty Git repository in /home/vuls/go/src/github.com/future-architect/vuls/.git/ remote: Counting objects: 3012, done. remote: Compressing objects: 100% (98/98), done. remote: Total 3012 (delta 94), reused 119 (delta 66), pack-reused 2847 Receiving objects: 100% (3012/3012), 3.02 MiB | 2.80 MiB/s, done. Resolving deltas: 100% (1970/1970), done. vuls $ cd vuls vuls $ make install go get -u github.com/golang/dep/... dep ensure go install -ldflags "-X 'main.version=v0.3.0' -X 'main.revision=fecd1ad'" |
・sudoersファイルの追記とconfig.tomlの編集
1 2 3 4 5 6 7 8 9 10 11 |
# visudo Defaults:vuls !requiretty vuls ALL=(ALL) NOPASSWD: ALL vuls $ cd ~/vuls vuls $ vim config.toml [servers] [servers.localhost] host = "localhost" port = "local" |
まずはローカル。
・vuls configtest
1 2 3 4 5 6 7 8 9 10 11 12 13 |
vuls $ vuls configtest [May 23 15:27:15] INFO [localhost] Validating config... [May 23 15:27:15] INFO [localhost] Detecting Server/Container OS... [May 23 15:27:15] INFO [localhost] Detecting OS of servers... [May 23 15:27:15] INFO [localhost] (1/1) Detected: localhost: centos 6.9 [May 23 15:27:15] INFO [localhost] Detecting OS of containers... [May 23 15:27:15] INFO [localhost] Checking dependendies... [May 23 15:27:15] INFO [localhost] Dependencies... Pass [May 23 15:27:15] INFO [localhost] Checking sudo settings... [May 23 15:27:15] INFO [localhost] Checking... sudo yum --changelog --assumeno update yum [May 23 15:27:16] INFO [localhost] Sudo... Pass [May 23 15:27:16] INFO [localhost] Scannable servers are below... localhost |
・いざvuls scan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
vuls $ vuls scan [May 23 15:34:05] INFO [localhost] Start scanning [May 23 15:34:05] INFO [localhost] config: /home/vuls/config.toml [May 23 15:34:05] INFO [localhost] Validating config... [May 23 15:34:05] INFO [localhost] Detecting Server/Container OS... [May 23 15:34:05] INFO [localhost] Detecting OS of servers... [May 23 15:34:05] INFO [localhost] (1/1) Detected: localhost: centos 6.9 [May 23 15:34:05] INFO [localhost] Detecting OS of containers... [May 23 15:34:05] INFO [localhost] Detecting Platforms... [May 23 15:34:16] INFO [localhost] (1/1) localhost is running on other [May 23 15:34:16] INFO [localhost] Scanning vulnerabilities... [May 23 15:34:16] INFO [localhost] Scanning vulnerable OS packages... [May 23 15:34:26] INFO [localhost] (1/2) Scanned mysql-community-release-el6-5 -> el6-7 : [] [May 23 15:34:26] INFO [localhost] (2/2) Scanned qemu-guest-agent-0.12.1.2-2.503.el6 -> 0.12.1.2-2.503.el6_9.3 : [CVE-2016-9603 CVE-2017-2633 CVE-2017-7980 CVE-2017-7718] One Line Summary ================ localhost centos6.9 4 CVEs 2 updatable packages To view the detail, vuls tui is useful. To send a report, run vuls report -h. |
・レポートの確認
※shortバージョン
ひええええ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
vuls $ vuls report -format-short-text -cvedb-path=$PWD/cve.sqlite3 --lang=ja [May 23 15:35:35] INFO [localhost] Validating config... [May 23 15:35:35] INFO [localhost] cve-dictionary: /home/vuls/cve.sqlite3 [May 23 15:35:35] INFO [localhost] Loaded: /home/vuls/results/2017-05-23T15:34:16+09:00 localhost (centos6.9) ===================== Total: 4 (High:0 Medium:0 Low:1 ?:3) 2 updatable packages CVE-2017-7718 2.1 (Low) QEMU の hw/display/cirrus_vga_rop.h におけるサービス運用妨害 (DoS) の脆弱性 http://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-003187.html https://access.redhat.com/security/cve/CVE-2017-7718 qemu-guest-agent-0.12.1.2-2.503.el6 -> qemu-guest-agent-0.12.1.2-2.503.el6_9.3 Confidence: 95 / ChangelogExactMatch ~省略~ |
・fullバージョン
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 |
vuls $ vuls report -format-full-text -cvedb-path=$PWD/cve.sqlite3 --lang=ja [May 23 15:36:35] INFO [localhost] Validating config... [May 23 15:36:35] INFO [localhost] cve-dictionary: /home/vuls/cve.sqlite3 [May 23 15:36:35] INFO [localhost] Loaded: /home/vuls/results/2017-05-23T15:34:16+09:00 localhost (centos6.9) ===================== Total: 4 (High:0 Medium:0 Low:1 ?:3) 2 updatable packages CVE-2017-7718 ------------- Score 2.1 (Low) Vector (AV:L/AC:L/Au:N/C:N/I:N/A:P) Title QEMU の hw/display/cirrus_vga_rop.h におけるサービス運用妨害 (DoS) の脆弱性 Description QEMU (別名 Quick Emulator) の Thw/display/cirrus_vga_rop.h には、サービス運用妨害 (境界外読み取りおよび QEMU プロセスクラッシュ) 状態にされる脆弱性が存在します。 https://cwe.mitre.org/data/definitions/.html (JVN) http://jvndb.jvn.jp/ja/cwe/.html JVN http://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-003187.html NVD https://nvd.nist.gov/vuln/detail/CVE-2017-7718 MITRE https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7718 CVE Details http://www.cvedetails.com/cve/CVE-2017-7718 CVSSv2 Clac https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=CVE-2017-7718 CVSSv3 Clac https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?name=CVE-2017-7718 RHEL-CVE https://access.redhat.com/security/cve/CVE-2017-7718 Package qemu-guest-agent-0.12.1.2-2.503.el6 -> qemu-guest-agent-0.12.1.2-2.503.el6_9.3 Confidence 95 / ChangelogExactMatch CVE-2016-9603 ~省略~ |
・TUIモード
Vulsにはスキャン結果の詳細を参照できるイカしたTUI(Terminal-Based User Interface)が付属しているっ。
1 |
vuls $ vuls tui |
イケてる。
とりあえずローカルはscan出来た。
脆弱性あるな…
■リモート先をvuls scanしてみる
※リモート先(適当な検証環境)に設定しておくもの
・yum-plugin-changelogをyumでインストール
・vulsユーザを作り、NOPASSにすること
上記の設定が出来たら
vulsサーバからリモート先にsshできるように設定する。
(ここはansible化しなければならない!)
・config.tomlに追記
1 2 3 4 5 6 7 8 9 10 11 12 |
vuls $ cat config.toml [servers] [servers.localhost] host = "localhost" port = "local" [servers.xx-xxx-xx-xx] host = "xx.xxx.xx.xx" port = "22" user = "adachinpo" keyPath = "/home/vuls/.ssh/id_rsa" |
・GIFで見てみよう
slack通知方法は以下を確認してください。
■まとめ
Vuls開発者さんとOutback!
来週はアスカンです!エンジニアはマストで行きましょう!#アスカン #Vuls pic.twitter.com/NLFFBmQJv4— adachin👾SRE (@adachin0817) April 12, 2018
とりあえずローカルとリモート先もscan出来たので、
次回はslackなりメールに通知する方法をブログします。
ちなみにdocker vulsは一瞬で立ち上がるので驚きの速さ!
他にもスキャン結果をビボットテーブルのように分析可能にする
Web UI(VulsRepo)もあるので試してみます。
dockerでローカル開発環境作ったので試してくだせえ!
0件のコメント