• このエントリーをはてなブックマークに追加

vulsとGo言語をインストールしてみた~CentOS7編~

  • このエントリーをはてなブックマークに追加

security
zaco muraです。

今何かと話題らしいvuls。弊ブログでもZacoUshio氏がいろいろと記事を書いています。

話題の脆弱性検知ツールVULSのインストール手順、使用方法の紹介(MAC版)
vuls初歩的なエラーへの対処まとめ

ということで、Linuxサーバエンジニアの私もさっそく使ってみました。

スポンサーリンク
Sponsords Link

環境

・CentOS Linux release 7.1.1503 (Core)
・VMware ESX上の仮想マシン
・プロキシー環境(インターネットに直結していない)
・自分にスキャン

Go言語のインストール

公式HPの英語版にAmazonLinuxの手順があったのでそれを見ながら実施。

まず関連するパッケージをインストールします。

[root@centos7 ~]# yum install sqlite git gcc
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.usonyx.net
 * epel: epel.mirror.net.in
 * extras: ftp.iij.ad.jp
 * updates: centos.usonyx.net
パッケージ sqlite-3.7.17-8.el7.x86_64 はインストール済みか最新バージョンです
パッケージ git-1.8.3.1-6.el7_2.1.x86_64 はインストール済みか最新バージョンです
パッケージ gcc-4.8.5-4.el7.x86_64 はインストール済みか最新バージョンです
何もしません

全部入ってました。

次にGo言語のインストールです。こちらはソースからインストールします。
まずはソースコードをwgetします。

[root@centos7 ~]# wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 84799480 (81M) [application/octet-stream]
`go1.6.linux-amd64.tar.gz' に保存中

100%[============================================================================================================>] 84,799,480  11.1MB/s 時間 9.1s

2016-05-10 08:52:14 (8.90 MB/s) - `go1.6.linux-amd64.tar.gz' へ保存完了 [84799480/84799480]

次にコンパイルします。/usr/local/配下にインストールされます。

[root@centos7 ~]# tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
[root@centos7 ~]#

特にエラーが出なければ良さそうです。

次に環境変数の類を設定します。公式HPではそれ用のファイルを作ってましたが、何となく.bash_profileに書きます。

[root@centos7 ~]# vim .bash_profile
### ~~~前略~~~~
# User specific environment and startup programs

PATH=$PATH:$HOME/bin
###### 追記ここから #######
### For Golang
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
###### 追記ここまで #######

そいつをsourceして読み込みます。

[root@centos7 ~]# source .bash_profile
[root@centos7 ~]#

エラーが出なければOKです。

ではHelloWorldしてみます。

### プログラム作成
[root@centos7 ~]# vim hello.go
#--------------------------------
package main

import "fmt"

func main() {
    fmt.Printf("hello world!!!\n")
}
#---------------------------------

### 実行
[root@centos7 ~]# go run hello.go
hello world!!!

うまくいったようです。

vulsインストール

手順としては、ざっくり

・関連するディレクトリの作成
・脆弱性(CVE)情報取得コマンドのインストール
・vulsのインストール

このようになります。

まず最初に関連するディレクトリを作成します。

[root@centos7 ~]# mkdir -p /var/log/vuls
[root@centos7 ~]# ll -d /var/log/vuls/
drwxr-xr-x 2 root root 6  5月 10 08:44 /var/log/vuls/
[root@centos7 ~]#
[root@centos7 ~]# mkdir -p /root/vuls
[root@centos7 ~]# ll -d /root/vuls/
drwxr-xr-x 2 root root 6  5月 10 08:45 /root/vuls/

脆弱性(CVE)情報取得コマンドのインストールをします。

[root@centos7 ~]# go get github.com/kotakanbe/go-cve-dictionary
[root@centos7 ~]#

試しに実行してみます。

[root@centos7 ~]# go-cve-dictionary
Usage: go-cve-dictionary <flags> <subcommand> <subcommand args>

Subcommands:
        commands         list all command names
        flags            describe all known top-level flags
        help             describe subcommands and their syntax

Subcommands for fetchjvn:
        fetchjvn         Fetch Vulnerability dictionary from JVN

Subcommands for fetchnvd:
        fetchnvd         Fetch Vulnerability dictionary from NVD

