web-dev-qa-db-ja.com

アンチウイルスは、短時間で何千ものマルウェアシグネチャをどのようにスキャンしますか?

ほとんどのアンチウイルスには、数十万または数百万ものマルウェアシグネチャが含まれていますが、多くのファイルを妥当な短時間で高い検出率でスキャンしています。リアルタイムスキャナーでさえ、コンピューターの速度を著しく低下させることはありませんが、脅威に対する強力な保護を提供します。スキャナーはどのようにしてこの種のパフォーマンスを達成できますか?

幅広い質問になる可能性があることは承知していますが、これに関する一般的な考えを知りたかったのです。

47
Koorosh Pasokhi

アンチウイルス検出は 機能抽出 および 分類問題です。

よく似た例が 20の質問 ゲームで、目標は一見無関係な一見20のyes/noの質問をすることで任意のオブジェクトを識別することです。ゲームの背後にある考え方は、各回答はオブジェクトの半分を排除するため、20のバイナリ機能のみを持つ2 ^ 20(1,048,576)オブジェクトを記述することは理論的に可能であるということです。

別の例えは、 視覚皮質 が視覚情報を処理する方法です。脳には、無数の画像を検出して分類するための非常にシンプルで高速なハードウェアがあります。 6層のニューロン(ニューロンの数は1億4,000万個と推定されています)のみを使用して、次第に複雑な特徴を抽出し、次の層に渡します。レイヤーは相互にやり取りして相互にやり取りし、メモリーに対して検証できる抽象的な概念を生成します。

ウイルス対策エンジンは、既知のマルウェアの多くの機能を定義ファイルに格納し、新しいファイルをスキャンするときに、それらの機能の抽出と分類(マッチング)を最適化します。機能を保存すると、検出がより堅牢になるため、マルウェアの小さな変更が検出を妨げることはありません。特徴抽出も並行して行われるため、リソースが完全に利用されます。

ほとんどの機能は人間が設計したものですが、ファイルの最後にnullバイトがある、ファイルサイズと印刷可能なテキストサイズの比率など、それ自体では意味をなさない機能もあります。これらの無意味な機能や直感的でない機能は、膨大な量のファイルをデータマイニングすることによってランダムに生成およびテストされます。最後に、ファイルは機能の組み合わせによって記述および分類されます。補足として、Stack Exchangeでクローズされる質問の最良の予測子は、質問の最初の文字が小文字であるかどうかです。

そのため、新しいファイルがスキャンされると、そのファイルはますます細かいカテゴリに分類され、その後、少数の署名セットと照合されます。各ステップでは、多数のクリーンファイルを除外し、次に抽出する他の機能を指定します。最初のステップはコンピューティングリソースの点では非常に小さいですが、後で実行する必要があるより高価なステップを決定します。

少数のディスク読み取りとCPUサイクルのみを使用することにより、エンジンはファイルタイプを判別できます。それがJARファイルであるとしましょう。この情報を使用して、JARファイルの機能の収集を開始します。署名されている場合、スキャンは中止されます。関数をインポートしていない場合、スキャンは中止されます(ここでは簡略化しています)。トリッキーな機能を使用していますか?次に、より多くの特徴を抽出する必要があります。既知の脆弱な機能を使用していますか?次に、既知のJavaエクスプロイトシグネチャを確認します。

オンアクセススキャンの背後には同じ原理がありますが、ゲートキーパーのようにも機能します。したがって、プロセスによって実行される各アクション(通常はAPI呼び出し)がチェックされ、許可または拒否されます。同様に、疑わしい各アクションは、より多くのフィルターとより多くのチェックをトリガーします。チェック中、プロセスまたはスレッドは操作が完了するのを待っていますが、プロセス全体がアクティブに中断される場合があります。これはかなりのオーバーヘッドのように見えるかもしれませんが、特定のアクションが確認されると、後でキャッシュされて非常に迅速に実行されるか、まったく実行されません。その結果、マシンのパフォーマンスが数パーセント低下するのと同様に、パフォーマンスが低下します。 20のAV製品のPCMarkスコアを確認してください ここ

そのため、速度の最適化は、スキャンされたファイルの圧倒的多数を構成する見た目がきれいなファイルに対して実行される作業が非常に少ないことに起因しています。重量物を持ち上げる作業は、マルウェアのように見える疑わしいファイルに対してのみ行われます。そのため、AVはプロセスをエミュレートしたり、分析のためにクラウドに送信したりするのに数秒かかることさえあります。

