Javaは他の言語と比較してどれくらい安全ですか?

サイバーセキュリティの他の側面と同様に、プログラミング言語のセキュリティのレベルは、「安全」の意味によって異なります。Javaには、他の一般的に使用されている言語よりも特定された脆弱性が少ないのは事実です。少なくとも一見すると、一部の新しい言語はJavaよりも安全に見えることも事実です。

Javaで見つかったセキュリティホールの多くは、その人気の結果です。広く使用されているということは、何千ものバグハンターがJava言語の脆弱性を見つけることに専念していることを意味し、Javaにこの分野での不公平な「利点」を与えます。同様に、Rubyなどの一部の新しい言語の暗黙のセキュリティは、整合性よりもニッチな使用法を反映している可能性があります。  

[JavaWorldでも:Java開発者のセキュリティが向上している兆候がいくつかあります。] 

この記事では、最も一般的に使用されているプログラミング言語がセキュリティの観点からどのようにランク付けされているかを見ていきます。ある言語の安全性を他の言語よりも低くするいくつかの要因と、特定された脆弱性が過去数年間で非常に増加した理由を説明します。最後に、Java開発者がコードの脆弱性を減らすことができるいくつかの方法を提案します。  

結論:セキュリティの観点から、私たちが知っている脆弱性は、私たちが知らない脆弱性よりも優れています。 

Javaはどれくらい安全ですか?

最も一般的に使用されているプログラミング言語の脆弱性に関する最近の調査は、オープンソースのセキュリティおよびライセンスコンプライアンスプラットフォームであるWhiteSourceからのものです。WhiteSourceは、最も人気のある7つのオープンソースプログラミング言語であるC、Java、JavaScript、Python、Ruby、PHP、およびC ++を調べました。次に、アナリストはさまざまなソースを使用して、特定された脆弱性の数によって言語をランク付けしました。

なぜオープンソースなのか?

オープンソース言語をランク付けする決定は偶然ではありません。オープンソース言語のプロプライエタリ実装を含む多くのプロプライエタリ言語は、脆弱性に関してははるかに透明性が低くなっています。民間企業が自社製品のセキュリティ上の欠陥を公開することはビジネス上意味がないため、これらの言語の脆弱性レベルについてはほとんど暗闇にさらされています。私たちが知っている欠陥は、私たちが知らない欠陥よりもはるかに扱いやすいです。

WhiteSourceの調査に基づくと、これまでで最も脆弱なプログラミング言語はCであり、報告されたすべての脆弱性の47%を占めています。そのランキングは経験豊富なプログラマーを驚かせることはありませんが、他の結果は驚くかもしれません。PHPが17%と、Javaが12%と続き、JavaScriptが上位4つを11%と締めくくっています。これらの「リーダー」に続いて、Python、C ++、およびRubyがありました。 

プログラミング言語のセキュリティを理解する

次に、一部のプログラミング言語が他の言語よりも脆弱である理由を尋ねる必要があります。私が引用した調査に基づいて、Cは巨大なセキュリティ脅威を表していると結論付けるかもしれません。しかし、Cがリストの他のどの言語よりもずっと長く使用されていることを考慮してください。 Journal of TechnologyResearchに書いているStephenTurnerは、「プログラミング言語は遺伝学のようなものであり、共通の特徴を持つ祖先がいくつか増殖している」と述べています。 

リストで最も古い言語であるCは、JavaやRubyなどの比較的新しい言語とはまったく異なる脅威環境で開発されました。 WhiteSourceが指摘しているように、Cの相対的な年齢は、それに応じて記述されたコードの量が多いことを意味します。 Cは、OpenSSLやLinuxカーネルなどの主要なインフラストラクチャに使用される言語の1つでもあります。ボリュームと中心性のその組み合わせは、既知のオープンソースの脆弱性の数を増やす可能性があります。

この分析ではJavaのパフォーマンスは良好ですが、著者は特にJavaに影響を与える2種類の脆弱性を強調しています。まず、US-CERTは、主にWebブラウザを介したログインジェクション攻撃に対するJavaの脆弱性について長い間警告してきました。このような攻撃は、送信された入力の検証または認証によって回避できますが、開発者は、アプリの使い勝手が悪くなる可能性があることを恐れて、入力を徹底的に検証することをためらうことがよくあります。 

第2に、Javaは、アクセス制御の脆弱性に続く信頼の悪用に対して特に脆弱です。2013年以降、認証プロセスは改善されていますが、多くの開発者は、信頼性が低い当局からの証明書に依存しています。本来よりも厳しくない証明書を取得することは可能です。Journal of Technology Researchで引用されているUS-CERTは、リモートの攻撃者が任意のコードを実行するためのこの開かれた扉について警告しています。

