4月のOpenSSLのセキュリティバグや先日のBashのバグ、最近結構大きめのセキュリティ脆弱性が発見されていますね。そもそもなぜセキュリティの脆弱性が起きてしまうのでしょうか?

やはりそのプログラムがc言語で書かれているからでしょうか?c言語はよく知られているように高級言語ではあるものの、メモリの取り扱い回りに特に制限もなく、プログラマが書いた通りに解釈し、配列を壊していったりする場合に、セキュリティの脆弱性が埋め込まれてしまうことが多いです。

配列とは何か?「確保した連続するメモリ領域」と言ってしまえば簡単ですが、その配列へのアクセスには、確保したメモリの先頭からの番地に対して操作を行うことに成ります。そのアクセスの際に、確保したメモリ領域を超えてアクセスした先が、プログラム領域など、本来書き換えてはいけない部分を書き換えてしまったばあいに、コンピュータ自体が、意図しない動きとなりそれが脆弱性に成ってしまいます。この意図しないアクセスには、最近ではOSやハードウエア的に制限がなされていたりするのですが、簡単な対処としては、言語的に配列を超えた場合にエラーと成ってくれる物を採用するのが一番ではないでしょうか?例えばJavaとかC#とかのバーチャルマシーン上で動く言語とか、pythonrubyのようなスクリプト言語ならばまず大丈夫です。

ただし、そのような言語の場合には、ハードウエアに直接アクセスしたりすることはできないし、そもそもOSなんかを記述することはできません。ということで、c言語のようなある意味危険な言語はなくなることもなく、脆弱性との戦いがずーっと続いていくことに成ります。

ソフトウエアにおいてバグをなくすことは不可能なのでしょうか?ソフトウエアは開発自体が少ない人数で行われており、また、その開発者の能力に大きく依存するということが他の工業製品とは大きく異なります。つまり他の人の目が入ることが少ない。

また、ソフトウエアの設計や製造は同じ処理をする物を作成するにしても、バリエーションがたくさんあり標準化がほとんど進んでいない問い埋めんも否めません。標準化もできない訳ではないでしょうが、ソフトウエア技術の進歩が他の分野の技術に比較しかなり早い、それゆえ、標準化してもすぐ陳腐化してしまう、これも一員かもしれません。

このように技術は進歩していく訳ですが、いつかソフトウエアの世界にもプログラミングという下流部分がすべて自動化されてしまい、バグは仕様のバグとかそういう部分だけに成る日もあるのかもしれません。