魔法はプログレッシブ分類にあります。

47
Cristian Dobre

マルウェアシグネチャは、悪意のあるコードの存在を示す一意の値です。簡単に言うと、ウイルス対策プログラムがコンピューターをスキャンすると、ファイルの署名(ハッシュなど)が計算され、その署名/ハッシュが既知の不正な署名のリストと比較されます。

ファイルの単一のハッシュを計算し、それを数百万のハッシュのリストと比較することは、特定のファイルで各マルウェアのシグネチャを探すよりもはるかに簡単です。

署名は、ファイル内の一連のバイトを表す場合があります。また、ファイルまたはそのセクションの暗号化ハッシュにすることもできます。各AVベンダーは、少し異なる方法でそれを行います。

通常、ウイルス対策ソフトウェアスキャンの「パフォーマンスと深度」の設定があります。これらのスキャンは基本的に、ファイルが安全かどうかを判断する前に処理するコードの量を調べています。

アンチウイルス技術は、シグネチャベースだけではない、改良された最新のテクノロジーになっていることに注意してください。これらの手法とパフォーマンスへの影響を軽減するための最適化の組み合わせにより、AVは以前よりもかなり高速になっています。

保証されています。プライマリOSドライブに対して最も詳細な検査でAVを実行すると、ファイルが処理されるときにパフォーマンスが低下します。これは通常、CPUパフォーマンスの低下ではなく、ディスクドライブパフォーマンスの低下です(SSDには明らかにメリットがあります)。

AVで使用されるいくつかの時間節約テクニック

  • 実行不可能なファイルを無視する
  • 大きなファイル(つまり、500MB以上)を無視する
  • 既知の「正当な」ファイルと一致するチェックサムを持つファイルを無視する
  • ファイルの特定の部分を読み取り、残りを無視する
  • コンピューターの前にいるユーザーを検出すると、リソースの使用を丁寧に認める
  • 危険な動作を表す特定のシステムコールを探す
  • 最初にベースラインを生成し、次に新しい/変更されたファイルのみをスキャンする
  • 等..

さらに、一般的なAVソリューションによる静的検出に使用されるその他の手法:

  • 文字列スキャン方法:特定のウイルスに典型的であるが、他のプログラムでは発見されそうにない一連のバイト(文字列)を検索します。
  • ワイルドカード方式:バイトまたはバイト範囲をスキップできます。例えば ​​"?"文字はスキップされ、ワイルドカード%は、スキャナーが次のバイトとの一致を試みることを意味します。
  • Mismatchesメソッド:文字列内の任意のバイト数を、その位置に関係なく任意の値にすることができます。
  • 一般的な検出方法:この手法では、1つの共通の文字列を使用して、ウイルスファミリのいくつかまたはすべての既知の亜種を検出します。
  • Bookmarksメソッド:ウイルス本体の先頭と検出文字列の間の距離を計算します。
  • スマートスキャン:スマートスキャンは、ホストファイル内のNOPなどのジャンク命令をスキップする可能性があり、ウイルスの署名にも保存されませんでした。ウイルスの関連する亜種を検出する可能性を高めるために、データや他のサブルーチンへの参照がないウイルス本体の領域が選択されました。
  • スケルトン検出:スキャナーはウイルスのステートメントを行ごとに解析し、不要なステートメントをすべて削除します。残っているのは、マクロウイルスに共通する必須のマクロコードのみを含む体の骨格です。
  • ヒューリスティック分析:ヒューリスティック分析は、さまざまな決定ルールまたは重み付け方法を使用して、特定の脅威/リスクに対するシステムの感受性を決定するエキスパートベースの分析です。 MultiCriteria分析(MCA)は、計量方法の1つです。
  • ウイルス固有の検出:ウイルススキャナーの標準アルゴリズムがウイルスを処理できない場合があります。このような場合、ウイルス固有の検出アルゴリズムを実装するには、新しい検出コードを導入する必要があります。この方法には、フィルタリング、復号化検出、X線スキャンが含まれます。出典: コンピュータウイルスの状態と検出方法

お役に立てば幸いです。

さらに読む: Wikipedia

18
NULLZ