セキュアなコードへの道は遠い

少し前になるが、InfoQに「頑丈なソフトウェアマニフェスト」というエントリがあった。興味深い。このエントリに対する今の感想を、正直に書きとめておく。
http://www.infoq.com/jp/news/2010/06/rugged-software-manifesto


“頑丈な”は“rugged”の日本語訳。
マニフェストは、ぱっと見、大げさに見える。しかし、これくらいの認識があった方がよいのかもしれない(もちろん、開発するアプリケーションにもよるとは思うが)。


セキュリティ侵害が発生すれば、被害者が出る。開発者とエンドユーザの距離は決して近くなく、開発者のセキュリティに対する認識は、希薄であるように思える(カットオーバーが近づくと、怖くなってくるがw)。
このような想いは、ジェレマイア・グロスマン氏の次の言葉からも読み取れる(ような気がした)。

ステークホルダーはたいてい、セキュリティよりも機能に時間を費やしたいと考えている。そして、もしセキュリティ侵害があっても、それで開発者が罰せられることはほとんどない。と言っても、彼は罰則を与えることを推奨しているわけでない。頑丈なソフトウェアマニフェストのようなものがあれば相手のプレッシャーになり、よい仕事をすることを誇りに感じ、そうでないと恥ずかしく感じるようになる

http://www.infoq.com/jp/news/2010/06/rugged-software-manifesto

なるほど。


ケリー・ジャクソン・ヒギンズ氏は、次のように述べているが、ココは今一おちない*1

残念なことに、ほとんどの開発者はセキュアなコードを書くことの意味がわかっていません。さらに悪いことに、ハイクオリティなコードを書けばセキュアなコードを書いてることになると思っているのです。

http://www.infoq.com/jp/news/2010/06/rugged-software-manifesto

原文は以下だが、まんまだ。

Unfortunately, most developers don't know what it means to write secure code, and worse they think they already write secure code if they write high quality code. and worse they think they already write secure code if they write high quality code

http://www.darkreading.com/insiderthreat/security/app-security/showArticle.jhtml?articleID=222700147&cid=RSSfeed

「セキュアなコードを書くことの意味がわかっていません」とは、手厳しい。。また、ここで言う「ハイクオリティなコード(high quality code)」とはどういう意味なのだろうか?少なくとも、セキュリティ品質が高いという意味は含まれていない。“rugged”の間逆?一見かっこいいけど、ダメなコード?どうも自分のレベルからすると、高度すぎる“頑丈さ”であるように感じる*2。。
ちなみに、自分の経験の範囲内*3では、よく設計されており、シンプルで、保守性の高いコードは、おのずとセキュアになる*4


マニフェストは、面白いアイディアだ*5。自分のまわりの例にあてはめると。

  • 私は、ソフトウェアが、お客様の業務の基盤になっていると認識しています
  • 私は、その基盤としての役割に課せられた責任を認識しています
  • 私は、自分のコードが予期せぬ方法で、意図していない方法で、意図していた以上に長期にわたり使われることを認識しています

いいかも♪
でも、実装者には、あわせて次の宣言を。。

  • 私は、開発言語と利用ライブラリについて、完全にはマスターしていないと認識しています
  • 私は、コーディング規約とサンプルコードの内容を理解します
  • 私は、理解していないコードを、コピー&ペーストしません
  • 私は、汎用的な機能については、誰かが既に作成していないか、問い合わせをします


正直、自分のまわりでは、まだこんなレベルという現実。。

*1:私が、高度なセキュアプログラミングについての話を知らないからかもしれないが。あるいは、危機感が薄いからかもしれないが。

*2:自分も含め、自分のまわりには、「ハイクオリティなコード」が書ける人すら(?)少ないような。

*3:エンタープライズ系のWebアプリケーションやバッチアプリケーション。アプリケーション自体は、けっこうシンプル。

*4:逆の場合は酷い。手がつけられない。

*5:アジャイルにおける成功を模倣したのかどうかはわからないが。