web-dev-qa-db-ja.com

アンチウイルスはどのように高速ですか?

一般的なアンチウイルス(私の知る限り)は、ファイルのハッシュを取得し、それを数千もの既知のウイルスのハッシュと比較する、一種のブルートフォースタイプの方法を使用しています。超高速SSDを搭載したサーバーがあり、ハッシュをそれにアップロードして非常に高速に検索しているのでしょうか、それとも、それらがどのように機能するのかについて完全に間違っているのでしょうか?

102
Harry

情報開示:私はアンチウイルスベンダーで働いています。

ほとんどのウイルス対策エンジンはエンドポイントを保護するために生まれたものであり、現在でも多くのエンドポイント保護がビジネスの主要部分であるため、最新のウイルス対策エンジンはエンドポイントのスキャン用に最適化されています。この最適化には、次のような多くのものが含まれます。

  • コンピュータに感染する可能性のある感染を含むことができないファイルをスキャンしない。

  • スキャンされたファイルを記憶し、ファイルが変更されない限り、再度スキャンしない。

  • 可能な場合にファイルタイプのスキャンを最適化する-たとえば、実行可能ファイルをスキャンする場合、スキャンする必要があるのはその一部のみです。これにより、ディスクの読み取りが最小限に抑えられ、パフォーマンスが向上します。

一般的な誤解は、AVエンジンがハッシュを使用することです。次の3つの理由により、一般的にはそうではありません。

  1. まず、ハッシュ検出を回避するのは非常に簡単で、実際の悪意のあるコードを変更する必要はまったくありません。
  2. 2つ目は、ハッシュを使用すると、あらゆる種類の予防的な保護を実装できないことです。これまでに確認したマルウェアのみを検出できます。
  3. ハッシュを計算するには、ファイル全体を読み取る必要がありますが、一部のファイル(実行可能ファイルなど)では必要ありません。また、SSD以外のハードドライブでファイル全体を読み取るのはコストのかかる操作です。ほとんどのAVエンジンは、ハッシュを計算するよりも速く、クリーンで大きな実行可能ファイルをスキャンする必要があります。
236
George Y.

一般的なアンチウイルス(私の知る限り)では、ファイルのハッシュを取得し、それを数千の既知のウイルスのハッシュと比較する、ブルートフォースタイプの方法を使用しています。超高速SSDを搭載したサーバーがあり、それにハッシュをアップロードして非常に高速に検索しているのでしょうか、それとも、それらがどのように機能するかについての理解が完全に間違っています。

SmokeDispenserが言及した(はるかに効率的で高度な)ヒューリスティックベースおよびルールベースのウイルス対策と比較して、ハッシュのみを実行するオンラインの「ウイルス対策」を検討していると思います。

ハッシュは1つの使用例に適した選択肢です。==ここで、1つのウイルスファイルを多くの人と同じように送信しました。使用するAVエンジンは頻繁に更新されるため、ウイルスに遭遇する前にハッシュが受信および保存されます。たとえば、その場合は、電子メールの添付ファイルにウイルス/フィッシング/ランサムウェア/トロイの木馬などのフラグをすぐに付けることができ、最小限の計算コストでこれを行うことができます。とにかくファイル全体を読み取る必要があり、接続が良好である場合(たとえば、メールサーバーであるため)additionalI/O費用はごくわずかです。

これはすべてのユースケースの少数派なので、(良い)アンチウイルスはハッシュを(ただ)使用しません。

ただし、ハッシュのチェックは非常に高速です。 SSDや高度なハードウェアはまったく必要ありません。

(たとえ正確に機能しないであっても) 'baadc0debaadbaad'などの16進数のハッシュがあり、アーカイブの保持に存在するかどうかを確認したいと想像してくださいそれらの1千億

