Mac OS X (10.6.8) に port で skipfish をインストールして使う

はじめに

skipfishは、Googleが公開しているWebアプリケーションの脆弱性スキャナMacPortsで入手可能。

インストール

まずは、

sudo port selfupdate

で、MacPorts自身をアップデート。

いちおう、

port search skipfish

で確認し、

port variants skipfish

などでバリアント(オプション項目)も確認。

sudo port install skipfish

で、入手。

僕の環境の場合は、すでにMacPortsでインストールしていたものと衝突があったようで、エラーが出るときには、適宜、

sudo port uninstall HOGE
sudo port deactivate HOGE

などを駆使しつつ、衝突を解決する。

port installed

で確認。

基本

どこでもよいが、調査対象のディレクトリ付近で、_skipfishディレクトリ(名前は自由)を作り、パーミッションを777にする。このディレクトリが作業場所になる。

_skipfishパスにcdしてから

skipfish -o output -W /path/to/project/_skipfish/ http://example.com/

のようにする。このままやると、ちょっとびっくりするくらい時間がかかる。理由は、サイトから抽出したキーワードからURLを生成して、スキャンを行うからであるが、アプリケーションによると数時間かかるので、普段のチェックには向かない。

また重要なことであるが、サービス提供中のアプリケーションにかけると、たいへんな負荷なだけでなく、チェックというのは、いわば擬似的な攻撃なので、skipfishは、開発環境に向けてかける必要がある。

短くチェック

エラい時間がかかるが、skipfish自体は、Ctrl+cでいつでもチェックを中断し、その時点でのレポートを作成してくれる。

Ctrl+cとはちょっと違うが、ちょいとチェックしてみようかという場合は、サイトからキーワードを抽出せずにskipfishがデフォルトで持つ語彙を対象のチェックを行うことができる。

skipfish -S dictionaries/complete.wl -o output -W- http://example.com

こうすると、_skipfishのなかのdictionariesを参照してくれるので、かなり時間が短縮される。

というわけで、skipfishのなかから、dictionariesを移動する(絶対パスでskipfishのなかを指定してもいいとは思う)。

僕はMacportsで入れたのだが、

locate skipfishすると、

/opt/local/share/skipfishに入っていることが分かった。

ところが、なんの手違いか、そこにdictionariesディレクトリがない。

この状態で実行すると、

SYSTEM ERROR : Unable to open read-only wordlist 'dictionaries/complete.wl'.

みたいなエラーも出る。

仕方がないので、skipfishの配布場所に行って、もらってくる。

https://code.google.com/archive/p/skipfish/downloads

tar.gzを展開すると、dictionariesがあるので、以下の四つから適当なものを選んで_skipfishにいれる。

complete.wlが210,000程度の語彙で、以降減っていって、mediumが140,000、minimalが60,000程度の語彙となる(extemsion-onlyはたぶんいちばん軽い。ちなみにwlの中身をちらっと見ると、確かに語彙がずらずら並んでいる)。

目的の辞書のパスを指定してスキャンする。

skipfish -S minimal.wl -o output -W- http://example.com

ログインさせる場合はこんな感じ。

skipfish -S minimal.wl -o output -W- -C uid=1 -X /logout.php http://example.com

ちなみに、とあるウェブアプリケーションの報告の例。

Scan statistics:

      Scan time : 2:26:54.977
  HTTP requests : 762386 (86.5/s), 87886870 kB in, 211480 kB out (9994.2 kB/s)
    Compression : 0 kB in, 0 kB out (0.0% gain)
    HTTP faults : 306 net errors, 0 proto errors, 6406 retried, 0 drops
 TCP handshakes : 7700 total (99.0 req/conn)
     TCP faults : 0 failures, 0 timeouts, 8 purged
 External links : 1763 skipped
   Reqs pending : 0

Database statistics:

         Pivots : 1369 total, 1319 done (96.35%)
    In progress : 9 pending, 0 init, 38 attacks, 3 dict
  Missing nodes : 10 spotted
     Node types : 1 serv, 41 dir, 276 file, 35 pinfo, 26 unkn, 67 par, 923 val
   Issues found : 798 info, 68 warn, 2 low, 1 medium, 1 high impact
      Dict size : 2308 words (137 new), 46 extensions, 256 candidates
     Signatures : 77 total

わりと小さいプロジェクトでも、2時間30分位かかりました。

ジャンル: MacWeb