TOPSoftware > 脆弱性報告数、言語別のランキングが持つ意味は(前)

Software

脆弱性報告数、言語別のランキングが持つ意味は(前)

2020/05/19

Samuel Bocetta JavaWorld

プログラミング言語のセキュリティとは

 プログラミング言語の違いによって脆弱性の数に差が出た理由を考えてみよう。このランキングだけを見ると、C言語はセキュリティ上の脅威が非常に大きいと判断しそうになるかもしれない。しかし、比較対象となった他の言語に比べて、C言語ははるかに歴史がある。Journal of Technology Researchに掲載された論文「Security vulnerabilities of the top ten programming languages: C, Java, C++, Objective-C, C#, PHP, Visual Basic, Python, Perl, and Ruby」でStephen Turner氏が述べているとおり、「プログラミング言語は遺伝学のようなものだ。いくつかの祖先から、共通の特徴が増殖している」のである。

 WhiteSourceがこの調査で取り上げた言語の中で、C言語は一番の古株だ。C言語が誕生した頃の脅威の状況は、後発のJavaやRubyの頃とはまったく異なる。WhiteSourceも指摘しているとおり、C言語は他の言語より長く使われてきた分、開発されたコードも多い。また、OpenSSLやLinuxカーネルをはじめ、主要インフラの開発にも使われている。コードが多いうえに中心的役割を果たしていることが、脆弱性の報告数の多さにつながっている可能性がある。

 Turner氏の論文では、Javaに関係する脆弱性としていくつかの種類が挙げられている。例えば、ログインジェクション攻撃だ。主にWebブラウザーを通じて行われる攻撃で、US-CERTが以前から注意を促していた。この種の脆弱性は、送信された入力を検証することで回避できるが、アプリの使い勝手に影響することへの不安から、検証が十分ではないケースも多い。

 また、アクセス制御の脆弱性に続く、署名や証明書に関する攻撃も挙がっている。証明書取得のプロセスは2013年以降に改善されたが、信頼性に欠ける認証局の証明書を基盤としている開発者も多い。厳格さが不十分な証明書を取得することもある。これに伴って生じ得るリモートコード実行の脆弱性についても、US-CERTが注意を促している。

 WhiteSourceの調査結果で、Javaの脆弱性がC言語よりかなり少なかったのは、興味深い好対照といえる。Javaが誕生したのはC言語よりずっと後で、脅威への意識がはるかに高かっただけに、Javaの方がセキュアなのは驚きではない。同様に、Rubyの方が脆弱性が少なかったのも、比較的若い言語であることや、利用の少なさが原因かもしれない。

翻訳:内山卓則=ニューズフロント

↑ページ先頭へ