アーカイブを作成したとき、ハードディスクに250個のディレクトリを作成し、それらに「00」から「ff」までの名前を付けました(10進数で0から255)。それらのすべてに、再び「00」から「ff」までの名前で256のディレクトリを作成しました。そして、thoseのそれぞれに、256個のディレクトリを再度配置し、AB/CD/EF形式の各第3レベルのディレクトリに、「abcdef」で始まるすべてのハッシュを配置しました。 「00.txt」から「ff.txt」までの256ファイルに分割されます。

したがって、ハッシュ 'baadc0debaadbaad'は、「C:/ba/ad/c0/de.txt」というファイルになり、次のようになります。

...
baadc0de81f872ac Ebola virus
baadc0debaadbaad Dark Avenger virus
baadc0debf31fe11 known clean file
...

そのファイルにはいくつのハッシュがありますか?ハッシュが均等に分散されている場合は、1,000億をファイル数で割ります。 256のサブフォルダーを持つ256のフォルダーと256のファイルを持つ256のサブフォルダーがあるため、ファイルの数は256 * 256 * 256 * 256 = 4294967296です。

その数で割った1千億は約24です。これは、1つのファイルに含まれると予想されるハッシュの数(平均)です。

したがって、ハッシュが与えられ、それらの1,000億ハッシュの間でそれを見つけるように求められた場合手動、適切な第1レベルのフォルダーをクリックし、2番目のフォルダーをクリックして、 3番目に、適切なファイルを開き、24ハッシュを読み取ります。おそらく30秒未満で完了し、「明らかに」1秒あたり30億ハッシュ検査されます。手で。自分で。それは不可能に思えます、それはただの良いデータ編成です。

コンピュータは同じことをさらに効率的に行うことができます。

ルールベースのスキャン

より複雑なケースは、(最初​​は)何もわかっていないファイル内の既知および分析済みウイルスをスキャンする方法です。

この場合に役立つのは、オペレーティングシステムがウイルスを実行する必要があるため、ウイルスがどこにでも存在できないということです-手術システムが積極的にそれを探す場所です。通常、ウイルスは実行可能ファイルに感染します(データ領域など)をどこかに隠し、実行可能領域の先頭を自分自身への呼び出しで置き換えます。これは、ほとんどの場合実行可能領域をスキャンしてクリーンであることを確認するだけでよいことを意味します(もちろん、ウイルスはあり得ない場所に隠れるための巧妙な方法で常に飛び出しますので、現実は少し複雑です私が言ったことよりも)。

アンチウイルスは同じ場所を検索し、この場合、ファイルに対してルールベースの分析を実行します。これはハッシュ検索に似ています。機密領域で最初のバイトをチェックし、その値に基づいて別の場所の別のバイトを調べます。この種の操作を行うアルゴリズムは、オートマトンと呼ばれることがあります。たとえば、テキスト文字列が「Hello、World!」かどうかを確認するにはまたは「夜明けの攻撃」では、最初の文字を確認します。 Hの場合は、「夜明けの攻撃」のチェックをすべて無視します。

