web-dev-qa-db-ja.com

高水準言語でプログラムされたマルウェアは、低水準言語でプログラムされたマルウェアよりも検出されますか?

C&Cが受信したコマンドを実行するように設計された単純なマルウェアが、次のようにプログラムされた場合に同じ結果率になるかどうかを知りたいです。

  • c ++のような低言語
  • Pythonのような高言語(Python auto-py-to-exeのようなコンバーターで実行ファイルに変換されます)

静的および動的分析中:Antivirusには、低レベル言語と高レベル言語の間で使用されるライブラリを検出する同じ機能がありますか?

マルウェアのレート検出は、マルウェアの割合とより関連していると思いますか?

2
Anonyme

プロセッサが実行時に認識するのはソースコードではなく、人間が読める形式でアセンブリコードと呼ばれるマシンコードを認識します。

compiled言語でプログラムをコンパイルすると(詳細は後で説明します)、コンパイラーは高レベルのコードを受け取り、それに対して操作を実行し、すべてをリンクして、それを機械可読コードに変換します。

以下は、x86 "Hello World"(DOS)のアセンブリの例です[ ロバートモンタンテ、ブルームズバーグ大学 ]

    org  0x100        ; .com files always start 256 bytes into the segment

    ; int 21h is going to want...

    mov  dx, msg      ; the address of or message in dx
    mov  ah, 9        ; ah=9 - "print string" sub-function
    int  0x21         ; call dos services

    mov  ah, 0x4c     ; "terminate program" sub-function
    int  0x21         ; call dos services

    msg  db 'Hello, World!', 0x0d, 0x0a, '$'   ; $-terminated message

コンパイルしたこのマシンコードは、1つのアーキテクチャで、そのオペレーティングシステムでのみ機能します。このため、x64、x86、Linux、Windows、OS Xなどのさまざまなバイナリが必要になることがよくあります。

ただし、これは非常に面倒です。バージョンごとに6つの異なるバイナリを再コンパイルするのは面倒です。これは JavaJVM(Java Virtual Machine) の人気で変化しました。プログラマーは、プロセッサーレベルのマシンコードにコンパイルする代わりに、マシンコードのコンパイルを行う必要はありませんでした。中間の「バイトコード」にコンパイルするだけで、Java仮想マシン。

これは、Java仮想マシンがインストールされている限り、Javaアプリケーションが記述されていなくても、コンピュータ上で実行できることを意味しますこれは 自身の問題 を持っています。

とにかく、この背景情報を使用して、質問に答えます。アンチウイルスソリューションが「スキャン」するとき、それらは通常シグネチャ分析を行っているだけです。ここでは、ファイルやコンポーネントが既知のマルウェアシグネチャの大きなデータベースと比較され、セキュリティ研究者やAV会社のコンピューターによって分析されます。これらの新しい脅威が常に出現するため、アンチウイルスを最新の状態に保つことが重要なのはこのためです。ただし、これは、一般に、検出を回避するために特定の言語や抽象化レベルを選択してもメリットがないことも意味します。マルウェアの検出は、通常、コンパイル時ではなく、マルウェアの作成者によってコンパイル後に軽減されます。

例外は、おそらく、アセンブリ言語です。一部の ドロッパー (他のマルウェアをインストールする小さなマルウェア)はアセンブリ言語で記述されており、検出を困難にするか、署名の一致を回避するためにランダム化して自動的に再構築されます。ただし、アセンブリでマルウェアを作成することの欠点は、時間がかかり、非常に難しいことです。

2
Max O