3

WindowsまたはPCで実行されているJavaアプリがマルウェアであるかどうかを判断するためにどのような自動メソッドを使用できるのか知りたいです。(そのようなアプリでどのようなエクスプロイトが利用できるかさえ本当にわかりません。リスクについて知ることができる場所はありますか?)ソースコードがある場合、他のものよりも有害に使用される可能性のある特定のパッケージまたはクラスはありますか?おそらく彼らはマルウェアを示唆する可能性がありますか?

更新:返信ありがとうございます。私はこれが可能かどうか知りたいと思っていましたが、基本的にはまったく実行不可能に聞こえます。知っておくと良い。

4

3 に答える 3

4

プログラムが終了するかどうかを自動的に判断することさえできない場合、アプリが「やんちゃなこと」をするかどうかを自動的に判断することにあまり力を入れないと思います。

もちろん、問題の一部はマルウェアの構成要素を定義することですが、大部分は、他のプログラムの動作に関する証拠を推測することは驚くほど困難/不可能であるということです。特定のパターンを見つけることができるかもしれませんが、全体として、考えられるすべての攻撃ベクトルを捕らえたことを確信することはできません(そして、それはおそらく不可能だと思います)。

そして、一般的な領域では、攻撃者が単に残りの5%に集中する場合、ベクトルの95%をキャッチすることは実際には価値がありません。

于 2011-03-22T16:20:12.617 に答える
2

さて、基本的な哲学的な質問は常にあります:マルウェアとは何ですか?それは、損害を与えることを意図したコード、または少なくともそれが主張することを行わないコードです。使用するライブラリに基づいて意図をどのように判断する予定ですか?

そうは言っても、プログラムが何をすべきかを少なくとも大まかに知っていれば、プログラムが通常アクセスする必要のない疑わしいパッケージを実際に見つけることができます。プログラムがデスクトップアプリとして実行されることを意図している場合のネットワーク接続のように。ただし、ネットワーク接続は自動更新機能の一部である可能性があります。(自動更新自体はマルウェアですか?時々、マルウェアのように感じられます。)

もう1つの指標は、表面上は特別な特権を必要としないプログラムが、サンドボックスでの実行を拒否したかどうかです。そして最大の脅威は、ネイティブライブラリを必要としないときにロードしようとする場合です。

しかし、これらはすべて、コードが何をするのかを知っている場合にのみ意味があります。ウイルス対策パッケージはウイルスと非常によく似た手法を使用する場合がありますが、唯一の違いはラベルの内容です。

于 2011-03-22T16:22:08.167 に答える
0

これは、Javaアプリケーションが実行できる可能なアクションを制限する方法の一般的な概要です。基本的に、Javaアプリケーションが「不活性」(有害なアクションを実行できない)であるかどうかをテストしているため、おそらくマルウェアではありません。

他の人が指摘しているように、これは必ずしもマルウェアかどうかを教えてくれるわけではありません。アプリは、ポップアップウィンドウのような厄介なことをする可能性があります。おそらく最良の兆候は、アプリケーションが信頼できる作成者によってデジタル署名されているかどうかを確認することです。そうでない場合-恐れてください。

クラスファイルを逆アセンブルして、アプリケーションが使用するJavaAPIを判別できます。JavaアプリがOSを使用するポイントを探しています。Javaは仮想マシンを使用するため、Javaアプリケーションが潜在的に有害なアクションを実行する可能性のある明確なポイントがあります。これらはさまざまなOS呼び出し(ソケットのオープンやファイルの読み取りなど)への「ゲートウェイ」です。

すべてのAPIを列挙するのは難しいため、同じOSアクションを実行するさまざまな関数には同じ権限が必要です。しかし、Javaのドキュメントは完全なリストを提供していません。

  • Javaアプリはネイティブライブラリを使用していますか?使用している場合は、大きな危険信号です。

    JVMには、任意のコードを実行したり、ネイティブシステムAPIを使用したりする機能はありません。特に、レジストリを変更する機能はありません(PCマルウェアの一般的なアクション)。Javaアプリケーションがこれを実行できる唯一の方法は、ネイティブライブラリを使用することです。通常、Javaで記述された通常のアプリケーションでネイティブコードを使用する必要はありません(デバイスを使用する必要がある場合を除く)。

    System.loadLibrary()またはSystem.load()またはRuntime.loadLibrary()またはRuntime.load()を確認します。これは、VMがネイティブライブラリをロードする方法です。

  • ネットワークまたはファイルシステムを使用していますか?

    java.io、java.netの使用を探します。

  • システムコールを実行しますか(Runtime.exec()を介して)

    java.lang.Runtime.exec()またはProcessBuilder.exec()の使用を確認できます。

  • キーボード/マウスを制御しようとしますか?

制限付きポリシーのJVMでアプリケーションを実行し(これを行うための手順/ツールは必要なほど単純ではありません)、何が失敗するかを確認することもできます(Oracleのセキュリティチュートリアルを参照)-確実にする唯一の方法は分解であることに注意してください、アプリが一度は有害なことを何もしないからといって、将来的には害がないという意味ではありません。

これは確かに簡単なことではなく、見る必要のある場所がいくつあるかを知って驚いた(たとえば、1つだけでなく複数のJava関数がネイティブライブラリをロードする)。

于 2011-03-22T16:22:54.693 に答える