ikepyonのだめ人間日記

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

ソースコード監査 そにょに

というわけで、ちと考えてみるw。
ソースコード監査といっても、色々あるけど、今回は、Webアプリケーションに特化した形で考えてみようっと。

まず、どんなプログラムも、何らかの入力があって、それを色々加工して、加工した結果を別のプログラムに渡すことで望む処理をやってるわけだ。
つまり、入力データに危険な文字が含まれてなければ、多くの脆弱性は防げるともいえる。
防げないのは、レースコンディションとかごく一部かな?
で、その入力データはWebアプリの場合以下のどれかに限られる。

  • クエリパラメータ(POSTとかGETで渡されるパラメータ)
  • リクエストヘッダ
  • データベース
  • ローカルファイル
  • 環境変数
  • 他のプログラムからの戻り値

といったところかな?
一番のセキュリティホールになるのはプログラムA(要するにWebアプリね)で制御できないプログラムB(RDBMSとかブラウザとか、外部ライブラリとか)に渡すときの出力データAとなるわけだ。
だから、アプリをセキュアにするには出力データAに危険なデータが含まれていないか、制御できるプログラムAでチェックすればOKとなるわけだわな(最もこれだけじゃないけど、大きくは外れてないはず)。
で、出力データAはどうやって生成されるかというともともとの入力データを加工して作られると考えていいだろう。
てことはだ、入力データを延々追跡していって、問題がないかどうかをチェックすればいいかなぁと思うわけで、さてそれを機械的にチェックするにはどうすればいいか非常に難しいなぁとおもったり。