私には、Javaでマルウェアを書くことはできないように思えました。 Java=を教えてくれた人たちは、それは「安全」で、c、c ++のような「低レベルのアクセス」を許可しないと言っていました。
しかし、それが可能であることを発見しました http://blog.trendmicro.com/trendlabs-security-intelligence/jacksbot-has-some-dirty-tricks-up-its-sleeves/
同じことに関するメモ- http://www.darknet.org.uk/2011/01/Java-based-cross-platform-malware-trojan-maclinuxwindows/
これが私の質問です-Javaを使用して、c、c ++が実行できる「マルウェアが必要とする悪いこと/タスク」をすべて実行できますか?
その場合は、Javaはマルウェアの作成にも適していると言えるでしょうか?結局、ほとんどの犯罪者はマルウェアがマルチプラットフォームであることを望んでいます。
Javaコードは、標準の interface を介してネイティブコード(Cなどで記述され、一連のCPUオペコードにコンパイルされたコード)を呼び出すことができます。 Javaは、実際にDLLファイルを(バイトの束として)どこかに書き込むことができ、それをロードできるため、ネイティブコードで実行できるすべてのこと、Javaでも可能です。
Javaには、任意の方法でファイルを読み書きできる豊富な標準ライブラリも備わっています。
Javaベースのマルウェアの難しい部分は次のとおりです。
Javaがマルウェア作成者にとってこれまでで最高の言語と見なされない理由です。また、Javaが名目上移植可能であっても、クロスプラットフォームマルウェアはマルウェアは非常に低いレベル(つまり、OS固有のレベル)で物事を行う傾向があるため、とらえどころのない目標です。/etc/passwd
ファイルの変更は、Unixのようなシステムでは非常にいたずらなことです。ただし、/etc/passwd
ファイルがないWindowsにはまったく影響がないため、マルウェアの作成者がJavaを使用する動機はほとんどありません。
(これはすべて、C#/。NET + SilverLightでマルウェアを作成することに関する質問にほとんど変更されずに適用されます。)
マルウェアにはさまざまな形やサイズがあるため、この質問に答えることは困難です。 Javaでマルウェアを書くのは簡単です。
(new File("/path/to/important/file")).delete();
Javaデータを盗むアプリケーションを簡単に作成できますか?簡単にできます。LinuxのルートキットをJavaで作成できますか?ほぼ間違いなく、それでも私が実行を止めることはありませんall = JVMが実行されているアクセス許可で実行できること。
したがって、その意味では、はい、あなたはcanマルウェアをJavaで作成しますが、Cのようなシステム言語で作成する場合よりも多少制限されます。キーロガーをCで書くよりもJavaで書くのははるかに困難であり、うまく隠すことはおそらく不可能です。
Javaの方が安全であると聞いたとき、あなたは何を意味しているのか誤解しているかもしれません。彼らはあなたのアプリケーションがより安全であるか、マルウェアがこの言語で書かれることができないことを意味しましたか?
過去に、Java APIに多数の脆弱性が発見され(パッチが適用されて)、ユーザーの同意なしにJavaプログラムが悪意のあるコードを実行することが可能になりました。多くのブラウザでJavaが有効になっているため、これはアプレットを介して行われることがよくあります。
以前のJavaの脆弱性が見つかる可能性がある CVEデータベース を参照してください。
しかし、おそらくそれらの人々はあなたのアプリケーションがハッカーからより安全になるように書かれることができることを意味しました。この意味で、それは部分的に真実です。たとえば、Javaアプリケーションは(通常)スタックがjvmによって管理されているため、バッファオーバーフロー攻撃を介して悪用することはできません。これは、Javaの方が安全だと言われたときのことだと思います。
ここ は、Javaでのプログラミングが安全である理由についての詳細情報です。
Javaマルウェアは、Cマルウェアが実行できる機能のすべてではないにしても、ほとんどの機能を実行できます。
ただし、Java言語にはいくつかの機能があり、マルウェアの作成者がCのようなものに傾くようになる可能性があります。
Java仮想マシン (JVM)がコンピューターにインストールされていない限り、Javaプログラムはコンピューターで実行できません。マルウェアをJavaで作成すると、JVMを実行していないターゲットから自動的に制限されます。
これは、追加のソフトウェアなしでターゲットシステムで実行されるネイティブ実行可能ファイルにコンパイルされるCまたは他の言語とは異なります。
ただし、特に多くの Javaランタイム環境のいずれかを介して拡散することを計画している場合は、マルウェア作成者が選択するプログラミング言語であるため、これはJavaを完全に割引しません。脆弱性
このJVM要件により、悪意のあるJavaアプリケーションが自分自身を隠すことがさらに困難になる場合もあります。これは、ユーザーがインストールしたJVMに依存しています。彼らがする必要があるのはそれを削除することだけであり、彼らはそのトラックにマルウェアを止めます。
今や、あなたは「はい、でもマルウェアをすべてのプラットフォームで魔法のように機能させるには、それだけの価値はありませんか?」と考えているかもしれません。
Javaは確かにクロスプラットフォーム互換ですが(JVMが利用可能である限り)、これは必ずしもユーザーが意図していることを意味するとは限りません。
たとえば、マルウェアの一般的な機能は、オペレーティングシステムの起動時にマルウェアが起動する機能です。 JavaはクロスプラットフォームのstartWhenComputerStarts
メソッドを提供していません。そのため、プラットフォームごとに個別に実装する必要があります。
多くのマルウェアは、プラットフォーム固有のバグまたは機能を使用して、自分自身を隠し、起動時に自分自身を起動し、ユーザーデータを盗みます。したがって、作成者は各プラットフォームでこの作業を行う必要があります。
また、Cコードを複数の異なるプラットフォームにコンパイルできることも忘れないでください。 Cに対するJavaの利点は、一度コンパイルすればどこでも実行できるということですが、同じCコードでも最終的には1つの追加ステップで異なるプラットフォームで実行できます。
考えてみれば、マルウェアはシグネチャを介して拾われることが多いことを考えると、作者にとっては、プラットフォームごとに個別のマルウェアを作成する方が理にかなっています。検出される可能性が低くなります。