介绍
zero-day(也称为 0-day)是一种计算机软件漏洞,以前不为那些对其缓解措施感兴趣的人(例如目标软件的供应商)所知。 在漏洞得到缓解之前,黑客可以利用它对程序、数据、其他计算机或网络产生不利影响。利用零日漏洞的攻击称为零日攻击(zero-day exploit)或零日攻击(zero-day attack)。
“零日”一词最初是指自一款新软件向公众发布以来的天数,因此“零日软件”是在发布前通过侵入开发人员的计算机而获得的。最终,该术语适用于允许这种黑客攻击的漏洞,以及供应商必须修复这些漏洞的天数。 一旦供应商了解到该漏洞,他们通常会创建补丁或建议解决方法来缓解该漏洞。
供应商越新意识到该漏洞,就越有可能没有开发出修复或缓解措施。一旦开发出修复程序,随着时间的推移,越来越多的用户应用修复程序,利用成功的机会就会降低。对于零日漏洞,除非漏洞被无意中修复,例如通过不相关的更新恰好修复了漏洞,否则用户应用供应商提供的补丁来修复问题的概率为零,因此漏洞将仍然存在可用的。零日攻击是一个严重的威胁。
Attack vectors 攻击向量
零日漏洞的潜在攻击途径与已知漏洞及已有可用补丁的漏洞相同。例如,当用户访问一个恶意网站时,网站上的恶意代码可以利用未打补丁的Web浏览器漏洞进行攻击。Web浏览器是犯罪分子的特定目标,因为其分布和使用广泛。网络犯罪分子以及类似以色列 NSO Group 的间谍软件国际供应商,也可以通过SMTP发送恶意的电子邮件附件,利用附件打开的应用程序中的漏洞进行攻击。利用常见文件类型的漏洞的攻击方式众多且频繁,正如它们在US-CERT等数据库中越来越多地出现的证据所示。犯罪分子可以制造恶意软件来利用这些文件类型的漏洞来入侵受攻击系统或窃取机密数据。
Window of vulnerability 脆弱性之窗
从软件漏洞首次被利用到脆弱系统数量减少到微不足道的时间段被称为“漏洞窗口”。每个软件漏洞的时间线由以下主要事件定义:
$$t0$$: 漏洞被(任何人)发现。
$$t{1a}$$: 发布安全补丁(例如,由软件供应商发布)。
$$t_{1b}$$: 漏洞利用变得活跃。
$$t_2$$: 大多数易受攻击的系统已应用该补丁。
因此,漏洞窗口长度的公式为: $$t2$$ − $$t{1b}$$ 。
在此公式中, $$t0 ≤ t{1a}$$ 和 $$ t0 ≤ t_{1b}$$ 始终为true。
请注意, $$t_0$$ 与第 0 天不同。例如,如果黑客是第一个发现(在 $$t_0$$)该漏洞的人,那么供应商可能要等到很晚(第 0 天)才知道它。
对于普通漏洞, $$t{1b} > t{1a} $$ 。这意味着软件供应商已经意识到该漏洞,并且有时间在任何黑客制作可行的漏洞利用程序 ( $$t{1b}$$ ) 之前发布安全补丁 ( $$t{1a}$$ )。对于零日漏洞利用, $$t{1b} ≤ t{1a}$$ ,以便漏洞利用在补丁可用之前变得活跃。
通过不披露已知漏洞,软件供应商希望在到达 $$t_{1b}$$ 之前到达 $$t_2$$ ,从而避免任何漏洞利用。但是,供应商不能保证黑客不会自行发现漏洞。此外,黑客可以自己分析安全补丁,从而发现潜在的漏洞并自动生成可利用的漏洞。 这些漏洞可以在时间 $$t_2$$ 之前有效使用。
实际上,漏洞窗口的长度因系统、供应商和单个漏洞而异。它通常以天来衡量,2006 年的一份报告估计平均值为 28 天。
Protection 保护
零日保护是指能够提供对零日漏洞攻击的防护能力。由于零日攻击通常对公众来说是未知的,因此往往难以对抗。零日攻击通常对“安全”网络产生影响,并且即使在发起后仍可能保持未被检测状态。因此,所谓安全系统的用户也必须保持常识并遵循安全的计算习惯。
存在许多技术来限制零日内存破坏漏洞(如缓冲区溢出)的有效性。这些保护机制存在于当代操作系统中,如 macOS、Windows Vista 及更高版本(另见:Windows Vista 中的新安全功能)、Solaris、Linux、Unix 和类 Unix 环境;Windows XP Service Pack 2 对通用内存破坏漏洞有限的保护,而之前的版本则更少。还有桌面和服务器防护软件来减轻零日缓冲区溢出漏洞的影响。通常,这些技术涉及启发式终止分析,以在攻击造成任何伤害之前停止攻击。
有人提出,这种解决方案可能难以实现,因为在一般情况下,对于任意代码进行分析以确定其是否恶意是算法上不可能的。这样的分析归结为线性有界自动机上的停机问题,而这个问题是无法解决的。然而,在大多数情况下,无需处理一般情况(即将所有程序分类为恶意或非恶意),就可以消除广泛的恶意行为。只需识别一组有限的程序的安全性(例如,那些只能访问或修改给定机器资源子集的程序),同时拒绝一些安全的和所有不安全的程序。这确实要求保持这些安全程序的完整性,这可能在面对内核级别的漏洞利用时变得困难。【引证待补充】。
零日紧急响应团队 (Zeroday Emergency Response Team, ZERT) 是一群软件工程师,致力于发布针对零日漏洞的非供应商补丁。
Worms 蠕虫
计算机蠕虫会通过了解它们如何感染主机来被拦截。零日蠕虫利用突袭攻击,而此时它们还未为计算机安全专家所知。近期的历史显示蠕虫传播的速率逐渐增加。新的蠕虫难以被检测出来,因为它们的感染特征尚未知晓,而设计良好的蠕虫可以在互联网上迅速传播,有时造成毁灭性后果。
Viruses 病毒
零日病毒(也称为零日恶意软件或下一代恶意软件)是一种以前未知的计算机病毒或其他恶意软件,尚未有特定的防病毒软件签名可以识别它们。
传统上,防病毒软件依赖签名来识别恶意软件。病毒签名是一种可以用来检测和识别特定病毒的唯一模式或代码。防病毒软件会扫描文件的签名,并将其与已知恶意代码的数据库进行比较。如果匹配,文件会被标记并被视为威胁。基于签名的检测的主要局限性在于它只能标记已知的恶意软件,因此对于零日攻击无法发挥作用。大多数现代防病毒软件仍然使用签名,但也进行其他类型的分析。
Code analysis 代码分析
在代码分析中,会分析文件的机器代码,以查看是否存在可疑内容。通常,恶意软件具有特征性行为;代码分析试图检测这些特征是否存在于代码中。
尽管有用,代码分析也存在显著的局限性。有时很难确定代码的某一部分意图是什么,特别是如果它非常复杂,并且是有意编写的,以打败分析的意图。代码分析的另一个局限是时间和资源的限制。在防病毒软件这个竞争激烈的领域,分析的有效性与所需的时间延迟之间总是需要权衡。
克服代码分析的局限之一的方法是,防病毒软件运行可疑的代码段在一个安全的沙盒中,并观察它们的行为。这比分析相同的代码要快得多,但必须抵制(并检测)代码试图检测沙盒的企图。
Generic signatures 通用签名
通用签名是针对特定行为而不是特定恶意软件项的签名。大多数新的恶意软件并不是完全新颖的,而是对早期恶意软件的变种,或者包含了一个或多个早期恶意软件示例的代码。因此,之前分析的结果可以用来对抗新的恶意软件。
Competitiveness in the antivirus software industry防病毒软件行业的竞争力
在防病毒行业中,普遍认为大多数厂商基于签名的保护具有相同的有效性。如果一个恶意软件的签名可用,那么每个产品(除非功能失效)都应该能够检测到它。然而,有些厂商在察觉新病毒和/或更新其客户的签名数据库以侦测它们方面比其他厂商要快得多。
在零日病毒保护方面,效果存在广泛的差异。德国计算机杂志 ct 发现,对于零日病毒的检测率在20%至68%之间变化。在零日病毒性能方面,厂商现在主要在这个领域进行竞争。