Java と .NET のデベロッパー:大量の脆弱性に対峙する理由を解明

Java, .NET Developers Prone to More Frequent Vulnerabilities

2023/01/16 DarkReading — Java と .NET で書かれたアプリケーションの約 75% が、OWASP Top-10 に含まれる脆弱性を、少なくとも1つは持っていることが判明した。ソフトウェア・テスト会社である Veracode が、約76万件のアプリケーションを分析した結果として、上記の2つのプログラミング・エコシステムを使用したアプリケーションの 20% ほどは、少なくとも1つの深刻な脆弱性を抱えていることも明らかになった。


平均的なアプリケーション全体としては、毎月のように少なくとも1つの脆弱性を取り込む確率が 27% であり、コードが未熟な場合やスキャン頻度の低いアプリケーションでは、さらに欠陥が多くなっていた。その一方で、セキュリティ・プロセスの歴史が長く、よく訓練された開発者により書かれたアプリケーションは、新たな欠陥の取り込みが少ないことが、データから示された。

Veracode の VP of Strategic Product Management である Tim Jarrett は、「この分析から、開発パイプラインにセキュリティを組み込むことの重要性が、浮き彫りになった。一連のデータによると、開発プロセスにセキュリティの習慣を組み込むことで、全体的な欠陥の修正という点においても、より良い結果が得られることが分かった。また、流入する欠陥の量を減らすことも可能になるため、大きな違いが生じる」と述べている。

ソフトウェア会社や開発チームは、アプリケーションのコードから、欠陥や脆弱性を排除するために奮闘し続けている。2023年1月11日に Veracode が発表した “State of Software Security of Application Security” レポートによると、開発者やオープンソースの当事者たちは、ソフトウェアの欠陥をより迅速に修正しているが、平均的な脆弱性の半減期は、数日や数週間というレベルではなく、数ヶ月で測定され続けているとのことだ。 

たとえば、この調査で分析されたアプリケーション全体の、71% を占める Java と .NET のアプリケーションでは、それぞれにおける欠陥の半数が、243日後と 158日後にいたるまで、アプリケーションに影響を及ぼしていることが分かった。

Source: Veracode’s “State of Software Security” report

また、アプリケーションの肥大化と老朽化は、双方がセキュリティに大きな悪影響を及ぼしている。平均的なアプリケーションは、約 40% の過剰なコードを蓄積しており、その分だけ脆弱性を持つ可能性が高くなる。2年前開発されたアプリケーションの約 54% に欠陥があり、5年前のアプリケーションの 69%に 欠陥があることが、この分析で判明している。

JavaScript の意外な安全性

意外なことに、JavaScript で書かれたアプリケーションや、JavaScript のフレームワークを使用したアプリケーションは、脆弱性スキャンで良い結果を出す傾向にあった。Java と .NET アプリケーションの約 80% に脆弱性が存在したのに対して、JavaScrip tアプリケーションは 56% に留まっている。また、Java と .NET アプリケーションの約 20% に深刻度の高い脆弱性が存在したのに対して、JavaScript アプリケーションの深刻な脆弱性は 10% 未満だった。

JavaScript のフレームワークは、Java/.NET に比べて新しく、オープンソース・エコシステムの恩恵により、セキュリティが強化される。最近では、Java も恩恵を受けていると、Jarret は述べている。

彼は、「JavaScript は新しい言語であるため、JavaScript で書かれたアプリケーションも新しいため、アプリケーションの使用年齢と欠陥修正時間の間には、このレポートで確立した相関関係が存在する。JavaScript のツールの多くは成熟しており、よくサポートされている言語である」と述べている。

さらに、Java アプリケーションの脆弱性が、ファーストパーティの問題に起因するのに対して、JavaScript や Node.js フレームワークでは、ソフトウェアが依存するコンポーネントで脆弱性が発生しやすいため、個々の脆弱性がサードパーティの問題となることが多いとも指摘している。

Jarret は、「Java アプリケーションでセキュリティ問題を修正する方法は、クラス・ファイルに変更を加えてコンパイルするのが一般的である。その一方で、JavaScript アプリケーションの場合は、パッケージ管理の問題が一般的である。つまり、アプリケーション開発者が学ぶべきことではなく、開発が簡単になるのかもしれない」と指摘している。

新しいプログラミング言語の普及

このレポートのデータは、開発者が学んでいるプログラミング言語と、大多数の企業で実際に使用されている言語の違いも明らかにしている。Veracode が調査した上位の言語とエコシステム (Java/.NET/JavaScript) は、開発者がプログラミング技術を学ぶ際の選択肢にはなっていない。

Stack Overflow の “2022 Developer Survey” によると、Java と JS ベースのフレームワーク (Node.js/React.js/Angular など) が、開発者が好むテクノロジー・リストを独占する一方で、Java は最も好まれないプログラミング言語の1つであり、回答者の 54% が嫌う一方で、46% は好んでいる。 

しかし、Veracode クライアントがスキャンしたアプリケーションのシェアは、JavaScript が 14% であるのに対し、Javaは 44% と圧倒していた。 

さらに、最も愛されているプログラミング言語である Rust の場合は、Veracode のデータには登場すらしていない。また、開発者の好みとしては6位である Python は、スキャンされたアプリケーションの 4% 未満にしか過ぎない。

Veracode の Jarrett は、このような断絶の理由の1つとして、確立されたアプリケーションが、確立されたプログラミング言語で書かれている点にあると述べている。

彼は、「世の中に出回っている、すべてのコードに世界がある。そして、新しい開発の波の頂点にあるのが、Go/Rust/Dart/Flutter などであり、それらを手にする人もいる」と述べている。

プログラミング言語で書かれたアプリケーションの、コードベースが集約されているため、この状況はおそらく変わらないだろう。彼は、「古いアプリケーションは決して死なない。したがって、企業には大規模な Java コードベースや、.NET コードベースが大量に存在している」と指摘している。

プログラミング言語と脆弱性の関係を整理する、とても興味深い記事ですね。最近では OSS リポジトリからダウンロードする、各種のパッケージを用いてプログラミングするというスタイルが、多勢を占めているようです。その一方では、従来からのコードベースも存続しているため、新しくて安全性の高い言語に、簡単には移行できないというパートが残されます。また、文中の「アプリケーションの肥大化と老朽化により、平均的なアプリケーションでは、約 40% の過剰なコードが蓄積され、その分だけ脆弱性を持つ可能性が高くなる」という部分ですが、それを是正するリファクタリングに対して、どれほどの労力が割かれているのでしょうか? この記事の元データとなる、Veracode の State of Software Security 2023 も、ぜひ、ご参照ください。

%d bloggers like this: