ikepyonのだめ人間日記

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

アプリの脆弱性 そにょに 〜脆弱性の発見方法〜

というわけで、その発見方法を考えてみる。といってもたいしたことはないんだがw

使用するフレームワーク、ライブラリの脆弱性

これはさすがにアプリ開発とかそういった問題以前のような気がするので、情報収集だけしといてねって感じ。

仕様による脆弱性

結構見つけるのはめんどくさくて、こういった仕様は他にどういったことに使えるかなというブレーンストーミング的なやり方しかない気がする。機能をひとつの方向から見るのではなく、多方面から見るということが必要だろうな。
ある意味、リスク分析って奴か。

設計による脆弱性

処理フローの脆弱性

これは概要設計、詳細設計の段階でレビューすることによって見つかることが多い気がする。後は、テスト段階で、フローどおりに処理するのではなく、いきなりあちこちにアクセスしてみたりとかしたりといったところかな。ソースコード監査でも見つけられんことはないだろうけど、難しい気がする。

データフローの脆弱性

これはいわゆるセキュリティ検査でも発見できるものもあるだろうけど、ソースコードを監査することで見つけやすいタイプかな。とはいえ、ソースコード監査をするにはそれなりに工数がかかるので、早々出来ないのが辛いところ。それを自動化する方法はないものか?

Webアプリの場合は特に入力がある程度特定できるので、それを追っていけばなんとか機械的に判断できそな気がするというのは前にも書いたとおりで、例えばJSPだったら、request.getParameter()メソッドとか、PHPだったら$_POST,$_GET,$_REQUESTとかに注目して行けばいいだろう。
後は、これらがどの様な処理を受けていくのか1つずつ追っていく事になる。
また、SQLを呼び出すところ、レスポンスとして返すところ、等外部への出力部分から追っていく事も有効なはずだ。
これらを、人の目でやるのは非常に困難なんで、それを機械的に簡便化できないかというのが問題だったり。
これらの注目点にどの様な変更がなされていくかを見るため、これらへ、若しくはこれらからの代入に注目するというのが考えられる。
これは、例えば「.*=.*\$_POST」とか「sql.*=.*」とかで検索すればなんか出来そうである。そしてこれを繰り返していけば処理してる部分というのが明確になりそうだ。これをツリー形式で処理内容とともに記述していけば、監査の労力がかなり減る気がするけど、どうなんだろ?