検索文字列の形式のデータは、新しいウイルスの亜種がリリースされるにつれて増加し続けます。そのため、私の疑問が生じます。AV エンジンは、どのようにしてファイルから既知のシグネチャを効率的に検索するのでしょうか? 新しいファイルをダウンロードすると、AV スキャナはその署名に基づいてそのファイルが脅威であるかどうかを迅速に識別しますが、どうしてこれをそれほど迅速に行うことができるのでしょうか? この時点で、何十万もの署名があると確信しています。
3 に答える
更新: Tripleeeが指摘したように、Aho-Corasick アルゴリズムはウイルス スキャナーに非常に関連しているようです。ここに読むべきいくつかのものがあります:
http://www.dais.unive.it/~calpar/AA07-08/aho-corasick.pdf
http://jason.spashett.com/av/index.htm
マルウェア対策コードで使用する Aho-Corasick のようなアルゴリズム
以下は私の古い答えです。自分自身のコピーを作成するだけのワームのようなマルウェアを簡単に検出するには、依然として関連性があります。
AVがどのように機能するかについて、私の考えをいくつか書きます。よくわかりません。情報が間違っていると思われる場合は、お知らせください。
AV が潜在的な脅威を検出する方法は多数あります。1 つの方法は、署名ベースの検出です。
署名は、ファイルの一意のフィンガープリントです (バイトのシーケンスです)。コンピューター サイエンスの用語では、ハッシュと呼ぶことができます。1 つのハッシュには約 4/8/16 バイトが必要です。サイズが 4 バイト (たとえば、CRC32 ) であると仮定すると、約6,700 万個の署名を256MBに格納できます。
これらのハッシュはすべて署名データベースに保存できます。このデータベースは、バランスの取れたツリー構造で実装できるため、挿入、削除、および検索操作を時間内に実行できます。これは、 (n はエントリの数) のO(logn)
値が大きい場合でも非常に高速です。n
または、大量のメモリが利用可能な場合は、ハッシュテーブルを使用して、O(1)
挿入、削除、および検索を行うことができます。n
これは、大きくなるにつれて高速になり、優れたハッシュ手法が使用されます。
したがって、アンチウイルスが大まかに行うことは、ファイルまたはそのクリティカル セクション (悪意のある挿入が可能である場合) のハッシュを計算し、その署名データベースを検索することです。上で説明したように、検索は非常に高速であるため、大量のファイルを短時間でスキャンできます。見つかった場合、そのファイルは悪意のあるものとして分類されます。
同様に、挿入と削除も高速であるため、データベースをすばやく更新できます。
これらのページを読んで、さらに洞察を得ることができます。
ハッシュルックアップとバイナリ検索では、どちらが高速ですか?
https://security.stackexchange.com/questions/379/what-are-rainbow-tables-and-how-are-they-used