web-dev-qa-db-ja.com

悪用防止プログラムはどのように機能しますか?

シグネチャ、ヒューリスティック、サンドボックスなどの詳細を含む、ウイルス対策およびマルウェア対策プログラムの動作の詳細を説明する多くの回答があります。ただし、エクスプロイトプログラム(EMET、MBAEなど)に関するリソースは比較的少ないようです。 HitmanPro.Alert)は、エクスプロイトを実際に検出して防止します。

エクスプロイト中に実際に発生するアクションは、デバッガーをプロセスに接続せずに検出することはほとんど不可能に思われ、許容できないパフォーマンスの影響があるように見えます。

エクスプロイト対策プログラムがエクスプロイトの試みを検出して軽減するために使用する方法は何ですか?

7
konsolas

CBMCコンパイラ での私の経験に基づいてこれに答えます。 HitmanPromalwarebytes anti-exploit または MicrosoftのEMET を使用したことはありませんが、CBMCとはまったく異なる動作をする理由はわかりません。

既知のエクスプロイト保護

malwarebytes anti-exploit video (親切にOPが調査)を見ると、MBAEはダウンロードされた悪意のあるファイルを特定することでエクスプロイトを見つけることができます。つまり、exactly最新のウイルス対策プログラムはどのように機能するのか:既知のマルウェア(または呼び出したい場合は「エクスプロイトペイロード」)のシグネチャをチェックしますその方法)、一致する場合は実行を停止します。

その特定のケースでは、Anti-ExploitがAnti-Virusプログラムのブランド名を変更しただけであると主張できます。理論的には、AV(アンチウイルス)はファイルのシグネチャのみをチェックし、AE(アンチエクスプロイト)はペイロードをチェックします(たとえば、ファイルのダウンロード中)。AVがマルウェアのシグネチャを検索する一方で、AEはCVEを検索すると主張することもできます。 。しかし、最近のすべてのAVはすべてを実行します。CVEが出たときに更新され、ネットワークトラフィック(ダウンロードされたファイル)の署名をチェックし、リアルタイムで実行します。したがって、そのビデオから、AEは単にAVのブランドを変更したものであると結論付けることができると主張します。

しかし、それだけではありません。AEはゼロデイエクスプロイトを見つけることができると約束しています。それはAVとは異なります。

ゼロデイエクスプロイト

プログラムを実行しないと、プログラムでゼロデイエクスプロイトを見つけることはできません。しかし、危険なプログラムを実行することは賢明ではありません。これは、ランタイム環境に悪用可能なポイントがある場合、プログラムを実行すると、その違反が正確に悪用される可能性があるためです。サンドボックス化はオプションですが、サンドボックスはしばしば勝者の違反をします。では、プログラムを実行せずに実行するにはどうすればよいでしょうか。救助への象徴的な実行。

回答の冒頭で述べたように、過去のある時点で必要なツールであるCBMCを使用します。シンボリック実行を実行しますが、それは調査ツールです。そして、シンボリック実行はプログラムが持つ可能性のあるすべての問題を見つけることができると誰も主張しません。

CBMCは、プログラムをマシンコードにコンパイルしないCコンパイラー(およびVHDLの商用バージョンもあります)です。代わりに、プログラムをGOTOと呼ばれる言語にコンパイルします。これは、プログラムの簡略化された記号表現です。次に、GOTOプロセッサー(CBMCの一部)を使用して、プログラムの記号表現を実行します。

シンボリック表現の方がはるかに推論しやすく、幅広い入力を想定してプログラムを実行できます。たとえば、CBMC/GOTOがCプログラムでうまくキャッチすることの1つは、バッファオーバーフローです。

現在、CBMCはCおよびVHDLプログラムで機能しますが、アセンブリでも同じことができます。ソースコードからのシンボリック表現の構築ほど正確ではありませんが(逆アセンブルは完全ではないため)、プログラムのシンボリック表現を実行し、コーディングの誤りをチェックすることができます。

バッファオーバーフローは、アセンブリでも見つけることができると考えることができる最も簡単なものですが、他の可能性には、チェックされていない入力(少なくともCBMCでは入力が記号表現で追跡される)またはネットワークソケットを開く(それが既知のシステムコール)。

免責事項:AEが実際にどのように構築されるかはわかりませんが、ゼロデイエクスプロイトを自動的に見つけることができる何かを構築する必要がある場合、シンボリック実行は私が試してみたい道になるシンボリック実行は問題なしでは実現しません(オープンリサーチコミュニティでは既知であり、非公開の情報源によっては解決策が見つかる場合があります)。

  • SEはすべての問題を検出しません。多くの場合、異なる構成間の相互作用は見つかりません。
  • SEはかなり遅いです。
  • IntelまたはARM(またはその他))の分解は完全ではなく、分解の問題はSEの結果に反映されます。
2
grochmal

搾取防止プログラムが使用するさまざまなアプローチがあります。エクスプロイトがどのように機能し、どのようなエクスプロイトテクニックを使用するか(ROP、ヒープスプレーなど)を知っている場合、エクスプロイト防止製品を理解するのは非常に簡単です。

「ヒープスプレー」を例に考えてみましょう。以下はウィキペディアの定義です。 「一般に、ヒープを散布するコードは、プロセスのヒープに(大きな)ブロックを割り当て、これらのブロックのバイトを適切に埋めることによって、特定のバイトシーケンスをターゲットプロセスのメモリ内の所定の場所に配置しようとします。値。」

ヒープスプレーのエクスプロイトを見ると、主にメモリをより高いアドレスにスプレーし、脆弱なプログラムの実行を「0x0c0c0c0c」のような予測可能なアドレスに変更します。はい、この種類のアドレスは、実際には、ブラウザ内のJavascriptを使用して割り当て/スプレーするメモリ内の所定の場所です。

では、エクスプロイト対策プログラムはこれをどのように防ぐことができますか?これは非常にシンプルで一般的に使用されるアプローチです。ヒープスプレー攻撃からFirefoxを保護したいとします。 firefoxプロセスが開始するときはいつでも、自分に注入してから、Firefoxでこれらの種類の一般的なヒープスプレーアドレス(0x0c0c0c0c)を事前に割り当てることができます。したがって、一般的な予測可能なアドレス(0x0c0c0c0c、0a0a0a0aなど)を使用するヒープスプレーエクスプロイトは、この保護されたfirefoxプロセスに対して機能しません。アドレスを事前に割り当てる簡単なAPI呼び出し。 VirtualAlloc(スプレーアドレス、0x400、MEM_RESERVE、PAGE_NOACCESS)

これは、悪用防止プログラムが機能する基本的な例にすぎません。もちろん、他の悪用方法を防ぐために使用されるはるかに複雑なアプローチとテクニックがあります。

1
Celil UNUVER