0
1945年9月9日下午,美国海军编程员、编译器的发明者格格蕾丝·霍波正领着她的小组构造一个称为“马克二型”的计算机。
突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。霍波发现一只飞蛾躺在中间,她小心地用摄子将蛾子夹出来,小心翼翼地帖到“事件记录本”中,并注明“第一个发现虫子的实例”。
这是有记载的计算机系统第一个Bug,从此以后,人们将计算机错误戏称为Bug。
遗憾的是,从计算机诞生至今,工程师们也没能把Bug消灭。
举个例子。来看这样一句话:“那个语文老师是我父亲。”乍一看,这句话并没有语病,读起来也并不拗口。
但是,当环境中有两个语文老师呢?这就出现了指代不清的问题。所以,这句话在特定环境中,是有缺陷的。
此时你可能会发布一个“补丁”:那个长得最高的语文老师是我父亲。
很快问题又来了,如果他们一样高的话,这句话同样是有缺陷的。你不得不再次发布“补丁”,如此循环往复下去,缺陷不断地“消失再出现”。
而能够被利用的Bug或者是设计缺陷,就是漏洞。
漏洞有危害吗?当然。关于漏洞的危害,《计算机安全技术规划研究》作者James在1972年说了这么一段话:函数的代码没有正确地检查源地址和目的地址,允许用户覆盖部分系统数据。这可能被用来向系统中注入代码,从而使用户获得机器的控制权。
而在随后的数十年间,桌面操作系统取代了DOS系统一统天下,应用软件生态百花齐放,漏洞的利用一发不可收拾:
2003年8月,在微软发布新一轮的操作系统安全漏洞后不久,冲击波病毒利用微软RPC漏洞开始全面爆发,受其感染的机器会不停重启、IE浏览器不能正常打开链接、应用程序异常等等;
2010年7月,有着“有史以来最复杂的网络武器”之称的震网病毒开始爆发,它利用了微软操作系统中至少4个漏洞(包括3个当时的0day漏洞),突破了工业生产网络与办公网络的物理边界,致使伊朗核设施遭受重大损失;
2014年4月,心脏滴血漏洞首次向公众披露,攻击者可通过读取网络服务器内存,访问敏感数据,从而危及服务器及用户的安全,其影响范围之大实属罕见;
2017年5月,全球范围内爆发基于Windows网络共享协议进行攻击传播的永恒之蓝蠕虫恶意代码,本次爆发使用了已知Office漏洞、永恒之蓝SMB漏洞等。尽管微软早在数月前就发布了相关漏洞补丁,但依然没有阻止数百万台主机的失陷。
……
指望不再出现漏洞是不可能的。能够预见的是,将来还会有更多的漏洞出现,谁都无法阻止。
只要是人编写的程序,一定会有缺陷,即便用于防范网络攻击的网络安全产品也不能例外。不管工程师如何修复,随着外部环境的变化,缺陷就会暴露出来。一旦这个缺陷能够被用于网络攻击,漏洞就形成了。
面对漏洞利用,防守者只能血战到底。
按照公开程度,漏洞大致可以分成三类:
第一类是Nday漏洞,即已公开并且已经有修复方案的老旧漏洞;第二类是1day漏洞,即已公开但尚未发布补丁的漏洞,甚至没有缓解措施;第三类是0day漏洞,即尚未公开的漏洞。
理想状态下,只要发现的足够及时,修复足够快,漏洞攻击就追不上我,也就不存在0day的问题。
或许在绝大多数情况下,事实的确如此。在赛博空间,每天都有大量的白帽子发现并协助厂商完成漏洞修复工作。
但现实却是骨感的,没有人能做到一直领先。所以,攻击者仍可能掌握着少数0day,而你对它一无所知。尤其是那些不需要与用户过多交互就能够轻松触发利用的远程代码执行漏洞,更是颇受攻击者的青睐。
一旦出现0day,安全厂商最重要的事情,就是与时间赛跑,尽可能缩短漏洞利用的“空窗期”,让它变成Nday。
首先是尽快帮助客户确定漏洞的危害以及影响范围。漏洞的危害包括很多种,有的被用于窃取数据,有的被用于获取控制权限,还有的则可能用于破坏,危害不同,处置方法也不尽相同;漏洞的影响范围则包括影响哪些软件版本,有哪些主机安装了有漏洞的软件等等。
其次是通过漏洞复现尽快找出通用规则,在补丁发布之前输出缓解措施和检测方案。从漏洞发现到补丁安装,这中间需要经过一段相当漫长的过程,而且即便有补丁,也会考虑到业务的连续性和稳定性原因,补丁安装也不会十分顺利。因此,通过关闭部分不常用的端口等缓解措施来防范漏洞利用就显得非常重要了。与此同时,安全厂商还应尽快推动相应的安全产品更新检测规则,及时发现对应的攻击行为。
尤其是需要注意那些POC或者EXP已公开的漏洞,它们随时可能被其他攻击者大范围利用。
话虽如此,但攻击者手握0day甚至是1day,就意味着掌握网络攻击的绝对主动权,往往能够在成功在内网建立“根据地”,向其余目标进行横向渗透。
因此在攻防对抗阶段,防守方决不能完全依赖某一款或者某一类安全产品,一旦攻击者绕过安全产品的检测(尤其是使用该安全产品的漏洞),便可以畅通无阻。这就要求防守队必须构建起多批次、大纵深的防御体系,对异常行为进行持续的检测。
这种做法的好处有两个,其一是提高攻击者的攻击成本,迫使攻击者不得不花费更多的资源甚至是使用多个0day漏洞的组合攻击,才能达成攻击目标;其二是在边界、终端、服务器等多个不同网络位置,完整记录攻击者的入侵行为,包括端口嗅探、弱口令暴破、文件上传、DNS解析、进程创建等,结合威胁情报,为溯源反制提供数据支撑。
当攻击者利用社会工程学技巧向目标用户发动钓鱼邮件攻击时,防守方可以利用各类检测设备,轻松获取攻击者的IP地址、域名后缀邮箱、钓鱼网站或恶意附件样本等信息。
此时,溯源反制便显得游刃有余:其一,可以通过相关联的域名/IP进行追踪;可以利用沙箱对邮件恶意附件进行分析,获取文件MD5等信息后与威胁情报进行比对,完善攻击者画像;在规则允许的情况下,还可以对攻击者进行反向钓鱼渗透,进一步获取攻击者的社交信息。
而想要获取上述数据,至少需要在网络侧部署全流量检测设备,记录全部的网络会话;在终端侧部署终端检测与响应系统,记录终端上的各类文件执行等数据;在服务器侧,部署服务器安全软件,记录服务器内部的行为数据;甚至可以在内网大量部署蜜罐,对攻击行为进行欺骗诱捕并记录。
话说回来,0day的最大危险性来源于其未知性。既然无法避免,那就兵来将挡水来土掩。一旦被防守方捕获或者成功溯源,0day很快就会变得和Nday一样,失去它的锐利。
值得欣慰的是,0day漏洞的首次利用并非完全无懈可击。漏洞是未知的,可攻击者触发漏洞的方式,却可能是执行已知的攻击命令,并且刚好命中安全设备的检测规则。
例如,安全员可能无法完全排查出飞机上所有的火灾隐患(漏洞),但可以阻止乘客携带明火登机,而纵火犯想要纵火的方式恰好就是带明火上飞机,于是被安检拦截了。
雷锋网雷锋网
雷峰网版权文章,未经授权禁止转载。详情见转载须知。