skipfishで脆弱性チェック

date

Webアプリケーション向けセキュリティスキャナ

(さらさらっとメモ書き的に公開しようと思ってたら、3週間ぐらい公開ボタン押すの忘れてた....)

このテのツールは手を出したことがなかったので、これを機に試してみた。Googleさんが言うなら間違いない!!とはいえ、セキュリティスキャナとしては正確性よりも速度と簡便さを重視だとか。

グーグル、ウェブアプリの脆弱性検査ツール「skipfish」を公開:ニュース - CNET Japan

skipfish - Project Hosting on Google Code

入れてみよう

何も考えずにmakeすると

/Users/*****/*****/skipfish% make
cc -L/usr/local/lib/ -L/opt/local/lib skipfish.c -o skipfish -O3 -Wno-format -Wall -funsigned-char -g -ggdb -D_FORTIFY_SOURCE=0 -I/usr/local/include/ -I/opt/local/include/  \
           http_client.c database.c crawler.c analysis.c report.c -lcrypto -lssl -lidn -lz
http_client.c:39:18: error: idna.h: No such file or directory
http_client.c: In function ‘parse_url’:
http_client.c:277: warning: implicit declaration of function ‘idna_to_ascii_8z’
http_client.c:277: error: ‘IDNA_SUCCESS’ undeclared (first use in this function)
http_client.c:277: error: (Each undeclared identifier is reported only once
http_client.c:277: error: for each function it appears in.)
report.c: In function ‘copy_static_code’:
report.c:744: warning: passing argument 3 of ‘scandir’ from incompatible pointer type
make: *** [skipfish] Error 1

libidnがないよー、と怒られたのでportで検索。

/Users/ahomu/Documents/skipfish% port search libidn
libidn @1.15 (mail)
    international domain name library

p5-net-libidn @0.12 (perl)
    Perl bindings for GNU Libidn

Found 2 ports.

あったあった。上のだ。

/Users/*****/*****/skipfish% sudo port install libidn
Password:
--->  Computing dependencies for libidn
--->  Fetching libidn
--->  Attempting to fetch libidn-1.15.tar.gz from ftp://ftp.dti.ad.jp/pub/GNU/libidn
--->  Verifying checksum(s) for libidn
--->  Extracting libidn
--->  Configuring libidn
--->  Building libidn
--->  Staging libidn into destroot
--->  Installing libidn @1.15_0
--->  Activating libidn @1.15_0
--->  Cleaning libidn

オッケーオッケー。改めてmakeしてみます。

/opt/local/skipfish% make
cc -L/usr/local/lib/ -L/opt/local/lib skipfish.c -o skipfish -O3 -Wno-format -Wall -funsigned-char -g -ggdb -D_FORTIFY_SOURCE=0 -I/usr/local/include/ -I/opt/local/include/  \
           http_client.c database.c crawler.c analysis.c report.c -lcrypto -lssl -lidn -lz
report.c: In function ‘copy_static_code’:
report.c:744: warning: passing argument 3 of ‘scandir’ from incompatible pointer type

See dictionaries/README-FIRST to pick a dictionary for the tool.

Having problems with your scans? Be sure to visit:
http://code.google.com/p/skipfish/wiki/KnownIssues

今度こそmakeできたみたい。ちょっとエラー出てるけど、気にせずGOします。

辞書ファイル?

skipfish version 1.17b by <lcamtuf@google.com>
[-]  SYSTEM ERROR : Unable to open wordlist 'skipfish.wl'
    Stop location : load_keywords(), database.c:967
       OS message : No such file or directory

ためしたら辞書ファイル(wordlist)が読み込めないって怒られる。パス通ってないの? 言われてみればmakeした所にskipfish.wlなんて無いわけで、ためしに ./dictionaries/default.wlを ./skipfish.wl にコピー&リネームしてファイルを置いてみる。

れっつびぎん

skipfish version 1.17b by <lcamtuf@google.com>


Scan statistics
---------------

       Scan time : 0:06:43.0898
   HTTP requests : 55657 sent (138.26/s), 28327.33 kB in, 13121.99 kB out (102.62 kB/s) 
     Compression : 1107.49 kB in, 2483.20 kB out (38.31% gain)   
 HTTP exceptions : 1072 net errors, 0 proto errors, 351 retried, 722033 drops
 TCP connections : 1689 total (33.79 req/conn) 
  TCP exceptions : 0 failures, 22 timeouts, 1 purged
  External links : 227 skipped
    Reqs pending : 1416       

Database statistics
-------------------

          Pivots : 292 total, 52 done (17.81%)   
     In progress : 198 pending, 35 init, 7 attacks, 0 dict   
   Missing nodes : 2 spotted
      Node types : 2 serv, 95 dir, 5 file, 0 pinfo, 124 unkn, 67 par, 0 val
    Issues found : 13 info, 72 warn, 23 low, 33 medium, 0 high impact
       Dict size : 2102 words (103 new), 66 extensions, 181 candidates

スキャンを開始すると、延々と検査を続けます。一応リアルタイムに、どの程度のレベルの穴が見つかったかも見れますが、詳細は分からないので目安程度に眺めます。

放っておくと、このスキャン画面のまま延々とスキャンし続けます。適当なところでCtrl + Cを押すと、その時点の結果でレポートを生成してくれます。(スキャンはそこで終了になります)

結果はこんな感じで出力



脅威の程度に応じて、各セキュリティリスクを表示してレポートしてくれます。幸い、今回実験に使ったサイトでは高レベルの脅威はありませんでした。

結構楽しい

Google Codeのドキュメントに検出できる項目はリストアップされてますが、別途和訳を見つけたので、こちらを見ると良い感じです。

Skipfishで定義されているWebアプリに対するテスト一覧 » LandEscape Graphics

つい先日公開された1.17bをインストールしていましたが、今このエントリーを書いている最中に今のバージョンを確認したら、すでに1.31bになっていました。意欲的にバージョン番号を進めているようで、公開後のフィードバックを早速反映しているようです。



barchartPopular

rssRecently