“瘦肉丁”谈漏洞的稳定性及所谓的负责任披露

在我所在的一些安全讨论群里关于漏洞和攻防经常会看到一些似是而非的比喻,我觉得有必要说一下自己的看法。



漏洞的稳定性

关于漏洞,我们经常会听到一个比喻:挖漏洞就象挖矿。这个比喻是非常不切合的,它掩盖了两者之间一个非常重要的区别:独占性。挖矿的人对挖到手的矿是独占的,矿石在A手里就不可能同时在B手里,而且只要不出手永远都会是占有者的。而研究者对发现的漏洞不享有独占的权利,因为漏洞本质上是一种秘密的知识,研究人员可能对漏洞发现的方法申请专利,但对漏洞本身基本都不会那样做(我没研究过是否允许或可能),所以你可能永远不知道你是不是漏洞唯一发现者。

为什么这个是否独占的区别是重要的,因为它会导致漏洞稳定性的缺失。当漏洞被其他人独立发现以后,可能会有如下几种情况:

1. 他也不对外公布
2,作为交换的硬通货在小圈子里传播
3. 负责任的会通报给厂商赚个Credit
4. 还想赚点钱的卖给ZDI这样的漏洞中间商
5. 想要钱财最大化的卖到黑产


如上的后4种结果,都会导致漏洞或快或慢地必然失效。一般来说,发现漏洞的难度越高,被独立发现的可能性越小,所以难发现的漏洞相对安全,比如袁哥那个几乎影响所有IE的6332(最后还是被其他人独立发现给补了),TK的BadTunnel(几乎影响所有Windows)。其实,漏洞研究者的竞争对手还远不止其他独立发现人,厂商也会是大玩家:

1. 厂商自己可能发现漏洞加以修补,对于有实力的厂商这类情况很常见,只要经常比较补丁的就会知道微软偷偷修过多少漏洞而不对外公开的。手里有一堆漏洞的大牛们拿到补丁后,干的第一件事就是确认自己报上去的漏洞确实修改了没有,第二件事呢,确认自己没报的漏洞还在不在。
2. 厂商在修补其他漏洞或功能改进时被殃及池鱼,相关的补丁也对研究者手里的漏洞造成影响。
3. 厂商推出各类的漏洞威胁缓解措施,典型的比如DEP、ASLR、EMET、沙箱等等,这些措施的引入至少在短期内导致一大波的漏洞利用难度出现数量级的提高。
4. 随着版本更新,漏洞相关功能的代码被废弃或重写。


总之,由于各种因素的综合作用,漏洞的稳定性其实非常堪忧,不知道什么时候就突然死亡了,对研究者来说何时以什么方式出手自己最好有个拿捏,这个关乎名利。

什么才是负责任的漏洞披露

现在所谓的负责任的漏洞披露流程基本都是厂商设计的,大致的过程就是漏洞发现者提供细节给厂商,厂商确认后给出大概修复的时间,出了补丁以后给发现者Credit,整个过程不对外公布漏洞的技术细节。看得出来,这个流程完全为厂商优化的,因为:

1. 厂商挟用户占据道德至高点
2. 对漏洞的修复要花费多大代价只有厂商能知道


如果厂商态度积极做事靠谱(现在的大厂商一般都还行),这个流程应该算个对用户安全影响较小的方案。如果漏洞信息是可以独占的,厂商的这个流程是可接受的,甚至漏洞都没必要修。但是,由于上面提到的第2点,厂商是否尽力修补漏洞无法有效评估,人和组织都是有惰性的,假如没有什么外部的压力,漏洞修复的周期就变得非常不可控,一个漏洞修几个月平常事。基于漏洞可能被多个研究人员独立发现这个现实,漏洞细节被如何暴露其实无法完全控制,这样,过长的漏洞修复时间会导致用户暴露在威胁之下。所以,Google Project Zero那样设定一个保密细节的期限给予厂商一定的压力未必不是对用户负责的做法。即便不从给厂商修补压力的角度看,对漏洞细节的披露也有其价值:

1. 技术细节不仅对黑客有利,对防御方也是。在厂商不能及时提供补丁的情况下,细节有助于防御方采取可能的缓解措施,事实上大多数的漏洞都可以通过消减攻击面的方式暂时缓解:比如进行访问控制、设置过滤规则、关闭不必要的组件等,也可以使用替代工具,引入通用性的攻击缓解方案,但前提是防御方有必要的信息支持。
2. 某些新类型的漏洞,如果能被更多的研究者所了解,那种类型的漏洞则很可能被研究得更彻底,从而被更快地发现,被更全面地处理。


Full Disclosure派就象那些有时候说话难听的右派,而且未必政治正确,但永远都有他们存在的空间。
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