早在 2000 年,Scott Culp 曾发表了一篇题为“安全性的十个永恒定律”的文章。它是我读过的有关安全性问题的最佳文章之一。他所介绍的信息到现在仍然是所有信息安全工作的基础,如果尚未读过这篇文章,建议您阅读一下(甚至将其打印出来)。在 microsoft.com/technet/archive/community/columns/security/essays/10imlaws.mspx 可找到它。
人们对该文褒贬不一。有人指摘说,它是 Microsoft 为避免修复那些被视为严重问题的一些漏洞所采取的花招。但也有人认为它是有关安全问题的一篇最基本的文章,并且由于其公认的重要性而被大肆抄袭。但是我却比较推崇那些能够提出自己观点的评价,例如在以下网址发表的见解:edgeblog.net/2006/10-new-immutable-laws-of-it-security。
在这篇文章发表后的八年时间里,安全领域发生了巨大的变化。实际上,在每种主要的蠕虫病毒爆发前用户都会被提请注意。我们已经已经在打一场信息战(对手是有组织的犯罪、政治实体等)。常见语汇表中新增了各种新名词和术语,例如网页仿冒、网址嫁接、僵尸网络、间谍软件和跨站点请求伪造等。我们有运行于 Windows 中的有史以来最为复杂的 rootkit。我们拥有在很大程度上专为解决安全问题而开发的新操作系统,也有对安全问题仍未引起足够重视的其他一些操作系统。
社会工程学已发展成为一个主要威胁。数据侵犯(例如,一家大型零售商泄露了 9400 万个信用卡号码)已成为常见的新闻故事(但人们仍继续在此类商店购物)。美国和英国政府合伙滥用绝大多数西方世界居民的私人信息(可人们仍将私人信息在此类政府中存档)。并且,大量的安全剧场(security theater,意指在没有明显改善安全措施的情况下让用户感到安全的方法)已进入我们的生活,机场的安检就是一例。
我认为现在是需要再来探究一下这些定律的时候了。如果我们看到的所有这些变化都发生在本世纪的最早阶段,我们是否还会宣称这些定律是永恒不变的呢?如果的确是这样 — 如果它们经受住了过去 8 年的考验 — 那么很可能它们也能经受住接下来 10 年的考验。
在这一由三部分内容组成的系列文章中,我将以批判的眼光来审视每条定律。本月我将介绍定律 1 到 3。在下个月的内容中,我将剖析定律 4 到 7。最后一期我将研究定律 8 到 10,并根据自从 2000 年这些定律最初面世以来我们周围所发生的变化,针对看上去合理的想法和观点提供一些佐证。
定律 1:如果攻击者能够设法使您在自己计算机上运行他的程序,那么这台计算机就不再属于您了。
此定律有力地说明了,在计算机上执行的任何软件都可能会控制该计算机。在这条永恒定律第一次出现时,Microsoft 提供的操作系统包括 Windows 98、Windows Me 和 Windows NT 4.0。现在我们有了 Windows Vista 和 Windows Server 2008。
在 Windows 98 和 Windows Me 中,您所执行的任何软件都可以完全控制计算机。Windows NT 4.0 有一个非常可靠的底层安全模型,但如果以“管理员”身份运行它,则在效果上会将其隔离模型降级为 Windows 98 和 Windows Me 的模型。当然您也可以使用非管理员身份运行 Windows NT 4.0,但这样做会非常痛苦,极少有组织会这样做(即使有也是屈指可数的几个)。
假设您就是以非管理员身份运行 Windows NT 4.0 的。那么,在撰写定律 1 时它是否适用?回答是肯定的。首先,Windows NT 4.0 有大量不容忽视的漏洞。例如,存在着一些不够严密的权限,尤其是针对内核对象以及在注册表中。还有许多尚未被发现但专家预期可能会发生的攻击类型。例如,在 1999 年,人们尚未意识到以提升权限的用户身份在交互式桌面上运行进程可能会危及计算机的安全。直到 2002 年,Chris Paget 发表了有关粉碎攻击的白皮书 "Exploiting the Win32 API",这时大家才意识到这一点 (seclists.org/bugtraq/2002/Aug/0102.html)。
难道在拟定定律 1 时 Microsoft 就预见到了粉碎攻击?不,实际上并非如此。Microsoft 只是意识到一个简单的事实:极少有真正的安全边界可以阻止在计算机上执行的应用程序接管该计算机。
Windows Vista 和 Windows Server 2008 是从 Windows NT 4.0 迁移而来的两代操作系统。它们是否可使定律 1 无效?是否存在具有同样问题的其他操作系统?这要视情况而定。在新操作系统中的确存在更为可靠的安全边界,实际上早在 2000 年出现的一些试验性操作系统中就已经具有了适当的安全边界。然而,此类边界仍为数不多。例如,Microsoft .NET Framework 中的“代码访问安全”就是一个安全边界。它专门设计用于使在沙盒中执行的代码不会影响底层操作系统。
Internet Explorer 中的 Iframes 提供了另一个安全边界。但 Iframes 不会影响对操作系统本身的访问,它只影响网页上不同部分的内容之间的访问。Internet Explorer 中的“保护模式”(如图 1 所示)是操作系统级别的安全边界。它的目的是防止在浏览器中执行的代码影响底层操作系统 — 在没有用户操作的情况下。还有一些其他安全边界(如标准用户帐户),用于防止用户帐户影响底层操作系统或任何其他用户。
图 1 Internet Explorer 7 使用名为“保护模式”的安全边界(单击图像可查看大图)
了解术语“安全边界”的含义极为重要。它并不意味着存在着一个不可侵犯的隔离墙,可以保证提供坚不可摧的、全面的隔离。此术语实际是指软件供应商(例如 Microsoft)要负责提供安全补丁以修复任何违背该边界的行为。软件始终会存在错误,毫无疑问,我们会继续发现更多的违背行为,而软件供应商则需要继续提供补丁。随着时间的推移,他们应改进其软件以在第一时间修复这些漏洞。这可能会被视为定律 1 仍然成立的佐证。
但是,还有另外一个需要考虑的至关重要的内容。您之前可能已经注意到了短语“没有用户操作”。定律 1 实际并非真的与软件的缺陷或漏洞有关。它实际是与人为因素中的漏洞有关!关键短语是“设法使您”。如果攻击者能够设法使您运行他的程序,则他很可能也能设法通过一些伎俩使您在赋予程序提升权限的上下文中这样做。
即使您不具有管理权限也没有关系。作为标准用户,您仍有权访问大量有趣的信息:银行文件、情书、图片、视频以及公司机密数据。所有此类数据都有可能令攻击者感兴趣,并且他们均无需任何提升权限即可读取。对于您所管理的计算机中的信息而言,执行某个恶意程序就相当于将您所有操作权限都移交给了攻击者。因此,如果将“您的计算机”定义为“您所管理的计算机中的数据”,则大可忽略有关权限的任何讨论而直接得出“定律 1 成立”的结论。
即使不对计算机的定义做过细的划分,定律 1 似乎仍然可以经受住时间的考验。定律 1 的目的是为了指出以下事实:作为计算机的操作员,您必须对您在该计算机中运行的软件负责。如果您安装了恶意驱动程序或恶意视频编解码器,则相当于将该计算机的完全控制权转交给了罪犯!
尽管软件供应商可以采取各种措施来避免发生意外的危害(这实际是安全边界的真正意义所在),但有意执行的恶意软件通常会摧毁所有此类保护性措施。这就是除了确保用户无权执行管理任务外,对其进行相关培训也至关重要的原因。因此,可以肯定地说,定律 1 在今天仍然成立,只是计算机的定义可能需要稍做修改。
定律 2:如果攻击者能够更改计算机上的操作系统,那么这台计算机就不再属于您了。
此条定律看似极其简单。很显然,如果攻击者能够更改计算机上的操作系统,那么您将无法再信任这台计算机。但是,随着计算需求的发展演变,操作系统的含义也已发生了变化。许多年前,我为 The Blackwell Encyclopedia of Management 撰写了关于术语“操作系统”的定义 (managementencyclopedia.com)。在定义中描述了操作系统对输入输出设备、硬件及类似设备访问的管理。现在,我手头并没有百科全书,而且原始记载也已不知所终,但我可以肯定的是,我并未提到过操作系统包括纸牌游戏、笔触输入法以及视频代码转换器等内容。
随着计算变得日益复杂,操作系统也需要支持更多的功能。更重要的是,OEM 厂商常常会在其中加入他们自己的附加软件 — 这种附加软件有的还稍微有点作用,但通常都是有百害而无一利。而且,其中有些附加软件会重复已内置到核心操作系统中的功能。
例如,Windows Server 2008 Enterprise Edition 在默认安装时所占磁盘空间超过 5 GB。Windows Vista Ultimate Edition 包括 58,000 多个文件,占用空间超过 10 GB。而且组成操作系统的不仅仅是文件。还有数千个配置设置以及后台程序或服务。
它们都只是操作系统的一部分。它是一个整体术语,包括所有文件、所有配置设置、所有服务,也包括由文件和配置设置创建的所有运行时对象 — 信号、命名管道、RPC 端点等。甚至高度抽象的构造(如系统时间)和特定类型的数据(如事件日志内容)也应被视为操作系统的一部分。
鉴于操作系统的发展演变方式,修改任何此类文件结构是否真的会使计算机不再值得信赖?直接的回答是否定的。例如,Windows Vista 随附了来自 MS-DOS 的旧式行编辑器 edlin.exe。我无法肯定但我愿意以一杯三倍量的摩卡咖啡作为赌注:自 Windows Vista 发布之日起,在所有安装的副本中,edlin.exe 只被调用过两次。这两次都发生在大约三分钟之前我尝试记住其语法的时候。如果有人修改了 edlin.exe 或其他从来没有人使用过的文件,是否真的意味着它不再是您的计算机了?
Edlin.exe 毫无疑问是操作系统的一部分,但如果没人曾经执行过此文件,那么对它的修改会导致计算机受到破坏吗?答案当然是不会。修改并未使用过的操作系统部分并不会使计算机受到破坏。而从未使用过的操作系统部分还有很多。
但是,间接的答案是肯定的。我们不能只通过查看是否有人执行某个文件来判断对它的修改是否可能会导致计算机受到破坏。问题要比这复杂得多。看一下 edlin.exe 的访问控制列表 (ACL),如图 2 所示。
图 2 edlin.exe 的 ACL 限制非常严格(单击图像可查看大图)
edlin.exe 的 ACL 限制非常严格。只有 TrustedInstaller 服务有权修改这一可执行文件。这一点非常重要:它意味着当攻击者修改计算机上的该文件时,会导致出现间接的影响。修改 edlin.exe 这一行为的确意味着此计算机不再属于您了。恶意用户可以修改 edlin.exe 这一事实是此处的关键所在。如果攻击者可以修改该文件,则他就可以修改任意文件,这意味着您将无法再信任计算机上的任何内容了。
操作系统会保护自己。服务会受到保护以避免遭到未经授权的修改。配置设置会受到保护以避免遭到未经授权的修改。磁盘上的文件会受到保护以避免遭到未经授权的修改。甚至操作系统所使用的信号和 RPC 端点也会受到保护以避免遭到未经授权的修改。如果攻击者可以修改任何此类受保护的对象,则他也就可以修改所有此类对象,并且极有可能他已经这样做了。
这一点至关重要。通过几条永恒定律可知,并非执行某种操作这一行为意味着计算机遭到了破坏。真正重要的只是有人有能力执行某种操作。这是一个需要注意的地方。在涉及计算机安全的每个方面,您都必须始终牢记:真正重要的并不是实际执行了什么操作,而是他能够执行什么操作。
如果计算机向 Internet 敞开大门且数月未打补丁,它是否仍值得信赖?答案是否定的。必须将该计算机视为已遭到破坏。您无法再信任可能已遭到破坏的系统上的任何内容。(五年前,我在文章 "Help!I Got Hacked.Now What Do I Do?" 中说过同样的话,文章的地址为 technet.microsoft.com/library/cc512587)。如果遇到老练的攻击者,受到破坏的系统甚至可能不会显示出任何遭到破坏的迹象。系统可能看起来非常正常。
毫无疑问,定律 2 仍然成立。如果攻击者可以修改计算机上任意受保护的对象,则该计算机将不再属于您了。只需记住,重要的是修改此类对象的能力,而并不是受到实际的攻击。
定律 3:如果攻击者对您的计算机具有无限制物理访问权限,那么这台计算机就不再属于您了。
在 2000 年,此条定律极为重要。许多人并未完全了解对系统具有物理访问权限时都可以做些什么。实际上,即使是应该对此有深刻了解的一些政府机构也并未认识到这一基本要点。当时,在安全指南中建议将“Allow shut down without logon option”(允许在不登录的情况下关机)设为“disabled”(禁用)。这将导致登录屏幕上的“Shut down…”(关机…)按钮变灰。其理论依据是:要关闭计算机,用户必须首先登录以便留下系统关闭人员的审核记录。
其实此观点存在瑕疵。要对登录屏幕上的“Shut down…”(关机…)按钮具有访问权限,您必须实际就坐在控制台旁边。在您坐在控制台旁边的情况下,如果您真的想要关闭计算机,通常可以使用计算机前面的圆形大按钮 — 甚至电源线。系统肯定会关闭。而且没有审核记录。
Windows 2000 包括一个名为“Allow undock without logon”(允许在不登录的情况下移除)的安全设置,此选项在 Windows Vista 中仍可用,如图 3 所示。其原理是相同的。要从基座移除便捷式计算机,必须先登录系统。
图 3 为什么不把计算机和基座一起盗走?(单击图像可查看大图)
此设置的实际安全价值很值得怀疑。我的想法是如果有人可以走近该便捷式计算机并移除它,那么肯定也有人可以轻松地盗走它。现在,虽然我并非曾经盗取过便捷式计算机,但如果我想这样做的话,这一预防措施根本无法阻止我。我可能会将便捷式计算机和基座作为一个整体一起拿走。哎呦,我还盗走了网线和电源线。真是一个毫无意义的安全调整工具!
直到 Petter Nordahl-Hagen 创建了他的 Offline NT Password & Registry Editor,才真正触及有关物理访问的要害。他的作品只是一张 Linux 引导盘,其中包括一个试验性的 NTFS 文件系统驱动程序,可实现对 NTFS 卷的读取和写入访问权限。引导盘上的软件会将注册表安装到本地计算机中,并将管理员帐户的新密码写入 SAM(软件资产管理)配置单元。您需要的只是能够物理访问系统以及一、两分钟的时间。
类似它的这种工具就是最初撰写定律 3 的原因所在。实际上,在许多演示中都使用了 Nordahl-Hagen 的工具。不幸的是,它并未在绝大多数受众中间传播开来。我曾在一些演示中亲自使用过此工具,但由于厌倦了被不断问及“我们如何确保没有用户知道类似工具?”以及“Microsoft 采取了哪些措施来修复这个问题?”,后来就再也没有使用过它。IT 业界的绝大部分人只是不想接受或不想了解物理访问的危险程度要压过所有其他途径这一事实。
在这种环境中,定律 3 非常重要。但是它却遭到批评家们的无情攻击。它被认为是 Microsoft 的伎俩,企图避免修复可能(即使只有一点点)与物理访问相关的所有问题。定律 3 在很多情况下被用来驳回漏洞报告,包括 Offline NT Password & Registry Editor。但是,要阻止对系统具有物理访问权限的攻击者,实际只有一种可能的方法:确保他们无法接触到任何数据。
这是破解定律 3 的可能途径。从定律成文之初,完全磁盘加密技术就已成为一种可行的解决方案。通过使用完全磁盘加密(更准确的说法是“整卷加密”),整个卷(在其他操作系统中被称为分区)均可被加密。因此,如果整个引导卷(换句话说,其中安装有操作系统的卷)被加密,我们想知道的是定律 3 是否仍然成立?
回答是非常有可能。首先,解密密钥必须存储在某个位置。放置密钥(BitLocker 中的默认选项)的最简单位置是计算机中的“受信任的平台模块”芯片。这样做的话,计算机将可以通过无人参与的方式引导。计算机引导完成后,对计算机拥有永久物理控制权限的一些老谋深算且心怀叵测的攻击者可通过多种方式对其实施攻击。由于计算机现在可以连接到任意网络,因此可能会使用与网络相关的方式来攻击系统。
例如,攻击者可能会通过直接内存访问 (DMA) 设备(如 USB 闪存驱动器)来读取或写入内存。计算机开始运行后,如果攻击者对该计算机具有物理访问权限,则后果将不堪设想。
如果密钥未存储在该计算机中,则攻击将取决于攻击者能否获取或猜出密钥。如果使用 PIN 码来引导计算机,则攻击者可能会比较轻松地猜出此代码。如果密钥存储在单独的硬件设备中(如 USB 闪存驱动器或一次性密码链)或由其派生而成,则攻击者必须对该独立设备具有访问权限。肯定有方法可以获取这些密钥,或使那些对密钥具有访问权限的人感到非常不便,尽管可能要颇费一番周折。
您也可以通过一种略微不同的方式来解释定律 3:“如果攻击者对您的计算机具有物理访问权限,可能此计算机已经被盗,因此不太可能再将其拿回来。”从这个角度看,这台计算机实际上已不再属于您了。而且,从这个角度来看,对于攻击者而言,能否访问计算机上的数据也无关紧要。但是这实际并非定律 3 的实质所在。它意味着攻击者可以访问计算机中的数据,而非得到计算机本身。
综上所述,定律 3 的确仍然成立。毋庸讳言,当今的一些技术在阻止具有物理访问权限的攻击者方面已经取得了明显的成效,并因而最大程度降低了能够访问采用了安全措施的计算机上的数据的攻击者数量。也就是说,攻击者所具有的能力始终决定着攻击者实际可以攻击的程度,最新的技术解决了 10 个永恒定律中的多个定律所提出的问题(在一定程度上)。但是,物理访问仍提供了进入系统的方法(尽管较为复杂)。
就目前而言,安全性永恒定律被证明非常具有适应性,无论是对于技术进步还是对于时间考验而言。在前 3 个定律中,定律 3 最不稳定,不过即使这样它在许多情况下也仍然成立。但是,它是具有最易获取且最可靠的缓解方案的定律。在接下来的两期《TechNet 杂志》中,我将继续本次讨论,看一看定律 4 到 10 是否仍然成立。
Jesper M. Johansson 是研究安全软件的软件架构师,还是《TechNet 杂志》的特约编辑。他拥有管理信息系统博士学位,具有 20 多年安全方面的经验,并且是企业安全领域的 Microsoft 最有价值专家 (MVP)。他的最新著作是《Windows Server 2008 安全资源工具包》。
The Way of the great learning involves manifesting virtue, renovating the people, and abiding by the highest good.
没有评论:
发表评论