debian9で脆弱性スキャナー使ってみた

2018年9月10日

パッケージじゃなきゃやだ

linuxで使える脆弱性スキャナーを探していると、vulsが結構ありました。しかしながら、aptでインストールする方法はなく、パスを通したりしないといけないので、管理的に汚いと思い(数カ月後の自分がアンインストールの方法を知っているとは思えない)どうにかして、パッケージでできないかなぁと探していました。debian buster sid のレポジトリには登録されているので、これを利用したいと思います。ただし、レポジトリをシステムに追加することは行いません。

debian buster sid のパッケージをダウンロード

vulsを利用するためには

が必要です。debian次期リリース版にパッケージ化されていました。これをgdebi で依存関係を解決しつつインストールします。
gdebiをインストールします。

<br />
sudo apt install gdebi<br />

次にパッケージをダウンロードします。x86 64bitであるならば、アーキテクチャはamd64を選択します。

日本のダウンロードリンクを取得します。その後、サーバー内でwgetを利用し、パッケージをダウンロードします。

<br />
wget http://ftp.jp.debian.org/debian/pool/main/g/go-cve-dictionary/go-cve-dictionary_0.1.1+git20180404.0.4ee71e8-1_amd64.deb<br />
wget http://ftp.jp.debian.org/debian/pool/main/v/vuls/vuls_0.4.2+git20180531.0.399a087-2_amd64.deb<br />
wget http://ftp.jp.debian.org/debian/pool/main/g/goval-dictionary/goval-dictionary_0.0~git20180502.0.55b7f72-1_amd64.deb<br />

パッケージをインストールする

go-cve-dictionaryをインストールします。

<br />
user@hoge:~$ sudo gdebi go-cve-dictionary_0.1.1+git20180404.0.4ee71e8-1_amd64.deb<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
Reading state information... Done</p>
<p>builds a local copy of the NVD/JVN<br />
 go-cve-dictionary is tool to build a local copy of the NVD<br />
 (National Vulnerabilities Database) and the Japanese JVN, which contain<br />
 security vulnerabilities according to their CVE identifiers including<br />
 exhaustive information and a risk score. The local copy is generated in<br />
 sqlite format, and the tool has a server mode for easy querying.<br />
ソフトウェアパッケージをインストールしますか? [y/N]:y<br />
以前に未選択のパッケージ go-cve-dictionary を選択しています。<br />
(データベースを読み込んでいます ... 現在 224143 個のファイルとディレクトリがインストールされています。)<br />
go-cve-dictionary_0.1.1+git20180404.0.4ee71e8-1_amd64.deb を展開する準備をしています ...<br />
go-cve-dictionary (0.1.1+git20180404.0.4ee71e8-1) を展開しています...<br />
go-cve-dictionary (0.1.1+git20180404.0.4ee71e8-1) を設定しています ...<br />

vulsをインストールします。

<br />
user@hoge:~$ sudo gdebi vuls_0.4.2+git20180531.0.399a087-2_amd64.deb<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
Reading state information... Done</p>
<p>Vulnerability scanner for Linux/FreeBSD, agentless, written in Go<br />
 This is scanner which checks the package inventory against a local copy of<br />
 the National Vunerabilities Database (NVD) of vulnerabilities according to<br />
 their CVE (Common Vulnerabilities and Exposures) indentifiers. The backends<br />
 supports a couple of OSs (Debian, RHEL, CentOS, Amazon Linux). Scanning servers<br />
 over the network is possible.<br />
ソフトウェアパッケージをインストールしますか? [y/N]:y<br />
以前に未選択のパッケージ vuls を選択しています。<br />
(データベースを読み込んでいます ... 現在 224148 個のファイルとディレクトリがインストールされています。)<br />
vuls_0.4.2+git20180531.0.399a087-2_amd64.deb を展開する準備をしています ...<br />
vuls (0.4.2+git20180531.0.399a087-2) を展開しています...<br />
vuls (0.4.2+git20180531.0.399a087-2) を設定しています ...<br />
man-db (2.7.6.1-2) のトリガを処理しています ...<br />

goval-dictionaryをインストールします。

<br />
user@hoge:~$ sudo gdebi goval-dictionary_0.0~git20180502.0.55b7f72-1_amd64.deb<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
Reading state information... Done</p>
<p>Tools to create DB of data written in OVAL<br />
 This is tool to build a local copy of the OVAL(Open Vulnerability and<br />
 Assessment Language).<br />
 .<br />
 The local copy is generated in sqlite format, and the tool has a server<br />
 mode for easy querying.<br />
