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の中身をちらっと見ると、確かに語彙がずらずら並んでいる)。
- complete.wl
- extensions-only.wl
- medium.wl
- minimal.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分位かかりました。