Javaにはバッファオーバーフローがありますか?
-
20-08-2019 - |
質問
Javaにはバッファオーバーフローがありますか?もしそうならシナリオを教えてもらえますか?
解決
以来、Javaの文字列に基づくchar配列およびJavaに自動的にチェック配列の境界は、バッファが溢れるならではの珍しいシナリオ:
- お問い合わせいただいた場合のネイティブコードによJNI
- のJVMそのもの(通常はC++で記述され)
- の通訳又はJITコンパイラは正常に動作しません(Javaバイトコードが指令した境界をチェック)
他のヒント
JavaやC#などのマネージ言語は、これらの問題を持っていないが、実際にコードを実行する特定の仮想マシン(JVM / CLR /など)があります。
どう見てもノーです。
Javaには配列があります 境界チェック これにより、割り当てられた配列の外側の領域からデータにアクセスできないことがチェックされます。配列のサイズを超える領域にアクセスしようとすると、 ArrayOutOfBounds
例外がスローされます。
バッファ オーバーランが発生した場合、それはおそらく Java 仮想マシンのバグによるものであり、私の知る限りでは、Java 言語仕様や Java 仮想マシン仕様に記載されている意図された動作ではありません。
バッファオーバーフローの厳密な意味での書き換えることでスタックやヒープそのものが必要だ。
- バグの枠組み(これらに存在していた過去にはあっても再度)
- のJNI(本質的になくなっ用管理コード)
バッファオーバーフローの感覚でコードをバッファとコードの責任者の構文解析を用い、正しく表してくださいが失敗しなが可能です。たとえば、ものを書のXMLパーサーというのご提供が不正(または正当なものは珍しく)要求により、デザインのパーサで上書き前の検証データの一部のペイロードすることに申し込んで行ける。
この後者の形がなく書きsql文字列洗浄機能に広く分布する問題などするよう招きます。
あります。いいえ、できなかを誤って開き自分をバッファオーバーフローの脆弱性ですので管理メモリのモデルです。しかし、できるバッファオーバーフロー脆弱性のJVMおよび推奨します。このSecunia諮問:
http://secunia.com/advisories/25295
はこれらの古い注意くつかの前JDKおよびJREの脆弱性:
整数バッファオーバーフローの脆弱性には、Java Runtime Environment(JRE)の"unpack200"JAR開梱ユリの深刻化と権限の https://download.oracle.com/sunalerts/1020225.1.html
整数バッファオーバーフローの脆弱性には、Java Runtime 環境(JRE)の開梱アプレットおよびJava Web Start 用の"unpack200"JAR開梱明ができる 信頼できないアプレット用治特典をご利用いただけます。例えば、 信頼できないアプレットが付与自体のアクセス権を読み書き 地元のファイルを実行する現地アプリケーションアクセスの ユーザーの信頼できないアプレット.
日認さ"regenrecht"のiDefense VCP(http://labs.idefense.com/vcp/)カレントアウェアネス-ポータルエヴァンスでのGoogleのために をこれらの課題を当社ます。
複数の脆弱性が確認されているSun Java Development Kit(JDK)およびJava実行環境(JRE). https://security.gentoo.org/glsa/200705-23
不特定の脆弱性に関する"誤使用のシステム 授業"されたと報道されていましたが、富士通セキュリティチームです。また、 クリス-エヴァンスからGoogleセキュリティチームの報告の整数オーバーフロー を伴うバッファオーバーフローのICCのパーサを使用JPG、BMP ファイルに誤りがあったopen()の呼び出/dev/ttyに加工した場合 特定のBMPファイルです。
のJava(および.NET)仮想マシンは、外部予約メモリの書き込みを試みるコードをキャッチ。これを正しく処理しないアプリケーションはまだセキュリティ上の問題を引き起こす可能性があります。悪意のあるユーザーが無効な入力を入力することによって、例外をトリガすることができれば、彼らは例えば、サービス拒否攻撃を行うことができます。
すでに指摘したように、Javaは、言語として、境界がすべてのメモリアクセスにチェックしており、ここでエラーがあるかどう、JVMは、プログラムは、障害があるとありません。しかし、Javaでメモリリークに似引数であるか、何を注意すべきです。スタックを粉砕することはできませんが、正しく処理されていない、間違った場所にArrayOutOfBoundsExceptionは、まだあなたのシステムを台無しに終わる可能性があります。
それは、典型的には、整数オーバーフローを介して、することを意図していなかったことをアレイの有効なエントリに書き込む方法が可能である。
は、例えば次の境界を確認するのに十分ではない。
/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */
IIRC、StringBuffer
一度そのようなバグがあったが、あなたはそれを行うことができ、興味深いものがありませんでした。
す影響がバッファオーバーフローをJavaプログラムまたはJava Native Interace(JNI)の施設を呼び出すとき外部コードの外部コードた悪用可能な問題です。これはかなり珍しく、ほとんどのアプリケーションの使用は避けJNIが可能です。
JAVAの主な特徴の1つはセキュリティです。インタプリタ言語で書かれたプログラムを悪用し、バッファ・オーバーフローを起こしやすいではありませんが、あなたは常にインタプリタ自体のバッファオーバーフローを引き起こす可能性があります。 それは難しいだろうが。同様にPythonはまた、インタープリタ言語であり、バッファオーバーフローから安全である。