Subcommands for loadjvn:
        loadjvn          Start CVE dictionary HTTP server

Subcommands for server:
        server           Start CVE dictionary HTTP server


Use "go-cve-dictionary flags" for a list of top-level flags

うまく行っているようです。

次にこれを使ってCVE情報を取得します。

[root@centos7 ~]# for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done
 0 / 1 [-------------------------------------------------------------------------------------------------------------------------------------]   0.00%[May 10 09:14:30]  INFO Fetching... https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2002.xml.gz
[May 10 09:16:38] ERROR Failed to fetch cve data from NVD. err: [HTTP error. errs: [Get https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2002.xml.gz: dial tcp 129.6.13.177:443: getsockopt: connection timed out], url: https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2002.xml.gz]
 0 / 1 [-------------------------------------------------------------------------------------------------------------------------------------]   0.00%[May 10 09:16:38]  INFO Fetching... https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2003.xml.gz
[May 10 09:18:45] ERROR Failed to fetch cve data from NVD. err: [HTTP error. errs: [Get https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2003.xml.gz: dial tcp 129.6.13.177:443: getsockopt: connection timed out], url: https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2003.xml.gz]

エラーが出ました。何となく、URLにアクセス出来ないよ的なことを言ってる雰囲気です。
この環境ではインターネットに直結していないため、プロキシーを使うオプションを探します。ソースを見ると“-http-proxy=xxxx”というオプションが使えそうです。

そのオプションを使って再度実行します。

[root@centos7 ~]# for i in {2002..2016}; do go-cve-dictionary fetchnvd -http-proxy=http://proxy-server:8080 -years $i; done
 0 / 1 [-------------------------------------------------------------------------------------------------------------------------------------]   0.00%[May 10 12:21:25]  INFO Fetching... https://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2002.xml.gz
[May 10 12:21:31]  INFO Fetched 6721 CVEs
[May 10 12:21:31]  INFO Opening DB. datafile: /root/cve.sqlite3
[May 10 12:21:31]  INFO Migrating DB
[May 10 12:21:31]  INFO Inserting CVEs...

今度はうまく行きました。

次にHTTPサーバとして動作させます。(vulsコマンドは自分自身から脆弱性情報を取得する?)

### 長い表示が出るので、/dev/nullにリダイレクト
[root@centos7 ~]# curl http://127.0.0.1:1323/cves/CVE-2014-0160 >/dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 18163    0 18163    0     0  1737k      0 --:--:-- --:--:-- --:--:-- 1773k

ちゃんと取れているようです。

いよいよ本題のvulsをインストールします。

[root@centos7 ~]# go get github.com/future-architect/vuls
[root@centos7 ~]#

エラーが出ないのでインストールできたようです。
ちゃんと動くかテストしてみます。

[root@centos7 ~]# vuls
Usage: vuls <flags> <subcommand> <subcommand args>

Subcommands:
        commands         list all command names
        flags            describe all known top-level flags
        help             describe subcommands and their syntax

Subcommands for discover:
        discover         Host discovery in the CIDR

Subcommands for prepare:
        prepare          Install required packages to scan.
                                CentOS: yum-plugin-security, yum-plugin-changelog
                                Amazon: None
                                RHEL:   TODO
                                Ubuntu: None



Subcommands for scan:
        scan             Scan vulnerabilities

Subcommands for tui:
        tui              Run Tui view to anayze vulnerabilites


Use "vuls flags" for a list of top-level flags
[root@centos7 ~]#

ちゃんと動いたようです。

次にスキャンを実行するための設定ファイルを作ります。
設定ファイルは最初の手順で作成した作業ディレクトリに置いておきます。

### 作業ディレクトリにcd
[root@centos7 ~]# cd vuls/
[root@centos7 vuls]# pwd
/root/vuls

### 設定ファイルの作成
[root@centos7 vuls]# vim config.toml
[servers.127-0-0-1]
host    =       "127.0.0.1"
port    =       "22"
user    =       "zacomura"
keyPath =       "/home/zacomura/.ssh/id_rsa"

いよいよ実行しようかと思いましたが、vulsはsudoと鍵認証を使ったSSHが前提のようなので、その設定をします。

### 鍵の作成
# SSHログインするユーザにsu
[root@centos7 vuls]# su - zacomura

