VAddyブログ

- 継続的セキュリティテストへの道 -

CircleCIを使った継続的Webセキュリティテスト環境の構築

image

VAddyCircleCIを組み合わせると、簡単に継続的セキュリティテスト環境が実現できます。
git pushするとCircleCIのジョブが起動し、テストサーバにコードをデプロイ、そのテストサーバに向けてVAddyからWebの脆弱性検査を実施します。

今回は、
git push -> Unit test -> Deploy(Staging) -> VAddy test -> Deploy(Production)
という流れで解説します。
Unit testが失敗した場合は後続の処理は行われませんし、VAddy testが失敗した場合も本番にコードがデプロイされません。

こうして、ユニットテストとWeb脆弱性検査を定期的に実施して問題のないコードのみを本番環境にデプロイできます。

前提

この記事では、CircleCIインスタンス内に立てたWebサーバに対しての脆弱性検査ではなく、CircleCIから別のステージングサーバにデプロイした後に、そのステージングサーバに対しての脆弱性検査をするパターンの説明となります。

2017年7月現在、PrivateNet版VAddyをリリースしておりますので、CircleCIのインスタンスに立てたローカルWebサーバにも検査実行できるようになりました。
PrivateNet版VAddyの詳細は下記をご覧ください。
http://blog-ja.vaddy.net/post/161798392486/privatenet-release

ステップ1

VAddyに検査対象のサーバを登録し、スキャンが出来るようになりましたらWebAPIのキーを発行します。発行方法はマニュアルを参照ください。

CircleCIのプロジェクト設定画面で、環境変数にVAddyのAPIキーなどを登録します。

image

登録する環境変数は、

  • VADDY_TOKEN
  • VADDY_HOST
  • VADDY_USER

の3つです。VADDY_HOSTはVAddyに登録した検査対象のFQDNです。VADDY_USERはVAddyのログインIDです。

ステップ2

プロジェクト用のcircle.ymlファイルを用意します。gistにサンプルのyamlファイルを置きました。
https://gist.github.com/ichikaway/2576218f4d05dcda815a

test:
  override:
    - ./test.sh
deployment:
  staging:
    branch: master
    commands:
      - ./deploy.sh
      - git clone git@github.com:vaddy/vaddy-api-ruby.git && rvm use 2.1.0 && cd ./vaddy-api-ruby/  && ruby vaddy.rb
      - ./deploy2.sh

test:にてユニットテストを行い、deployment:のstaging:にて、まずdeploy.shでステージングにコードをデプロイし、git cloneで

VAddyのクライアントツール(Ruby)

をセットして検査開始。問題が何もなければ、deploy2.shが実行されます。


test.sh、deploy.sh、deploy2.shは適宜プロジェクト用のものを利用してください。 VAddyクライアントツールはRuby2.0以上が対象ですので、rvmで環境を切り替えています。

動作確認

git pushしてVAddyで問題がなければdeploy2.shまで実行されます。

image

もし、VAddyの検査で1件でも脆弱性が見つかった場合はそこで処理が停止して、deploy2.shは実行されません。

image

まとめ

このようにVAddyのクライアントを使えば簡単にVAddy連携できます。既にVAddy Jenkinsプラグインは公開しておりましたが、最近のCI as a Serviceの流れもあったので、RubyVAddy APIを操作するツールを実装して簡単に組み込めるようにしました。

VAddy API Rubyオープンソースとして公開しておりますので、CircleCI以外のサービスにも適用して連携できると思います。

WebAPIの仕様書も公開しておりますので、独自のクライアントツールを作り、プロジェクトに組み込むことも出来ます。

VAddyはCIと連携し継続的なセキュリティテストを実現するサービスです。無料プランでも実行回数無制限ですので是非お試しください。
http://vaddy.net