今日、SANS Future Visions 2009 Tokyoで出てきたお話で、
教育もあまり役に立ってないっていう件で、
・セキュアなプログラムのコードの書き方は、知っている。
・でも実際には書いていない
っていう話があったけど、まーねー
たとえば、Cで文字領域を取ったりするとき
char *get_string_area(int len) { return (char *)malloc(len*2+1); }
みたいなことをやってしまうことがある。
これは、セキュアではない(lenに、もしなんかのはずみで
マイナスを入れられると、エリアがとれず・・・)
セキュアなコーディングにする場合、lenはintじゃなくって、
size_tなり、unsignedにすべきなんだけど、
プログラム上、そーすると、めんどっちいケースがあって、
また、文脈上、絶対マイナスこねーよ!みたいなときは、
intにしちゃう。
みたいなケース。
ただ、求められるセキュリティレベルや、危険性などによっても違うわけで、
たとえば、テスト用のプログラムや、研究の論文を書くとき用、
ツール自動生成用などなら、上記の書き方でぜんぜんOKなわけだ。
それを、ほかにもっていくと、問題が起こる。
とすると、
・抽象的に記述しておいて(図など?)あとで、環境に応じて、セキュリティを考慮した
ライブラリや関数を選んで、ソースを自動生成するとか
・アスペクト指向のように、プログラミング後、セキュリティが必要なら、
セキュリティ部分を後付する
とかしたほうが、現実的なのかしら?