Help us understand the problem. What is going on with this article?

Vulsでowasp dependency-checkを使う

More than 3 years have passed since last update.

本ページについて

VulsがOWASP Dependency Checkのスキャンに対応しているので、その例を示すためのページです。

2016/11時点で、"Experimental"となっています。

Usage: Integrate with OWASP Dependency Check to Automatic update when the libraries are updated (Experimental)

概要

VulsとOWASP Dependency Checkを同じサーバで稼働させます。

  • OWASP関連は、Vulsで利用する前提で /opt/vuls/owasp に配置します。
    • 実際は、スキャン結果のXMLさえVulsで読めれば、実行者や配置場所はどうでもいいです。

対象サーバでやることは以下の通りです。

  • Vulsをインストールする
  • OWASP Dependency Checkを入れる
  • OWASP Dependency Checkでスキャンする
  • Vulsのconfigに、OWASP Dependency CheckのXML指定を書く
  • Vulsでスキャンする

実作業

Vulsをインストールする

VulsのREADMEを参照してください。

詳細は割愛しますが、以下のようにするのが良いと思われます。

  • インストール先は /opt/vuls とする
    • 最低限 Otherの権限は落とす(chmod 640等)

OWASP Dependency Checkを入れる

OWASP Dependency Checkのサイトを参照してください。

概要のみ記載します。

  • JREをインストールする
    • 各ディストリビューションのパッケージを利用するのが、アップデート関連を含めて、楽です。
  • 上記サイトから、CommandLine版をダウンロードする
    • 2016/11時点では、[Quick Download][Command Line]のリンクから落とすのが、楽です。
  • /opt/vuls 以下にダウンロードしたファイルを展開することで、Dependency Checkは以下のPATHで使えるようになります。
    • /opt/vuls/owasp/dependency-check/dependency-check.sh
    • 初回のスキャンは、ものすごく時間掛かります。BEERでも飲みながら待ちましょう。

OWASP Dependency Checkでスキャンする

XMLで出力する必要がある為、--format XML , --out のオプションを利用します。

$ ./dependency-check.sh --format XML --out <XML_OUTPUT_FILE_PATH> --project <PROJ_NAME> -scan <CODE_DIR_PATH>

例えば、hogehugaプロジェクトで、/opt/codes/hogehoge 以下にソース群がある場合は、以下のような感じです。

[vuls@~]$ ./owasp/dependency-check/dependency-check.sh --format XML --project hogehuga -scan /opt/codes/hogehoge --out /opt/vuls/dependency-check-report.xml

これにより /opt/vuls/dependency-check-report.xml が生成されます。

Vulsのconfigに、OWASP Dependency CheckのXML指定を書く

ローカルスキャンの一環として書いてしまいます。

[servers]

[servers.192.168.0.10]
host = "192.168.0.10"
user = "vuls"
keyPath = "/opt/vuls/ssh_keys/local.id_rsa"
dependencyCheckXMLPath = "/opt/vuls/dependency-check-report.xml"

Vulsでスキャンする

いつも通りのスキャンを実施します。

[vuls@~]$ vuls scan -config=./config.toml -cve-dictionary-dbpath=/opt/vuls/cve.sqlite3 -report-json

これで、CPE指定した時と同じように検知結果が出ます。

検知テストをしてみる

古いApache Strutsをチェックし、実際にどのように表示されるかの確認をしてみた。

概要

Apache Strutsを実際に利用するわけではないので、ダウンロードして展開し、そのままスキャンをしてみます。

  • ApacheStrutsを /opt/vuls/tmp/以下に展開
  • OWASP Dependency Checkを実行し、XMLを生成
  • vulsのconfig.tomlを修正し、当該XMLを含めて jsonの生成
  • VulsRepoで閲覧

1.Apache Strustsを準備する

今の時点で古い、Apache Strutsをダウンロードして、展開します。

$ mkdir /opt/vuls/tmp; cd /opt/vuls/tmp
$ wget https://dist.apache.org/repos/dist/release/struts/2.3.20.1/struts-2.3.20.1-all.zip
$ unzip struts-2.3.20.1-all.zip
$ ls /opt/vuls/tmp
struts-2.3.20.1  struts-2.3.20.1-all.zip
$

2.OWASP Dependency Checkをする

まずは、スキャンできるかを確認する為、HTMLで出力してみましょう。

$ /opt/vuls/owasp/dependency-check/bin/dependency-check.sh --project struts -scan ./ --out /opt/vuls/tmp/struts-report.html
$ w3m /opt/vuls/tmp/struts-report.html

2016/11/07時点で、Vulnerable Dependencies:50、Vulnerbilities Found:556、となっている。

次はVulsで利用できるように XML で出力します。

$ /opt/vuls/owasp/dependency-check/bin/dependency-check.sh --format XML --project struts -scan ./ --out /opt/vuls/tmp/struts-report.xml
$ ls /opt/vuls/tmp
struts-2.3.20.1  struts-2.3.20.1-all.zip  struts-report.html  struts-report.xml
$

3.Vulsでスキャンする

利用するconfig.tomlを修正します。

$ vi /opt/vuls/config.toml
# 例えば以下のような感じです
[default]
port = "22"
user = "vuls"

[servers]
[servers.vuls-servre]
host = "192.168.0.11"
keyPath = "/opt/vuls/.ssh/id_rsa"
dependencyCheckXMLPath = "/opt/vuls/tmp/struts-report.xml"

prepareして念のため確認する。

$ vuls prepare -config /opt/vuls/config.toml
INFO[0000] Loaded from OWASP Dependency Check XML: vuls-servre
INFO[0000] Start Preparing (config: config-owasp.toml)
[MM D hh:mm:ss]  INFO [localhost] Detecting OS...
[MM D hh:mm:ss]  INFO [localhost] Detecting OS of servers...
[MM D hh:mm:ss]  INFO [localhost] (1/1) Detected: vuls-servre: centos 6.8
[MM D hh:mm:ss]  INFO [localhost] Detecting OS of containers...
[MM D hh:mm:ss]  INFO [localhost] Checking sudo configuration...
[MM D hh:mm:ss]  INFO [vuls-servre] sudo ... OK
[MM D hh:mm:ss]  INFO [localhost] No need to install dependencies
$

あとは通常通りスキャンする。

$ vuls scan -config=./config.toml -cve-dictionary-dbpath=/opt/vuls/cve.sqlite3 -report-json

4.VulsRepoで閲覧する

いつも通りVulsRepoを見ると、Packagesでcpeなものが追加されているはずです。これは OWASP Dependency Checkの結果を取り込んだものです。

dependencyCheckXMLPathの有無で異なる結果を、画像で示します。

  • 20161105_1240の物は、OWASPの結果を入れていないもの
  • 20161107_1040の物は、OWASPのXMLを読ませたもの
    • ScanTimeは適当です。
  • 赤線を引いてある cpe:/a:...が、DependencyCheckで追加されたもの

owasp-dependencyCheck_scan.png

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away