ソフトウェアパッケージをインストールしますか? [y/N]:y<br />
以前に未選択のパッケージ goval-dictionary を選択しています。<br />
(データベースを読み込んでいます ... 現在 224157 個のファイルとディレクトリがインストールされています。)<br />
goval-dictionary_0.0~git20180502.0.55b7f72-1_amd64.deb を展開する準備をしています ...<br />
goval-dictionary (0.0~git20180502.0.55b7f72-1) を展開しています...<br />
goval-dictionary (0.0~git20180502.0.55b7f72-1) を設定しています ...<br />

インストールが終わると、コマンドが利用できるようになります。

<br />
user@hoge:~$ go-cve-dictionary<br />
Usage: go-cve-dictionary &amp;lt;flags&amp;gt; &amp;lt;subcommand&amp;gt; &amp;lt;subcommand args&amp;gt;</p>
<p>Subcommands:<br />
        commands         list all command names<br />
        flags            describe all known top-level flags<br />
        help             describe subcommands and their syntax</p>
<p>Subcommands for fetchjvn:<br />
        fetchjvn         Fetch Vulnerability dictionary from JVN</p>
<p>Subcommands for fetchnvd:<br />
        fetchnvd         Fetch Vulnerability dictionary from NVD</p>
<p>Subcommands for server:<br />
        server           Start CVE dictionary HTTP server</p>
<p>Use &amp;quot;go-cve-dictionary flags&amp;quot; for a list of top-level flags</p>
<p>user@hoge:~$ vuls<br />
Usage: vuls &amp;lt;flags&amp;gt; &amp;lt;subcommand&amp;gt; &amp;lt;subcommand args&amp;gt;</p>
<p>Subcommands:<br />
        commands         list all command names<br />
        flags            describe all known top-level flags<br />
        help             describe subcommands and their syntax</p>
<p>Subcommands for configtest:<br />
        configtest       Test configuration</p>
<p>Subcommands for discover:<br />
        discover         Host discovery in the CIDR</p>
<p>Subcommands for history:<br />
        history          List history of scanning.</p>
<p>Subcommands for report:<br />
        report           Reporting</p>
<p>Subcommands for scan:<br />
        scan             Scan vulnerabilities</p>
<p>Subcommands for tui:<br />
        tui              Run Tui view to analyze vulnerabilities</p>
<p>Use &amp;quot;vuls flags&amp;quot; for a list of top-level flags</p>
<p>user@hoge:~$ goval-dictionary<br />
Usage: goval-dictionary &amp;lt;flags&amp;gt; &amp;lt;subcommand&amp;gt; &amp;lt;subcommand args&amp;gt;</p>
<p>Subcommands:<br />
        commands         list all command names<br />
        flags            describe all known top-level flags<br />
        help             describe subcommands and their syntax</p>
<p>Subcommands for fetch-alpine:<br />
        fetch-alpine     Fetch Vulnerability dictionary from Alpine secdb</p>
<p>Subcommands for fetch-amazon:<br />
        fetch-amazon     Fetch Vulnerability dictionary from Amazon ALAS</p>
<p>Subcommands for fetch-debian:<br />
        fetch-debian     Fetch Vulnerability dictionary from Debian</p>
<p>Subcommands for fetch-oracle:<br />
        fetch-oracle     Fetch Vulnerability dictionary from Oracle</p>
<p>Subcommands for fetch-redhat:<br />
        fetch-redhat     Fetch Vulnerability dictionary from RedHat</p>
<p>Subcommands for fetch-suse:<br />
        fetch-suse       Fetch Vulnerability dictionary from SUSE</p>
<p>Subcommands for fetch-ubuntu:<br />
        fetch-ubuntu     Fetch Vulnerability dictionary from Ubuntu</p>
<p>Subcommands for select:<br />
        select           Select from DB</p>
<p>Subcommands for server:<br />
        server           Start OVAL dictionary HTTP server</p>
<p>Use &amp;quot;goval-dictionary flags&amp;quot; for a list of top-level flags<br />

vulsの設定を行う

vulsがスキャンするためには設定ファイルが必要です。以下のファイルを作成してください。

<br />
user@hoge:~$ cat /home/user/config.toml<br />
[servers]</p>
<p>[servers.localhost]<br />
host = &quot;localhost&quot;<br />
port = &quot;local&quot;<br />

cveリストを取得する

脆弱性の判断をするための一覧をダウンロードします。次のコマンドでダウンロードできます。 -latestは最近、 -last2yは今から2年前までの一覧を取得します。

  • go-cve-dictionary fetchjvn -last2y
  • go-cve-dictionary fetchjvn -latest

go-cve-dictionary fetchjvn -last2yを実行してみます。

