Welcome to Our Website

Javaデシリアル化の理解

上記のように、コードは”スレッド”メイン”javaで例外”というエラーを出します。ラングClassCastException:テストセリアライゼーション。ExploitDeserをtestserializationにキャストすることはできません。Employee”これは、型キャストが適切ではないことを意味しますが、コードはまだ実行されます。 DeserializeDemoクラスのreadObject関数は、ExploitDeserクラスのreadObjectのカスタム実装を実行できます。,

これは、readObjectのカスタム実装を持つカスタムクラスのシリアル化されたデータが入力として提供されている場合、型キャストエラーがまだあるにもかかわらず、上記のように実行されるという、ここでは安全でない逆シリアル化とは何ですか。

これは、ysoserialやその他のjava逆シリアル化開発ツールで使用されるガジェットチェーンによって行われるもので、クラスの連鎖を探して、ユーザー入力の一部として提供されるシステムレベルのコードを実行できるreadObjectのカスタム実装に最終的に着陸します。,

Remediation

さて、デシリアル化とは何か、そしてそれがどのように悪用されるのかを見てきましたが、これに対する修復を見てみましょう。

ここで説明しようとしている修復は”先読みクラス検証”と呼ばれ、逆シリアル化したいクラスのリストをホワイトリストに登録できます。 例えば。 当社のシナリオばしていくことも期待されるのみ許可する設定を行う従業員のclassオブジェクトのデータを直列化復元および残存ですることを認めるべきではない直列化復元.,したがって、基本的にこのメソッドが行うことは、”ObjectInputStream”(逆シリアル化中に使用)クラスの一部である関数”resolveClass”をオーバーライドし、逆シリアル化する必要があるclassessのリストのホワイトリストを実行することです。

この理論が終わったので、実装にジャンプしましょう。,

新しいクラス”LookAheadObjectInputStream”を作成して、メンバー関数resolveClassをオーバーライドできるようにObjectInputSteamクラスに拡張します。

上記のコードでは、次の行があります。

if (!desc.getName().equals(Employee.class.getName())) {

シリアライズされたコンテンツにEmployeeクラスのオブジェクトが含まれている場合、基本的にはエラー”Unauthorized deserialization attempt”を提供し、その実行を妨げます。,

これで、”DeserializedDemo”の最終的な変更コードは次のとおりです。

modified deserializedemo class

上記のコードでは、objectinputstreamクラスを呼び出す代わりに、lookaheadobjectinputstreamクラスが呼び出され、実行時にresolveclassメソッドをオーバーライドし、それに応じて実行される強調表示されたコード

さて、悪意のあるものを渡すことができます。,p>

カスタムクラスのシリアル化されたデータの実行エラー

上記のように、今回はカスタムクラス”exploitdeser”からのreadobjectのカスタム実装が逆シリアル化中に実行されません。, 代わりに、LookAheadObjectInputStreamクラスの下でオーバーライドされたresolveClass関数で設定されたカスタムエラーメッセージ”Unauthorized deserialization attempt”が表示されます。

これは、安全でない逆シリアル化を防ぐために先読みクラス検証メソッドを使用する非常に簡単な例です。 このアイデアを中心とした広範な実装は、”serialKiller”ライブラリです。 リンクは以下にあります:

したがって、これはjavaで安全でない逆シリアル化を軽減するためのソリューションの一つと考えることができます。,

私はまだ私が後でブログについてブログする緩和の他の方法について調べています。

あなたの貴重なフィードバックを提供してください。 それまでハッキングと学習を続ける….

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です