ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

Webアプリセキュリティ検査ツール

現在作成中の検査ツールでは、XSS用モジュール、OSコマンドインジェクション用モジュール、その他インジェクション及びDirectory Traversal用モジュールを作ってみた。
検出の仕組みは簡単には以下のような感じ。

XSS用モジュール

単純に、レスポンスに指定した文字列が含まれているかどうかで、脆弱性の有無を判断。まあ、XSSはこれでたぶん問題ないだろうし。

OSコマンドインジェクション用モジュール

サーバ側からTCP接続を行うような攻撃パターンを送信し、ツール側で、TCP接続を待ちうけ。接続があったら、脆弱性ありと判断。

その他インジェクション及びDirectory Traversal用モジュール

対策がなされていなければ、必ずSQLエラーなどのシステムエラーが発生するデータ(例えば「'」)と、そのデータを含むけれど、エラーが発生しないようなデータ(例えば「' or 'a'='b」)を投げてみて、そのレスポンスの構造の違い(とりあえず、HTMLタグが同じかどうかを確認)で判断。対策がされていれば、両方ともエラーか、両方とも正常な結果を表示するはず。つまり、構造的には同じものが返ってくると思う。
多分、エラーと通常のレスポンスはHTMLのタグ構造が異なるはずだから、検出できるかなぁと思うのですよ。ちなみに商用検査ツールではこういったロジックでは検出してないっぽい。


とまあ、やっと出来そうな目処がついてきたので、ちょっと公開w

追記:
Blind SQL injectionを検査手法として取り入れない理由は、商用ツールであるからってのもあるけれど、検索での脆弱性は見つかられても、追加とか、Stored Procedureとかでの検出が難しそうってのもあるデスよ(というのは後付理由w。実際は思いつかなかっただけw。まあ、組み込んでもいいけど、気が向いたらやるということでw)