本ページについて
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で追加されたもの
以上です。