发现漏洞是有价值的。至今,仍有许多人相信是没有漏洞存在的,直到它们被公之于众。我们知道,漏洞是需要暴露的,但是在软件开发商被迫把问题公开的时候,他们扮演了什么角色呢?
对于信息安全,我能够真正着迷的原因之一就是这个领域涉及了数量众多的不同技术。就个人电脑来讲,就有各种各样的体系结构、操作系统、设备和协议需要去学习。这个领域信息充足,从来都不缺乏没嚼头的东西。我们很难在知识面广而不精和术业有专攻上找到平衡点。
谈起系统中的漏洞,对它们的理解已经辐射到了相当大的范围。从一个较高的层次看,也许可以简单地看作什么技术被影响了,以及漏洞最终导致的结果是什么。相反地,如果你从最低层的角度看,作为一个研究者,你能够探索到这个漏洞非常可怕的细节??发现这个漏洞执行的代码和它能够被利用的程度。在这一层上,知道如何利用这个漏洞和如何在实际中利用它是有很大差异的。当然,物极必反,这两者之间可能会存在一种包容现象。这种包容现象能够让人们对这个漏洞采取一些技术防护,同时,从另一方面来讲,即使人们不知道关于这个漏洞的详细技术细节,也能够让人们在足够深的层次上查明这个漏洞,并且对于利用这个漏洞的攻击采取有效的保护措施。
事实上,一些漏洞在这些层次上仅有非常细微的差距,比如单纯的SQL注入攻击(SQL injection)。如果这样的话,对于这个漏洞有非常高层次理解的人在解决或者学习如何利用它时可能不会遇到许多麻烦。反之,就是在这两者之间有极大差距的漏洞了。2004年发现的赛门铁客防火墙内核堆栈溢出漏洞就是这样一个非常好的例子。对漏洞的利用仅仅是在一定时间内的一些特定小群体。
在我离题万里之前,我先告诉你我发现的这些漏洞都能够让人着迷。每一个漏洞都有自己独特的东西,要想完全弄明白每一个漏洞都需要不同的技术。
漏洞是从哪里来的?
虽然这听起来可能是一个简单的问题,但答案并不简单。有两所学校在思考这个问题。我会在将来就每一所学校进行谈论。
大多数公开的漏洞都是被一些安全研究员发现的,通常他们是就像Bugtraq那样的黑客电子邮件组的那些人。一个安全研究员也许是一个公司的雇员、也许是一个完全自由的研究者、也许只是在业余时间浏览代码的所谓研究者。在某些时候,这些人都是很意外地就简单发现了漏洞。在大多数情况下,完全研究清楚一个漏洞是一个相当有深度的过程,可能需要花费一个技术娴熟的研究者大量的时间。
现在,不管是因为什么原因,对一个漏洞的公开经常要与它的具体影响联系起来考虑。即使是最常使用的术语“zero-day”看起来也是意味着并不真实存在的一个未公开的漏洞。相信有太多的人犯了这样的错误,也就是说在这些漏洞被公开暴露之前人们好像认为这些漏洞并不会引起任何威胁。如果一个漏洞已经在一些地方公开暴露,但是没有人得到这个消息,那么人们还是认为这不是一个真正的漏洞。所以我才会这样说。
微软的“责任保密”条款要求安全研究者不得公开安全漏洞,直到软件经销商发布了这个软件的补丁。过去,我们看到过经销商和安全研究者之间的冲突,他们在暴露这些漏洞上是两种截然不同的方式。经销商想争取时间来修补漏洞,这个过程是相当低调的。安全研究者则通过发表讲话直接向经销商公开漏洞信息,不管这是否是他们要暴露这个安全漏洞的动机。尽管这些情况看起来有着相似的目标,但冲突还是经常会引发的。
现在,看起来好像安全机构在公布漏洞的时候只在总体上介绍一下漏洞。在某些情况下,这些漏洞问题在公布之前数周、数月或者是数年就已经报告给了经销商。这是不需要担保的。因此,很自然我就会认为报告问题的人是惟一知道漏洞存在的人。这样,你认为他是惟一对漏洞威胁感到恐惧的人也是没有问题的。
漏洞的价值
漏洞已经变成了一件贵重的商品。近来谣言四起的WMF漏洞(0 day攻击),就是在公众根本不知情的情况下展开攻击的,这个漏洞的资料被卖到了4000美元,尽管这只是一起到目前也没有经过证实的谣传。如果这是真实的,我敢打赌这种情况是前无古人的,我也能够确定它不会后无来者。甚至有像iDefense和3Com这样的公司愿意从这些安全研究者手中购买未公开发布的漏洞信息。这些情况对于漏洞研究的影响你是怎么认为的呢?不管你以哪种方式去看这个问题,在今天来讲,漏洞就是金钱。
虽然iDefense公司和3Com公司提供的程序不能对拥有安全研究小组的公司产生吸引,但他们确实能影响那些独立的研究者。因为有了这些程序,独立研究者就可以全身心地投入这种研究中。倘若他很擅长于找出漏洞,他就能够以此为职业,这种研究工作也就变成专职的工作了。我想这是非常可怕的。
漏洞的道德规范
一些人可能会对隐藏在贩卖漏洞信息之后的道德规范产生置疑。安全研究者不应该昧着良心透露漏洞的信息不是吗?也许是吧。不是这样的话难道我们应该期望安全研究者来审查商业软件是盈利销售还是免费吗?如果认为漏洞信息的销售有碍道德规范,那么我首先要问的就是那些销售非常不安全、没有保障的软件符合什么道德?当然我们知道,开发完全没有漏洞的软件是不可能的,显而易见,那些公司也不要绞尽脑汁去开发安全产品,这样,道德问题也就不会与公司纠缠了,它仅仅集中在问题的底线上。开发安全产品需要时间和金钱,软件公司不喜欢花费时间和金钱来解决这些问题,除非在这条底线上有了激烈的碰撞。
你会站在哪一边呢?你相信漏洞仅仅在公开之后才成为一种真正的威胁?还是相信无论是否公开都是都会产生威胁?
为什么我们需要负责任地公开暴露漏洞?
作为我自己来讲,我相信这些漏洞在它们被公开暴露很久之前就会对我们产生真正的威胁。公开暴露这些漏洞把公众推倒了浪尖上,很久以后该软件的开发商才会注意到此事,数月甚至数年过去了,他们都不会发出任何公开申明,看起来好像他们根本就不知道此事而只顾着牟利。这种情况看起来好像是软件开发商对于这种不安全软件转移责任的一种尝试或者一种可怜的补救方法。这里的底线,就是当一个漏洞被发现并且报告给了软件经销商之后,不管是否有人决定把这个消息公之于众,系统仍旧处于易受到攻击的状态。
在这里澄清一下,我没有说过在把一个漏洞攻击报告给开发商之前报告给Bugtraq是一种合理的做法。我也没有说过这不会使公众处于危险的状态。修复这些问题需要时间,我也不会低估尽力给传播广泛的商用软件制作补丁的难度。然而,这里会有一些局限性,也就是说,开发商逃避现实的做法和拒绝承认已经公开的漏洞不会对任何人有帮助。
我想,现在已经是开发商在发布补丁之前开始承认这些问题的时候了,特别是那些已经花费了他们数月之久、或者有些已经超过了一年的时间还没有完成的补丁。至少他们应该承认问题的存在,并且为人们提供一些保护的措施。
最后,我相信那些安全研究者帮了我们的大忙。他们应该得到一些报酬。虽然负责任地公布漏洞信息是很重要的,对于一个负责任的销售商来讲,响应时间也是一个限制因素,因为在漏洞被暴露之前很久公众就已经处在危险之中了。最后我要说的是,安全研究者不是制造了漏洞的人,正是他们发现了这些漏洞。