<br />
user@hoge:~$ go-cve-dictionary fetchjvn -last2y<br />
[Sep  2 17:56:45]  INFO Fetching CVE information from JVN.<br />
[Sep  2 17:56:45]  INFO Fetching... http://jvndb.jvn.jp/ja/rss/years/jvndb_2018.rdf<br />
[Sep  2 17:56:45]  INFO Fetching... http://jvndb.jvn.jp/ja/rss/jvndb_new.rdf<br />
[Sep  2 17:56:45]  INFO Fetching... http://jvndb.jvn.jp/ja/rss/jvndb.rdf<br />
[Sep  2 17:56:45]  INFO Fetching... http://jvndb.jvn.jp/ja/rss/years/jvndb_2017.rdf<br />
 4 / 4 [================================================================================================] 100.00% 9s<br />
[Sep  2 17:56:55]  INFO Fetched 19563 CVEs<br />
[Sep  2 17:56:57]  INFO Inserting JVN into DB (sqlite3).<br />
[Sep  2 17:56:57]  INFO Inserting fetched CVEs...<br />
 19746 / 19746 [=====================================================================================] 100.00% 1m31s<br />
[Sep  2 17:58:29]  INFO Refreshed 19317 Jvns.<br />

cve.sqlite3がダウンロードされた、脆弱性の一覧です。

debian9のOVALを取得する

次のコマンドで取得することができます。

<br />
user@hoge:~$ goval-dictionary fetch-debian 9<br />
INFO[09-02|18:15:13] Fetching...                              URL=https://www.debian.org/security/oval/oval-definitions-stretch.xml<br />
INFO[09-02|18:15:18] Finished to fetch OVAL definitions.<br />
INFO[09-02|18:15:22] Fetched                                  URL=https://www.debian.org/security/oval/oval-definitions-stretch.xml OVAL definitions=18007<br />
INFO[09-02|18:15:23] Refreshing...                            Family=debian Version=9<br />

システムをスキャンする。

次のコマンドで脆弱性のスキャンができます。

<br />
user@hoge:~$ vuls scan<br />
[Sep  2 18:02:21]  INFO [localhost] Start scanning<br />
[Sep  2 18:02:21]  INFO [localhost] config: /home/user/config.toml<br />
[Sep  2 18:02:21]  INFO [localhost] Validating config...<br />
[Sep  2 18:02:21]  INFO [localhost] Detecting Server/Container OS...<br />
[Sep  2 18:02:21]  INFO [localhost] Detecting OS of servers...<br />
[Sep  2 18:02:21]  INFO [localhost] (1/1) Detected: localhost: debian 9.5<br />
[Sep  2 18:02:21]  INFO [localhost] Detecting OS of containers...<br />
[Sep  2 18:02:21]  INFO [localhost] Detecting Platforms...<br />
[Sep  2 18:02:32]  INFO [localhost] (1/1) localhost is running on other<br />
[Sep  2 18:02:32]  INFO [localhost] Scanning vulnerabilities...<br />
[Sep  2 18:02:32]  INFO [localhost] Scanning vulnerable OS packages...<br />
[Sep  2 18:02:32]  INFO [localhost] apt-get update...</p>
<p>One Line Summary<br />
================<br />
localhost       debian9.5       2122 installed, 0 updatable</p>
<p>To view the detail, vuls tui is useful.<br />
To send a report, run vuls report -h.<br />

スキャン結果を出力する

次のコマンドを実行します

<br />
user@hoge:~$ vuls report<br />
[Sep  2 18:16:14]  INFO [localhost] Validating config...<br />
[Sep  2 18:16:14]  INFO [localhost] cve-dictionary: /home/user/cve.sqlite3<br />
[Sep  2 18:16:14]  INFO [localhost] oval-dictionary: /home/user/oval.sqlite3<br />
[Sep  2 18:16:14]  INFO [localhost] Loaded: /home/user/results/2018-09-02T18:02:32+09:00<br />
[Sep  2 18:16:14]  INFO [localhost] Fill CVE detailed information with OVAL<br />
DBUG[09-02|18:16:14] Opening DB.                              db=sqlite3<br />
DBUG[09-02|18:16:14] Migrating DB.                            db=sqlite3<br />
DBUG[09-02|18:16:14] Opening DB.                              db=sqlite3<br />
DBUG[09-02|18:16:14] Migrating DB.                            db=sqlite3<br />
[Sep  2 18:16:14]  INFO [localhost] OVAL is fresh: debian 9.5<br />
DBUG[09-02|18:16:14] Opening DB.                              db=sqlite3<br />
DBUG[09-02|18:16:14] Migrating DB.                            db=sqlite3<br />
[Sep  2 18:16:22]  INFO [localhost] Fill CVE detailed information with CVE-DB</p>
<p>localhost (debian9.5)<br />
=====================<br />
Total: 0 (High:0 Medium:0 Low:0 ?:0)    2122 installed, 0 updatable</p>
<p>No CVE-IDs are found in updatable packages.<br />
2122 installed, 0 updatable<br />

脆弱性はありませんでした。

まとめ

debian9に無いパッケージをインストールしましたが、うまく動かすことができました。ちなみにですが、アンインストールはaptでできます。

apt purge vuls