从搜狗泄密事件看安全漏洞的披露原则

作者:mj0011

任何软件都无法避免漏洞,对开发者来说,以最快速度响应和修复漏洞是对用户负责任的做法。不过在漏洞信息披露方面,不光很多普通网友不了解,一些软件厂商也缺乏对安全行业漏洞披露原则的认识。在近期搜狗浏览器漏洞泄密事件中,网络上关于漏洞应该如何披露就众说纷纭,其中也存在一些明显误区。

在这里,我结合安全行业一些重大的漏洞事件,谈谈安全漏洞的披露原则。

公布安全漏洞是“不负责任”和“不遵守安全行业规则”的吗?

如果只看这句话,很容易会感觉是正确的,通常很多人可能认为不经过厂商修复就公布漏洞,是只有恶意的攻击者、破坏者才会干的事,只会威胁用户的安全,但事实上,这要看具体的情况,包括漏洞的情况、软件厂商的态度等等,很多时候,直接公布漏洞非但不是不负责任的行为,反而是积极保护用户的举措。

首先,我们要区分一下公布安全漏洞的“公布”程度,公布信息含量最少的,可以仅仅停留在是“某某软件有一个漏洞,可以如何如何”这样的;再多一些的,可以是这个漏洞具体涉及的组件、类型和危害等;再多的,才是漏洞的细节信息。

一般来说,只有当漏洞的细节信息被公布后,其他研究人员甚至恶意攻击者才有可能重现这个漏洞,并组装成攻击武器,针对用户进行恶意行为。

因此我们可以看到,通常情况下,只有公布漏洞细节(即如何重现漏洞或者最起码包括漏洞出现的具体代码位置),才会对用户的安全产生威胁,才是”不负责任的”,而公布漏洞存在的本身、公布漏洞的危害和状况,只要不涉及如何重现和利用这一安全漏洞,就不是“不负责任的”。而事实上,公布漏洞的基本信息,正是将漏洞的处理和披露过程“公开化”、”透明化“的一个非常积极和正向的努力,国内的乌云漏洞平台也是这一透明化努力的例子。

再看国外微软一个案例。2005年8月,一名加州的自由安全研究人员Tom Ferris向微软报告了一个IE浏览器的安全漏洞,一开始,Ferris都是按照微软所谓“负责任的披露漏洞原则”(微软近年来也意识到这个原则存在一些问题,将其改为了“合作式漏洞披露原则”,后面会具体阐述)来处理,等待微软公司修复漏洞后,才公布漏洞的存在。

但是一个月后,微软仍对此漏洞没有进一步处理,Ferris于是在自己的网站提到了这个漏洞的存在,并接受了媒体的采访讨论这个漏洞的危害,但并没有提供如何重现和利用这一漏洞的细节。

他表示他的初衷是希望尽快让用户得到保护,用户需要知道自己使用的软件存在漏洞,并注意安全,软件厂商也需要一定压力以让他们尽快修改问题。

为什么软件公司在接到漏洞报告后必须积极地尽快修改问题呢?因为即使所有漏洞报告者都遵守负责任的漏洞披露原则,不对外公开,但是如果“好”的安全研究人员可以发现漏洞并报告软件厂商,那么“坏”的安全研究人员理论上也一定可以发现这样的漏洞,甚至很可能在好的研究人员发现前,“坏”的研究人员已经发现并利用漏洞攻击软件用户了。

出于这个原则,安全漏洞的报告者有充分的权利告知公众安全漏洞的存在,以便让用户注意安全,同时督促软件厂商加快修复进度。

在媒体报道后,微软公司受到了舆论压力,但是微软公司代表仍对外称,由于Ferris没有公布漏洞的细节,因此他仍是负责任的、站在软件厂商这边的。

我们可以看到,Ferris报告微软漏洞和搜狗泄密事件有着相似的开头。360发现了搜狗安全漏洞,报告给软件厂商、公开漏洞的存在、介绍给媒体,但是360并没有公布漏洞的细节资料,因此是负责任的做法。和Ferris一样,360是站在软件厂商这边,同时也是站在保护用户的这边的。只是微软遵守了安全行业的守则,承认漏洞并加以修复,而不是像搜狗一样偷偷修复再百般抵赖。

