Java ON A SERVER自体が安全でないことを管理者に納得させる方法は?


13

アプリケーション

いくつかのCamelルートを使用してWebサーバーからアップロードされたファイルを取得し、それらを処理し、結果を含む電子メールを送信する小さなJavaアプリケーションがあります。

このアプリケーションが実行されていたサーバーは廃止されました。現時点では、Webサーバー(実際には多目的サーバー)にJREをインストールするよう管理者を説得することはできないため、低電力のハードウェアで実行する必要があります。

恐怖

私は自分でJavaアプリケーションエンジニアであり、生活のためにJEEコードを書いており、1週間に数万ユーロの価値があるB2Bトランザクションを処理しています。しかし、Java自体は安全でないという神話に反論する信頼できるソースを見つけるのに問題があります。

JREのインストールに対する管理者の2つの主な議論:

  1. JavaアプリケーションはすべてのRAMを使い果たします
  2. Javaには脆弱性がいっぱいです

真実?

JavaアプリケーションがRAMを食い尽くす場合。さて... Xmxに適切な値を設定する必要があると思います。できた

現在、Javaの多くの脆弱性について話している多くの情報源があります。これらのソースは、主に米国レドモンドの会社の特定のオペレーティングシステムを実行しているエンドユーザーを対象としています。私の知る限り、すべてのアプレットを自動的に実行するように設定されたJavaブラウザプラグインのパッチが適用されていないバージョンでは、感染によってドライブの犠牲になる可能性が非常に高いことがあります。通勤中に電車の中でイベイオンと無防備なセックスをしているときに性感染症にかかるリスクがあるように。

しかし、サーバーアプリケーションやヘッドレスで実行されているJREについて話す世界的なinterwebzでだれも見つけることができませんでした。それはまったく別のことです。

それとも私はここに何かが欠けていますか?

[編集2014-08-28]明確化:私はサーバー上のJavaのみに関心があります。JavaプラグインやJavaで開発された特定のソフトウェアの問題は気にしません。


7
搭載されているハードウェアの性能が明らかに低下しており、問題を引き起こしている場合、SAの懸念と並んで、新しいハードウェアを入手するビジネスケースが確実にあります。
user9517

4
彼がthedailywtf.comで見たあなたの会社のコードではないことを彼に説得してください
マイケルハンプトン

9
Javaは2013年に大雑把なでした。ゼロデイのエクスプロイトを追跡し続けているウェブサイトもありました。昨年の半ば以降、ゼロデイ攻撃は行われていませんが、研究者は今年だけで107個のJava CVEを発見しています。それは「安全」からの長い道のりです。
クリスS 14

5
悪意のあるデータをアプリケーションに送信することでJVMのバグをトリガーできますか?信じる方がいい。また、これらのCVEの多く、通常のWindowsデスクトップブラウザープラグインではなく、サーバーでのJavaの実行に関連しています。
マイケルハンプトン

3
@lajuette私は理由のために107番号へのリンクを提供しました-あなたがそれをクリックしたなら、あなたがたった今尋ねた質問すべてが答えられたでしょう。これらの107の一部は、AndroidのDalvakなど、Oracle以外の実装に関連していますが、大半はOracleの実装に関連しています。Javaは本質的に安全ではありませんが、Sun / OracleのJREには問題がたくさんあります。PHP、Perl、Rubyにも脆弱性があります。完璧なものはありません。Javaが現在のJavaより優れているか悪いかを言うことはできませんでしたが、昨年はセキュリティ業界の急成長​​を遂げてきました。
クリスS 14

回答:


18

Javaが環境に追加する追加のセキュリティサーフェスは複雑であり、それを無視したり、単純化したりしないことが重要です。

まず、JREがセキュリティバグを抱えているという恐ろしい記録があります。特定の問題を指摘することは困難であり、これは恐ろしい部分です-バグは、不特定のベクトルによる不特定の脆弱性です。

セキュリティコンサルタントとして、「リモートの攻撃者を許可する」などの条項を、その意味をさらに限定せずに読むと、特定の機能に入る特定のパラメーターが脆弱な状態を引き起こす可能性があることを非常によく意味していることがわかりますあなたが書いたコードのみを実行しています。そして、それらは特定されていないので、あなたはあなたが影響を受けたかどうかを知ることができません。

さらに良いことに、オラクルが公開する標準JREには、ほぼすべてのセキュリティ更新を含む重要な更新のための四半期ごとの更新サイクルが記載されています。過去4年間で合計11回のサイクル外パッチを作成しました。これは、セキュリティバグが報告されてから修正するまでに最大3か月間、セキュリティバグに対して脆弱である可能性があることを意味します。

ここには入りませんが、javaには他の問題もありますが、実際には、特に多目的サーバーの場合、正当な懸念があるようです。そのようなことを実行する必要がある場合は、少なくともそのための単一目的のVMを作成し、他のものから分離する必要があります。

