2011-11-29 8 views
3

私はJARファイルを解析するクローズドソースのJavaアプリケーションを開発中です。 www.reversed-javaの:私は私のサーバー上でアプリケーションを実行し、 それがここfernflowerのような多くを結果だ返されますオンラインサービスを提供するJava以来​​ を簡単に逆コンパイルすることができ、難読化は本当に大したことではありません、 。 com/fernflower /。Java - 動的なjarロードはどのように悪用可能ですか?

問題は、私は決して瓶を実行していないにもかかわらず、私のアプリが潜在的に harmfull jarsをサーバーにロードするという災害のレシピです。 私がやっているのは、URLClassLoaderJarInputStreamを使ってロードすることだけです。

悪意のあるコード を実行するか、自分のプログラムを台無しにするために、元のアプリでクラスを上書きすることができますか?

動的にjarファイルをロードにおけるリスクは何ですか?

+0

どのようにロードしますか?クラスは、クラスが「通常の」方法でロードされるときにコードを実行する静的な初期化子を持つことができます。 – Thilo

+0

'jarLoader =新しいURLClassLoaderの(新しいURL [] {。this.jarFile.toURI()toURL()}にThread.currentThread()getContextClassLoader())。 jarLoader.loadClass( "MyClassの"); ' – YLivay

+0

最も可能性の高い' Myclass'の静的初期化子を実行します。そこにSystem.out.printlnを置き、それがどこかに現れているかどうか確認してください。無限ループ。 – Thilo

答えて

8

jarsを動的にロードする際のリスクは何ですか?

動的自体を読み込むのないリスクはありません。リスクは本当に信頼できないコードを実行するリスクです。適切な注意を怠ると、マシンが完全に危険にさらされる危険があります。

あなたはこの種のものをやろうとしている場合は、非常に少なくとも、あなたは潜在的に有害な何かをやってからそれを停止したサンドボックス内で信頼できないコードを実行する必要があります。たとえば、ローカルファイルの読み取りと書き込み、外部プロセスの実行、リフレクションの使用、システムプロパティへのアクセスなどをブロックする必要があります。また、スレッドの作成、ソケットの作成、システムリソースを消費するその他の作業を停止することもできます。

は最後に、あなたには、いくつかの信頼できないJARが無限ループである方法を持っている場合を考慮する必要があります。これはセキュリティサンドボックスの使用では対処できない問題です。実際に、ループスレッドを取り除く唯一の爆弾防止方法は、JVMを終了して再起動することです。

悪意のあるコードを実行するために、私の元のアプリケーションのクラスをオーバーライドすることはできますか?

私はそれがあなたのクラスを簡単に上書きできるとは思わないが、あなたの世界を「混乱させる」ために信頼できないコードのための他の多くの方法がある。上記を参照。 (信頼できないコードがリフレクションコードを実行できる場合は、となります。は、クラスローダーのプライベートデータ構造を使いこなすことでクラスをオーバーライドできます)。

+0

詳細な回答ありがとう!どのようにしてもjarファイルを実行しているわけではありませんが、ロードされたjarファイルがクラスをオーバーライドする方法はありますか? – YLivay

+2

ロードできるコードに静的イニシャライザを実行しないように**保証することができれば、安全です。 –

+0

もう一度おねがいします!静的なイニシャライザが実行されないようにする方法を探しています。 – YLivay

関連する問題