我们在一些涉及到安全、黑客的文章里经常会看到“0day漏洞”这个词。今天就来介绍一下什么是0day漏洞。
概念
首先要说明的是,“0day”并不是某一种技术的名称,因此0day漏洞也不是指某一种特定技术的漏洞,它是指软件或系统中已经被发现,但官方还不知道或还没有发布相应补丁的漏洞。
那为什么叫0day漏洞呢?缘由有两个,比较正统的说法是0day的概念最早来源于软件和游戏破解,即一款新发布的软件或游戏,不到一天就被破解,用户玩家可以免费使用。当然,不一定真的是当天,0day强调的是以最快的时间内破解。后来,这个概念延伸到了信息安全的圈子,嬗变成了以最快的速度,赶在官方察觉或发布补丁之前,发现系统的漏洞。第二个说法来源于“零日危机”。在战争中,我们将一些大规模可毁灭世界的事物(一般是武器)称之为零日危机(类似的还有末日时钟),而在世界毁灭之后,重新建立新文明的第一天,即称之为第0天。而0day漏洞爆出时由于官方还未发现,因此很有可能造成巨大的破坏,就类似于毁灭世界的武器,所以就有了“0day”这个名字。
0day漏洞产生的原因五花八门(其中最多的还是缓冲区漏洞),而且不可能根除,因为是软件,就必然有漏洞。可以说有一定规模的商用软件,理论上都有0day漏洞存在,只不过能不能被发现或发现早与晚的问题了。
危害
0day漏洞最大的危险在于只有少部分人知道,公众和官方都一无所知。当然,如果大家都知道了也就不是0day漏洞了。因此,随着移动互联网、互联网+、数字经济席卷全球,信息安全愈发重要,0day漏洞的经济价值也就水涨船高了。以前黑客们寻找0day漏洞是为了炫技和研究,现在是为了钱。0day漏洞可以在黑市上挂牌出售或悬赏获取,而出于对自身利益,买卖双方都不会将漏洞信息公开,这进一步助长了0day漏洞的不可知和危害性。
举几个利用0day漏洞进行攻击的例子。
震网病毒(Stuxnet)
震网病毒发生在伊朗、印度、印度尼西亚等国家。它被用来攻击伊朗的铀浓缩工厂。震网病毒利用Windows上未被发现的漏洞,即0day漏洞,感染计算机上用于工业控制的软件,运行非正常命令,以破坏用于分离核原料的离心机。
索尼影业攻击事件
在2014年索尼影业成了0day漏洞攻击的受害者。其网络被入侵,大量敏感信息和数据被盗取并公开,包括即将上映影片的细节、商业计划以及高管的个人邮箱地址等。迄今为止,攻击所利用的漏洞细节而不为人知。也就是说,上述0day漏洞依然存在。
RSA公司攻击事件
0day漏洞如此厉害,连安全业界的顶尖公司–RSA也未能幸免。2011年,黑客利用Adobe Flash里的0day漏洞向RSA公司发起了一次攻击。黑客向几个RSA的员工发了邮件,邮件里有Excel表格作为附件,而Excel表格里就嵌入了包含漏洞的Flash文件。当其中一个员工打开表格时,攻击程序将远程控制工具Poison Ivy安装在电脑上并取得了控制权。然后攻击者通过此电脑进入RSA公司网络,寻找并拷贝敏感数据到他们自己控制的外部服务器上。事后RSA公司承认黑客盗取的数据中包括其双因素认证产品SecurID的敏感数据,而这个产品被广泛应用于重要数据和设备的访问控制与身份验证。
极光行动(Operation Aurora)
这场发生在2009年的网络攻击利用了Internet Explorer和Perforce软件(谷歌用来管理源代码的软件)的0day漏洞,目标是几个大公司的知识产权,包括谷歌、雅虎、Adobe、陶氏化学等。
如何应对
作为管理员或用户,最好的办法是永远不要使用未打补丁版本的软件。比如在 Linux 社区中,许多用户不会安装.0发行版。相反,他们将等待.1版本(例如Ubuntu 19.10.1)。通过避免最初发布的版本,可能会免受第一批产品中至少任何未发现的0day漏洞的影响。当然这并不意味着.1版本将修补所有的0day漏洞。经常在新闻中看到存在一段时间的软件中发现的新漏洞。
作为开发人员,最好的办法是用尽可能多的版本测试人员。这是开源软件比专有软件更具优势的地方。在源代码公开的情况下,任何人都可以审查和测试代码。而且,Beta开源软件通常面向公众发布,因此任何人都可以进行测试。另一方面,付费软件通常不会向公众发布Beta(当然,也有例外)。当应用程序的beta测试人员数量有限时,发现的bug较少,从而导致0day漏洞的可能性更高。总之开发人员需要先进行测试、测试和测试,然后再发布给公众。
最后,不管是用户还是测试人员,你可以做的一件事就是确保将错误报告提交给开发人员和公司。错误报告是程序员解决软件问题的一种有效方法。因为你提交的BUG很可能导致0day漏洞的发现和后续修补。