アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

skipfish で Web アプリケーションのセキュリティテストを行う

こんにちは、tahara です。

おかげさまで、アクトインディ技術部隊は aoki の入社により 100% 増量しました! ありがとうございます!!

さて、浮かれてばかりはいられませんので、今回は skipfish を使ってセキュリティテストを行ってみたいと思います。 脆弱性を洗い出します!

skipfish は URL さえ指定しすれば、リンクをたどって自動的にテストを行ってくれる、なかなかできるこです。 Basic 認証やフォーム認証にも対応しています。

Rails プロジェクトで skipfish を使う時の注意点をあげてみます。

  • ずごい勢いで大量にアクセスを行うので、本番環境で実行してはいけません。
  • ずごい勢いで大量にアクセスを行うので、development 環境ではなく、より速い production 環境で実行した方がいいと思います。
  • production 環境を使うのは色々危険なので、ネットワークは切った方がいいかも。
  • 特にメール送信とかしちゃうと大変なので、気を付けましょう。
  • メールを送信しないように config/environments/production.rb で config.action_mailer.delivery_method = :test して動かします。
  • Rew Relic の gem を Gemfile から削除します。
  • Exception Notfication の gem を Gemfile から削除します。
  • production 環境は public/assets を使うので、プリコンパイルしておきましょう
    • bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile
    • テスト終ったら public/assets を忘れずに削除しましょう。さもないと理解できないバグで30分くらい浪費しちゃいます。
  • ログインが必要なページのテストする場合は、 -X オプションでログアウトページを除外し、 -I オプションでチェック対象 URL を限定しましょう。

ダウンロードして make すれば使えます。

./skipfish -L -W- -m 4 -o /tmp/skipfish-home -A "user:passowrd"  -I /foo -I /bar -X /foo/logout --auth-form https://localhost/foo/login --auth-user "user" --auth-pass "passowrd" --auth-verify-url http://localhost/foo --auth-user-field "login" --auth-pass-field "password" http://localhost/foo
  • テスト速度重視で辞書を使わない場合 -L -W- を指定します。
  • -m で同時アクセス数を指定できます。
  • -o で指定したディレクトリにテスト結果が出力されます。上記の場合は、ブラウザで /tmp/skipfish/index.html を開くとテスト結果を参照できます。
  • -A は Basic 認証です。
  • —auth で始まるのはフォーム認証です。
  • -I でテスト対象の URL を限定できます。 上記の場合は /foo と /bar 以下のページのみ対象とします。
  • -X でログアウトページを除外します。

ずごい勢いで大量にアクセスを行うので、Web アプリの規模によってはかなりの時間がかかります。 実行中はスペースキーで、進捗表示とアクセス中のページ表示を切り替えられます。

これでセキュリティについても安心です!!

・・・というわけには、いかないですよね。

やはり、ちゃんと勉強して、作る時、コードレビューの時、常にセキュリティを意識しないと。