特に、攻撃者がRCEを取得できるJREにリモートがあり、同じことを行うPHPの別のリモートと、同じことを行うRubyの別のリモートがある場合、3つすべてにパッチを適用する必要があります。これらすべてが進むにつれて、3つすべては多少可能性があり、攻撃者は最も便利な方を選択し、サーバー全体を所有するようになります。そのため、VMを使用してソフトウェア、特にマネージド言語フレームワークのようなバグのあるソフトウェア、特にセキュリティパッチを年に4回だけバンドルし、それらがすべての証拠であると主張するベンダー独自のソフトウェアを分離する必要がありますセキュリティ。

更新するために、ChrisSのリンクされたCVE検索からデモンストレーションとして選んだCVEをいくつか紹介します。

そして私のお気に入りは、私がそこにいたときから:

ちなみに、これはほんの小さなサンプリングです。


6

JavaアプリケーションはすべてのRAMを使い果たします

RAMを使用する代わりに、RAMを浪費します。後で保存することはできません。

Javaには脆弱性がいっぱいです

JVMを世界に公開するつもりはないので、それは実際には重要ではありません。私はあなたが敵対的なプログラムを実行するつもりはないと思います。もしそうなら、Javaは他のほとんどの言語よりも安全です。重要なのは、アプリケーションに脆弱性があるかどうかです。


3
さて、理由は機能しません。説得ツールボックスには他にどのようなツールがありますか?さびたペンチはありますか?
デビッドシュワルツ14

1
@FalconMomotはい、カーネルはそれを使用してファイルをキャッシュできます。カーネルは、より適切に使用できる場合、JVMからメモリを奪うことができます。これが、現代のすべてのOSが機能する方法です。RAMを使用する代わりに、RAMを浪費します。OSには、特にRAMが最適な目的で使用されるようにするためのメモリマネージャーがあります。「JavaアプリケーションがすべてのRAMを消費する」などの引数は、ほとんどの場合、最新のオペレーティングシステムがRAMを使用する方法を理解していない管理者を示しています。
デビッドシュワルツ14

1
JVMがメモリを解放しない場合、これを行うにはスワップスペース(ある場合)にスワップアウトする必要がありますが、これは遅いです。カーネルはガベージコレクターを呼び出すことができません。また、ファイルキャッシングは、ほとんど使用されていない場合でも、ユーザー空間の割り当てよりも優先度が低くなります(カーネルは、ほとんど使用されていないことを認識できるため、あまり良くありません)。
ファルコンモモット14

3
LinuxがキャッシュにRAMのブロックを同時に使用し、プロセスがまだそれを所有していると見なす方法について詳しく知りたい。これについて聞いたことがありません。
マイケルハンプトン

1
@FalconMomotカーネルは、RAMが「空き」であることを知る必要はありません。アプリケーションがページをロックしない限り、カーネルは常にRAMの使用を制御します。RAMを取り戻すには、マップされたページを破棄可能にする必要があります。データが一定期間変更されておらず、使用されておらず、I / O帯域幅が飽和していない場合、日和見的にスワップに書き込み、ページを破棄可能にして、より適切に使用できるようになるとすぐにRAMを再利用できますそれのための。(このスペースは、最新のメモリ管理がどのように機能するかを説明するのに十分な大きさではありませんが、非常に一般的な誤解があるようです。)
デイビッドシュワルツ14

2

プログラムの静的分析を行う会社を雇います。たとえば、Veracodeは、特にJavaプログラムのコードセキュリティの監査に過去に使用したことがある会社です。

明らかに、管理チームの請求コードを請求してください。


1

他のすべての言語(または仮想マシン)は、Javaの場合と同様に、それらにデプロイされたコードによって安全ではない可能性があることを説明します。セキュリティに正しく対処せずに、他のプラットフォームが本質的に安全である(またはJavaよりも安全である)と彼が考える場合、彼は妄想です。

あなたの会社は明らかにJava開発者の雇用に投資していますが、なぜシステム管理者は会社が使用することを決めたテクノロジーのサポートを拒否していますか?

私は質問をひっくり返して、彼が提案する代替案と、利用可能な最新のサーバーJREよりも安全な方法を、非常に具体的な用語で彼に尋ねます。それまでの間、あなたのテクノロジー、起こりうる攻撃対象、およびそれを最小限に抑えるために取り組んだこと(たとえば、不要なフレームワーク、サードパーティのコードなど)を理解できるように努めてください。コードを検証し、過去X年間に依存しているフレームワークについて公開された脆弱性を探し、他の言語/フレームワークと比較します(市場シェアも含めてください。公開された脆弱性のない不明瞭なフレームワークは意味がありません)。

あなたとあなたの2人の間の変換全体がどのように起こったかはおそらくわかりませんが、もしそれが彼の2つの議論であるなら、あなたは後輩のシステム管理者を扱っていると思います。彼はJavaアプリケーションサーバーの経験がありますか?おそらく彼はテクノロジーに不快感を覚えており、それを完全に理解せずに本番環境に入れることを恐れています(そのときはシステム管理者としての態度が良い)。


ありがとう。私たちは会社について話しているのではありません。むしろ非営利団体。システム管理者にはITとマーケティングの医師がいますが、「本当の」システム管理者ではありません。そして、はい:彼はJavaを恐れていると思いますが、彼はそれを完全には理解していません。
ラジュエット14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.