11月5日晚间,直到搜狗公开否认漏洞后,同时技术验证搜狗漏洞已无法再次触发,360才向媒体和公众公布了搜狗浏览器漏洞的重现细节视频(使用QQ授权登录搜狗浏览器后,再多次点击“退出账户”,才会触发漏洞),这样做是为了证明漏洞真实存在,而且当时已不会被攻击者恶意利用。

Ferris接受媒体采访时说:“…所有的研究人员都应该遵守负责任的披露漏洞的方针原则,但是如果某个生产商比如微软公司要花6个月到1年的时间来修复一个漏洞,那么研究人员就有充分的权利公开漏洞的所有细节资料”。

也就是说,安全研究人员确实应该遵守负责任的披露漏洞原则,在厂商修复前不讨论任何细节,但是这个的前提是,软件厂商必须积极对待、确实承认漏洞的存在,如果软件厂商消极对待漏洞报告,长时间不修复,甚至直接否认漏洞的存在,研究人员就有义务公开这个漏洞的存在、提供漏洞的细节证明漏洞存在且确实存在威胁。

安全研究人员要负责,软件厂商更应该负责。如果软件厂商不负责,用户的漏洞就永远得不到修复、安全就永远得不到保障,如果这样,披露漏洞的存在和细节,反而就成了安全人员或安全厂商的义务,是负责的行为,因为这种情况下,公开漏洞信息漏洞才有可能得到及时修复。

看到以上案例,我想每个人都可以理解,无论安全漏洞披露的方式、方法和规范如何变迁,其中永恒不变的一条本质的出发点和原则就是:一切以保护用户的安全为第一优先。在围绕安全漏洞中,任何一方,包括安全厂商、研究人员、软件厂商,甚至媒体,都应该积极以实现这个原则为出发点,如果有任何一方不负责任,应该使用对应的方法进行制衡。

关于软件厂商对漏洞“不负责任”,最后被“制衡”的例子在历史上数不胜数,这已经是安全行业里的一项约定俗成的规则了。在国内,金山网盾漏洞门(厂商否认漏洞结果被国内外漏洞研究机构曝光)、旺旺漏洞门(厂商否认漏洞但进行了修复,引起安全社区激烈议论和媒体曝光),都是业内人尽皆知的典型案例,在国外也是如此。

早在2004年,Paul Waston发现了思科公司在TCP/IP协议上的一个漏洞,他将漏洞报告给思科,思科一开始承认存在漏洞,后来又予以否认,并认为他的发现没有价值,对他的疑问也不予回复,Paul不得已在当年的Cansecwest安全会议上公开了这个漏洞,结果其后思科不得不赶紧针对漏洞发布了修复程序。

关于这点还有一个非常有力的例证就是上面我曾提到的,微软安全漏洞处理原则的变更,在2010年以前,微软的“软件漏洞报告计划”中一项著名且被广泛应用的策略、规范和协议就是所谓“负责任的漏洞披露原则”,要求漏洞报告者对漏洞保密,不要在发布前公开。而在2010年7月,微软宣布修改现有的策略,彻底去掉“负责任”这个字眼,将其更名为“合作式的漏洞披露原则”(coordinated vulnerability disclosure),国内安全专家tombkeeper对此点评说:微软以前一直强调“负责任的漏洞披露(Responsible Disclosure)”。潜台词是:“你报告给我,就算我不理你,你也不能私自捅出去,否则就是不负责任”。2010年他们意识到这种单方面的要求不太讲理,于是把口号改为“协调的漏洞披露(Coordinated Vulnerability Disclosure)——强调了双方都有责任。”

安全研究者和软件开发商都应该对用户安全负责,并相对制衡,在公布这个新原则时,微软可信计算业务总经理Thomlinson指出,“责任当然依旧重要,但这应该是由安全研究人员、安全产品供应商和其他软件供应商组成的整个社区的共同责任。在提高计算生态系统的总体安全性方面,安全社区的每个成员都应发挥自己的作用”,他也指出,新的原则不要求漏洞报告者对漏洞的本身保密,只要不发布漏洞的具体细节,漏洞报告者可以对外公布漏洞的情况和报告,同时软件厂商也有充分的义务,及时和报告者沟通,承认漏洞的存在,确认漏洞修复的日期。

