Asial Blog

Recruit! Asialで一緒に働きませんか?

Webアプリケーション向けの自動セキュリティスキャナ「Skipfish」を試してみました

カテゴリ :
バックエンド(プログラミング)
タグ :
Tech
Google
security
こんにちは、中川です。

先日、GoogleからWebアプリケーション向けの自動セキュリティスキャナ「Skipfish」が公開されたので、社内で利用しているCakePHPのアプリで試してみました。

Skipfish( http://code.google.com/p/skipfish/ )は、Webアプリケーションの脆弱性、SQLインジェクションやクロスサイトスクリプティング等を自動的に検出してくれるApache License 2.0のライセンスで公開されているオープンソースのツールです。


必要なライブラリは以下とのこと。

  1.     * GNU C Compiler
  2.     * GNU Make
  3.     * GNU C Library (including development headers)
  4.     * zlib (including development headers)
  5.     * OpenSSL (including development headers)
  6.     * libidn (including development headers) 
KnownIssues - skipfish -参照。

私の環境では、libidnがなかったので、yumで入れました。

さて、skipffish本体のインストールを行いましょう。

※最新のダウンロードはこちらのページを参照ください。
http://code.google.com/p/skipfish/

  1. # wget http://skipfish.googlecode.com/files/skipfish-1.29b.tgz
  2. # tar xvzf skipfish-1.18b.tgz
  3. # cd skipfish
  4. # make

インストールが完了したら、実際に動かしてみましょう。
いろいろとオプションがありますので、
  1. ./skipfish --help
で確認できます。

今回は、以下のオプションを追加した条件で実行しています。

  1. ・-W dictionaries/minimal.wl
  2. ・・辞書ファイルは用意されている、dictionaries/minimal.wl を利用。
  3. ・-C MYSESSIONNAME=e3mvctp2b46u312b5a5b9krop5
  4. ・・ログインが必須のアプリをテストしたため、クッキーの値をセット。
  5. ・・値は適当なブラウザでログインしてクッキーの情報をコピペ。
  6. ・-X logout,login
  7. ・・logout / login を含むURLはセッションが切れてしまうのでまずは除外する。
  8. ・-g 1
  9. ・・開発サーバのスペックが低いため同時接続は1で。
  10. ・-o log/
  11. ・・結果の出力先を、log/ と指定
  12. ・http://192.168.1.236:8080/
  13. ・・検査URL

そして、実行!

  1. $ ./skipfish -W dictionaries/minimal.wl -C MYSESSIONNAME=e3mvctp2b46u312b5a5b9krop5 -X logout,login -g 1 -o log/ http://192.168.1.236:8080/

が、終わらない、、、30分経っても、がんがん実行中で終わらない。。。
サーバの負荷も高い高い。。これは外部に対しては絶対に行わないようにしましょう!

あきらめてCtl+Cで終了しました。。
途中で止めても結果ファイル自体は出力してくれるようです。

log/ ディレクトリ以下のindex.htmlファイルを適当なブラウザで開けば結果を確認できます。

こんな感じです。
※細かい結果の部分は今回はお見せしないようにしますが、各項目をクリックで詳細の確認ができます。


途中で止めたせいもあるのか(それでも30分くらいは動かしていた、、、)、今回は特に大きな問題などは見つからなかったようです。
(XSRFと表示されていますが、GETでアクセスする表示だけのページでこのアプリでは問題ないです。)
が、アプリケーションの想定外の動作を発見できたりしました。。


余談ですが、今回はCakePHPのアプリで試したのですが、
CakePHPのセッションのチェックには、UserAgentのチェックもされているようで、
core.phpの以下の設定を変更する必要がありました。
なぜセッション指定してもログアウトするのか結構悩みました。。。
  1. Configure::write('Session.checkAgent', false);


検査には時間がかかるようですが、簡単に試すことができますので、脆弱性チェックの一つとして利用してみてはいかがでしょう。

■参考にさせていただいたサイト
・Skipfishで定義されている Webアプリに対するテスト一覧
http://www.yokada.net/blog/1456
・使ってみました。 - はじめに。
http://d.hatena.ne.jp/hajimeni/20100324/1269394599