Javaの脆弱性は比較的低いため、Cとは興味深い対照があります。JavaはCのずっと後に開発され、脅威に対する意識がはるかに高い環境であったため、Javaの方がはるかに安全であることは当然です。同様に、RubyはJavaよりも安全であるように見えますが、これは言語の相対的な若さとそのニッチなアプリケーションによって説明できます。

セキュリティの脆弱性が増加しています—一種の

WhiteSourceは、「過去2年間で、すべての言語で既知のオープンソースセキュリティの脆弱性の数が大幅に増加した」と報告しています。Javaの全体的な脆弱性の数は、2015年以降着実に減少していますが、最近の脆弱性の数の急増には説明が必要です。この増加は2つの要因によるものと考えられます。  

まず、バグバウンティがあります。これは比較的新しい傾向で、何千人もの技術専門家が言語を選択して脆弱性を見つけます。これらは、オープンソースのセキュリティ脆弱性の増加の少なくとも一部を説明しています。さらに、脅威ハンターはすべての言語を均等にスキャンすると一般的に想定されていますが、そうではありません。 Web開発で最も一般的に使用される言語の1つとして、Javaは脅威ハンターの重要なターゲットです。このコンテキストでは、既知の脆弱性に対するJavaの3位のランキングはかなり低く見え始めます。

ソフトウェアシステムも10年前よりも桁違いに複雑であり、これはJavaやその他の言語で見られる脆弱性の数が増加しているもう1つの大きな要因です。スマートフォンアプリが感染源になる可能性があり、すべての企業がJavaScript対応のWebサイトを持っている必要がある世界では、Webサイトの脆弱性の数が急激に増加しているのは当然のことです。これに加えて、サイバーセキュリティの専門家の長期的な不足があり、サイバーセキュリティの将来に向けて事態は厳しく見え始めています。 

Javaセキュリティの脆弱性を回避する方法

セキュリティの脆弱性に関する調査を読むと、心拍数が上がる可能性がありますが、恐れることはありません。Java開発者は、アプリケーションのセキュリティに関して強力な立場にあります。何千人ものプロが言語をスキャンして脆弱性を探しているので、言語の脆弱性のかなりの割合について私たちが知っている可能性は十分にあります。その知識は力です。

最近のJavaWorldの記事では、安全なJavaアプリケーションを開発するための13のルールが提供されています。また、JavaのクラウドセキュリティやJavaのWebアプリセキュリティなど、特定の環境でJavaを安全に実装することに関する記事やホワイトペーパーもたくさんあります。見落としている可能性のある脆弱性を減らすためのいくつかの方法を考えてみましょう。

DevSecOpsワークフローに移動します

Javaコードの脆弱性を減らす1つの方法は、DevSecOpsワークフローに移行することです。このタイプのワークフローは、開発プロセスのすべての段階でセキュリティを最重要事項にします。開発者として、私たちのソフトウェアが私たちが働いている組織のすべての部分で使用されている(そして時には適応されている)ことを忘れがちです。あなたのマーケティングチームがあなたの努力を弱体化させると決心しているなら、侵入に対してあなたのウェブアプリを強化することは良くありません。すべてのチームを開発プロセスに含め、セキュリティがプロジェクトのあらゆる側面で考慮されるようにします。

ワークフローのセキュリティを評価する

また、独自のワークフローのセキュリティもよく検討する必要があります。Webアプリ自体は安全かもしれませんが、開発者にとって最も急速に成長している脆弱性の原因の1つは、開発システム自体です。開発システムがハッキングされた場合、悪意のあるコードをソフトウェアに挿入するためのポータルになります。これを回避するには、VPNを使用してすべての内部通信を暗号化するようにしてください。また、必ず暗号化されたデータストレージを実装してください。

結論

調査によると、Javaは他のいくつかの言語よりも安全性が低いことがわかっていますが、開発者はその発見をほんの少しの塩でとらえる必要があります。新しくてあまり使用されていない言語の方が安全に見えるかもしれませんが、それは脆弱性の多くがまだ発見されていないためか、さらに悪いことに、発見されたが報告されていないためです。

リスクを理解し、Javaアプリを保護するためにあらゆる合理的な予防策を講じる必要がありますが、ランキングについてはあまり心配しないでください。Java開発者として、あなたは少なくとも自分が何に反対しているのかを知っています。

この話、「Javaは他の言語と比較してどれほど安全ですか?」もともとJavaWorldによって公開されました。