防病毒软件如何在短时间内扫描数千个恶意软件签名?

信息安全 杀毒软件 反恶意软件
2021-08-10 15:14:01

大多数防病毒软件都有数十万甚至数百万个恶意软件签名,但它们会在合理的短时间内以高检测率扫描许多文件。即使是实时扫描程序也不会显着降低计算机速度,但可以提供强大的威胁防护。扫描仪如何才能达到这种性能?

我知道这可能是一个广泛的问题,但我想对此有一个大致的了解。

2个回答

防病毒检测是一个特征提取分类问题

一个很好的类比是20 个问题的游戏,其目标是通过询问 20 个看似无关的是/否问题来识别任意对象。游戏背后的想法是,每个答案都会消除一半的对象,因此理论上可以仅用 20 个二进制特征来描述 2^20 (1,048,576) 个对象。

另一个类比是视觉皮层如何处理视觉信息。大脑有非常简单和快速的硬件来检测和分类无限数量的图像。只有六层神经元(神经元数量估计为 1.4 亿)用于逐步提取更复杂的特征并将它们传递到下一层。这些层相互来回交互以产生可以根据内存进行验证的抽象概念。

防病毒引擎将已知恶意软件的许多特征存储在定义文件中,当它们扫描新文件时,它们会优化这些特征的提取和分类(匹配)。存储特征还可以使检测更加稳健,这样恶意软件中的微小变化就不会阻碍检测。特征提取也是并行完成的,以便充分利用资源。

大多数功能是由人类设计的,但有些功能本身没有意义,例如文件末尾有一个空字节或文件大小与可打印文本大小之间的比率。这些无意义或不直观的特征是通过数据挖掘大量文件随机生成和测试的。最后通过特征组合对文件进行描述和分类作为旁注,在 Stack Exchange 上关闭问题的最佳预测指标是问题的第一个字母是否为小写。

因此,当一个新文件被扫描时,它会很快被分类为越来越精细的类别,然后与一小组签名进行匹配。每一步都会排除大量干净的文件,并决定接下来应该提取哪些其他特征。第一步在计算资源方面非常小,但它们决定了以后应该采取哪些更昂贵的步骤。

通过仅使用少量磁盘读取和 CPU 周期,引擎可以确定文件类型。假设它是一个 JAR 文件。使用此信息,它开始收集 JAR 文件的特征。如果已签名,则中止扫描。如果它没有导入任何函数,那么扫描将被中止(我在这里过于简单化了)。它是否使用任何棘手的功能?那么应该提取更多的特征。它是否使用已知的易受攻击的功能?然后应该彻底检查已知的 Java 漏洞利用签名。

读写扫描背后的原理相同,但它也像看门人一样工作。因此,进程执行的每个操作(通常是 API 调用)都会被检查并允许或拒绝。同样,每个可疑操作都会触发更多过滤器和更多检查。在检查期间,进程或线程正在等待操作完成,但有时整个进程被主动挂起。这可能看起来像很大的开销,但是一旦验证了特定操作,它就会被缓存并非常快速地执行或根本不执行。结果是性能下降,类似于让机器慢几个百分点。在此处查看 20 种 AV 产品的 PCMark 分数

因此,速度优化来自于对构成绝大多数扫描文件的干净文件执行的极少工作。繁重的工作只针对可疑的恶意软件文件,AV 甚至可能需要几秒钟的时间来模拟该过程,甚至将其发送到云端进行分析。

神奇之处在于渐进式分类。

恶意软件签名是表示存在恶意代码的唯一值。简而言之,当防病毒程序扫描您的计算机时,它会计算文件的签名(例如哈希),然后将该签名/哈希与已知的不良签名列表进行比较。

计算文件的单个哈希值,然后将其与数百万个哈希值列表进行比较,比在给定文件中查找每个恶意软件签名要容易得多。

签名可以表示文件中的一系列字节。它也可以是文件或其部分的加密哈希。每个 AV 供应商的做法都略有不同。

通常有防病毒软件扫描的“性能与深度”设置。这些扫描本质上是查看在他们断定文件是否安全之前他们将处理多少代码。

应该注意的是,防病毒技术已经得到改进,而且是更新的技术,不仅仅是基于签名的。这些技术的结合以及减少性能影响的优化使 AV 比以前快得多。

保证,如果您对主要操作系统驱动器运行 AV 进行最详细的检查,您会发现处理文件时性能受到影响。它通常不是 CPU 性能的损失,而是磁盘驱动器性能的损失(显然 SSD 在这里有优势)。

AV 使用的一些节省时间的技术

  • 忽略不可执行的文件
  • 忽略大文件(即 >500MB)
  • 忽略校验和与已知“合法”文件匹配的文件
  • 读取文件的某些部分并忽略其余部分
  • 当它检测到计算机上存在用户时,慷慨地让出资源使用
  • 寻找代表危险行为的特定系统调用
  • 首先生成基线,然后仅扫描新/修改的文件
  • 等等..

此外,常见的 AV 解决方案用于静态检测的其他技术:

  • 字符串扫描方法:搜索特定病毒的典型字节序列(字符串),但不太可能在其他程序中找到。
  • 通配符方法:允许跳过字节或字节范围。例如 ”?” 字符被跳过,通配符 % 表示扫描器将尝试匹配下一个字节。
  • Mismatches 方法:允许字符串中任何给定数量的字节具有任意值,而不管它们的位置如何。
  • 通用检测方法:该技术使用一个通用字符串来检测一个病毒家族的多个或所有已知变体。
  • Bookmarks 方法:计算病毒体开始到检测字符串的距离。
  • 智能扫描:智能扫描可以跳过主机文件中的垃圾指令,例如 NOP,也不会将它们存储在病毒签名中。为了提高检测病毒相关变种的可能性,选择了一个没有引用数据或其他子程序的病毒体区域。
  • 骨架检测:扫描程序逐行解析病毒的语句并丢弃所有非必要语句。剩下的是只有宏病毒常见的基本宏代码的身体骨架。
  • 启发式分析:启发式分析是一种基于专家的分析,它使用各种决策规则或加权方法确定系统对特定威胁/风险的敏感性。多标准分析 (MCA) 是一种称量方法。
  • 病毒特定检测:有时病毒扫描程序的标准算法无法处理病毒。在这种情况下,必须引入新的检测代码来实现特定于病毒的检测算法。此方法包括过滤、解密器检测和 X 射线扫描。资料来源:计算机病毒策略和检测方法

希望有帮助!

进一步阅读: 维基百科