# 鍵の作成 (いろいろ聞かれるが、全部EnterでOK)
[zacomura@centos7 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zacomura/.ssh/id_rsa):
Created directory '/home/zacomura/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zacomura/.ssh/id_rsa.
Your public key has been saved in /home/zacomura/.ssh/id_rsa.pub.
The key fingerprint is:
b2:e1:ed:52:69:ad:f6:51:d3:c0:75:c1:68:bd:56:71 zacomura@centos7
The key's randomart image is:
[zacomura@centos7 ~]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


### sudoの設定
[zacomura@centos7 ~]$ exit
[root@centos7 vuls]# visudo
#---- 最終行に追記 ----
zacomura        ALL=(ALL)       ALL

これでvulsコマンドが使えるようになりました。
まずはprepareコマンドで必要なパッケージを準備します。

[root@centos7 vuls]# vuls prepare -ask-sudo-password
sudo password: ********
INFO[0002] Start Preparing (config: /root/vuls/config.toml)
[May 10 18:17:11]  INFO [localhost] Detecting OS...
[May 10 18:17:12]  INFO [localhost] (1/1) Successfully detected. 127-0-0-1: centos 7.1.1503
[May 10 18:17:12]  INFO [localhost] Installing...
[May 10 18:17:12]  INFO [127-0-0-1:912] Installing yum-plugin-security...
[May 10 18:17:13]  INFO [127-0-0-1:912] Ignored: yum-plugin-changelog already installed
[May 10 18:17:13]  INFO [localhost] Success

成功しました。
いよいよ準備が整いました。スキャンを実行します。

[root@centos7 vuls]# vuls scan -ask-sudo-password
sudo password: ********
INFO[0001] Start scanning (config: /root/vuls/config.toml)
[May 10 18:18:37]  INFO [localhost] Validating Config...
[May 10 18:18:37]  INFO [localhost] Detecting the type of OS...
[May 10 18:18:38]  INFO [localhost] (1/1) Successfully detected. 127-0-0-1: centos 7.1.1503
[May 10 18:18:38]  INFO [localhost] Scanning vulnerabilities...
[May 10 18:18:38]  INFO [localhost] Check required packages for scanning...
[May 10 18:18:38]  INFO [localhost] Scanning vulnerable OS packages...
[May 10 18:18:42] ERROR [127-0-0-1:912] Failed to scan vulnerable packages
[May 10 18:18:42] ERROR [localhost] Failed to scan. err: zacomura@127.0.0.1:912: Failed to parse yum --color=never check-update. err: Unknown format: 不 要になったパッケージ

あれ、なんか失敗しました。
見た感じyumで失敗してるっぽい。不要になったパッケージ?っていうのがあるとダメなのかな?

不要なパッケージを確認するコマンドを実行

[root@centos7 vuls]# package-cleanup --leaves
読み込んだプラグイン:fastestmirror
NetworkManager-glib-1.0.0-16.git20150121.b4ea599c.el7_1.x86_64
libertas-sd8686-firmware-20140213-0.3.git4164c23.el7.noarch
libertas-sd8787-firmware-20140213-0.3.git4164c23.el7.noarch
libertas-usb8388-firmware-20140213-0.3.git4164c23.el7.noarch
libicu-devel-50.1.2-15.el7.x86_64
libjpeg-turbo-devel-1.2.90-5.el7.x86_64
libnet-1.1.6-7.el7.x86_64
libpcap-devel-1.5.3-4.el7_1.2.x86_64
libpng-devel-1.5.13-7.el7_2.x86_64
libreswan-3.15-5.el7_1.x86_64
libsysfs-2.1.0-16.el7.x86_64
libxslt-devel-1.1.28-5.el7.x86_64

たくさん出てきたが、面倒なので何も考えず全部削除。。

[root@centos7 vuls]# yum erase NetworkManager-glib-1.0.0-16.git20150121.b4ea599c.el7_1.x86_64 libertas-sd8686-firmware-20140213-0.3.git4164c23.el7.noarch libertas-sd8787-firmware-20140213-0.3.git4164c23.el7.noarch libertas-usb8388-firmware-20140213-0.3.git4164c23.el7.noarchlibicu-devel-50.1.2-15.el7.x86_64 libjpeg-turbo-devel-1.2.90-5.el7.x86_64 libnet-1.1.6-7.el7.x86_64 libpcap-devel-1.5.3-4.el7_1.2.x86_64 libpng-devel-1.5.13-7.el7_2.x86_64 libreswan-3.15-5.el7_1.x86_64 libsysfs-2.1.0-16.el7.x86_64 libxslt-devel-1.1.28-5.el7.x86_64

