cvs-search でオレオレ脆弱性診断 Web API を構築する 1

概要 – cve-search とは?

cve-search は直接APIを叩くのではなく自前で API 付きの脆弱性データベースを構築することで直接外部サイトへ負荷をかけたりすることなく利用できるようにとオープンソースで提供されている「オレオレ Web API 環境」だ。と思う。開発者は Wim Remes 氏らでここ3年くらいで開発されていた模様。python3 が動作する環境が必要となるが比較的簡単に利用でき、自社利用アプリなどの脆弱性をチェックし適切にアップデートしていくような用途に活用できるのではないでしょうか。

ゴリゴリとスクレイプするのも度が過ぎると負荷をかけてしまう可能性がありますし、ローカルに Web API があれば確かに便利だなと賛同するものです。また、個人的には Web + DB アプリケーションのお手本として勉強になりそうだということもあります。ソースコードは同氏の GitHub リポジトリからダウンロードできます。

今回は最近中古のVAIOにインストールして以来気に入っている Lubuntu 14.04 LTS を利用します。Ubuntu でも同じ手順でいけると思います。しかしそれにしても Lubuntu 使いやすい。

python3 は初めからインストールされているため、こういったセットアップも楽。たとえば、VMWare 環境なら VMWare Tools インストールすると思いますが、これもパッケージで用意されているので VMWare 環境の方は入れておくとよいでしょう。

$ sudo apt-get install open-vm-tools-lts-trusty-desktop 

インストール

サクっと、これだけです。lxml 関連のコンパイル失敗がありましたがそのくらいです。


$ sudo apt-get install mongodb redis-server python3-pip libxml2-dev lxml
$ sudo pip3 install -r requirements.txt 

トラブルシューティング

lxml のコンパイル失敗

コンパイルエラーが発生した。xmlversion.h が無いことが原因のようなので、 libxml2-dev パッケージをインストールしておけば良いと思った。


$ sudo pip3 install -r cve-search-master/requirements.txt
・・・
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/tmp/pip_build_root/lxml/src/lxml/includes -I/usr/include/python3.4m -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-3.4/src/lxml/lxml.etree.o -w

In file included from src/lxml/lxml.etree.c:239:0:

/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:14:31: fatal error: libxml/xmlversion.h: そのようなファイルやディレクトリはありません

 #include "libxml/xmlversion.h"

                               ^

compilation terminated.

/usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'bugtrack_url'

  warnings.warn(msg)

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-dkhpvzx0-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/lxml
Storing debug log for failure in /home/daisuke/.pip/pip.log

ちなみに、yum provides hoge に相当するコマンドは apt-file search hoge のようにして不足しているファイル hoge を探すことができます。


$ sudo apt-file search xmlversion.h
libxml2-dev: /usr/include/libxml2/libxml/xmlversion.h

が、しかし改善されない lxml 単体で試すも変わらず。


$ sudo pip3 install lxml

要は lxml が入ってれば良いわけなので、python3-lxml をパッケージインストールしたところ成功した。


$ sudo apt-get install python3-lxml

lxml がパースに失敗することがある

このように途中でインポートが失敗することがありました。これは lxml が分割してインポートする挙動をするようで分割の仕方が悪いとパースエラーになる模様。さくっとやり直しましょう。


[email protected]:~/ダウンロード/cve-search-master/sbin$ ./db_mgmt.py -p
Database population started
Year 2002 imported.
Year 2003 imported.
Year 2004 imported.
Year 2005 imported.
Year 2006 imported.
Year 2007 imported.
Year 2008 imported.
Year 2009 imported.
Year 2010 imported.
Year 2011 imported.
Year 2012 imported.
Year 2013 imported.
Traceback (most recent call last):
  File "/usr/lib/python3.4/xml/sax/expatreader.py", line 207, in feed
    self._parser.Parse(data, isFinal)
xml.parsers.expat.ExpatError: unclosed token: line 53861

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./db_mgmt.py", line 277, in 
    parser.parse(f)
  File "/usr/lib/python3.4/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python3.4/xml/sax/xmlreader.py", line 125, in parse
    self.close()
  File "/usr/lib/python3.4/xml/sax/expatreader.py", line 217, in close
    self.feed("", isFinal = 1)
  File "/usr/lib/python3.4/xml/sax/expatreader.py", line 211, in feed
    self._err_handler.fatalError(exc)
  File "/usr/lib/python3.4/xml/sax/handler.py", line 38, in fatalError
    raise exception
xml.sax._exceptions.SAXParseException: :538616:41: unclosed token

その他

ディスク容量どのくらい必要?

だいたい3GBくらいの模様。

・before


$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       111G  6.2G   99G   6% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           799M  1.2M  798M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M   28K  100M   1% /run/user

・after


$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       111G  8.6G   96G   9% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           799M  1.2M  798M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M   32K  100M   1% /run/user
スポンサーリンク

シェアする

フォローする

スポンサーリンク