Javaは我々が信じているほど安全ですか?


Javaは元々サン・マイクロシステムズ(ジェームズ・ゴスリング)によって開発されたプログラミング言語である.言語はCとC +から多くの構文を導きます、しかし、それはより単純なオブジェクトモデルとそれらのどちらよりも低いレベルの施設を持っています.
Javaでは、複数のプラットフォームで実行できるアプリケーションを開発者が作成できます.この言語はオブジェクト指向プログラミングパラダイムに基づいています.これは、コードが互いに相互作用できるオブジェクトに編成されることを意味します.
さらにJavaはプラットフォームに依存しない言語を持っています.これはJava実行環境(JRE)をサポートするプラットフォームでJavaコードが実行できることを意味します.JREはJavaコードを実行するプラットフォームを提供するソフトウェア層です.JREはWindows、MacOS、Linuxを含む複数のプラットフォームで利用可能です.
一見Javaはセキュリティの高いレベルを提供する安全な言語です.一方、Javaは不安定な逆シリアル化のための最も文書化された言語です.

Javaは学ぶための簡単な言語であり、開発者がJavaプログラミングで始めるのを助けるために利用できる様々なリソースがあります.
Javaプログラムを書くときは、Java仮想マシン( JVM )用のマシンコードであるバイトコードにコンパイルできます.JVMはプラットフォームに依存しないので、同じバイトコードがJVMを持っているオペレーティングシステムで動作することができます.
Javaはオブジェクト指向プログラミング言語であり、アプリケーションを構築するためにオブジェクトとクラスを使用することを意味します.オブジェクト指向プログラミングでは、クラスはオブジェクトを作成するためのテンプレートです.オブジェクトはクラスのインスタンスです.オブジェクトを作成すると、クラスのインスタンスを作成します.たとえば、人を表すオブジェクトを作成できます.このオブジェクトのクラスには、その人の名前、住所、電話番号などの情報が含まれます.クラスを作成したら、必要に応じてそのクラスから多くのオブジェクトを作成できます.

Java脆弱性


読み続ける前に、読んでいない場合はチェックしてみましょう.
SerializeオブジェクトはJavaでどのように見えますか?


シリアライズできるオブジェクトはJavaを実装しなければなりません.入出力SeralizableインターフェイスまたはJava.入出力拡張可能です.
逆シリアル化のプロセスはJavaによって取り除かれます.入出力ObjectOutputStreamとJava.入出力ObjectInputStream.
オブジェクトがObjectInputStreamによって読み込まれると、悪意のある逆シリアル化が発生します.

Javaでの古典的なシリアル化と逆シリアル化のコード
import java.io.*;
class someObj implements Serializable
{
String name;
static String id;
someObj(String n, String id)
{
this.name = n;
this.id = id;
}
}
class Test
{
public static void main(String[] args)
{
someObj sobj=null ;
try
{
FileInputStream fis = new
FileInputStream("/filepath/file.txt"); //serialization
//deserialization
ObjectInputStream ois = new ObjectInputStream(fis); //
sobj = (someObj)ois.readObject();
}
catch (Exception e)
{
e.printStackTrace(); }
}
}

メインJava障害


我々は、「Apostolos Giannakidis」に従って、5つのカテゴリーでJavaで不安定な逆シリアル化を分類することができます
  • 変数変更攻撃:攻撃者はシリアライズオブジェクトの変数を変更します.
  • O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}param bの値を1に変更して管理者になります.
  • 多型:攻撃者は同じ親オブジェクトから別のオブジェクトを送ることができます.例: simpleuserとadminuserはユーザクラスから継承します.
  • 延期された実行攻撃:悪意のあるペイロードは、例えば「finalize」機能をもつオブジェクトの終身期の間、逆シリアル化のプロセスの間、特定の時間で実行されます.
  • ガジェットチェーン攻撃:攻撃者が一連の「ガジェット」を使用しているタイプの悪用である.これらのガジェットを結合することによって、攻撃者は標的システムの制御を得ることができるか、他の悪意ある行動を実行することができます.シリアライズペイロードを作成するには、ysoserialを使用できますjava -jar path/to/ysoserial.jar CommonsCollections4 'whoami'
  • プロキシ攻撃:メソッドのクラスを通してコードにガジェットを使用するために、プロキシとして他のクラスの使用.
  • Javaと不安定な逆シリアル化を結ぶことは、対処する必要がある深刻な問題です.問題を緩和するために使用することができるいくつかの回避策がありますが、最終的には、開発者が自分のコードが安全であることを確認します.不安定な逆シリアル化は深刻なセキュリティ脆弱性につながることができるので、リスクを認識し、それらを避けるための措置を取ることが重要です.