小さなJavaアプリケーションがあり、いくつかのCamelルートを使用して、アップロードされたファイルをWebサーバーから取得し、それらを処理して、結果を含むいくつかの電子メールを送信します。
このアプリケーションが実行されていたサーバーは廃止されました。今のところ、Webサーバー(実際には多目的サーバー)にJREをインストールするように管理者を説得することができないため、電力不足のハードウェアで実行する必要があります。
私はJavaアプリケーションエンジニアです。私は生計を立てるためのJEEコードを作成し、週に数万ユーロ相当のB2Bトランザクションを処理しています。しかし、その神話に反論する信頼できる情報源を見つけるのに問題があります。 Javaそれ自体は安全ではありません。
JREのインストールに対する管理者の2つの主な議論:
JavaアプリケーションがRAMを消費することになると、そうですね... Xmxに適切な値を設定する必要があると思います。完了しました。
現在、Javaの多くの脆弱性について話している多くの情報源があります。これらのソースは主に、米国レドモンドの会社の特定のオペレーティングシステムを実行しているエンドユーザーを対象としています。パッチが適用されていないバージョンのJavaブラウザプラグインは、すべてのアプレットを自動的に実行するように構成されているため、感染によるドライブの犠牲になる可能性が非常に高いということは事実かもしれません。通勤中に電車の中でエベヨンと無防備なセックスをすると、性感染症にかかるリスクがあります。
しかし、サーバーアプリケーションやヘッドレスで実行されているJREについて話している人は世界中のinterwebzで見つかりませんでした。それはまったく別のことです。
または私はここで何かが欠けていますか?
[編集2014-08-28]説明:私はサーバー上のJavaについてのみ懸念しています。Javaプラグインと/またはJavaで開発された特定のソフトウェア。
追加のセキュリティ面Javaが環境に導入するのは複雑であり、無視したり単純化したりしないことが重要です。
まず、JREがセキュリティバグを抱えているという恐ろしい記録があります。特定のものを指摘するのは難しいです、そしてこれは恐ろしい部分です-バグは不特定のベクトルを持つ圧倒的に不特定の脆弱性です。
私がセキュリティコンサルタントとして、「リモートの攻撃者を許可する」などの条項を、その意味をさらに限定せずに読んだ場合、特定の関数に入る特定のパラメータが脆弱な状態を引き起こす可能性があることを意味していることがわかります。あなたが書いたコードだけを実行しています。そして、それらは特定されていないので、あなたはあなたが影響を受けたかどうかを知ることができません。
さらに良いことに、オラクルによって公開された正規のJREには、ほぼすべてのセキュリティ更新を含む重要な更新の四半期ごとの更新サイクルが記載されています。彼らは、過去4年間で合計11回のサイクル外パッチを作成しました。これは、セキュリティバグに対して脆弱である可能性があることを意味します報告されてから最大3か月修正する方法がない前に。
Javaには他にも問題がありますが、ここでは説明しませんが、特に多目的サーバーの場合は、正当な懸念があるようです。そのような問題を実行する必要がある場合少なくとも、単一目的のVMを作成し、他のものから分離する必要があります。
特に、攻撃者がRCEを取得できるようにするリモートがJREにあり、同じことを行うPHP)に別のリモートがあり、Ruby =これも同じですが、3つすべてにパッチを適用する必要があります。これらが進むにつれて、3つすべてにパッチが適用される可能性が高くなり、攻撃者は最も便利な方を選択してサーバー全体を所有するようになります。そのため、VMを使用して分離する必要がありますソフトウェア、特にマネージド言語フレームワークのようなバグのあるソフトウェア、特にセキュリティパッチを年に4回だけバンドルし、セキュリティのパラゴンであるというすべての証拠に直面して主張するベンダー独自のソフトウェア。
更新するために、デモとして、ChrisSのリンクされたCVE検索からチェリーピックしたCVEをいくつか示します。
そして、私がそこにいたので、私のお気に入り:
ちなみに、これはほんの小さなサンプリングです。
Javaアプリケーションは私のRAMをすべて使い果たします
RAMを使用する代わりに、RAMを無駄にすることもできます。後で使用するために保存することはできません。
Javaは脆弱性に満ちています
JVMを世界に公開するつもりはないので、それは実際には問題ではありません。敵対的なプログラムを実行するつもりはないと思います。実行する場合は、Javaは他のほとんどの言語よりも安全です。重要なのは、アプリケーションに脆弱性があるかどうかです。
あなたのプログラムの静的分析を行うために会社を雇ってください。たとえば、Veracodeは、特にJavaプログラムのコードセキュリティを監査するために過去に使用した会社です。
明らかに、管理チームの請求コードを請求します。
他のすべての言語(または仮想マシン)は、Javaの場合と同様に、それらにデプロイされたコードによって安全でなくなる可能性があることを説明します。他のプラットフォームがセキュリティに正しく対処せずに本質的に安全である(またはJavaよりも安全である)と彼が考える場合、彼は妄想的です。
あなたの会社は明らかにJava開発者の雇用に投資しましたが、なぜsysadminは会社が使用することを決定したテクノロジーのサポートを拒否しているのですか?
私は質問をひっくり返し、彼が提案する代替案と、それらが利用可能な最新のサーバーJREよりもどのように安全であるかを非常に具体的に尋ねます。それまでの間、テクノロジー、攻撃対象領域の可能性、およびテクノロジーを最小限に抑えるために取り組んだこと(不要なフレームワーク、サードパーティのコードなど)を理解していることを示すように努めてください。コードを検証し、過去X年間に依存しているフレームワークに対して公開されている脆弱性を探し、他の言語/フレームワークと比較します(市場シェアも含めるようにしてください。公開された脆弱性のないあいまいなフレームワークは、何の意味もありません)。
あなたと2人の間の全体的な転換がどのように起こったのかはおそらくわかりませんが、それが彼の2つの議論だったとしたら、あなたは後輩のシステム管理者と取引していると思います。彼はJavaアプリケーションサーバーの経験がありますか?おそらく、彼はテクノロジーに不快であり、完全に理解せずに何かを本番環境に置くことを恐れています(そのときはシステム管理者の態度が良い)。