总结来看,其实漏洞的披露方式一直处于争论和博弈之中,而事实上漏洞的披露(而不是无论任何都只能默默修复)正推进着漏洞信息、用户安全向更好、更积极的方向发展,而总的保护用户的原则是不变且决定着漏洞披露的具体方式如何变化的。单向的“负责任”早在至少三年前已经成了过去时,软件厂商再用“负责任”三个字作为自己出现问题时的挡箭牌已经是不可能了。

我们再来看一个问题,除了软件厂商消极对待甚至否认漏洞的前提,那就是当严重的安全漏洞已经明确地通过其他途径泄漏、用户的安全或隐私已经在受到威胁时,安全研究人员应当公开漏洞的细节,以及时保护用户。

我们知道,通常漏洞报告者报告的漏洞并不会被恶意攻击者利用,因此这时可以给软件厂商合理的时间来按一定周期和计划来修复漏洞,这也是为什么漏洞报告者要保护漏洞的细节不对外公开的原因。

但是当一个安全漏洞已经被其它第三方知晓甚至已经实际运用于威胁到用户的安全或隐私时,这个规则就不再适用了,这是因为在这个时候和情况下,只要这个安全漏洞还处于未被公开、未被修复的状态,越多的用户、越多的计算机就会被攻击并造成无可挽回的损失。此时,对用户公开漏洞信息、对安全社区公开漏洞细节,就成了安全厂商、安全研究人员的义务

为什么要对用户公布漏洞的信息?

因为用户需要知道自己使用的软件或系统可能存在什么样的安全风险,以便进行及时的处理措施,比如停用软件、限制访问、修改信息,这样的措施不能修复漏洞,但是可以有效防止用户被攻击。

为什么要对安全社区公布漏洞的细节?

因为只有公布细节了,才能督促软件厂商修复问题,同时,公布细节才能让安全社区的所有成员一起为用户想办法,例如一个软件漏洞被用于恶意攻击,那么如果安全研究人员将漏洞细节公布出来,安全社区就可以针对漏洞的利用和攻击方式进行分析,开发出临时的针对性解决方案,又如如果一个漏洞被用于泄露用户的隐私,公开了漏洞的细节后安全社区,包括和隐私相关的厂商就可以采取措施,保护他们的用户不受这个隐私泄露的进一步影响。

谷歌在今年五月底公布的Google总部关于0day漏洞的披露新政策,Google有很多安全研究人员,对于他们发现的漏洞,如果已经被外面的恶意攻击者利用,软件厂商必须在七天内公布出来,如果厂商不公布,Google会支持研究人员自己公布详细信息,Google同时强烈建议所有其他安全研究人员也遵守这一时间表。

Google的发言人在谈到这个政策时提到,“七天对于软件厂商修复漏洞来说,可能确实不够,但是绝对足够软件厂商确认漏洞的存在并发布可能的解决方案,包括但不限于停用服务、限制访问或联系软件厂商,如果软件厂商七天不公布,Google就应该支持安全研究人员公布漏洞细节。”

这是一个稍微极端的例子,因为Google的影响,在安全圈也引起了不少争议,但最终我们看到这里体现的还是:保护用户安全是第一位的原则,如果用户已经受到威胁了,那么就应该刻不容缓地公布信息、确保用户受到最大可能的保护,这在安全行业里已经是基本的常识了。

再比如今年五月的微软IE8 0day漏洞被用于针对美国劳工部官方网站的挂马攻击,在美国的安全公司Alienvault Labs披露了这一信息和细节后,国外的各大安全厂商,包括FireEye , Mcafee , F-Secure等等,各大新闻媒体、甚至包括微软自己,都分别发出了针对微软IE 0day漏洞的告警新闻,安全厂商纷纷发布针对这个漏洞的细节分析和攻击的分析报告,以及各自的缓解和防护措施。

这充分说明,“针对危急的已经存在的漏洞攻击,应当尽最快速度告警并公布细节和防护措施”,已经是国内外安全厂商、软件厂商和新闻媒体的基本共识和通用的响应方式,只有这样才能最大程度的保护用户,当漏洞已经对用户的安全产生威胁时,如果还要将漏洞信息藏着掖着不能公布,这才是对用户安全、对计算机系统安全的最大威胁。

