AV引擎如何高效地搜索已知签名的文件?

时间:2013-05-04 18:26:49

标签: search antivirus

随着新病毒变种的发布,搜索字符串形式的数据会继续增长,这提示我的问题 - AV引擎如何有效地搜索文件以查找已知签名?如果我下载一个新文件,我的AV扫描仪会根据其签名快速识别该文件是否为威胁,但它如何能够如此快速地执行此操作?我确信到目前为止有数十万个签名。

3 个答案:

答案 0 :(得分:4)

更新 tripleee 指出,Aho-Corasick algorithm似乎与病毒扫描程序非常相关。以下是一些要阅读的内容:

http://www.dais.unive.it/~calpar/AA07-08/aho-corasick.pdf

http://www.researchgate.net/publication/4276168_Generalized_Aho-Corasick_Algorithm_for_Signature_Based_Anti-Virus_Applications/file/d912f50bd440de76b0.pdf

http://jason.spashett.com/av/index.htm

Aho-Corasick-like algorithm for use in anti-malware code

以下是我的回答。它仍然适用于轻松检测像蠕虫一样的恶意软件,只能复制自己:

我只想写一些关于AV 可能如何工作的想法。我不确定。如果有人认为该信息不正确,请通知我。

AV可以通过多种方式检测可能的威胁。一种方式是基于签名 检测

签名只是文件的唯一指纹(只是一个字节序列)。在计算机科学方面,它可以被称为哈希。单个哈希可能需要大约4/8/16个字节。假设大小为4个字节(例如, CRC32 ), 6700万个签名可以存储在 256MB 中。

所有这些哈希值都可以存储在签名数据库中。此数据库可以使用平衡树结​​构实现,因此插入,删除和搜索操作可以在O(logn)时间内完成,即使对于{{1}的大值,这也非常快}(n是条目数)。否则,如果有大量内存可用,则可以使用哈希表,这样可以n插入,删除和搜索。随着O(1)越来越大并且使用了良好的散列技术,这可能会更快。

因此,防病毒软件的作用大致是它计算文件的哈希值或仅计算其关键部分(可能进行恶意注入),并在其签名数据库中搜索它。如上所述,搜索速度非常快,可以在很短的时间内扫描大量文件。如果找到,则该文件被归类为恶意文件。

同样,数据库可以快速更新,因为插入和删除也很快。

您可以阅读这些页面以获得更多信息。

Which is faster, Hash lookup or Binary search?

https://security.stackexchange.com/questions/379/what-are-rainbow-tables-and-how-are-they-used

答案 1 :(得分:1)

许多签名锚定到特定偏移量或文件二进制结构中的特定部分。您可以跳过二进制文件的部分,其中包含带有显示字符串的数据部分,内部结构的初始化数据等。

许多当前的蠕虫都是独立文件,整个文件签名(SHA1哈希或类似)足够。

如何在文件中扫描大量模式的一般问题最好通过指向Aho-Corasick algorithm的指针来解答。

答案 2 :(得分:0)

我不知道实际的AV是如何工作的。但我认为这个问题与在给定字典的长文本中找到单词有一些关系。

对于上述问题,像TRIE这样的数据结构会使它变得非常快。处理长度= N个K字的文本字典只需要O(N)时间。