継続的WEBセキュリティテスト VAddyブログ

クラウド型 継続的Webセキュリティテストサービス VAddy のブログです
クラウド型 継続的Webセキュリティテストサービス VAddy のブログです
  • rss
  • archive

新着記事

Loading...

タグ一覧

  • ビジネス
  • 技術
  • 機能追加
  • 記事紹介
  • RestAPIサーバのセキュリティテストを実現しました

    VAddyはCIツールと連携し、継続的なセキュリティテストを実現するクラウド型Web脆弱性検査ツールです。

    既にGET/POST/PUT/DELETEのパラメータの検査、URLパスに含まれるパラメータの検査を実現しています。 現在は、SQLインジェクションとXSS検査を行っています。 機能の一覧はこちらをご覧下さい。

    最近のモバイルアプリケーションやシングルページアプリケーションのような構成ですと、APIサーバに対してPOST/PUTリクエストを送信する際に、パラメータはJSON形式というのも多くなりました。

    今回、このJSON形式の場合でも、JSONデータに含まれるパラメータに対してSQLインジェクションの検査ができるようになりました。
    これにて、Angular.jsやBackbone.js、iOSやAndroidアプリケーションと通信するAPIサーバ側の検査が可能となりました。

    実はAPIサーバのJSONデータの検査対応はそれほど優先度が高くなかったのですが、VAddyミートアップを通してユーザからの要望を頂いた結果、優先すべき項目となり、すぐに実装してリリースとなりました。
    このようにVAddyは検査エンジンを自社で実装していることもあり、ユーザの要望を通して必要な機能をすばやく実装していきます。



    APIサーバの検査までの流れ

    POST/PUTでJSONデータをAPIサーバに送信する場合は、HTTPリクエストヘッダの中にContent-type: application/jsonが含まれていると思います。 このヘッダ情報がある場合にJSONの中のパラメータも検査対象となります。 Angular.jsなどjavascriptフレームワークを使っていればこの形式になっていると思いますので、問題なく検査できます。

    モバイルアプリケーションやシングルページアプリケーションでは、APIサーバ側から作成を始めることもありますので、VAddyでどのようにスキャンまで行うか説明します。 VAddyでは、検査対象となるURLやパラメータをクロール情報としてスキャン実行前に登録する必要があります。 通常ではブラウザのProxy設定をVAddyのProxyサーバに変更して、Webアプリケーション画面を操作すればクロール情報が生成されますが、View側の画面をまだ作成していない場合は、このクロールをcurlなどのコマンドを使って生成します。

    まず、curlコマンドから自分のWebアプリケーションにアクセスできるか確認します。

    GETリクエストの場合

    curl http://www.example.com/blog/Api/view.json?id=1
    

    POSTリクエストの場合(データはJSON形式)

    curl -v -H "Accept: application/json" -H "Content-type: application/json" 
    -X POST -d '{"Articles":{"title":"post_aa", "body":"bodyhoge"}}' 
    http://www.example.com/blog/Api/add.json
    

    これで問題なければ、下記のようなシェルスクリプトを作成します。

    
    #!/bin/sh
    PROXY='--proxy http://54.92.84.100:10080'
    
    ## (1)
    curl $PROXY http://www.example.com/vaddy-abc12345.html?action=begin
    
    ## (2) 
    curl $PROXY http://www.example.com/blog/Api/view.json?id=1
    
    ## (3)
    curl $PROXY -v -H "Accept: application/json" 
    -H "Content-type: application/json" 
    -X POST -d '{"Articles":{"title":"post_aa", "body":"bodyhoge"}}' 
    http://www.example.com/blog/Api/add.json
    
    ## (4)
    curl $PROXY http://www.example.com/vaddy-abc12345.html?action=commit
    
    

    まず最初に変数PROXYに、VAddyのProxyサーバの情報をセットします。これにて全てのHTTPリクエストはVAddy Proxyを経由してユーザのwebアプリケーションにアクセスするようになります。この変数をPROXY=”のように空にすればVAddy Proxyを経由せずに通常のアプリケーションの動作確認に利用できます。

    (1)と(4)は、VAddyのクロール記録の開始と終了を行うためのURLです。vaddy-abc12345.htmlのファイル名はユーザ毎に異なります。
    (2)と(3)は、最初にアクセスできるか試したcurlコマンドに、Proxy情報を付与しています。

    URLやパラメータが増えるたびに、このシェルスクリプトに情報を追加して実行していくだけで、VAddyのクロール情報が更新され、スキャンの実行時にそれらが検査されます。 スキャンの実行はVAddyの画面からも実行できますが、VAddy WebAPIとJenkinsプラグインを既に提供していますので、Jenkins経由、CirlceCI経由でも実行可能です。 JenkinsやCircleCIでこのcurlのコマンドを実行するシェルスクリプトを実行し、その後スキャン実行までCIで行えば、コードのpushからクロール情報登録、スキャンまで一気に実行できます。

    今後もユーザからのフィードバックを頂きながら、ユーザに愛されるサービスとなるよう進めていきたいと思います。 VAddyの第2回ミートアップは既に満席となってしまいましたが、今後も定期的に行って行く予定ですので、 興味ある方はこちらからご登録ください。 https://vaddy.doorkeeper.jp/

    • Tweet
    • このエントリーをはてなブックマークに追加
    • 3月 9, 2015 (12:39 pm)
    • #技術
    • #機能追加
© 2014–2015 継続的WEBセキュリティテスト VAddyブログ