プログラムでは、これはポリモーフィズムと自己暗号化によってさらに複雑になります。2つの異なるコード(たとえば、2 + 2と2 * 2)が同じ結果をもたらす可能性があるため、さらにチェックが必要です(「最初のWord is Hello、Howdy、or Good ... ")あなたが恐怖ウイルスのバリエーションを発見したことを証明するためにSalutations、Cosmos!。自己暗号化コードの場合は、コードを解読するアルゴリズムを見つけるか(非常に短時間で実行できる場合)、自己復号化ルーチンの認識に集中する必要があります。そうしないと、ウイルスはそれ自体を実行可能にすることができません。システムによって。

ただし、選択ツリーを注意深く選択すると、単一の可能性(ウイルス名)または既知ウイルスが存在しないという確信にすばやく収束できます。

経験則

これは最も複雑な(そして遅い)種類の分析ですが、これまでに知られていないウイルスの存在を強く疑うことができるため、最も強力です。ヒューリスティックは、小さなルールベースの認識機能のlotsと考えることができます。小さいことは、それらの多くであることを相殺する速度向上を与える。すべてのレコグナイザは、コードの復号化、システムでの特権の取得、ファイルのオープンと書き込み、システムコールのフック、メモリ内のコードの書き換え、オペレーティングシステムへの侵入などのアクションを実行するコードを識別します。多くの正当なプログラムはこれらすべてのことの1つ以上を実行するか、そうするように見えます(たとえばdecryptionおよびdecompressionは非常に見えます)また、一部のプログラムは、悪意のあるコードを隠すためではなく、知的財産を保護するために暗号化されています。操作ごとに「スコア」を設定し、特定のしきい値を超える実行可能コードは疑わしいと見なされる場合があります。

もちろん、ヒューリスティックエンジンの詳細はこれよりもはるかに複雑です。スピード、信頼性(疑わしいと言うときは疑わしい)、感度(疑わしいときは疑わしいと言える)のバランスをとる必要があります。

実際、それらは非常に複雑で、通常はウイルス対策会社の秘密を厳重に保護しており、「人工知能」に至るまで「インテリジェント」と宣伝されていることがよくあります。

ルールを継続的に更新する必要性(10年前に絶滅したウイルスを探すことはほとんど意味がありません)と緊急性は低いですが、それほど重要ではないが、ヒューリスティックを調整することが、アンチウイルスの品質に不可欠なパラメーターである理由ですその更新の頻度(ある程度までは、優れたヒューリスティックエンジンが更新の頻度を少なくする可能性があり、 不可能 完全なヒューリスティックエンジンがまったく必要ない場合もあります)。

最適化

アンチウイルスであり、オペレーティングシステムのカーネルにディスク書き込み操作を傍受できる程度にロードでき、コードをアクティブ化せずにオペレーティングシステムを起動する方法がないことを確認してください(つまり、 blue-pilled )にすることはできません。その場合、知らないうちにディスク上のファイルを変更することはできません 。その時点で、どのファイルがスキャンされてクリーンであるかを追跡し、最後のスキャン以降に変更されたファイルのみをスキャンすることができます。これは、合計の非常に小さな部分です(そしてあなたかもしれません) 感染していないプロセスによって実行されたディスク書き込みを無視することもできます。たとえば、Javascriptで記述されたウイルスがWSCRIPTなどの別のプロセスに書き込みを依頼できる方法がある場合は、代わりにディスク)。

52
LSerni

ウイルス対策ソフトウェアが分析のためにサンプルをアップロードする場合がありますが(以下を参照)、これは検出の仕組みではありません。

また、シグネチャベースのシステムはあまり一般的ではありません(簡単に回避できるため)。また、期待どおりに機能しません。

署名は、バイナリの特定の領域または部分に基づいて構築されます。場所がわからない場合は、署名ウィンドウをバイナリ上で「スライド」させます。したがって、これはより複雑であり、中間製品として考えるよりもはるかに多くのサンプルを生成します。

それにもかかわらず、これらの署名の検索は遅くはありませんが、正確には速くありません。アンチウイルスを使用すると、しばしば顕著な遅延が発生します。

それでも、そうするために大量のディスク領域やRAM(一部はありますが)は必要ありません。4Kビデオが表示用にデコードされると、さらに多くのことが行われます。

署名の他に、ヒューリスティックと動作分析も行われているため、問題のバイナリはサンドボックス化され、その動作が分析されます。実行されたアクションが疑わしい場合、そのようなバイナリはブロックされる可能性があります。これらのサンプルは、詳細な分析のためにサンプルがAVベンダーに送信される場合があります。

結論として:

それほど速くはありません。しかし、操作はそれほど複雑ではなく、サーバーが必要になるだけでなく、ワークステーションだけでは実行できません。

ちなみに、このようなサーバーインフラストラクチャは巨大でなければなりません。ワークステーションでの作業が困難だった場合、強力なサーバーが少数の顧客にサービスを提供でき、ベンダーに数百万台のサーバーの代金を支払い、運用するための3億枚のコピーが残る可能性があります。

12
Tobi Nary