总结以上内容,可以清楚地回答搜狗对于360公布其漏洞的无稽指责:

1. 公布漏洞的存在和威胁(即漏洞的基本信息),是安全厂商和安全研究人员的义务,因此360发现搜狗漏洞后公布漏洞的基本信息,并提醒用户应该进行的操作,是非常正当的保护用户的行为,不存在“不负责任”的问题;同时,这也符合国际和国内安全行业的规范,公布漏洞的基本信息是促进漏洞处理和披露过程透明化的积极努力,起到了保护用户和国家计算机信息安全的作用。

2. 搜狗的漏洞是非常危急的且已经泄露的,严重危害用户隐私和安全的漏洞,而且搜狗公开否认了这个漏洞。为了让用户得到告警、修复和保护,为了安全社区有办法共同努力保护用户不受这个漏洞的影响,必须公开这个漏洞的细节,因此360在搜狗否认后不得已公布漏洞细节,也属于“负责任”和“遵守安全行业规范“的行为。

最后一个问题是,搜狗说360警告搜狗有漏洞,应暂停使用搜狗浏览器的举动是“又当运动员又当裁判员“,不应当仅仅因为有漏洞就让用户停用软件,这是否正确呢?

显然不!实际上,对存在漏洞的软件、组件进行停用告警和建议,这是软件行业、安全行业和新闻媒体通用的针对安全漏洞的缓解措施或建议方式。当一个安全漏洞被发现,尤其是被发现已经被披露用户实际攻击时,停用它是最通用、最简单也最有效的方式。

由于在安全漏洞披露的初期,安全厂商甚至软件厂商自己都可能对这个安全漏洞研究不够深入,除了停用以外的其他方案都可能由于对漏洞的解决不透,存在不能有效防御漏洞的问题。

一个例子是2009年攻击伊朗核电站的“震网”病毒,它利用了微软Windows操作系统中对.lnk文件的处理漏洞来进行传播和感染。在微软接到漏洞报告后,发布了一个相对复杂的缓解方案,结果由于方案对漏洞的理解不够清楚,导致又出现了绕过缓解措施的攻击方式,不得不再次更新方案。如果使用暂时停用软件的方式,就不存在这类问题,同时停用软件也是最简单的方式,这可以让更多的用户得到及时的保护。

我们可以在微软的所有安全漏洞公告中寻找“缓解措施“这一节,除了无法通过停用解决的系统级漏洞外,基本都可以看到停用相关软件、组件的建议,尽管这会暂时让用户的一些功能或应用受到威胁,但是在彻底修复漏洞前为了保护重要的资料和信息安全,这一点是非常必要的,尤其对于重要的企业、政府和国家部门来说,在不影响关键业务和系统的前提下,暂时停用存在公开漏洞攻击的软件,应该是一个必要的措施。

对于新闻媒体而言,停用有漏洞的软件也是一个非常常见的建议。这些年来,我们不止一次地在安全漏洞发生后,可以看到很多媒体、政府发布类似的建议,例如德国和芬兰政府呼吁国民停用存在漏洞的IE6、ZDNet呼吁停用存在漏洞的IE6,美国政府国土安全部因安全漏洞呼吁停用Java、RSA大会呼吁停用漏洞众多的Adobe PDF Reader等新闻都可以在国内外各大IT媒体搜到,而且也都得到了积极的响应。这不是对软件厂商的打压,而是敦促软件厂商积极修复漏洞、为用户提供更安全产品的合理建议。

关于 “从搜狗泄密事件看安全漏洞的披露原则” 的 3 个意见

  1. 承认错误的勇气不是谁都有的,搜狗的做法给人一种很没自信的感觉。
    就算360是你竞争对手,但既然你的软件存在漏洞,抵赖算个什么情况?
    哪家公司的软件都会存在不足,发现即改正就好,这并不能证明是你的技术不行,而有错误不承认,就真是人品不行了。

    积极修改软件中存在的不足是你的工作职责,否则即为不忠;
    用户乃你衣食父母,忽视用户权益是为不孝;
    用户的权利至上,不只是口头说说,还应放在心中时刻牢记,否则即为无礼;
    用户的安全需要维护时,你却矢口否认,至用户于危险之中,是为无义;
    有错不认,是为无信。

评论关闭。