これで不要なパッケージがなくなったか確認。

[root@centos7 vuls]# package-cleanup --leaves
読み込んだプラグイン:fastestmirror
libertas-usb8388-firmware-20140213-0.3.git4164c23.el7.noarch
libgcrypt-devel-1.5.3-12.el7_1.1.x86_64
libicu-devel-50.1.2-15.el7.x86_64
libxml2-devel-2.9.1-5.el7_1.2.x86_64
unbound-libs-1.4.20-19.el7.x86_64

まだ不要なパッケージがある。。。同じように何度か削除する。
5回ほど繰り返すと不要なパッケージがなくなりました。

[root@centos7 vuls]# package-cleanup --leaves
読み込んだプラグイン:fastestmirror
[root@centos7 vuls]# 

念のためyumコマンドでも確認。

[root@centos7 vuls]# yum check-update
読み込んだプラグイン:changelog, fastestmirror
Loading mirror speeds from cached hostfile
~~~~~ 中略 ~~~
不要になったパッケージ
bluez.x86_64                                                           5.23-4.el7                                                        base
    obex-data-server.x86_64                                            1:0.4.6-6.el7                                                     @base

まだあった。。。今度はこのパッケージを削除。

[root@centos7 vuls]# yum erase bluez.x86_64 obex-data-server.x86_64

これで今度こそ不要なパッケージがなくなったので、実行します。

[root@centos7 vuls]# vuls scan -ask-sudo-password
sudo password: ********
INFO[0001] Start scanning (config: /root/vuls/config.toml)
[May 10 18:39:45]  INFO [localhost] Validating Config...
[May 10 18:39:45]  INFO [localhost] Detecting the type of OS...
[May 10 18:39:46]  INFO [localhost] (1/1) Successfully detected. 127-0-0-1: centos 7.1.1503
[May 10 18:39:46]  INFO [localhost] Scanning vulnerabilities...
[May 10 18:39:46]  INFO [localhost] Check required packages for scanning...
[May 10 18:39:46]  INFO [localhost] Scanning vulnerable OS packages...
[May 10 18:39:52]  INFO [127-0-0-1:912] (1/252) Scanned ModemManager-glib-1.1.0-6.git20130913.el7 -> 1.1.0-8.git20130913.el7 : []
[May 10 18:39:54]  INFO [127-0-0-1:912] (2/252) Scanned NetworkManager-1.0.0-16.git20150121.b4ea599c.el7_1 -> 1:1.0.6-29.el7_2 : []

おお、今度はうまく動いてるっぽい。

しばらくスキャンに時間がかかるので待ちます。

CVE-2014-9680
-------------
Score           ?
NVD             https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9680
CVE Details     http://www.cvedetails.com/cve/CVE-2014-9680
RHEL-CVE        https://access.redhat.com/security/cve/CVE-2014-9680


[May 10 18:49:05]  INFO [localhost] Insert to DB...

最後、上記のように終われば成功のようです。

結果を確認してみます。

[root@centos7 vuls]# vuls tui

結果は以下の通り、全部で75の脆弱性が見つかりました。
※ちなみに、vimっぽくhjklで移動できるらしいけど、自分の環境だとうまくいかなかった。
centos7_vuls

感想

ということで、vulsをCentOS7にインストールしてみました。

使ってみた感想としては、手軽にスキャンできるし、脆弱性のスコアも表示されるので対応が必要/不要というのの判断がしやすくて良いなと思いました。

改善してほしい点(というか好みの問題)としては、サーバ運用者としてはsudoとか鍵認証とかが面倒なので笑、ログイン後rootにsuするようにrootパスワードの入力があったり、パスワード認証でのログインができたりしてくれると嬉しいなとは思いました。
(同じことはserverspecでも思いました。ただ、開発者と運用者の垣根が無くなりつつある昨今だと、そういうのが主流なのかな。。。)

以上です。

zaco mura

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link