安全观察 再探安全性的十个永恒定律,第 部分 
Jesper M. Johansson
 目录 
在上个月的《TechNet 杂志》中,我开始发表由三部分组成的连载内容的第一部分,再次讨论了大家耳熟能详的安全性的十个永恒定律一文。我希望在其初次受到肯定的八年之后重新评估它们,看看它们是否仍然适用 — 换句话说,就是看看它们是否确实经得起考验(您可以在 microsoft.com/technet/archive/community/columns/security/essays/10imlaws.mspx 上找到本系列的第一部分)。
我发现前三条定律仍然适用。现在我准备继续讨论接下来的四条定律。在下个月的最后一部分中,除了讨论最后三条定律之外,我还将根据八年来的后见之明提一些新的看法。
定律 4:如果您允许攻击者将程序上传到您的网站,网站也就不再是您的网站了。
定律 听起来似乎有点奇怪,毕竟其他定律都相当高级,讲述的都是一般功能,而非特定服务。前三条定律都在描述计算机被他人控制的情形,定律 谈的却是网站。
要理解定律 4,就必须先了解一些历史背景。这十大定律最初发表于 2000 年。当时网站才刚刚兴起,还不够成熟,就连 Amazon 和 eBay 这类站点也尚在开发阶段。虽然入侵程序在网站上运行任意命令当时是司空见惯的事,但却几乎没人去修补它们。
在这情况下,Microsoft 往往将定律 视为必要的公开声明,即您必须对您的网站服务负责。但在 2001 年 月 Nimda 出现之后,却给了这种想法一记当头棒喝。Nimda 是一种多向量网络蠕虫,它所采取的其中一种传播方式就是感染防护不足的网站,然后篡改这些网站,植入蠕虫。
网站涂改也是定律 的时间背景之一。Attrition.org 就是从那时候起,开始建立许多遭到涂改的网站页面的映像存档 (attrition.org/mirror/attrition/months.html)。遭到涂改的网站有许多,其中不乏知名网站。就连著名的安全性培训机构 SANS Institute 的首页也曾经遭到涂改。图 1 显示的是 1998 年 10 月美国亚利桑那州网站的遭到涂改的页面。
图 亚利桑那州网站的遭到涂改的页面(单击可获得大图)
当时的问题在于,当网站遭到破坏时,人们通常看不清事情的真相。大家都认为只要除掉破坏性网页,一切就会正常。于是,有本领的人就忙着修补攻击者所利用的漏洞(如果能找到漏洞)。
大家都没有看到事情的全貌。定律 旨在让大家思考当网站遭到破坏时可能会发生什么情况,而不是思考已经发生了什么情况。
只可惜它没有得到预期的效果。尽管定律 早已提出,但直到 2004 年,我还是得疲于回答这样的问题:难道不是只要删除黑客创建的网页,就能够恢复我们的正常工作吗?我是个不吝惜言语的人,所以就写了一篇文章试图纠正这样的观念:《Help: I Got Hacked. Now What Do I Do?》地址为 technet.microsoft.com/library/cc512587.aspx
但问题是,定律 在今日是否仍然站得住脚?攻击者能够将程序上载到您的网站,是否就表示他已实际占领了您的网站?说得更详细一点,他是占领了您的网站,还是占领了您的访问者,亦或还是都占领了呢?定律 并没有明确说明这一点,因此我要好好分析一下这两方面。
关于攻击者是否占领了您的网站这一点,答案是肯定的。倘若您允许攻击者将程序加到您的网站上,您的网站就被他占领了(不过有一些例外,我稍后会加以说明)。对于一般网站,攻击者可以通过上载程序做两件事,他能够上载到您的网站代表着很大的隐患。
第一件就是命令您的网站为他服务。如果有人打算散布像儿童×××这种非法内容,那么放在什么位置比放在能追踪到黑客本身的网站比较好呢?想必在您的网站上散布这些内容应该会比在罪犯自己的网站上更理想。
第二件就是通过上载程序来控制网站背后的系统。当然,这取决于他是否真的能够在您的 Web 服务器上运行该程序。只将程序放在网站上而不执行任何操作,并不会产生任何作用。但是如果攻击者可以运行此程序,那就表示他确实已经占领您的网站,不但可以使网站为他服务,还可以利用网站控制其他事情。
而我刚提到的暗示的重要性甚至远不止于此。在这篇文章中,我努力想说明的一点是,您不知道攻击者在入侵之后可能做什么事。如果他已设法将自己的内容放到了您的网站上,那么您要问的就是他还能做什么。
答案可能有很多种,而这正是本谜题最关键的部分。倘若攻击者能够在您网站背后的服务器上运行程序,那么他已经完全占领这个网站以及网站可以执行的任务了。也就是说,这个网站再也不属于您了。
至于他是否会入侵访问网站的访问者,就很难说了。在 90 年代末期,浏览器上的安全漏洞随处可见,到了 2004 年左右,情况已经有了明显改善。现在,两种主要的浏览器,即 Internet Explorer 和 Firefox,在安全性方面都已经相当可靠了。事实上,比起 90 年代的浏览器,现在的浏览器确实称得上安全性堡垒。
攻击者是否可以入侵您的访问者,主要取决于两方面。第一方面是浏览器中是否存在可以入侵的漏洞?也许有,不过比以前已经少得多了。第二方面是攻击者是否可以引导用户泄漏自己?答案常常是肯定的。
多数用户都会安装网站要求他们安装的东西,这个问题非常严重,因为这是无法用技术解决的。我曾在 2008 年 7和 月份的《安全观察》系列文章中讨论过这个问题。关于定律 4,很遗憾,它意味着攻击者能够入侵您的访问者的机率相当高。
之前我提过的例外情况应该不难猜到。现在网站所做的许多事在 90 年代都是很难预测到的。例如,现在像 Microsoft SharePoint 这样的内部协作网站相当普遍,只要具备适当的权限,任何人都可以将程序上载到这类网站,但这并不表示该网站或任何来访的用户会被泄漏。那纯粹是该网站的用途。在某种程度上,只要具备访问该网站的权限,都是可以信任的用户。
然后就是分享软件网站。虽然过去曾有恶意软件发布到这些网站,但它们的初衷是分享软件。这不表示会有任何用户被泄漏。简而言之,这些网站都备有安全措施,可以确保自身安全,用户也不会因为访问这些网站而自动泄漏。我认为这个例外状况就足以确认这个规则了。因此,尽管有些网站的设计意图就是允许用户(无论好坏)上载程序,但是定律 仍然成立(至少在立意上仍然成立)。
定律 5:弱密码也能带来强大的安全性。
多年来密码已经成为我的收藏夹。密码(更笼统的说,是分享的秘密)是一种验证对象的好方法。但是它们有个小小的问题:只要一面对人性,它们就会彻底败下来。
在分时计算 (time-sharing computing) 刚刚问世的太平时代,区别用户的需求逐渐明显。系统需要使用某种方法来区别张三和李四的数据。在理想的情况下,张三应该可以防止李四读取他的数据(虽然这个要求相当基本)。
解决方法是使用用户帐户和密码。过去,我们是一个计算机系统有一个帐户,而且通常有一个密码,密码通常都是下列信息中的一种:
· 一个孩子的名字
· 配偶的名字
· 宠物的名字
· “God”(如果您是超级用户)
时间一晃过去了 30 年,现在我们拥有几百个帐户 — 它们各自分布在 Internet 上的不同网站,以及若干台计算机上。其中每个系统都告诉我们,不能在其他任何一个系统上使用同样的密码。建议:密码最好不要太弱,不要写下来,而且每隔 30 到 60 天就要更改一次。
由于一般人无法在一天更改四个密码之后,还能准确记住任何一个,结果只好在所有的系统上使用相同的密码(或是两个不同的密码),而且这些密码通常都是选自下面几个可能名称:
· 一个孩子的名字,后面再加上数字 1
· 配偶的名字,后面再加上数字 1
· 宠物的名字,后面再加上数字 1
· “GodGod11”(只适用于超级用户)
这 30 年来我们的进步并没有达到预期的程度。研究人员仍在为密码查找适合的研究领域;有关详细信息,请参阅《PC World》中的文章“Too Many Passwords or Not Enough Brainpower”(地址为 pcworld.com/businesscenter/article/150874/too_many_passwords_or_not_enough_brain_power.html)。
就一般使用上来说,密码显然是相当弱的安全形式。不过即使如此,安全使用密码还是有讲究的。例如,您可以创建强大的密码并将它们写下来 — 这种做法本身并无任何问题。但是,充斥在周围的不良安全性建议最后总会使用户认为,在每一个地方使用相同的密码要好过将密码写下来。
于是,所有的安全性最终却变成一个漏洞。我们以协作虚拟专用网络 (×××) 访问为例。我曾讨论过各种 ××× 技术;讨论过供应商对于它们强得惊人也慢得惊人的密码加密优点所做的评估;以及供应商为了不让攻击者找到数据包而轮换加密密钥,并将其加密。
但所有这些讨论内容都完全没有切中要点。如果以目前能用的计算技术,还得花上一千万年才能破解一个数据包数据流,攻击者就不会试图去破解了。使网络速度呈数量级下降以获得要花一亿年才能破解的加密,这样到底有什么意义?坦白说,如果一亿年(或是一千万年)以后的人类真的有办法将我的工作电子邮件解密,那就随他去吧。
加密真是这么值得攻击的漏洞吗?我相信攻击者绝对会攻击容易下手的漏洞 — 这个漏洞就是用户常常选择我刚刚提到的几种名称作为用户密码。
如果所有用户都选择一个六个或八个字符的密码,那么,就算再强的加密也很难不被攻破。于是我们只好寻求更强的身份验证方式,如智能卡和一次性 PIN 码生成器。
这两种方法虽然可以提供显著的改善,却不见得能够提升安全性。例如,智能卡很容易丢失或忘记随身携带。一次性 PIN 码生成器大小正好可以放在卡片夹内,挂在脖子上也很好看。下次您到街对面的咖啡店喝杯咖啡时,不妨看看是否有人会盯着您现在用的 PIN 卡,大声念出您的标记的用户名称,然后费心猜测机率渺小的随机密码,好利用这唯一的途径连接到您所在公司的网络。
定律 是最适合现在的定律,而且今后也仍然适用。但我认为它可以大幅通用化,不只弱密码能够带来强大的安全性,我们可以更笼统的说:弱身份验证或甚至漏洞都能带来强大的安全性。
多数 IT 安全性专家都很自责没有回头看清全貌。我们常会将注意力集中在只需强大的安全性技术就能够轻松解决的某个问题上,却常常意识不到还有一些系统漏洞有待缓解,甚至有待思考,以及需要借助所有我们运行的技术加以改善。
例如,许多公司积极调整用户所用的可移动设备,却允许出站 Secure Shell (SSH) 和加密的电子邮件连接。如果您将待传输的数据加密,甚至连自己都看不到数据,那么通过限制可移动设备能在多大程度上真正减少数据丢失?如果我们还想继续生存并繁荣昌盛,我们的安全性专家就必须解决这一重要问题。
定律 6:计算机是否安全取决于管理员是否值得信任。
我很惊讶,即使到了今天,我们还在关注只适用于管理员的使用 — 更糟一点,只有在您已经是管理员时才适用的使用 — 的报告。在撰写本文时,我正坐在从 Black Hat 2008 会议回程的机场。就连在那里也看到一篇演示文稿,开头写着:只要具有根目录访问权限,您就能够按照以下方式控制系统。
一方面,有些人认为最糟的情况是如何修改系统(尽管不是很光明正大,但是只要他们具备修改系统的权限,也不能阻止他们这么做),真是令人欣慰。另一方面,大家似乎还看不出这么做根本没什么意义,仍然想方设法一意孤行 — 徒然浪费宝贵的时间和精力,才更令人泄气。
其实道理很简单:只要用户是管理员(或 Root 用户、超级用户,或是您对该角色的其他称呼),就能在该系统通行无阻,为所欲为!
当然,不管这类恶意用户想要做什么事,他们都能找到更夸张、更狡猾的方式得逞,但是基本道理仍然不变:只要恶意管理员不想让您检测到,您就无法有效检测到。这类用户总有办法隐藏他的踪迹,让他的所作所为看起来像是别人做的。
从这一点看来,定律 无疑仍然适用,至少在某种程度上仍然适用。对计算机具有万能权限的人一旦心术不正,您的计算机就不再是自己的计算机了。计算机是否安全取决于管理员是否值得信任这句话,还真是一点也没错。
不过,还需要考虑其他重点。首先,从计算机的角度来看,管理员的概念不但包含被赋予该角色的人员本身,也包含该角色安全性范围内运行的任何软件。此外,管理员的角色还包括任何这类软件的任何编写人员。
这一点非常关键。定律 所说的计算机是否安全取决于管理员是否值得信任这句话,其意义其实远远超过字面意义。请务必谨记,就计算机而言,管理员代表的是在系统管理用户安全性范围内运行的任何程序。这与用户是否有意运行该代码,或者有意假借它进行破坏都没有关系。
这一点非常重要,因为直到最近,一般用户才能以非管理员的身份操作基于 Windows 的计算机。这是 Windows Vista 中用户帐户控制 (UAC) 的主要目的。即使如此,用户的系统管理范围和非系统管理范围之间也没有安全界限。因此,只要可能成为管理员(而不仅是目前身为管理员),任何用户都适合定律 6
因此,唯一不受定律 限制的方法,就是不成为管理员,而只以标准用户身份操作。遗憾的是,就连 Windows Vista 也没有将这一项设为默认值,许多原始设备制造商 (OEM) 甚至将 UAC 都一并禁用了。
但是,UAC 在未来并没有什么隐忧。UAC 最明显的特色是它的提升权限过程,如图 2 所示。但最重要的策略性好处,并不是提升到管理员权限,而是即使原来不是管理员,也能有效操作计算机。Windows Vista 进行了好几项改进才取得了这种效果。例如,现在即使不是管理员也可以更改时区,这样在外旅行的人就不必非成为管理员不可,这一点与早期版本的 Windows 完全不同。只要勇往直前,就有更多进步的机会。
图 2 UAC 最广为人知,但也可能是最不重要的功能就是提升权限提示(单击可获得大图)
定律 不但现在适用,以后也仍然适用。但是,非系统管理用户也能操作计算机的这项转变,是定律 的主要调节因素之一。第二个因素并不是什么新概念,那就是:强制访问控制系统。
强制访问控制系统中的对象都附有标签,而且重新给对象贴标签的规定也相当严格。软件会将安全性应用到与其标签一致的对象,但并不使用管理员的直接控制权。严格的说,在目前的实现中,管理员通常可以采取各种不合法的步骤取代这些控制权。
不过,有朝一日我们也许能够限制管理员的行为。但即使我们可以限制管理员的行为,您也可能认为那些用户不再是名符其实的管理员。因此,定律 绝对经得起考验。
定律 7:加密数据是否安全取决于解密密钥。
定律 大概是所有定律中争议最少的一条了。加密经常被视为许多安全性问题的万灵丹。事实上,尽管加密在安全性领域是很有价值的工具,但对于我们所面临的大部分问题来说却非如此,现在不是,以后也不会是。
不管您到哪里,加密总是如影随形。在 Windows 中,加密用在密码、文件、网络漫游以及身份验证这些方面。虽然并非所有加密都可以还原,但是像加密文件系统 (EFS) 以及存储的密码和用户名称所用的凭据缓存,都是很重要的可逆加密,如图 3 所示。
图 Windows Vista 中的凭据缓存受加密保护(单击可获得大图)
EFS 和凭据缓存都受用户密码所派生的加密密钥保护。其中包括多层含义。首先,如果用户密码被重设(不输入旧密码,直接设为新密码),除非有指定的修复密钥,否则存储在这些位置的所有数据都会丢失。
但更重要的是,虽然加密本身所用的密钥和协议相当强大,密钥的安全性还是取决于用户的密码。换句话说,数据安不安全,就看密码强不强。密码事实上是一种解密密钥,即使在这个特定示例中,密码只是辅助的解密密钥(这表示它负责将另一个解密密钥解密),但仍然不改它是解密密钥的事实。
这可以说是最关键的一点。这几种依赖链在 IT 领域相当普遍。几年前曾经有人对 VeriSign 运行一种社交工程攻击,并且因此以 Microsoft 的名义取得了两个代码签名证书。代码签名证书实际上是一种解密密钥,目的是验证证书中所命名的实体具有加密密钥。
但是在这种情况下,要求得到证书的人,并不是证书中所命名的实体。换句话说,现在攻击者的签名密钥用的是另一个人的名字。这些密钥也许很安全,不过一旦您分析依赖链的其余部分时,就会发现严重错误。
而这证明了一点:加密密钥对于数据安全性至关重要,但是保护加密密钥本身安全的,很可能是极弱的密码。我看过太多系统将实现器构建在能想出的最强的加密上,并且用另一种安全措施来保护加密密钥,但却未意识到第二层保护暗藏了巨大的漏洞。在实现任何加密时,您必须分析整个保护链。只有加密本身是无法保护数据安全的。
因此,定律 也仍然适用。它是 10 条定律中最无懈可击的一条。事实上,它是这个行业中最接近物理学定律的一条。同时,它也提醒我们,分析敏感数据的整个保护链可以说是我们的良师益友。因此,即使密钥没有最强的保护也无所谓,只要那些密钥所保护的数据只要求较低层保护就行了。
结论
到目前为止,安全性的十个永恒定律已经讨论到第 条。每一条重新审视过的定律在多年之后仍然全部适用,而且短期之内似乎也不会被有力地证明是错的。
事实上,这些定律所展示的,都是令人印象深刻的预见。唯一有点站不住脚的到目前为止只有第 条,不过我在前面也提到过,即使如此,它还是经得起考验。
下个月我会讨论第 8和 10 条定律,并且做个总结。另外我也会评论这些定律可能无法涵盖所有安全内容中的哪些内容。