信息安全基础知识-全-
信息安全基础知识(全)
原文:
zh.annas-archive.org/md5/b9bb9ebfb98f413f577ec1cf2b784a88译者:飞龙
前言

当我在学校时,我面临着选择专攻信息安全或软件工程的抉择。软件工程课程的标题听起来无聊至极,所以我选择了信息安全。没想到,我踏上了这条曲折且充满挑战的道路。
信息安全作为一种职业可以带你走向许多不同的领域。多年来,我处理过大规模的恶意软件爆发,收集过法庭案件的取证信息,追捕过计算机系统中的外国黑客(在许可下!),入侵过系统和应用程序(也都是经过授权!),分析过大量的日志数据,实施并维护过各种安全工具,编写过成千上万行代码以解决问题,参与过开源项目,在安全会议上发言,教授过课程,还写下了成百上千的关于安全的文章。
本书全面概述了信息安全领域。它非常适合那些对信息安全这一术语含义感到疑惑的人——或者是那些对该领域感兴趣、不知道从何入手的人。各章提供了清晰的、非技术性的解释,说明信息安全如何运作以及如何将这些原理应用到你自己的职业生涯中。它将帮助你在不需要查阅大量教材的情况下学习信息安全。我将首先介绍理解该领域关键概念(如最小权限原则和各种安全模型)所需的基本概念,例如认证和授权。接着,我将深入探讨这些概念在实际应用中的体现,涵盖运营、人力、物理、网络、操作系统、移动、嵌入式、物联网(IoT)和应用安全等领域。最后,我将讲解如何评估安全性。
谁应该阅读本书?
本书将成为初学信息安全的专业人士以及网络和系统管理员的宝贵资源。你应该利用提供的信息,更好地理解如何保护你的信息资产、防御攻击,并系统地应用这些概念,使你的环境更加安全。
在管理岗位上的人也会觉得这些信息非常有用,因为它将帮助你为你的组织制定更好的安全实践。本书讨论的概念可以用来推动安全项目和政策,并减轻一些已讨论的问题。
关于本书
本书旨在从基础开始,带领你全面理解信息安全,因此最好从头到尾通读。全书中你会看到标有数字的参考文献,指向书末的注释部分,那里提供了更多关于某些主题的信息。以下是每一章的内容概述:
第一章:什么是信息安全? 介绍了信息安全的一些最基本概念,如保密性、完整性和可用性三要素;风险的基本概念;以及用于缓解风险的控制措施。
第二章:身份识别与认证 涵盖了身份识别和认证的安全原则。
第三章:授权与访问控制 讨论了授权和访问控制的使用,它们是确定谁或什么可以访问你的资源的手段。
第四章:审计和问责制 解释了使用审计和问责制的方法,以确保你了解环境中人员的行为。
第五章:密码学 讲解了使用密码学保护数据保密性的方式。
第六章:合规性、法律和法规 概述了与信息安全相关的法律和法规,以及遵守这些法规的含义。
第七章:操作安全 讲解了操作安全,即你用来保护信息的过程。
第八章:人类因素安全 探讨了与信息安全中人类因素相关的问题,如攻击者用来欺骗我们的工具和技术,以及如何防范它们。
第九章:物理安全 讨论了信息安全的物理方面。
第十章:网络安全 从多个角度探讨了如何保护你的网络,如网络设计、安全设备和安全工具。
第十一章:操作系统安全 探讨了可以用来保护操作系统的策略,如加固和补丁管理,以及实现这些策略的步骤。
第十二章:移动设备、安全嵌入式设备与物联网安全 讲解了如何确保移动设备、嵌入式设备和物联网设备的安全。
第十三章:应用安全 讨论了保护应用程序的各种方法。
第十四章:安全评估 讨论了可以用来发现主机和应用程序安全问题的工具,如扫描和渗透测试。
写这本书对我来说又是一场冒险,一如既往。我希望你喜欢这本书的成果,并且你的信息安全知识能够得到拓展。安全世界可以是一个有趣且有时让人心跳加速的领域。欢迎你,祝你好运!
第一章:什么是信息安全?

今天,我们中的许多人都在使用计算机,回家后在计算机上玩耍,在线上上学,通过互联网向商家购买商品,带着笔记本电脑去咖啡店查看电子邮件,使用智能手机查询银行余额,甚至通过手腕上的传感器跟踪我们的运动。换句话说,计算机无处不在。
尽管技术使我们只需点击一下鼠标就能访问大量信息,但它也带来了重大安全风险。如果我们雇主或银行系统中的信息被攻击者暴露,后果可能非常严重。我们可能会在深夜突然发现我们的银行账户余额被转移到另一个国家的银行。我们的雇主可能会因为一个系统配置问题,导致攻击者访问了包含个人身份信息(PII)或专有信息的数据库,而损失数百万美元、面临法律诉讼,并遭受名誉损害。此类问题时常出现在新闻媒体中,令人不安。
三十年前,这种安全漏洞几乎是不存在的,主要是因为当时的技术水平相对较低,且使用者很少。虽然技术变化越来越快,但关于如何保持安全的理论却滞后于实际发展。如果你能很好地理解信息安全的基础知识,就能在面对不断变化的环境时,站稳脚跟,轻松应对。
在本章中,我将介绍一些信息安全的基本概念,包括安全模型、攻击、威胁、漏洞和风险。我还会在讨论风险管理、事件响应和深度防御时,深入探讨一些稍微复杂的概念。
定义信息安全
一般来说,安全是指保护你的资产,无论是免受入侵你网络的攻击者、自然灾害、破坏、丢失还是滥用。最终,你会尽力保护自己免受最可能发生的攻击,尽可能地根据你的环境采取合理的措施。
你可能有许多想要保护的潜在资产。这些资产可能包括具有固有价值的实物,如黄金,或者对你的业务有价值的物品,如计算机硬件。你也可能拥有一些较为虚拟的有价值资产,如软件、源代码或数据。
在今天的计算环境中,你会发现你的逻辑资产(作为数据或知识产权存在的资产)至少和你的物理资产(那些有形的物品或材料)一样有价值,甚至可能更有价值。这就是信息安全的重要性所在。
信息安全被定义为“保护信息和信息系统免受未经授权的访问、使用、披露、破坏、修改或销毁”,根据美国法律。¹ 换句话说,您希望保护您的数据和系统免受那些试图恶意或无意滥用它们的人,或者那些根本不应有权限访问它们的人。
何时才算安全?
尤金·斯帕福德曾说过:“唯一真正安全的系统,是关闭电源后,浇筑成混凝土块,并封存在铅衬里房间里,配有武装守卫——即便如此,我仍然对此存疑。”² 处于这种状态的系统可能是安全的,但它无法使用或生产力极低。当您提高安全级别时,通常会降低生产力水平。
此外,在保护资产、系统或环境时,您必须考虑安全级别与所保护物品价值之间的关系。如果您愿意接受性能下降,可以对您负责的每个资产应用非常高的安全级别。您可以建造一个价值十亿美元的设施,周围围绕着铁丝网围栏,由武装警卫和凶猛的攻击犬巡逻,并配有密封的金库,以保护您母亲的巧克力曲奇食谱,但那将是过度的。您所投入的安全成本永远不应超过其所保护物品的价值。
然而,在某些环境中,这样的安全措施可能还不够。在任何您计划实施高度安全措施的环境中,您还需要考虑如果失去这些资产,替换它们的成本,并确保为其价值建立合理的保护水平。
确定您何时可以被认为是安全的,这个问题有点挑战性。如果您的系统已正确打上补丁,您是否安全?如果您使用强密码,您是否安全?如果您完全断开互联网连接,您是否安全?在我看来,这些问题的答案都是“不”。没有任何单一的活动或行动能够在每种情况下使您完全安全。
这是因为即使您的系统已正确打上补丁,仍然会有新的攻击方式使您脆弱。当您使用强密码时,攻击者将通过其他途径进行攻击。当您完全断开互联网时,攻击者仍然可能通过物理方式访问或窃取您的系统。简而言之,定义何时才算真正安全是很困难的。另一方面,定义何时不安全则要容易得多。以下是一些会使您处于不安全状态的例子:
-
不给系统应用安全补丁或应用程序更新
-
使用弱密码,如“password”或“1234”
-
从互联网下载程序
-
打开来自未知发件人的电子邮件附件
-
使用没有加密的无线网络
我可以继续列出很多内容。幸运的是,一旦你能够指出环境中可能使其不安全的地方,你就可以采取措施来缓解这些问题。这个问题类似于不断将物体一分为二。总会有一小部分残留,仍然可以继续分割。尽管你可能永远无法达到一个可以明确称之为“安全”的状态,但你可以朝着正确的方向采取措施。
这条法律是你的法律……
定义安全标准的法律体系在不同的行业之间差异很大,不同国家之间的差异也很大。例如,美国和欧盟之间的数据隐私法律就存在显著差异。全球运营的组织需要注意,在开展业务时不要违反任何此类法律。如有疑问,请在行动前咨询法律顾问。
一些法律或法规确实尝试定义“安全”意味着什么,或者至少定义你应采取的一些步骤,以达到“足够安全”的标准。支付卡行业数据安全标准(PCI DSS)适用于处理信用卡支付的公司,1996 年《健康保险可携性与责任法案》(HIPAA)适用于处理医疗保健和病人记录的组织,联邦信息安全管理法(FISMA)为美国许多联邦机构定义了安全标准,还有许多其他类似的规定。虽然这些标准的有效性是值得争议的,但建议你遵循适用于你所处行业的安全标准,即使这些标准不是强制性要求。
讨论安全问题的模型
在讨论安全问题时,通常使用一个模型作为基础或基准是很有帮助的。这为我们作为安全专业人员提供了一套一致的术语和概念,供我们参考。
机密性、完整性和可用性三位一体
信息安全的三个主要概念是机密性、完整性和可用性,通常被称为机密性、完整性和可用性(CIA)三位一体,如图 1-1 所示。

图 1-1:CIA 三位一体
CIA 三位一体是一个模型,可以帮助你思考和讨论安全概念。有时它也会写作 CAI,或者以其负面形式表示为披露、篡改和拒绝(DAD)。
机密性
机密性指的是我们能够保护数据不被未经授权的人查看。你可以在许多过程的不同层次上实现机密性。
举个例子,假设一个人正在从 ATM 提取现金。如果他有 ATM 卡,他可能会尽量保持个人识别号码(PIN)的保密性,以便能够从 ATM 提取资金。此外,ATM 的所有者也会保持账户号码、余额及任何与银行沟通所需的其他信息的保密性。银行也会保持与 ATM 的交易和资金提取后账户余额变化的保密性。
保密性可以通过多种方式受到威胁。您可能丢失一台包含数据的笔记本电脑。有人可能在您输入密码时从旁边看到。您可能将电子邮件附件发送给错误的人,或者攻击者可能渗透到您的系统中,以上这些都是潜在的风险。
完整性
完整性是防止他人未经授权或以不希望的方式更改您数据的能力。为了保持完整性,您不仅需要防止未经授权的更改,还需要能够撤销任何不希望的授权更改。
允许您控制完整性的机制的一个好例子可以在许多现代操作系统的文件系统中找到,例如 Windows 和 Linux。为了防止未经授权的更改,这些系统通常会实施权限,限制未经授权的用户对特定文件能够执行的操作。例如,文件的拥有者可能有权限读取和写入该文件,而其他人则可能仅有读取权限,或者完全没有访问权限。此外,一些此类系统和许多应用程序,如数据库,可以让您撤销或回滚不希望出现的更改。
完整性在涉及为其他决策提供基础的数据时尤为重要。如果攻击者更改了包含医学测试结果的数据,医生可能会开错药方,从而危及病人生命。
可用性
CIA 三元组的最后一个要素是可用性。可用性指的是我们在需要时访问数据的能力。例如,您可能会因停电、操作系统或应用程序问题、网络攻击或系统被破坏等原因失去数据的可用性。当外部方(如攻击者)造成此类问题时,我们通常称之为拒绝服务(DoS)攻击。
CIA 三元组如何与安全性相关?
考虑到 CIA 三元组的要素,我们可以开始更详细地讨论安全问题。例如,假设您正在运送一批备份磁带,磁带上存储了某些敏感数据的唯一未加密副本。
如果你在运输过程中丢失了货物,你将面临安全问题。这可能包括保密性被破坏,因为你的文件没有加密。缺乏加密也可能导致完整性问题。如果将来你恢复了这些磁带,可能并不立刻能够发现是否有攻击者篡改了未加密的文件,因为你没有有效的方法来辨别数据是否被篡改。至于可用性,除非磁带被找回,否则你将面临问题,因为你没有文件的备份副本。
虽然你可以使用 CIA 三元组相对准确地描述这个例子中的情况,但你可能会发现该模型过于局限,无法描述整个情况。对于这种情况,存在一个更广泛的模型——帕克六元组。
帕克六元组
帕克六元组是一个较不为人知的模型,它以唐·帕克(Donn Parker)的名字命名,并在他的著作《对抗计算机犯罪》中提出,提供了经典 CIA 三元组的稍微复杂的变体。CIA 三元组仅包括保密性、完整性和可用性,而帕克六元组则包括这三个原则以及占有或控制、真实性和效用,³,总共六个原则,如图 1-2 所示。

图 1-2:帕克六元组
保密性、完整性和可用性
如我所提到的,帕克六元组包括 CIA 三元组的三个原则,定义与之前讨论的一致。帕克对完整性的描述略有不同;他没有考虑经过授权但不正确的数据修改。对他来说,数据必须是完整的,并且与之前的状态完全一致。
占有或控制
在帕克六元组中,占有或控制指的是存储数据的介质的物理处置。这使得你可以在不涉及其他因素(如可用性)的情况下讨论数据在物理介质上的丢失。回到你丢失的备份磁带的例子,假设其中一些磁带是加密的,而另一些则不是。占有原则使你能够更准确地描述事件的范围;加密的磁带存在占有问题,但没有保密性问题,而未加密的磁带则在两个方面都存在问题。
真实性
真实性原则允许你判断是否已将数据归属给正确的所有者或创作者。例如,如果你发送的电子邮件经过修改,使其看起来是从不同的电子邮件地址发出的,而不是实际发送的地址,那么你就违反了邮件的真实性。真实性可以通过数字签名来强制执行,具体内容我将在第五章进一步讨论。
与此类似但相反的概念是不可否认性,它防止人们采取某些行为,比如发送电子邮件后再否认自己做过这件事。我将在第四章中更详细地讨论不可否认性。
实用性
最后,实用性是指数据对你的有用程度。实用性也是帕克里安六元组中唯一不一定是二进制性质的原则;根据数据及其格式,你可以拥有多种不同程度的实用性。这是一个相对抽象的概念,但在讨论某些安全领域的情况时,它确实是有用的。
例如,在备份磁带的运输示例中,假设其中一些磁带是加密的,而另一些则不是。对于攻击者或其他未经授权的人来说,加密的磁带可能几乎没有任何实用性,因为数据无法读取。而未加密的磁带则具有更大的实用性,因为攻击者或未经授权的人可以访问这些数据。
在 CIA 三元组和帕克里安六元组中讨论的概念为讨论信息安全领域中可能出现的所有问题提供了实际依据。这些模型使你能够更好地讨论你可能面临的攻击以及你需要采取的控制措施来应对这些攻击。
攻击
你可能会面临来自多种不同途径和角度的攻击。你可以根据攻击的类型、攻击所代表的风险以及你可能采取的控制措施来对这些攻击进行分类。
攻击类型
你通常可以将攻击分为四类:拦截、干扰、修改和伪造。每一类攻击都可能影响 CIA 三元组的一个或多个原则,如图 1-3 所示。

图 1-3:CIA 三元组与攻击类别
攻击类别及其可能产生的影响之间的界限有些模糊。根据具体的攻击类型,你可能会将其归入多个类别,或者其可能产生多种影响。
拦截
拦截攻击允许未经授权的用户访问你的数据、应用程序或环境,主要是针对保密性的攻击。拦截可能表现为未经授权的文件查看或复制、窃听电话谈话或阅读他人电子邮件,你可以对静态数据或动态数据进行拦截(这些概念在“静态数据和动态数据”框中有所解释)。当拦截攻击执行得当时,它们可能很难被检测到。
静态数据和动态数据
您会发现,在本书中多次提到数据是“静止”还是“传输中”,那么让我们来谈谈这是什么意思。静止数据是存储的数据,不处于从一个地方转移到另一个地方的过程中。它可能存储在硬盘或闪存驱动器中,或者可能存储在数据库中。例如,这种类型的数据通常通过某种加密方式进行保护,通常是在文件级别或整个存储设备级别。
传输中数据是指正在从一个地方移动到另一个地方的数据。当您使用在线银行会话时,您与银行之间通过网页浏览器传输的敏感数据就是传输中数据。传输中数据同样通过加密进行保护,但在这种情况下,加密保护的是用于将数据从一个地方移动到另一个地方的网络协议或路径。
有些人还可能提出第三类数据,即使用中的数据。使用中的数据是指应用程序或个人正在主动访问或修改的数据。使用中数据的保护包括用户的权限和身份验证。您常常会发现使用中数据的概念与传输中数据混为一谈。关于是否应将这种类型的数据作为独立类别来处理,双方都有合理的论点。
中断
中断攻击使您的资产在临时或永久的基础上变得无法使用或无法访问。这些攻击通常影响可用性,但也可能影响完整性。您会将对邮件服务器的 DoS 攻击分类为可用性攻击。
另一方面,如果攻击者操控了数据库所在的进程,阻止访问其包含的数据,您可能会认为这是一次完整性攻击,因为可能会导致数据丢失或损坏,或者您可能会认为这是两者的结合。您也可能将这种数据库攻击视为一种修改攻击,而非中断攻击,正如接下来所看到的那样。
修改
修改攻击涉及篡改资产。这类攻击主要被认为是对完整性的攻击,但也可能代表对可用性的攻击。如果您以未授权的方式访问文件并更改其内容,您就影响了文件数据的完整性。然而,如果涉及的文件是一个管理服务行为的配置文件——比如一个作为网页服务器运行的配置文件——更改该文件的内容可能会影响该服务的可用性。如果您在文件中更改了网页服务器的配置,改变了服务器如何处理加密连接,您甚至可以将其视为一次保密性攻击。
伪造
伪造攻击涉及生成数据、过程、通信或其他类似的材料,这些都是通过系统完成的。像最后两种攻击类型一样,伪造攻击主要影响完整性,但也可能影响可用性。例如,在数据库中生成虚假信息就是一种伪造攻击。你还可以生成电子邮件,这是传播恶意软件的一种常见方式。如果你生成了足够多的附加进程、网络流量、电子邮件、网页流量,或者几乎任何消耗资源的东西,你可能通过使处理这些流量的服务无法提供给合法用户,从而进行可用性攻击。
威胁、漏洞和风险
为了更具体地讨论攻击,我需要介绍一些新的术语。当你分析攻击如何影响你时,可以用威胁、漏洞和相关的风险来描述它。
威胁
当我在本章早些时候谈到你可能遇到的攻击类型时,我讨论了几种可能危害你资产的攻击类型——例如,未经授权的数据修改。归根结底,威胁是指具有造成危害潜力的事物。威胁往往是特定于某些环境的,特别是在信息安全领域。例如,尽管病毒在 Windows 操作系统上可能会成为问题,但同样的病毒在 Linux 操作系统上不太可能产生任何影响。
漏洞
漏洞是威胁可以利用的弱点或漏洞,从而对你造成损害。一个漏洞可能涉及你正在运行的特定操作系统或应用程序,你办公大楼的物理位置,一个服务器过度拥挤且产生的热量超过空调系统能承受的一个数据中心,缺乏备用发电机,或者其他因素。
风险
风险是指某种不良事件发生的可能性。要在一个环境中存在风险,你需要同时具备威胁和该威胁可能利用的漏洞。例如,如果你有一个由木材构成的结构,并且你在附近点燃了火源,那么你就有了一个威胁(火灾)和一个匹配的漏洞(木质结构)。在这种情况下,你绝对有风险。
同样,如果你有相同的火灾威胁,但你的结构是由混凝土构成的,那么你就不再面临可信的风险,因为你的威胁没有漏洞可以利用。你可以说,足够热的火焰可能会损坏混凝土,但这种情况发生的可能性要小得多。
我们经常讨论计算环境中的潜在,但不太可能发生的攻击。最好的策略是花时间减轻最可能发生的攻击。如果你将资源都投入到为每一个可能发生的攻击做计划(无论它多么不可能发生),你将分散精力,无法在最需要的地方提供保护。
影响
一些组织,比如美国国家安全局(NSA),在威胁/脆弱性/风险的计算中增加了一个叫做影响的因素。影响考虑到被威胁资产的价值,并用它来计算风险。在备份磁带的例子中,如果你考虑到未加密的磁带只包含你收藏的巧克力曲奇饼干食谱,你可能实际上没有风险,因为暴露的数据没有任何敏感信息,你还可以从源数据创建额外的备份。在这种情况下,你可以安全地说你没有风险。
风险管理
风险管理过程可以弥补环境中的风险。图 1-4 显示了一个典型的风险管理过程的大致框架。

图 1-4:风险管理过程
如你所见,你需要识别出重要资产,找出可能的威胁,评估你的脆弱性,然后采取措施来减轻这些风险。
识别资产
风险管理过程中的第一步,也是最重要的一步之一,就是识别你要保护的资产。如果你无法列举出你的资产并评估每个资产的重要性,保护这些资产将变得非常困难。
尽管这听起来像是一个非常简单的任务,但它可能比表面上看起来更为复杂,特别是在大型企业中。在许多情况下,组织可能拥有多代硬件,收购其他公司时留下的资产也可能潜伏在不为人知的地方,还有大量未记录的虚拟主机在使用,其中任何一项都可能对业务的持续运作至关重要。
一旦你识别出正在使用的资产,决定哪些资产是关键业务资产则是另一个完全不同的问题。准确确定哪些资产对业务运作至关重要,通常需要依赖于使用该资产的职能部门、支持该资产的部门,以及可能涉及的其他方的输入。
识别威胁
在列举了关键资产后,你可以开始识别可能影响它们的威胁。通常,有一个框架来讨论特定威胁的性质是非常有用的,本章早些时候提到的 CIA 三原则或 Parkerian 六原则正好可以用来达成这一目的。
例如,我们可以运用 Parkerian 六原则来分析你在处理信用卡支付的应用程序时可能面临的威胁。
保密性 如果你不当暴露数据,可能会发生泄露。
完整性 如果数据损坏,可能会导致错误地处理支付。
可用性 如果系统或应用程序出现故障,你将无法处理支付。
占有 如果你丢失了备份介质,可能会导致泄露。
真实性 如果你没有真实的客户信息,可能会处理欺诈交易。
效用 如果你收集无效或不正确的数据,该数据将具有有限的效用。
尽管这显然是对该系统威胁的高层次评估,但它立即指出了一些问题领域。你需要关注数据丢失控制、数据准确性维护以及系统的持续运行。根据这些信息,你可以开始查看潜在的脆弱性和风险区域。
评估脆弱性
在评估脆弱性时,你需要在潜在威胁的背景下进行。任何给定的资产可能会面临成千上万的威胁,可能对其产生影响,但只有一小部分是相关的。在上一节中,你了解了针对处理信用卡交易系统的潜在威胁。
让我们看看已经识别出的问题,并尝试确定是否存在脆弱性。
机密性 如果你不当暴露数据,可能会发生数据泄露。
你的敏感数据在静态和传输中都进行了加密。你的系统定期接受外部渗透测试公司的测试。这不是一个风险。
完整性 如果数据被破坏,可能会错误地处理支付。
你在支付处理工作流程中仔细验证支付数据的正确性。无效数据将导致交易被拒绝。这不是一个风险。
可用性 如果系统或应用程序宕机,你将无法处理支付。
你没有为支付处理系统的后端数据库提供冗余。如果数据库宕机,你将无法处理支付。这是一个风险。
所有权 如果你丢失备份介质,可能会发生数据泄露。
你的备份介质是加密的,并由快递员亲自携带。这不是一个风险。
真实性 如果你没有真实的客户信息,可能会处理欺诈交易。
确保有效的支付和客户信息属于进行交易的个人是困难的。你没有一个好的方法来做到这一点。这是一个风险。
效用 如果你收集无效或不正确的数据,该数据将具有有限的效用。
为了保护数据的有效性,你会对信用卡号码进行校验和,确保账单地址和电子邮件地址有效,并采取其他措施确保数据的正确性。这不是一个风险。
这些例子是你需要采取的过程的高层次视图,但它们有助于说明任务。从这里,你可以再次看到几个关注点,尤其是在身份验证和可用性方面,你可以开始评估可能存在风险的区域。
评估风险
一旦您识别出给定资产的威胁和漏洞,您可以评估整体风险。正如本章前面所讨论的,风险是威胁和漏洞的结合体。没有匹配威胁的漏洞或没有匹配漏洞的威胁不构成风险。
例如,以下项目既是潜在威胁,也是一个脆弱点:
可用性 如果系统或应用程序出现故障,您将无法处理支付。
您的支付处理系统后端没有数据库冗余,因此如果数据库出现故障,您将无法处理支付。
在这种情况下,您既有威胁又有相应的漏洞,这意味着由于数据库后端的单点故障,您有可能失去处理信用卡支付的能力。一旦您以这种方式处理了威胁和漏洞,就可以降低这些风险。
降低风险
为了降低风险,您可以采取措施来应对每个威胁。这些措施称为控制措施。控制措施分为三类:物理控制、逻辑控制和管理控制。
物理控制 保护您的系统所在的物理环境或数据存储的地点。这些控制还管理进入和离开这些环境的访问。物理控制包括围栏、大门、锁、路障、警卫和摄像头,也包括维护物理环境的系统,如供暖和空调系统、灭火系统和备用发电机。
虽然乍一看,物理控制似乎与信息安全没有太大关系,但它们实际上是最关键的控制措施之一;如果您无法物理保护您的系统和数据,那么您所采取的任何其他控制措施都将变得无关紧要。如果攻击者能够物理访问您的系统,他们可以窃取或破坏它们,使其无法使用——在最好的情况下。在最坏的情况下,攻击者将能够直接访问您的应用程序和数据,窃取您的信息和资源,或将其用于他们自己的目的。
逻辑控制,有时也称为技术控制,保护处理、传输和存储您的数据的系统、网络和环境。逻辑控制包括密码、加密、访问控制、防火墙和入侵检测系统等项。
逻辑控制使您能够防止未经授权的活动;如果您的逻辑控制实施得当并且成功,攻击者或未经授权的用户将无法在不破坏控制的情况下访问您的应用程序和数据。
行政控制是基于规则、法律、政策、程序、指南以及其他“纸面”性质的项目。行政控制规定了你的环境中的用户应如何行为。根据环境和控制的不同,行政控制可以代表不同级别的权限。你可能会有一个简单的规则,例如“每天结束时关闭咖啡壶”,目的是避免物理安全问题(比如晚上烧掉你的建筑物)。你也可能有更严格的行政控制,例如要求你每 90 天更换一次密码。
行政控制的一个重要部分是能够强制执行这些控制措施。如果你没有权力或能力确保人们遵守你的控制措施,那么它们比没有还要糟糕,因为它们会产生一种虚假的安全感。例如,如果你制定了一项政策,要求员工不能将商业资源用于个人用途,你将需要能够执行这一政策。在一个非高度安全的环境中,这可能是一个困难的任务。你需要监控电话和手机使用情况、网页访问、电子邮件使用、即时消息对话、已安装的软件以及其他可能被滥用的领域。除非你愿意投入大量资源来监控这些并处理政策违规行为,否则你很快就会有一项无法执行的政策。下次你被审计时,如果被要求提供政策执行的证据,你将面临问题。
事件响应
如果你的风险管理工作没有你预期的那么彻底,或者你被一些完全出乎意料的事件所打击,你可以通过事件响应来进行应对。你应该将事件响应集中在那些你认为最有可能给组织带来痛苦的事项上。你应该已经在风险管理过程中识别出了这些事项。
尽可能地,你应该根据已记录的事件响应计划来对这类事件作出反应,这些计划应定期由那些在实际事件中需要执行它们的人进行审查、测试和演练。你不希望等到真正的紧急情况发生时,才发现那些搁置在书架上的文档已经过时,并且提到的流程或系统已经发生了重大变化,甚至不再存在。
事件响应过程,从高层次来看,包括以下内容:
-
准备
-
检测与分析
-
隔离
-
根除
-
恢复
-
事件后活动
我将在接下来的内容中更详细地讲解这些阶段。
准备
事件响应的准备阶段包括所有可以提前执行的活动,以便更好地处理事件。通常这涉及到制定管理事件响应和处理的政策和程序,为事件处理人员以及那些预计会报告事件的人进行培训和教育,并且开发和维护文档。
你不应低估事件响应阶段的重要性。如果没有充分的准备,事件响应很难顺利进行,也很难按照你未曾演练过的计划来执行。确定需要做什么、谁来做、以及如何做的时间不是在你面临紧急情况时。
检测与分析
检测和分析阶段是行动开始的地方。在这一阶段,你将检测到问题,决定它是否真的构成事件,并采取适当的应对措施。
最常见的是,你会通过安全工具或服务检测到问题,比如入侵检测系统(IDS)、防病毒软件(AV)、防火墙日志、代理日志,或来自安全信息与事件监控(SIEM)工具或托管安全服务提供商(MSSP)的警报。
这一阶段的分析部分通常是工具或服务(通常是 SIEM 工具)自动化与人工判断的结合。虽然你通常可以使用某种阈值来判断在一定时间内发生的某个数量的事件是否正常,或者某些事件的组合是否不正常(例如,连续两次登录失败,随后成功登录、更改密码和创建新账户),但你通常还是需要人工干预。人工干预可能包括检查各种安全、网络和基础设施设备输出的日志;联系报告事件的一方;以及对情况的总体评估。(对于事件处理人员来说,不幸的是,这些情况通常发生在周五下午 4 点或周日凌晨 2 点。)
当事件处理人员评估情况时,他们将决定问题是否构成事件,评估事件的严重性,并联系任何需要的额外资源,以便进入下一阶段。
遏制、消除和恢复
遏制、消除和恢复阶段是解决事件的大部分工作发生的地方,至少在短期内是这样。
遏制意味着采取措施,确保情况不会造成比已经发生的更多的损害——或者至少减少任何正在发生的伤害。如果问题涉及到被远程攻击者控制的恶意软件感染服务器,这可能意味着将服务器从网络中断开,设置防火墙规则以阻止攻击者,并更新入侵防御系统(IPS)的签名或规则以阻止恶意软件的流量。
在根除阶段,你将尝试从环境中去除问题的影响。以你被恶意软件感染的服务器为例,你已经隔离了系统并切断了它与指挥控制网络的连接。现在,你需要清除服务器中的恶意软件,并确保它不会在环境中的其他地方存在。这可能涉及对环境中其他主机进行额外扫描,以确保恶意软件不存在,或者检查服务器和网络上的日志,确定被感染的服务器与哪些其他系统进行了通信。对于恶意软件,特别是非常新的恶意软件或变种,任务可能会相当棘手。每当你对是否已彻底清除环境中的恶意软件或攻击者有所疑虑时,应该倾向于采取更谨慎的态度。
最后,你需要恢复到事件发生前的状态。恢复可能涉及从备份介质中恢复设备或数据、重建系统或重新加载应用程序。再次强调,这可能比最初看起来更为痛苦,因为你对情况的了解可能不完整或不清晰。你可能会发现自己无法确认备份介质是否干净且无感染,或备份介质本身是否完全损坏。应用程序安装包可能丢失,配置文件可能不可用,或者可能会发生许多其他问题。
事后活动
与准备工作类似,事后活动容易被忽视,但你应该确保不要忽略它。在事后活动阶段,通常称为事后分析(拉丁语意为“死后”),你试图明确事件的发生原因、发生的具体经过以及你可以做些什么防止此类事件再次发生。此阶段的目的是为了防止或减少未来类似事件的影响,而不是为了指责或归咎于某人(尽管有时会发生这种情况)。
深度防御
现在,你已经了解了安全漏洞可能带来的影响、可能面临的攻击类型以及应对这些攻击的策略,我将向你介绍一种预防这些攻击的方法。深度防御是一种在军事演习和信息安全中都常见的策略。基本概念是制定多层次的防御策略,即使其中一层或多层防御措施失败,你仍能成功抵御攻击。
在图 1-5 中,你可以看到一个可能需要部署的防御资产的层次结构示例。

图 1-5:深度防御
至少,你希望在外部网络、内部网络、主机、应用程序和数据层面都有防御。每一层的防御如果得当实施,将使得成功突破你的网络并直接攻击你的资产变得困难。
话虽如此,深度防御并不是万灵药。无论你放置多少层防御措施,或在每一层放置多少防御手段,你都无法无限期地阻止每一个攻击者。信息安全领域中的深度防御目标也不是为了做到这一点。其目标是在你真正重要的资产与攻击者之间放置足够的防御措施,以便你能及时发现攻击并有足够的时间去防止它发生。
这种拖延策略的一个例子是要求员工每 60 或 90 天更改一次密码。这使得攻击者更难在破解密码后及时使用它。
使用严格的密码构建规则是另一种拖延策略。考虑密码“mypassword”,它长度为十个字符,仅使用一个字符集。在一个相对较慢的普通系统上,攻击者可能需要一到两周时间才能破解这个密码。而如果使用专门构建的密码破解系统或一个僵尸网络,攻击者可能只需要一到两个小时。
如果你使用更安全的密码构建规则,并采用类似 MyP@ssword1 的密码,这个密码长度为十个字符,但使用了四种字符集,破解这个密码在专门构建的硬件上可能需要数千年,而在一个大型的僵尸网络中,可能也需要几年的时间。
如果你要求员工频繁更改密码并创建复杂的密码,攻击者将无法在时间内破解密码并加以利用。
密码中的熵
前面讨论的复杂密码示例采用了一种经典的强密码构建方案,由八个或更多字符组成,包含多个字符集(大写字母、小写字母、数字和标点符号)。有些人会认为它的熵(不可预测性)不足以确保真正的安全,认为你应该使用一个更长、更有熵且更容易记住的密码,比如 correcthorsebatterystaple。⁴
最终,你的主要关注点应该是在构建合理安全的密码并定期更改它们。
你在深度防御策略中包含的层次将根据你所防御的情况和环境有所不同。如前所述,从严格的逻辑(非物理)信息安全角度来看,你应该将外部网络、网络边界、内部网络、主机、应用程序和数据层作为放置防御措施的区域。
你可以通过添加其他重要层次来增加防御模型的复杂性,例如物理防御、政策或用户意识与培训,但目前我将坚持使用一个更简单的例子。
表 1-1 列出了你可能为每一层防御措施使用的一些防御方法。
表 1-1: 按层防御
| 层次 | 防御措施 |
|---|
| 外部网络 | DMZ VPN |
日志记录
审计
渗透测试
漏洞分析 |
| 网络边界 | 防火墙 代理
日志记录
有状态数据包检查
审计
渗透测试
漏洞分析 |
| 内部网络 | 入侵检测系统 入侵防御系统
日志记录
审计
渗透测试
漏洞分析 |
| 主机 | 身份验证 杀毒软件
防火墙
入侵检测系统
入侵防御系统
密码
哈希算法
日志记录
审计
渗透测试
漏洞分析 |
| 应用层 | 单点登录 内容过滤
数据验证
审计
渗透测试
漏洞分析 |
| 数据 | 加密 访问控制
备份
渗透测试
漏洞分析 |
在某些情况下,防御措施会出现在多个层次,因为它适用于多个领域。一个很好的例子是渗透测试,这是一种通过使用攻击者入侵时会用到的相同策略来发现安全漏洞的方法,这种测试出现在每一层。我将在第十四章中更深入地讨论这一点。你可能希望在每一层的防御中都使用渗透测试。你还可以看到,某些特定的控制措施可能与特定层次相关联,比如网络边界的防火墙和代理。像信息安全领域的其他一切一样,你可以争辩说这些控制措施中的一些或所有可以存在于不同于此处展示的层次,但这是一条很好的总体指南。在你深入阅读本书时,我将更详细地讨论表 1-1 中展示的每个领域,以及你可能希望为每个领域使用的具体防御措施。
摘要
在讨论与信息安全相关的问题时,如攻击和控制,拥有一个模型来指导讨论是很有帮助的。本章讨论了两种潜在模型:CIA 三元组,由机密性、完整性和可用性组成;以及帕克六元组,由机密性、完整性、可用性、所有权或控制、真实性和实用性组成。
在你着眼于防止攻击时,理解攻击发生时可能会造成的损害类别也非常有帮助。攻击可能通过拦截、干扰、修改或伪造等方式影响环境。每种影响都会对 CIA 三元组的特定领域产生影响。
在讨论你可能面临的具体威胁时,理解风险的概念非常重要。只有当威胁存在且你有一个该威胁可以利用的漏洞时,才会面临攻击风险。为了降低风险,你可以使用三种主要的控制措施:物理控制、逻辑控制和行政控制。
最后,本章介绍了深度防御,这是信息安全领域中一个特别重要的概念。要利用这一概念构建防御措施,你需要设置多个防御层次,足够延迟攻击者的时间,以便提醒你攻击的发生,并让你能够进行更积极的防御。
本章讨论的概念是信息安全的基础。它们在许多组织的日常信息安全任务中定期使用;例如,你可能会听到有人谈论机密性泄露,或者讨论某封电子邮件消息的真实性。
信息安全是任何规模的组织每天都要关注的事情,尤其是那些处理个人信息、财务数据、医疗数据、教育数据或其他受到所在国家法律监管的类型信息的组织。当一个组织没有投入信息安全时,后果可能非常严重。他们可能面临罚款、诉讼,甚至可能无法继续开展业务,尤其是在丢失了关键或敏感数据的情况下。简而言之,信息安全是现代商业世界的关键组成部分。
练习
以下是一些问题,帮助你回顾本章的关键概念:
-
解释漏洞和威胁之间的区别。
-
哪六项可能被视为逻辑控制?
-
你可能会使用什么术语来描述数据的有用性?
-
哪一类攻击属于对机密性的攻击?
-
你如何判断何时可以认为你的环境是安全的?
-
运用“深度防御”概念,你会使用哪些层次来防止有人通过 USB 闪存驱动器将机密数据从你的环境中移走?
-
基于 Parkerian 六元组,如果你丢失了一批包含客户个人和支付信息的加密备份磁带,哪些原则会受到影响?
-
如果你的环境中的网页服务器基于微软的 Internet 信息服务(IIS),并且发现了一种新的蠕虫攻击 Apache 网页服务器,那么你缺少什么?
-
如果你为你的环境制定了一项新政策,要求你使用复杂且自动生成的密码,且每个系统的密码都是独一无二的,并且长度至少为 30 个字符,例如“!Qa4(j0nO\(&xn1%2AL34ca#!Ps321\)”,那么哪些方面会受到不利影响?
-
考虑到 CIA 三元组和 Parkerian 六元组,每个模型的优缺点是什么?
第二章:身份识别与认证

在开发安全措施时,无论是特定机制还是整个基础设施,身份识别和认证都是关键概念。简而言之,身份识别是对某人或某物是什么的声明,而认证则确定这个声明是否真实。你可以看到这样的过程在日常生活中以各种方式发生。
一个常见的身份识别和认证交易示例是使用需要个人识别号码(PIN)的支付卡。当你刷卡时,你是在断言你就是卡上所示的那个人。此时,你已经提供了身份信息,但仅此而已。当你被提示输入与卡关联的 PIN 时,你正在完成交易的认证部分,证明你是合法的卡持有者。
我们日常使用的一些身份识别和认证方法特别脆弱,这意味着它们在很大程度上依赖于参与交易的人的诚信与勤勉。例如,如果你出示身份证购买酒精饮料,你要求他人相信你的身份证是真实且准确的;除非他们能够访问维护该身份证的系统,否则他们无法进行认证。我们还依赖于执行认证的人员或系统的能力;他们不仅必须能够执行认证操作,还必须能够检测到虚假或欺诈活动。
你可以使用多种方法进行身份识别和认证,从要求简单的用户名和密码,到实施专门的硬件令牌,这些令牌通过多种方式建立你的身份。在本章中,我将讨论其中几种方法并探讨它们的应用。
身份识别
正如你刚才了解到的,身份识别仅仅是对我们是谁的断言。这可能包括我们作为个人所声称的身份、系统在网络上所声称的身份,或者电子邮件的发起方所声称的身份。你将看到一些确定身份的方法,并考察这些方法的可信度。
我们所声称的身份
我们所声称的身份充其量只是一个脆弱的概念。我们可以通过全名、简写的名字、昵称、账户号码、用户名、身份证、指纹或 DNA 样本来识别自己。不幸的是,除了少数几种例外,类似的身份识别方法并不是独一无二的,甚至一些所谓的独一无二的识别方法,如指纹,也可能被复制。
我们声称的身份,在许多情况下,可能会发生变化。例如,女性在结婚后通常会改变姓氏。此外,我们一般可以轻松更改逻辑形式的身份证明——如账户号码或用户名。即使是身体特征,如身高、体重、肤色和眼睛颜色,也可能发生变化。最重要的一点是,要认识到仅凭身份声明是远远不够的。
身份验证
身份验证是超越身份识别的步骤,但它仍然不等同于认证,我将在下一部分讨论认证。当你被要求出示驾驶执照、社会安全卡、出生证明或其他类似的身份证明时,这通常是为了身份验证,而非认证。这大致相当于某人声称自己是约翰·史密斯;你问他是否真的是约翰·史密斯,并对他回答“当然,我是”感到满足(加上一些文书工作)。
我们可以进一步通过一个例子来验证身份识别的形式(例如,护照),并将其与数据库中包含的额外信息进行比对,匹配照片和身体特征与我们面前的人。这可能会让我们更接近确保我们正确识别了这个人,但它仍然不能算作认证;我们可能验证了身份证件本身的状态,并且知道此人符合最初签发身份证件时的基本规格,但我们并没有采取任何步骤来证明这个人真的是正确的那一个。我们越是趋向验证而非认证,我们的控制措施就越弱。
计算机系统也使用身份验证。当你发送电子邮件时,你提供的身份通常被认为是真的;系统很少采取额外的步骤来验证你的身份。这样的安全漏洞促成了大量垃圾邮件的传播,思科的 Talos 情报小组估计,从 2017 年中期到 2018 年中期,大约 85%的电子邮件都是垃圾邮件。¹
伪造身份证件
正如我所讨论的,身份证明的方法是可以变化的。因此,它们也容易被伪造。未成年人常常使用假身份证件进入酒吧或夜总会,而罪犯和恐怖分子可能会利用这些证件执行各种更为恶劣的任务。你可能会使用一些身份证明方法,如出生证明,来获得其他身份证明,如社会安全卡或驾驶执照,从而加强一个虚假的身份。
基于虚假信息的身份盗窃今天是一个主要的安全问题;2017 年,身份窃贼从美国消费者手中窃取了约 168 亿美元。²这种类型的攻击不幸地非常常见,并且容易执行。只需要少量的信息——通常一个名字、地址和社会安全号码就足够——就有可能冒充某人,足以进行多种交易,比如开设信用账户。这类犯罪的发生,是因为许多活动缺乏认证要求。虽然大多数人认为身份验证就足够了,但使用伪造的身份验证表格很容易绕过验证。
计算机系统和环境中也存在许多相同的问题。例如,完全有可能从一个伪造的电子邮件地址发送邮件。垃圾邮件发送者经常使用这种策略。我将在第九章中更详细地讨论此类问题。
认证
在信息安全中,认证是用来确定身份声明是否真实的一组方法。请注意,认证并不决定被认证方被允许做什么;这个是一个独立的任务,叫做授权。我将在第三章中讨论授权。
因素
认证有几种方法:你知道的东西、你是谁、你拥有的东西、你做的事情和你所在的地方。这些方法被称为因素。当你尝试认证身份声明时,最好使用尽可能多的因素。使用的因素越多,结果就越可靠。
你知道的某些东西,一种常见的认证因素,包括密码或 PIN 码。然而,这个因素有些薄弱,因为如果这个因素所依赖的信息被暴露,你的认证方式可能就不再唯一。
你是谁是基于个体相对独特的身体特征的因素,通常称为生物识别。虽然生物识别可以包括像身高、体重、发色或眼睛颜色这样的简单特征,但这些通常不足以成为非常安全的标识符。像指纹、虹膜或视网膜图案、或面部特征这样的复杂标识符更为常见。这些要比密码更强,因为伪造或窃取一个物理标识符的副本要困难一些,虽然不可能完全杜绝。关于生物识别是否真正算作认证因素,还是仅仅构成验证,存在一些争议。我将在本章稍后深入探讨生物识别时再讨论这一问题。
你拥有的东西是一个通常基于物理持有的因素,尽管它也可以扩展到一些逻辑概念。常见的例子有自动取款机(ATM)卡、州或联邦发放的身份证件,或基于软件的安全令牌,如图 2-1 所示。³ 一些机构,如银行,也开始使用对逻辑设备的访问权限,例如手机或电子邮件账户,作为身份验证的方法。

图 2-1:将安全令牌发送到手机是常见的身份验证方法。
这个因素的强度可能根据实现方式有所不同。如果你想使用发送到不属于你的设备上的安全令牌,你需要窃取该设备来伪造身份验证方法。另一方面,如果安全令牌是发送到电子邮件地址,那么拦截起来就会容易得多,而且你将拥有一个强度较低的验证措施。
你做的事情,有时被视为你是某种身份的变体,是一个基于个人行为或动作的因素。这可能包括对个人步态或笔迹的分析,或者是分析在输入密码短语时按键之间的延迟。这些因素提供了强有力的身份验证方法,并且很难伪造。然而,它们的缺点是可能会比其他一些因素更高频率地错误拒绝合法用户。
你的位置是一个基于地理位置的身份验证因素。这个因素的操作方式与其他因素不同,因为它要求一个人必须位于特定的位置。例如,在更改 ATM 密码时,大多数银行会要求你进入银行分行,并在此时提供你的身份证明和账户号码。如果银行允许在线重置密码,攻击者就可以远程更改你的密码,并继续清空你的账户。尽管这个因素可能不如其他一些因素有用,但它在没有完全破坏执行身份验证的系统的情况下是很难被对抗的。
多因素身份验证
多因素身份验证使用前面章节中讨论的一个或多个因素。当你只使用两个因素时,这种做法有时也被称为双因素身份验证。
让我们回到 ATM 的例子,因为它很好地说明了多因素身份验证。在这个例子中,你使用你知道的东西(你的密码)和你拥有的东西(你的 ATM 卡)。你的 ATM 卡既作为身份验证的一个因素,也作为一种身份证明。另一个多因素身份验证的例子是写支票。在这种情况下,你使用的是你拥有的东西(支票本身)和你做的事情(签署支票)。在这里,写支票所涉及的两个因素相对较弱,因此有时会看到第三个因素——指纹——与它们一起使用。
根据选择的因素,你可以针对每种情况组装更强或更弱的多因素认证方案。在某些情况下,尽管某些方法可能更难以破解,但它们在实施上并不实用。例如,DNA 是一种强有力的认证方法,但在大多数情况下并不实用。在第一章中,我提到过你的安全性应当与保护的对象成比例。你当然可以在每个信用卡终端上安装虹膜扫描仪,但这会非常昂贵、不切实际,并且可能让客户感到不安。
相互认证
相互认证是一种认证机制,在这种机制中,交易双方相互进行认证。这些参与方通常是基于软件的。在标准的单向认证过程中,客户端向服务器进行认证。在相互认证中,不仅客户端向服务器进行认证,服务器也需要向客户端进行认证。相互认证通常依赖于数字证书,我将在第五章中讨论这一点。简而言之,客户端和服务器都需要拥有一个证书,用于相互认证。
在没有执行相互认证的情况下,你容易受到冒充攻击,这通常被称为中间人攻击。在中间人攻击中,攻击者插入到客户端和服务器之间。然后,攻击者伪装成服务器与客户端进行通信,并伪装成客户端与服务器进行通信,正如图 2-2 所示,通过绕过正常的流量模式,然后拦截并转发通常直接在客户端和服务器之间流动的流量。

图 2-2:中间人攻击
这种情况通常是因为攻击者只需要从客户端到服务器的认证来进行篡改或伪造。如果你实施相互认证,这将使攻击变得更加困难,因为攻击者需要伪造两种不同的认证。
你还可以将相互认证与多因素认证结合起来,尽管后者通常仅在客户端进行。服务器到客户端的多因素认证不仅在技术上具有挑战性,而且在大多数环境中不切实际,因为它需要在客户端进行一些技术上的重负担,可能还需要用户的参与。这样做可能会导致生产力的大幅下降。
常见的身份识别与认证方法
我将在本节最后讨论三种常见的身份识别与认证方法:密码、生物识别和硬件令牌。
密码
密码对大多数常用计算机的人来说都很熟悉。当与用户名结合使用时,密码通常允许你访问计算机系统、应用程序、手机或类似设备。尽管它们只是一个身份验证因素,但如果构建和实施得当,密码可以代表相对较高的安全性。
人们常常将某些密码描述为强大,但更合适的描述词可能是复杂。如果你构造一个仅使用小写字母且长度为八个字符的密码,你可以使用密码破解工具很快破解它,正如在第一章中讨论的那样。通过向密码中添加字符集,使得破解密码变得越来越困难。如果你使用大写字母、小写字母、数字和符号,你将得到一个可能更难记住的密码,例如$sU&qw!3,但它会更加难以破解。
除了构建强密码外,你还需要保持良好的密码管理习惯。不要把密码写下来并将其放在键盘下或显示器上;这样做完全违背了设置密码的初衷。有一种被称为密码管理器的应用程序可以帮助我们管理不同账户的所有登录信息和密码,它们有的是本地安装的软件,有的是网页或移动设备上的应用程序。关于这些工具有很多支持与反对的意见;有些人认为将所有密码集中存放在一个地方是个坏主意,但如果使用得当,它们可以帮助你保持良好的密码管理习惯。
另一个常见问题是密码的手动同步——简而言之,就是在各个地方使用相同的密码。如果你在电子邮件、工作登录以及在线编织讨论论坛中使用相同的密码,那么你将所有账户的安全交给了这些系统所有者。如果其中任何一个被攻破,所有的账户都将变得脆弱;攻击者只需要在互联网上查找你的账户名,找到你其他的账户并使用默认密码登录。当攻击者进入你的电子邮件账户时,游戏就结束了,因为攻击者通常可以利用该账户重置你其他账户的凭证。
生物特征识别
尽管某些生物特征识别可能比其他类型更难伪造,但这仅仅是因为当前技术的局限性。在未来的某个时刻,我们需要开发出更为强大的生物特征来进行测量,或者停止将生物特征作为身份验证机制。
使用生物特征识别
配备生物特征识别功能的设备正变得越来越普遍且价格便宜。你可以在不到 20 美元的价格找到各种选择。在你依赖这些设备进行安全验证之前,值得仔细研究,因为一些便宜的版本容易被绕过。
你可以通过两种方式使用生物识别系统。你可以用它们来验证某人提出的身份声明,如前所述,或者你可以反向操作,使用生物识别作为身份识别的方法。执法机关通常会使用这种方法来识别在各种物体上留下的指纹的主人。考虑到这些组织持有的指纹库的庞大规模,这可能是一个耗时的过程。要以任何方式使用生物识别系统,你需要让用户通过某种注册过程。注册涉及记录用户选择的生物特征——例如,复制指纹——并将其保存在系统中。处理特征时,还可能包括记录图像某些部分出现的元素,这些元素被称为特征点(图 2-3)。

图 2-3: 生物识别特征点
你可以稍后使用这些特征点将特征与用户进行匹配。
生物识别因素的特征
生物识别因素通过七个特征来定义:普适性、唯一性、持久性、可收集性、性能、可接受性和规避。⁴
普适性意味着你应该能够在你预期加入系统的大多数人身上找到你选择的生物特征。例如,尽管你可能会使用疤痕作为身份标识符,但你无法保证每个人都有疤痕。即使你选择了一个常见的特征,比如指纹,你也应该考虑到有些人可能没有右手的食指,并准备好对此进行补偿。
唯一性是衡量一个特征在个体之间的独特性的标准。例如,如果你选择使用身高或体重作为生物识别标识符,你很有可能会在任何给定的群体中找到几个人具有相同的身高或体重。你应该尽量选择具有高度唯一性的特征,例如 DNA 或虹膜图案,但即便是这些特征也可能被复制,无论是故意的还是其他原因。例如,双胞胎有相同的 DNA,攻击者也可能复制指纹。
持久性测试一个特征在时间推移和年龄增长过程中抵抗变化的能力。如果你选择一个容易变化的因素,例如身高、体重或手部几何形状,最终你会发现自己无法验证一个合法用户。最好选择像指纹这样不太可能在没有刻意干预的情况下改变的特征。
可收集性衡量获取一个特征的难易程度。大多数常用的生物识别特征,比如指纹,比较容易获取,这也是它们常见的原因之一。另一方面,DNA 样本较难获取,因为用户必须提供基因样本来注册,并且在以后再次认证时使用。
性能衡量的是一个系统基于速度、准确性和错误率等因素的工作表现。稍后我会在本节中更详细地讨论生物识别系统的性能。
可接受性是衡量系统特征对用户的接受度的指标。通常,速度慢、难以使用或使用起来不便的系统不太可能被用户接受。⁵需要用户脱衣、接触他人反复使用的设备,或者提供组织或体液的系统也不太可能具有较高的可接受度。
规避描述的是通过使用伪造的生物识别标识符欺骗系统的难易程度。经典的规避攻击例子是针对指纹作为生物识别标识符的“橡皮指纹”攻击。在这种攻击中,攻击者从表面提取指纹并用其制作模具,然后在明胶中铸造指纹的正面图像。一些生物识别系统具有专门设计的二次特征,用于通过测量皮肤温度、脉搏或瞳孔反应来防止这种攻击。
性能测量
有多种方法可以衡量生物识别系统的性能,但有几个主要指标尤为重要。假接受率 (FAR) 和 假拒绝率 (FRR) 就是其中两个。⁶ FAR 衡量的是你接受一个本应被拒绝的用户的频率。这也称为假阳性。FRR 衡量的是我们拒绝一个合法用户的频率,有时称为假阴性。
你应该避免这两种情况的过度发生。你应该在两种错误类型之间寻求平衡,这种平衡称为等错误率 (EER)。如果你在图表中绘制 FAR 和 FRR,就像我在图 2-4 中所做的那样,EER 表示两条线相交的点。我们有时使用 EER 来衡量生物识别系统的准确性。

图 2-4:等错误率是假接受率与假拒绝率的交点。
生物识别系统中的缺陷
生物特征识别系统容易遇到一些常见问题。正如我在讨论绕过时提到的,伪造某些生物特征标识符是很容易的。而且,一旦这些标识符被伪造,就很难重新将用户注册到系统中。例如,如果你用用户的两个食指注册,而这些指纹被泄露,你可以将这些指纹从系统中删除并用用户的其他两个手指重新注册。但是,如果你已经将用户的所有手指都注册进系统,你就无法再用任何手指重新注册他们。根据所使用的系统,你可能能够为同一个标识符选择一组不同的细节,但这就偏离了讨论的重点,即生物特征标识符是有限的。这个问题在 2015 年变得非常明显,当时一名攻击者入侵了美国公务员管理办公室,窃取了 560 万名拥有安全许可的联邦员工的指纹记录。⁷
在使用生物识别技术时,你还可能面临隐私问题。当你注册到一个生物特征识别系统时,实际上是将该标识符的副本提供给了系统,无论是指纹、虹膜模式还是 DNA 样本。一旦这些信息被输入到计算机系统中,你几乎无法控制它的去向。我们可以希望,一旦你不再与该机构相关联,机构会销毁这些材料,但你无法保证这一点。特别是在 DNA 采样的情况下,交出基因材料的后果可能会影响你的一生。
硬件令牌
一种标准的硬件令牌(图 2-5)是一个小型设备,通常具有类似信用卡或钥匙链挂件的外形(大小和形状)。⁸ 最简单的硬件令牌与 USB 闪存驱动器几乎没有区别,并包含一个证书或唯一标识符。它们通常被称为加密狗。更复杂的硬件令牌集成了液晶显示器(LCD)、用于输入密码的键盘、生物特征读取器、无线设备以及其他增强安全性的功能。

图 2-5:硬件令牌
许多硬件令牌包含一个内部时钟,基于设备的唯一标识符、输入的 PIN 码或密码以及其他潜在因素生成一个代码。通常,这个代码会显示在令牌的显示屏上,并定期更改,通常每 30 秒一次。用于跟踪这些令牌的基础设施可以预测在任何给定时间该输出的正确值,以验证用户身份。
最简单的硬件令牌仅代表“你拥有的东西”因子,因此容易被盗窃并可能被有经验的罪犯使用。尽管这些设备为用户账户提供了更高的安全性,并且在没有相关账户凭证的情况下通常无法使用,但你仍然需要记得保护它们。
更复杂的硬件令牌也可以代表“你知道的东西”或“你是的东西”因子。它们可能需要 PIN 码或指纹,从而大大增强设备的安全性;除了获得硬件令牌外,攻击者还需要破坏使用该设备的基础设施,或者从设备的合法拥有者那里提取“你知道的东西”或“你是的东西”因子。
总结
身份识别是对某个方的身份的声明,不论是个人、进程、系统或其他实体。身份识别仅仅是身份的声明;它并不涉及与身份可能关联的任何权限。
认证是用于验证身份声明是否正确的过程。它不同于验证,验证是一种更为弱化的测试身份的方式。
在进行身份验证时,你可以使用多个因子。主要的因子包括“你知道的东西”、“你是的东西”、“你拥有的东西”、“你做的事情”和“你所在的位置”。包括多个因子的身份验证机制称为多因素认证。使用多个因子会为你提供比单一因子更强的身份验证机制。
用于身份验证的常用工具包括密码、令牌和生物识别标识符。每种工具都有其独特的挑战,当你将它们作为安全控制的一部分进行实施时,你需要解决这些问题。
在下一章中,我将讨论身份识别和认证之后发生的步骤:授权和访问控制。
练习
-
验证和认证身份之间有什么区别?
-
在生物识别系统中,你如何衡量未能验证合法用户的失败率?
-
你怎么称呼客户端向服务器进行身份验证以及服务器向客户端进行身份验证的过程?
-
密钥将被描述为哪种类型的认证因子?
-
哪个生物识别因子描述了一个特征随时间变化的抵抗能力?
-
如果你使用身份卡作为身份验证方案的基础,你可能会采取哪些步骤使其过渡到多因素认证?
-
如果你使用的是一个包含只有小写字母的八字符密码,将长度增加到十个字符是否会显著增加其强度?为什么或为什么不?
-
请列举三种身份卡单独使用时可能不成为理想认证方法的原因。
-
当为那些在安全环境中登录工作站并且由多人使用的用户实施多因素认证方案时,你可能会使用哪些因素?
-
如果你正在为一个可能有较多残疾或受伤用户的环境(例如医院)开发多因素认证系统,你可能想使用或避免哪些认证因素?为什么?
第三章:授权与访问控制

在你接收到一方的身份声明并确认该声明是否有效后,正如在第二章中讨论的那样,你必须决定是否允许该方访问你的资源。你可以通过两个主要概念来实现这一点:授权和访问控制。授权是确定一个经过身份验证的方可以做什么的过程。你通常会使用访问控制来实施授权,它们是你用来拒绝或允许访问的工具和系统。
你可以根据物理属性、规则集、个人或系统列表,或其他更复杂的因素来设定访问控制。对于逻辑资源,你可能会发现简单的访问控制已在日常应用程序和操作系统中实现,而在军事或政府环境中,则会有更加复杂的多层次配置。在本章中,你将更详细地了解访问控制,并学习一些实现方法。
什么是访问控制?
虽然访问控制这个术语听起来可能很技术化,似乎只属于高安全性的计算设施,但我们每天都在处理访问控制。
-
当你锁定或解锁你家门时,你正在使用一种基于钥匙的物理访问控制。(正如在第二章中讨论的那样,你的钥匙是你拥有的物品;在这种情况下,它们作为身份验证和授权的方式起作用。)
-
当你启动汽车时,你也很可能会使用钥匙。对于一些较新的汽车,你的钥匙可能还会包含一个额外的安全层,利用射频识别(RFID)标签,这些标签是储存在钥匙上的类似证书的标识符。
-
当你到达工作地点时,你可能会使用一个徽章(再次,是你拥有的物品)进入大楼。
-
当你坐在工作前的计算机前并输入密码(你知道的东西)时,你正在进行身份验证,并使用逻辑访问控制系统来访问你被授权使用的资源。
我们大多数人在工作、上学以及进行日常活动时,都会经常遇到类似的实现方式。
你可能希望使用访问控制来执行四个基本任务:允许访问、拒绝访问、限制访问和撤销访问。我们可以通过这四个动作来描述大多数访问控制问题或情况。
允许访问是指授予一方对特定资源的访问权限。例如,你可能想要给用户访问某个文件的权限,或者你可能想要允许一整个团队访问某个目录中的所有文件。你还可能通过给员工发放钥匙或徽章来允许他们对某个资源的物理访问。
拒绝访问是授予访问权限的反面。当你拒绝访问时,你是在阻止某方访问相关资源。你可能会基于时间来拒绝一个人尝试登录计算机的请求,或者你可能会阻止未经授权的人员在非工作时间进入大楼的大厅。许多访问控制系统默认设置为拒绝访问。
限制访问是仅允许对你的资源进行一定程度的访问。在物理安全方案中,你可能有一把可以打开建筑内任何门的主钥匙,一把只能打开少数几扇门的中级钥匙,以及一把只能打开一扇门的低级钥匙。当你使用可能暴露于攻击风险环境中的应用程序时,例如用于互联网的网页浏览器,你也可能会实现有限访问。
限制访问的一种方式是通过在沙盒中运行敏感应用程序,沙盒是为特定目的包含一组资源的隔离环境(图 3-1)。

图 3-1:沙盒是一个隔离的环境,保护一组资源。
我们使用沙盒来防止其内容访问文件、内存和其他不应互动的系统资源。沙盒对于隔离你无法信任的内容非常有用,比如来自公共网站的代码。沙盒的一个例子是用于运行 Java 编程语言编写程序的 Java 虚拟机(JVM)。JVM 专门构建以保护用户免受潜在恶意下载软件的攻击。
撤销访问是指在你授予某方访问权限后,收回该权限。能够撤销访问权限对系统的安全至关重要。例如,如果你解雇了一名员工,你会希望撤销他们可能拥有的任何访问权限,包括访问他们的电子邮件帐户、你的虚拟私人网络(VPN)和你的设施。当你处理计算机资源时,能够快速撤销对特定资源的访问可能尤其重要。
实施访问控制
实施访问控制的两种主要方法是使用访问控制列表和能力。这两种方法各有优缺点,并且在执行我们之前提到的四个基本任务时有不同的方式。
访问控制列表
访问控制列表(ACLs),通常读作“ackles”,是包含有关某些方在给定系统中可以访问权限类型的信息的列表。我们通常会看到 ACL 作为应用软件或操作系统的一部分实现,也可能在一些硬件设备的固件中看到它们的应用,例如网络基础设施设备。我们甚至可以看到 ACL 的概念扩展到物理世界,通过控制物理资源的软件系统,比如门禁控制系统的刷卡器。根据图 3-2 中的 ACL,Alice 被允许访问该资源,而 Bob 则被明确拒绝访问。

图 3-2:一个简单的访问控制列表
这可能看起来是个简单的概念,但在更大的实现中,ACL 可能变得相当复杂。组织通常使用 ACL 来控制其操作系统运行的文件系统中的访问权限,并控制其系统连接的网络中的流量。你将在本章中了解这两种类型的 ACL。
文件系统 ACL
大多数文件系统中的 ACL 将有三种类型的权限(允许以特定方式访问特定资源的授权):读取,允许用户访问文件或目录的内容;写入,允许用户写入文件或目录;执行,允许用户执行文件的内容,如果该文件包含能够在该系统上运行的程序或脚本。
一个文件或目录也可以附加多个 ACL。在类 UNIX 操作系统中,例如,给定的文件可能有针对特定用户或组的单独访问列表。系统可能会为某个特定用户(比如某个开发人员)提供特定的读取、写入和执行权限;为某个用户组(例如整个开发人员组)提供不同的读取、写入和执行权限;为任何其他经过身份验证的用户提供第三组读取、写入和执行权限。在基于 Linux 的操作系统中,你可以通过执行以下命令查看这三组权限:
ls -la
图 3-3 显示了系统中显示的这些权限。

图 3-3:类 UNIX 操作系统上的文件权限
图 3-3 中的每一行代表一个单独文件的权限。第一个文件ucf.conf的权限如下所示:
- r w - r - - r - -
这可能看起来有些晦涩。为了理解这些权限,帮助将它们分成以下几个部分:
- | r w - | r - - | r - -
第一个字符通常表示文件类型:-表示普通文件,d表示目录。第二部分表示拥有文件权限的用户,并设置为r w -,意味着用户可以读取和写入文件,但不能执行它。
第三个部分,组权限,被设置为r - -,这意味着被授予文件所有权的组成员可以读取文件,但不能写入或执行它。最后一个部分,其他,也被设置为r - -,这意味着任何既不是文件所有者也不是文件所有组成员的人,也可以读取文件,但不能写入或执行它。在 Linux 中,用户权限只适用于单个用户,而组权限则适用于单个组。
通过使用文件权限集,你可以控制访问使用你文件系统的操作系统和应用程序。大多数文件系统使用类似于描述的系统来分配权限。
网络访问控制列表
如果你查看网络上发生的各种活动,无论是私有的还是公共的,你会注意到 ACL 在调节这些活动。在网络 ACL 中,你通常基于用于网络事务的标识符来过滤访问,例如互联网协议(IP)地址、媒体访问控制(MAC)地址和端口。你可以在网络基础设施中看到这些 ACL 的应用,例如路由器、交换机和防火墙设备,也可以在软件防火墙、Facebook、Google 等网站、电子邮件和其他软件形式中看到。
网络访问控制列表(ACL)中的权限通常是二进制的;它们通常不是读、写和执行权限,而是允许或拒绝某些活动。与用户不同,网络 ACL 通常将权限授予流量。例如,在设置 ACL 时,你使用选择的标识符来指明你指的是什么流量以及该流量是否被允许。最好依赖多个标识符来过滤流量,原因稍后会解释。
媒体访问控制 地址过滤是最简单的网络面向 ACL 之一。媒体访问控制地址是硬编码到每个系统中网络接口的唯一标识符。
不幸的是,大多数操作系统中的软件设置可以覆盖网络接口的媒体访问控制地址(MAC 地址)。更改这个地址很容易,因此它不是用作网络中设备唯一标识符的一个好选择。
你也可以改用 IP 地址。理论上,IP 地址是分配给任何使用互联网协议进行通信的网络中每个设备的唯一地址。你可以基于单个地址或整个 IP 地址范围进行过滤。例如,你可以允许 10.0.0.2 到 10.0.0.10 之间的 IP 地址通过流量,但拒绝 10.0.0.11 及以上的任何流量。不幸的是,像媒体访问控制地址一样,你可以伪造 IP 地址,而且它们并不唯一指向某个网络接口。此外,由互联网服务提供商发放的 IP 地址经常变化,因此仅以 IP 地址作为过滤的唯一依据是一个不太可靠的选择。
黑洞
一些组织,比如运营 web 服务器、邮件服务器和其他暴露在互联网上的服务的组织,会进行大规模过滤,以阻挡已知的攻击、垃圾邮件发送者和其他不良流量。这种过滤可能包括丢弃来自单个 IP 地址、IP 地址范围或大型组织、互联网服务提供商,甚至整个国家的 IP 空间的流量。这种做法通常被称为黑洞,因为从用户的角度来看,发送到被过滤目的地的任何流量似乎已经消失在了黑洞中。
过滤流量的第三种方式是根据用于网络通信的端口。网络端口是连接两个设备的一方的数字标识,我们使用它们来识别流量应路由到的应用程序。许多常见的服务和应用程序使用特定的端口。例如,FTP 使用 20 和 21 端口传输文件,互联网邮件访问协议(IMAP)使用 143 端口管理电子邮件,安全外壳(SSH)使用 22 端口管理远程连接到系统。还有很多其他例子,因为总共有 65,535 个端口。
你可以通过允许或拒绝来自任何你希望管理的端口的流量,来控制许多应用程序在网络上的使用。然而,像媒体访问控制地址和 IP 地址一样,应用程序使用的特定端口是约定,而非绝对规则。你可以相对轻松地将应用程序使用的端口更改为完全不同的端口。
正如你刚才看到的,如果你仅使用单一属性来构建网络 ACL,你很可能会遇到各种问题。如果你使用的是 IP 地址,你的属性可能不一定是唯一的。如果你使用的是媒体访问控制地址,你的属性很容易被篡改,而如果你使用端口,你则依赖于约定而非规则。
当你结合多个属性时,你将开始采用更安全的技术。例如,常见的做法是同时使用 IP 地址和端口,这种组合通常被称为套接字。使用套接字,你可以以一种可行的方式,允许或拒绝来自一个或多个 IP 地址的流量,以及网络中一个或多个应用程序的流量。
你还可以构建 ACL 以基于各种其他标准进行过滤。在某些情况下,你可能希望基于更具体的信息来允许或拒绝流量,比如单个数据包的内容或一系列相关数据包。使用这种技术,你可以,例如,过滤掉与非法共享版权材料相关的网络流量。
ACL 系统的弱点
使用 ACL(访问控制列表)管理权限的系统容易受到一种被称为混淆代理问题的攻击。这种问题发生在具有访问资源权限的软件(代理)拥有比控制该软件的用户更高的访问权限时。如果你能够欺骗软件误用其更高的权限,就可能实施攻击。¹
有几种攻击实际利用了混淆代理问题。这些攻击通常涉及欺骗用户去执行某些操作,而用户实际上认为自己在做完全不同的事情。许多此类攻击是客户端攻击,利用了运行在用户计算机上的应用程序中的弱点。这些攻击可能是通过网页浏览器发送并在本地计算机上执行的代码、格式错误的 PDF 文件,或嵌入攻击代码的图片和视频。近年来,软件供应商越来越意识到此类攻击,并开始在软件中构建防御措施,但新的攻击仍然不断出现。利用混淆代理问题的两种常见攻击是跨站请求伪造(CSRF)和点击劫持。
CSRF 是一种滥用浏览器在用户计算机上的权限的攻击。如果攻击者知道或能够猜到一个已经验证过用户身份的网站——比如一个常见网站,如Amazon.com——他们可以在网页或基于 HTML 的电子邮件中嵌入一个链接,通常指向由攻击者控制的站点托管的图像。当目标的浏览器尝试检索该链接中的图像时,它也会执行攻击者嵌入的附加命令,通常这种行为对于目标是完全不可见的。
在图 3-4 的示例中,攻击者嵌入了一个请求,将资金从 BankCo 的账户转移到攻击者的离岸账户。由于 BankCo 服务器将请求视为来自已验证和授权的用户,因此它继续执行转账。在这种情况下,混淆代理是银行服务器。

图 3-4:CSRF 攻击示例
点击劫持(也称为用户界面伪装)是一种特别狡猾且有效的客户端攻击,它利用了现代网页浏览器中某些页面渲染功能。为了实施点击劫持攻击,攻击者必须合法地控制或已经控制了网站的某部分。攻击者通过在客户端通常会点击的内容上方放置一个不可见的层来构造或修改网站。这会导致客户端执行与他们认为自己正在执行的操作不同的命令。你可以使用点击劫持欺骗客户端进行购物、改变应用程序或操作系统的权限,或执行其他不希望的操作。
功能
与 ACL(访问控制列表)基于给定资源、身份和一组权限来定义权限不同,你也可以基于用户的令牌或密钥来定义权限,这也被称为能力。尽管在大多数情况下令牌不是物理对象,但你可以将其看作是你用来开门的门禁卡。大楼只有一扇门,许多人拥有能够打开它的令牌,但每个人的访问级别不同。一个人可能只能在工作日的工作时间进入大楼,而另一个人则可能有权限在任何一天、任何时间进入大楼。
在基于能力的系统中,访问资源的权限完全依赖于拥有令牌,而不是谁拥有它。如果你把你的门禁卡给别人,他就能使用它以你拥有的权限进入大楼。当涉及到逻辑资产时,应用程序可以与其他应用程序共享它们的令牌。
如果你使用能力而不是 ACL 来管理权限,你就可以防范混淆代理攻击。你之前学习的 CSRF 和点击劫持攻击都不可能发生,因为攻击者无法滥用用户的权限,除非他们能够访问用户的令牌。
访问控制模型
访问控制模型是确定谁应该被允许访问哪些资源的一种方法。现存有多种不同的访问控制模型。这里讨论的最常见的几种包括自主访问控制、强制访问控制、基于规则的访问控制、基于角色的访问控制、基于属性的访问控制和多级访问控制。
自主访问控制
在自主访问控制(DAC)模型中,资源的拥有者决定谁可以访问该资源以及他们可以拥有什么级别的访问权限。你可以在大多数操作系统中看到 DAC 的实现;例如,如果你决定在微软操作系统中创建一个网络共享,你就负责管理他人对它的访问。
强制访问控制
在强制访问控制(MAC)模型中,资源的拥有者无法决定谁可以访问该资源。相反,另一个独立的团体或个人有权设置对资源的访问权限。你通常可以在政府组织中找到 MAC 的实现,其中对特定资源的访问在很大程度上取决于应用于该资源的敏感性标签(例如,机密或绝密)、个人允许访问的敏感信息的级别(可能只有机密级别),以及个人是否确实有必要访问该资源(这一概念称为最小权限原则,在框中讨论)。
最小权限原则
最小权限原则规定,应该只给予一个方所需的最低访问权限,以执行其功能。例如,在一个组织的销售部门工作的人,不需要访问组织内部人力资源系统中的数据来完成工作。违反最小权限原则是我们今天面临的许多安全问题的根源。
最小权限原则实施不当的常见方式之一是操作系统用户账户的权限设置。尤其在微软操作系统中,你经常会发现,执行诸如在文字处理软件中创建文档和交换电子邮件等任务的普通用户,配置了管理员访问权限,这使得他们能够执行操作系统允许的任何任务。
因此,每当权限过高的用户打开包含恶意软件的电子邮件附件,或者访问一个向客户端计算机推送攻击代码的网站时,这些攻击就能在系统中自由肆虐。攻击者可以轻松关闭反恶意软件工具,安装任何他们想要的攻击工具,并继续完全破坏系统。
基于规则的访问控制
基于规则的访问控制允许根据系统管理员定义的一组规则来进行访问控制。如果规则匹配,则会相应地授予或拒绝对资源的访问。
基于规则的访问控制的一个好例子是路由器使用的访问控制列表(ACL)。你可能会看到一条规则,指定来自源 A 到目标 B、端口 C 上的流量是允许的。其他任何设备之间的流量都会被拒绝。
基于角色的访问控制
基于角色的访问控制(RBAC)模型允许根据授予访问权限的个人角色来进行访问控制。例如,如果你有一个员工,他的唯一职责是向应用程序中输入数据,RBAC 将要求你仅允许该员工访问该应用程序。
如果你有一个角色更复杂的员工——比如一家在线零售商的客户服务人员——该员工的角色可能要求他访问有关客户支付状态和信息、发货状态、历史订单和退货的信息。在这种情况下,RBAC 将授予他更多的访问权限。你可以在许多大型应用程序中看到 RBAC 的实现,这些应用程序主要面向销售或客户服务。
基于属性的访问控制
基于属性的访问控制(ABAC)基于个人、资源或环境的特定属性。你经常可以在基础设施系统中看到它的实施,例如网络或电信环境中的系统。
主体属性属于个人。我们可以选择任意数量的属性,例如经典的“你必须达到这个高度才能乘坐”的游乐园访问控制中的身高。另一个常见的主体属性示例是验证码,即“完全自动化的公共图灵测试,用于区分人类和计算机”(图 3-5)。²验证码基于对方能否通过一个(理论上)对于机器来说过于困难的测试来控制访问。

图 3-5:一个验证码,旨在证明用户是人类
资源属性属于某个资源,如操作系统或应用程序。你常会看到访问被资源属性控制,虽然通常这是出于技术原因而非安全原因;一些软件仅在特定操作系统上运行,一些网站只与特定浏览器兼容。你可以通过要求某人使用特定软件或协议进行通信来作为一种安全措施,应用这种类型的访问控制。
你可以使用环境属性来根据环境条件启用访问控制。人们通常利用时间来控制对物理和逻辑资源的访问。例如,建筑物的访问控制通常只在办公时间内允许访问。许多 VPN 连接有时间限制,强制用户每 24 小时重新连接,以防止用户在授权使用后继续保持连接。
多级访问控制
多级访问控制模型结合了本节中讨论的几种访问控制模型。当更简单的访问控制模型不足以保护你所控制的访问数据时,通常会使用这些多级访问控制模型。军队和政府组织处理敏感数据时,通常使用多级访问控制模型来控制对各种数据的访问,从核秘密到受保护的健康信息。接下来你将了解其中的几个模型。
贝尔-拉帕杜拉模型
贝尔-拉帕杜拉模型结合了自主访问控制(DAC)和强制访问控制(MAC),主要关注资源的保密性——换句话说,确保未经授权的人无法读取该资源。通常,在这两种模型一起实施时,MAC 优先于 DAC,而 DAC 在 MAC 权限允许的访问范围内工作。
例如,你可能有一个被分类为机密的资源,并且有一个具有机密级别权限的用户;在强制访问控制(MAC)模型下,用户将有权访问该资源。然而,你可能还在 MAC 访问控制下增加了 DAC(自主访问控制)的层次,因此如果资源所有者没有授予该用户访问权限,即使有 MAC 权限,用户也无法访问该资源。在贝尔–拉帕杜拉模型中,有两个安全属性定义了信息如何流入和流出资源。³
简单安全属性 对个人授予的访问权限必须至少与资源的分类等级相同,才能允许个人访问该资源。换句话说,个人不能读取分类级别较高的资源,但可以读取分类级别较低的资源。
星号属性(或星号属性) 任何访问资源的人只能将其内容写入(或复制到)另一个与该资源分类相同或更高的资源中。
你可以将这些属性总结为“禁止向上读取”和“禁止向下写入”,如图 3-6 所示。

图 3-6:贝尔–拉帕杜拉模型
简而言之,这意味着在处理机密信息时,你不能读取高于自己权限级别的内容,也不能将机密数据写入低于自己权限级别的资源中。
比巴模型
比巴访问控制模型主要关注保护数据的完整性,即使这可能以牺牲机密性为代价。这意味着,防止人们篡改数据比防止人们查看数据更为重要。比巴模型有两个安全规则,正好与贝尔–拉帕杜拉模型中的规则相反。⁴
简单完整性公理 对个人授予的访问权限必须至少与资源的分类等级相同。换句话说,访问一个级别的权限不会授予访问较低级别的权限。
星号完整性公理(或星号完整性公理) 任何访问资源的人只能将其内容写入或复制到与该资源分类相同级别或更低级别的资源中。
我们可以将这些规则总结为“禁止向下读取”和“禁止向上写入”,如图 3-7 所示。这意味着高完整性的资产(即不应被修改的资产)和低完整性的资产应严格分开。

图 3-7:比巴模型
这在保护信息方面可能显得完全违反直觉。然而,这些原则通过确保资源只能由具有高级访问权限的人员进行写入,并且具有高级访问权限的人员不会访问低分类别的资源,从而保护了完整性。考虑一个组织,既执行一个低完整性的过程来收集(可能带有恶意的)PDF 上传文件,也执行一个高完整性的过程来扫描来自高度机密系统的文档输入。在 Biba 模型中,上传过程无法将数据发送到扫描过程,因此无法破坏机密输入;此外,扫描过程即使被指向,也无法访问低级别的数据。
布鲁尔与纳什模型
布鲁尔与纳什模型,也称为中国墙模型,是一种访问控制模型,旨在防止利益冲突。布鲁尔与纳什模型广泛应用于处理敏感数据的行业,如金融、医疗或法律行业。该模型考虑了三种主要的资源类别。⁵
-
对象:与单一组织相关的资源,例如文件或信息
-
公司组:与某一组织相关的所有对象
-
冲突类别:所有涉及竞争方的对象组
一家代表某一行业公司进行商业法律事务的律师事务所,可能拥有涉及各个竞争个人和公司的文件。由于该事务所的个人律师访问不同客户的文件,律师可能会接触到机密数据,从而产生利益冲突。在布鲁尔与纳什模型中,律师被允许访问的资源和案件材料的访问级别将根据之前访问的材料动态变化(参见图 3-8)。

图 3-8:布鲁尔与纳什模型
在这个例子中,当律师查看了客户 A 的案件材料后,律师将无法再访问涉及客户 B 或任何与当前客户竞争的其他方的信息,从而解决了利益冲突问题。
物理访问控制
到目前为止,你已经看过了逻辑示例,以说明本章讨论的访问控制概念,但许多这些方法同样适用于物理安全。现在让我们来看一些相关的示例。
物理访问控制通常关注的是控制个人和车辆的流动。对个人的访问控制通常通过管理他们进出建筑物或设施的权限,通常使用可以开启设施大门的徽章(你拥有的东西,参见第二章)。使用徽章的门禁控制系统,通常会在运行它们的软件中使用访问控制列表(ACL)来允许或拒绝某些门和时间段的访问。
管理人员进入建筑物的一个常见安全问题是尾随,即当你认证了自己的物理访问控制措施(如徽章)后,另一个人紧随其后而没有经过认证。尾随可能导致各种问题,包括在紧急情况下造成建筑物内人员的错误表示。
我们可以通过多种方式尝试解决尾随问题,包括实施禁止尾随的政策、在区域内派驻守卫,或者简单地(但昂贵地)安装物理访问控制解决方案,只允许一个人一次通过,例如旋转门。所有这些都是合理的解决方案,但根据具体环境的不同,它们可能有效,也可能无效。你会发现,通常结合多种解决方案的效果要优于单一方案。
物理访问控制的一个更复杂的例子是许多机场使用的安全系统。在 2001 年 9 月 11 日美国的恐怖袭击事件之后,机场的安全级别提高了。一旦进入机场安全系统,你需要出示登机牌和身份证明(即你拥有的物品,两项)。你通常需要经过多个步骤,以确保你没有携带任何危险物品——这是一种基于属性的访问控制。然后你前往登机口,再次出示登机牌后才能登机。根据不同国家的情况,这些过程可能略有不同,但从访问控制的角度来看,通常是相似的。
车辆的物理访问控制通常围绕着阻止这些车辆进入未经授权的区域,通常使用各种简单的障碍物,包括杰西屏障(图 3-9)、防撞柱、单向刺条和围栏。你还可能看到更复杂的设施,包括有或没有工作人员的升降障碍、自动化的门或门禁以及其他类似的控制措施。

图 3-9:杰西屏障
当然,还有大量其他物理访问控制和方法。此外,在提到物理访问控制设备或访问控制时,身份验证设备和访问控制设备之间的界限常常变得模糊,甚至完全重叠。例如,物理锁的钥匙可以被视为身份验证、认证和授权,同时也是物理访问控制的一部分。通常,即使在安全领域内,这些术语也会被不准确或不恰当地使用,这无助于问题的解决。
摘要
授权是允许各方访问资源的关键步骤——换句话说,就是身份识别、认证和授权过程。你通过使用访问控制来实现授权。通常,你使用两种访问控制方法之一:访问控制列表(ACL)或能力(Capabilities)。尽管能力可以防止混淆代理攻击,但它们的实现频率远低于应有的程度。
在建立访问控制系统时,你会使用一种访问控制模型来规定应该授予哪些资源的访问权限。在我们的日常生活中,我们常常遇到一些更简单的访问控制模型,如自主访问控制(DAC)、强制访问控制(MAC)、基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)。处理更敏感数据的环境,如政府、军事、医疗或法律行业,通常使用多级访问控制模型,包括 Bell-LaPadula、Biba 以及 Brewer 和 Nash。
下一章将讨论审计与问责制,这指的是在完成身份识别、认证和授权过程后,如何追踪已发生的活动。
练习
-
讨论授权和访问控制之间的区别。
-
Brewer 和 Nash 模型保护什么内容?
-
为什么基于网络中系统的媒体访问控制(MAC)地址的访问控制无法代表强大的安全性?
-
在授权和认证之间,应该先进行哪一项?
-
MAC 和 DAC 访问控制模型之间有什么区别?
-
Bell-LaPadula 和 Biba 多级访问控制模型都有一个主要的安全重点。这两个模型可以一起使用吗?
-
如果你在 Linux 操作系统上有一个包含敏感数据的文件,设置权限为
rw-rw-rw-会导致潜在的安全问题吗?如果会,CIA 三位一体中的哪些部分可能会受到影响? -
你可以使用哪种访问控制模型来防止用户在非工作时间登录他们的账户?
-
解释一下混淆代理问题是如何允许用户执行他们未被授权进行的操作的。
-
访问控制列表和能力之间有哪些区别?
第四章:审计与问责制

在你成功完成身份识别、认证和授权流程(或即使在你还在进行这些流程时),你需要跟踪组织内的活动。即使在你允许某方访问你的资源之后,你仍然需要确保他们的行为符合你的规则,特别是那些涉及安全、业务行为和伦理的规则。本质上,你需要确保能够追究系统用户的问责责任(图 4-1)。

图 4-1:你应该始终让用户承担责任。
让某人承担责任意味着确保这个人对自己的行为负责。在如今,大多数组织将大量信息存储为数字形式的背景下,这一点尤为重要。如果你没有跟踪人员如何访问存储的敏感数据,你可能会遭遇商业损失、知识产权盗窃、身份盗窃和欺诈行为。此外,数据泄露可能会给你的组织带来法律后果。例如,一些类型的数据——如医疗和财务数据——在多个国家受到法律保护;在美国,有两部著名的法律,分别是 1996 年的《健康保险可携性与问责法案》(HIPAA),该法案保护医疗信息,以及 2002 年的《萨班斯-奥克斯利法案》,该法案防止企业欺诈。
你为确保问责制而采取的许多措施是审计的例子,审计是审查一个组织记录或信息的过程。你进行审计是为了确保人们遵守法律、政策以及其他行政控制机制。审计还可以防止攻击,例如信用卡公司记录并审计你通过账户进行的购买。如果你决定在一天内购买六台笔记本电脑,你的异常行为可能会触发公司监控系统中的警报,公司可能会暂时冻结你用卡进行的任何购买。在本章中,你将更详细地了解问责制,并看到如何利用审计来执行这一点。
问责制
要让人们对自己的行为负责,你必须追溯所有活动的源头。这意味着你需要使用身份识别、认证和授权流程,以便你知道某个事件与谁相关,以及什么权限允许他们执行该操作。
批评问责制及其相关的审计工具是很容易的。你可以认为,实施监控技术就像是大哥在你肩膀上盯着你。在某种程度上,这确实是对的;如果你过度监控人们,可能会创造一个不健康的环境。
但是,你也可能会走得过远。如果你没有足够的控制措施来阻止或防止他人违反你的规则并滥用你的资源,你最终会面临安全灾难。EQUIFAX 数据泄露就是一个这样的例子。
EQUIFAX 数据泄露
2017 年,Equifax 的股东、董事会、审计员以及美国政府未能追究 Equifax 未能保护消费者个人和财务信息的责任。因此,攻击者盗取了涉及 1.47 亿美国人数据的资料,而 Equifax 几乎没有受到任何后果,除了股价短暂下跌。尽管 Equifax 被召唤到国会作证,立法者表示他们将因这一事件而制定新法规,但 Equifax 没有面临任何后果,国会也没有就此通过任何新法律。
数据泄露发生在攻击者利用 Apache Struts2 框架中的一个漏洞(标记为 CVE-2017-5638)时,该框架用于开发面向 Web 使用的 Java 应用程序。这个漏洞使得攻击者能够在相关的 Web 服务器上执行远程代码执行(RCE),从而在 Equifax 环境中建立立足点。在攻击发生时,Equifax 已经有了针对该漏洞的解决方案,但尚未实施。
尽管截至 2018 年秋季,Equifax 尚未公开披露数据泄露的具体细节(除了最初的入侵情况),我们可以推测,由于攻击者能够侵入一个面向互联网的服务器并访问 Equifax 客户的个人身份信息,系统中存在明显的安全漏洞;例如,Equifax 可能没有将包含敏感数据的服务器进行隔离,或者可能使用了不良的访问控制等问题。(美国政府问责办公室发布了一份报告,确认了这些类型的问题。¹)
尽管外部机构可能会促使责任追究,但遵守这些要求的动力必须来自你所在的组织。例如,当一家公司在美国发生数据泄露时,法律通常要求其通知那些信息被泄露的人。截至 2018 年 3 月,美国所有 50 个州都已通过了泄露披露法。²
然而,在许多情况下,公司外的人通常在公司通知直接相关人员之前并不知道数据泄露的事件。在这种情况下,你可以理解为何一个组织可能会不透露该事件的原因。然而,如果你不遵守法律要求,你最终可能会被发现。当这种情况发生时,你将面临比第一次就正确处理事件时更严重的个人、商业和法律后果。
责任的安全益处
当你让人们对自己的行为负责时,你可以通过几种方式保持环境的安全:通过实施一种叫做不可否认性的原则,通过威慑那些本可能滥用资源的人,以及通过检测和防止入侵。确保责任制的过程还可以帮助你为法律程序准备材料。
不可否认性
不可否认性指的是一种情况下,个人无法成功否认自己已作出某种声明或采取过某种行动,通常是因为我们有足够的证据证明他们确实做了。在信息安全环境中,你可以通过多种方式实现不可否认性。你可能能够直接从系统或网络日志中获取活动的证据,或通过数字取证检查系统或涉及设备来恢复这些证据。
你还可以通过加密技术,如哈希函数,来建立不可否认性,通过数字签名来验证通信或文件的真实性。你将在第五章中学习更多关于加密的方法。另一个例子是,当系统为每封发送的电子邮件进行数字签名时,任何人都无法否认该电子邮件来自该系统。
威慑
责任制也可以成为对环境中不当行为的强大威慑。如果人们意识到你正在监控他们,并且你已告知他们违反规则将会受到惩罚,个体在越界之前可能会三思而后行。
威慑的关键在于让人们知道他们将对自己的行为负责。你通常通过审计和监控过程来实现威慑,这两者都在本章的“审计”部分有所讨论。如果你没有明确表达你的意图,威慑的效果将大打折扣。
例如,如果作为监控活动的一部分,你跟踪员工进出设施的门禁时间,你可以将这些活动与员工每周在时间卡上提交的时间进行核对,从而防止员工伪造时间卡,骗取额外的、不应得的工资。由于员工知道会进行这样的交叉核对,他们就会被威慑住,避免在时间卡上撒谎。虽然这看起来可能有些侵扰,但大公司通常会在员工人数较多且需要按特定班次工作的情况下使用这种方法,像是技术支持服务台。
入侵检测与防御
当你审计环境中的信息时,可以在逻辑和物理层面上检测和防止入侵。如果你实施基于异常活动的警报,并定期检查你记录的信息,你就有更大的机会发现正在进行的攻击以及未来攻击的先兆。
尤其是在逻辑领域,攻击可以在瞬间发生,你还应该实施自动化工具来监控系统,并在出现任何异常活动时提醒你。你可以将这些工具分为两大类:入侵检测系统(IDS)和入侵防御系统(IPS)。
IDS 严格来说是一个监控和警报工具;当发生攻击或其他不良活动时,它会通知你。IPS 通常基于来自 IDS 的信息,可以根据环境中发生的事件采取行动。为了应对网络上的攻击,IPS 可能会拒绝来自攻击源的流量。第十章和第十一章将更详细地讨论 IDS 和 IPS。
记录的可接受性
当你试图将记录引入法律环境时,如果它们是由受监管且一致的追踪系统生成的,它们更有可能被接受。例如,如果你计划提交数字取证证据用于法院案件,你可能需要提供一个坚实且有记录的证据链,以便法院接受。这意味着你需要能够追踪证据的信息,例如证据在时间上的位置、它是如何从一个人传递给另一个人的,以及它在存储时如何被保护。
你的证据收集追责方法应当确保证据链不被中断。如果没有,证据可能最多只能被视为传闻,从而大大削弱你的案件。
审计
审计是一种有系统的检查和审查组织记录的方法。³ 在几乎任何环境中,从最低级别的技术到最高级别的技术,通常通过某种审计方式确保人们对自己的行为负责。
确保通过技术手段追责的主要方法之一是准确记录谁做了什么,何时做的—然后检查这些记录。如果你没有评估活动的能力,你将无法大规模地促进追责。特别是在大型组织中,你的审计能力直接等同于你能够让任何人对任何事情负责的能力。
你也可能会受制于合同或法规要求,要求你定期接受审计。在许多情况下,这种审计是由不相关且独立的第三方执行的,这些第三方被认证并授权执行此类任务。一个很好的例子是由《萨班斯–奥克斯利法案》强制执行的审计,它确保公司诚实地报告其财务结果。
你审计什么?
在信息安全领域,组织通常会审计决定访问其各类系统的因素。例如,你可能会审计密码,以便执行关于如何构造和使用密码的政策。如第二章所述,如果你没有以安全的方式构造密码,攻击者可以轻松破解它们。你还应该验证用户更改密码的频率。在许多情况下,系统可以自动检查密码强度并管理密码更改,利用操作系统或其他实用工具中的功能。你还需要审计这些工具,以确保它们正常工作。
组织通常还会审计软件许可证。你使用的软件应该有许可证,证明你是合法获取的。如果外部机构审计你并发现你运行了大量未授权的软件,财务处罚可能会非常严厉。最好在收到外部公司通知之前,自己先找出并纠正这些问题。
商业软件联盟(BSA)就是一家代表软件公司(例如 Adobe 或 Microsoft)工作的公司。它定期审计其他组织,确保它们遵守软件许可。与 BSA 的法律和解可能导致每次未授权软件的事件罚款高达 250,000 美元⁴,此外还需支付最高 7,500 美元的 BSA 法律费用。BSA 还通过提供最高 100 万美元的奖励来鼓励举报者,奖励那些举报违规行为的人⁵。
最后,组织通常会审计互联网使用情况,包括员工访问的网站、即时消息、电子邮件和文件传输。在许多情况下,组织已配置代理服务器,将所有此类流量通过少数几个网关,从而能够记录、扫描并可能过滤这些流量。这些工具可以让你准确检查员工如何使用这些资源,遇到滥用行为时可以采取措施。
日志记录
在你审计某些内容之前,必须先创建审查记录。日志记录为你提供了在环境中发生的活动历史。通常,你会在操作系统中自动生成日志,以跟踪在大多数计算、网络和电信设备上,以及在集成或连接到计算机的设备上发生的活动。日志记录是一个反应性工具;它允许你查看事件发生后的记录。要对发生的事情立即做出反应,你需要使用像 IDS 或 IPS 这样的工具,相关内容将在第十章中详细介绍。
通常,你会配置日志记录机制,只记录关键事件,但你也可以记录系统或软件执行的每一个操作。你可能会出于故障排除的目的进行这种操作。日志可能包括软件错误、硬件故障、用户登录或注销、资源访问和需要更高权限的任务等事件记录,具体取决于日志设置和相关系统。
通常,只有系统管理员可以查看日志。通常,系统用户无法修改日志,除非是写入日志。例如,在特定用户上下文下运行的应用程序通常有权限向系统或应用程序日志写入消息。请记住,收集日志而不查看它们是毫无意义的。如果你从不查看日志内容,那么收集它们就等同于没有收集它们。定期检查日志,以便发现其中任何不寻常的内容,是非常重要的。
在正常的安全工作中,你也可能被要求分析日志内容与某个事件或情况的关系。在调查、事件处理和合规检查的情况下,这类活动通常由安全人员执行。如果涉及的时间段超过几天,查看日志可能会是一个艰巨的任务。即使是搜索一个相对简单的日志内容,比如由网络代理服务器生成的日志,也可能需要筛选大量的数据。在这种情况下,自定义脚本甚至是 grep 等工具(一个用于文本搜索的 UNIX 和 Linux 工具)可以帮助你在合理的时间内完成任务。
监控
审计的一个子集,监控是观察环境信息以发现不良情况,如故障、资源短缺和安全问题,以及可能预示这些情况到来的趋势。像日志记录一样,监控在很大程度上是一个反应性活动;它根据收集到的数据采取行动,通常是来自各种设备生成的日志。即使你试图预测未来的事件,你仍然依赖过去的数据来实现这一点。
在监控系统时,通常会关注特定类型或模式的数据,比如计算机上资源使用量的增加、异常的网络延迟(即数据包从一个点传输到另一个点的时间)、不断发生的针对暴露在互联网上的网络接口的服务器攻击、在不寻常的时间段通过物理访问控制的流量等等。
当你检测到这种活动的异常水平,称为裁剪级别时,你的监控系统可能会向系统管理员或物理安全人员发送警报,或者可能采取更直接的行动,如从特定 IP 地址阻止流量、切换到关键服务器的备份系统,或召唤执法人员。
通过评估进行审计
如前所述,日志记录和监控是反应性措施。为了更积极地评估你的系统状态,你可能会使用一种名为评估的审计方式,它是在攻击者做出攻击之前,发现并修复漏洞的测试。如果你能够成功且定期地进行评估,你将大大提高你的安全防御能力,并且有更大的机会抵抗攻击。你可以采取两种方法来实现这一目标:漏洞评估和渗透测试。尽管人们常常将这两个术语交替使用,但它们是两种截然不同的活动。
漏洞评估 通常涉及使用漏洞扫描工具,例如 Qualys,⁶,如图 4-2 所示,来查找环境中的弱点。这些工具通常通过扫描目标系统来发现开放端口,然后询问每个开放端口,了解它上面到底有哪些服务在监听。此外,如果你有凭证,还可以选择提供凭证,让漏洞扫描器对设备进行身份验证,并收集更多详细信息,例如安装的软件、系统上的用户以及文件中或与文件相关的信息。

图 4-2:Qualys,漏洞扫描工具
有了这些信息,漏洞评估工具便可以查询其漏洞信息数据库,判断系统是否可能包含任何弱点。尽管这些数据库通常很全面,但新的或不常见的攻击往往会逃避它们的注意。
渗透测试 将评估过程推进了几步。当你进行渗透测试时,你模拟实际攻击者入侵系统时使用的技术。你可能会尝试从用户或附近的其他系统收集更多关于目标环境的信息,利用基于网页的应用程序或与网页连接的数据库中的安全漏洞,或者通过应用程序或操作系统中未修补的漏洞进行攻击。
你将在第十四章中更详细地了解如何评估安全性。就像你可以采取的任何安全措施一样,安全评估应该仅是你整体防御策略的一个组成部分。
总结
对于几乎任何你可能想要执行的操作,某个系统都会创建相关的审计记录。组织会定期查询并更新你的病历、学业成绩、购物记录和信用历史,并利用这些数据做出可能影响你生活好坏的决策。
当你允许他人访问你企业的资源或敏感的个人信息时,你需要追究他们对资源或信息的使用责任。
你通过审计过程来追究人们的责任,并确保你的环境符合相关的法律、法规和政策。你可能会执行多种审计任务,包括日志记录、监控和评估。通过这些过程,你不仅能应对威胁,还能主动防范它们。
在下一章中,你将概述作为当今安全系统支柱的主要加密算法。
练习
-
日志记录有什么好处?
-
讨论授权和责任追究之间的区别。
-
描述不可否认性。
-
列出五项你可能想要审计的内容。
-
处理敏感数据时,为什么责任追究很重要?
-
为什么审计已安装的软件可能是一个好主意?
-
在处理法律或监管问题时,为什么需要责任追究?
-
漏洞评估和渗透测试有什么区别?
-
责任追究对法院案件中证据的可采性有何影响?
-
假设环境中包含处理敏感客户数据的服务器,其中一些暴露于互联网,你会选择进行漏洞评估、渗透测试,还是两者兼做?为什么?
第五章:密码学

密码学是保护数据的机密性和完整性的科学,它是你日常通过设备进行大量交易的关键部分。你在用手机通话、查看电子邮件、在线购买商品以及报税等活动中都会用到密码学。如果没有保护你通过这些渠道发送信息的能力,你的互联网活动将变得更加危险。
在密码学中,加密是将可读数据(即明文或清文)转换为不可读的形式(即密文)的过程。解密是从密文中恢复明文的过程。你通过使用一种特定的计算程序,称为密码算法,来加密明文或解密密文。在本章中,你将探索几种此类算法的例子。密码算法通常使用密钥,或多个密钥来加密或解密消息。你可以把密钥看作是一个密码,通过它可以在算法中检索出消息。
在本章中,你将首先了解一些早期的密码学实例,然后深入探讨现代密码学实践。
密码学的历史
一些最古老的密码学实例可以追溯到古希腊和古罗马。为了隐藏信息,希腊人和罗马人使用了密码,还采用了非常规的方法,比如在信使的剃光头上刺入信息,然后让头发长出来。关于密码学的历史资料多得足以写成一本书,实际上已经有许多书籍涉及这一主题,因此我将仅介绍其中的几个亮点。
凯撒密码
凯撒密码,作为古代密码学的经典例子,据说曾被尤利乌斯·凯撒使用。凯撒密码的原理是将明文中的每个字母按照字母表中的位置向右移动一定的位数,历史上通常是三位,如图 5-1 所示。经过移动后,字母A变为D,字母B变为E,依此类推。为了破解密文,你需要将字母向相反方向移动相同的位数。

图 5-1:使用凯撒密码加密短语“秘密消息”
我们称这种类型的加密为替代密码,因为它将字母表中的每个字母替换为另一个字母。凯撒密码的一个更新变种是 ROT13 密码,它与凯撒密码使用相同的机制,但每个字母在字母表中向前移动 13 个位置。将每个字母移动 13 个位置使得消息便于解密,因为你只需要再应用一轮 ROT13 加密就能恢复原文;两轮加密后,每个字母将回到其字母表中的原始位置。执行 ROT13 的工具是许多 Linux 和 UNIX 操作系统中自带的基本工具之一。
加密机器
在现代计算机问世之前,人们使用机器来简化加密并使更复杂的加密方案成为可能。最初,这些设备是基本的机械机器,但随着技术的发展,它们开始加入电子元件,并且系统变得更加复杂。
杰斐逊圆盘是托马斯·杰斐逊在 1795 年发明的纯机械加密机器。它由 36 个圆盘组成,每个圆盘的边缘上标有从A到Z的字母,如图 5-2 所示。¹
每个圆盘代表消息中的一个字符。每个圆盘上的字母排列顺序不同,每个圆盘都标有独特的标识符,便于区分它们。
要加密消息,你需要将字符排列在一排,使其拼写出明文消息,就像在图 5-3 的 A 行那样。然后,你选择不同的一行字符作为密文,就像在 B 行所示。

图 5-2:杰斐逊圆盘,最早的加密机器之一

图 5-3:使用杰斐逊圆盘加密“会议开始”消息
该密码的关键在于圆盘的顺序。如果加密和解密设备以相同的顺序排列它们的圆盘,那么你所需要做的就是使用圆盘重新写出密文,然后查看所有行直到找到明文消息。当然,这只不过是替代密码的一个更复杂版本,通过机械辅助使得每个字母的替代方式都不同。
一个更复杂的加密机器实例是德国制造的恩尼格玛机(图 5-4)。² 恩尼格玛机由阿图尔·谢比乌斯于 1923 年设计,在第二次世界大战期间保护了德国的通讯。

图 5-4:恩尼格玛机
从概念上讲,恩尼格玛(Enigma)类似于杰斐逊圆盘(Jefferson Disk)。它基于一系列轮子或转子,每个转子上有 26 个字母和 26 个电气接触点。它还配有一个键盘,用于输入明文信息,以及一个位于键盘上方的 26 个字符的显示区,这些字符会亮起,以指示加密后的等效字符。当你在恩尼格玛的键盘上按下一个键时,一个或多个转子会物理旋转,改变它们之间电气接触点的方向。电流会通过整套圆盘,然后再次通过它们返回到原始圆盘,在键盘上方的字符显示区显示出每个字母的加密版本。
为了让两台恩尼格玛机器在战争期间进行通信,它们必须拥有相同的配置。这需要大量的工作,因为转子和每个转子上标有字母的环必须完全相同并处于相同的位置,任何插入的电缆也需要以相同的方式设置。一旦消息被加密,它将通过莫尔斯电码发送到接收端。当接收者收到加密的莫尔斯电码消息时,他们会在键盘上输入相应的字符,如果一切设置正确,解密后的字符就会亮起。
恩尼格玛机器有多个型号,并且可以附加各种配件和附加组件。一些型号还配有补丁面板,允许通过将电缆插入不同的位置来交换一些或所有字母。每个转子上的字母环也可以独立于电气接触点旋转,以改变选定字符与输出字符之间的关系。
由于设备本身的固有优势和解密所需配置的知识,恩尼格玛对于试图破解其生成消息的人来说是一项相当艰巨的任务。但是,设备的强大之处在于它的机密性以及用于特定消息的配置;这在安全领域被称为通过模糊性确保安全。一旦这些机密被暴露,加密的消息就不再那么安全了。
1939 年,当二战期间英国的破译基地——布莱切利公园的密码学家们获得一台恩尼格玛进行研究时,他们能够构建一个名为“博贝”(Bombe)的计算机,解码了大量德国的消息,尽管他们没有访问每日更新的恩尼格玛设置。
关于恩尼格玛机器的更多信息
对于那些有兴趣亲身体验经典密码学历史的人来说,可以通过多种方式与恩尼格玛(Enigma)进行互动。喜欢 DIY 的人可以购买一个套件,利用现代电子组件重现恩尼格玛的功能。³ 此外,还有各种基于软件的恩尼格玛模拟器。⁴ 这些模拟器特别有用,可以展示转子与通过它们的路径之间的关系,这些关系会随着每个字符的输入而变化。关于这个主题,已经写了很多书籍,其中一本特别优秀的是布赖恩·J·温克尔(Brian J. Winkel)、赛弗·德沃尔(Cipher Deavours)、大卫·坎(David Kahn)和路易斯·克鲁赫(Louis Kruh)合著的《德国恩尼格玛密码机:起源、成功与最终失败》。大卫·坎的《夺取恩尼格玛:破解德国 U 型潜艇密码的竞赛,1933-1945》是另一部详细介绍这一工作的优秀来源。
凯尔科夫原则
1883 年,《军事科学杂志》刊登了荷兰语言学家和密码学家奥古斯特·凯尔科夫(Auguste Kerckhoffs)的一篇文章,题为《军事密码学》。在这篇文章中,凯尔科夫概述了他认为应作为所有加密系统基础的六项原则。⁵
-
系统必须在实质上(即使不是数学上)是无法破译的。
-
系统不应依赖于保密性;即使被敌人窃取,系统仍应保持安全。
-
密钥必须易于传递和记忆,无需书面记录,而且必须易于更改或修改,以便与不同的参与者一起使用。
-
系统应当与电报通信兼容。
-
系统必须是便于携带的,且使用不应要求超过一个人。
-
最后,系统必须易于使用,不需要复杂的思维或掌握一长串规则。
尽管其中一些原则,例如要求系统支持电报使用或必须便于携带,随着人们开始使用计算机进行加密而变得过时,但第二原则仍然是现代加密算法的核心准则。美国数学家和密码学家克劳德·香农(Claude Shannon)后来重新阐述了这一思想:“敌人知道系统”;⁶换句话说,加密算法应该足够强大,即使人们知道除了密钥之外的加密过程中的每一位,也仍然无法破解加密。这一思想代表了与通过模糊性进行安全保护的相反方法。
现代加密工具
尽管像恩尼格玛(Enigma)这样的高效机电加密系统曾在一段时间内提供了高度安全的通信手段,但计算机的复杂性迅速使这些系统过时。一个原因是这些系统并未完全符合凯尔科夫第二原则(Kerckhoffs’s second principle),仍然在很大程度上依赖于通过模糊性来保护其处理的数据。
现代计算机使用的加密算法是真正开放的,这意味着你可以理解加密过程,却仍然无法破解密码。这些算法依赖于一些难度很高的数学问题,有时称为单向问题。单向问题在一个方向上很容易执行,但在另一个方向上非常困难。大数因式分解就是一个单向问题的例子;创建一个返回多个整数乘积的算法很容易,但要创建一个能够执行反向操作——找到给定整数的因数——尤其是当这个数字非常大的时候,就会变得非常困难。这样的难题构成了许多现代加密系统的基础。
关键字密码和一次性密码本
两种技术,关键字密码和一次性密码本,帮助弥合了旧有加密方法和现代加密方法之间的差距。尽管比今天使用的算法更简单,这些技术逐渐符合了凯尔霍夫第二原则设定的标准。
关键字密码
关键字密码 是一种替换密码,类似于本章前面讨论的凯撒密码。但与凯撒密码不同的是,它们使用密钥来决定每个字母的替换方式。你不会将所有字母按相同的位移数移动,而是将每个字母移动到与密钥中对应字母的位置。例如,如果你使用密钥 MYSECRET,你将得到图 5-5 中所示的替换方式。

图 5-5:使用关键字密码进行加密
字母* A 变成字母 M ,这是密钥中的第一个字母;字母 B 变成字母 Y ,这是密钥中的第二个字母。你可以继续这样做,去掉密钥中重复的字母——注意到 SECRET 中的第二个 E *已经被去掉——一旦密钥用完,你就按照字母表的顺序为剩余字符分配,去除密钥中使用过的字母。如果你从明文 THE QUICK BROWN FOX 开始,你将得到密文 PAC LQBSF YNJVI RJW。
像这样的密码存在弱点。像我们讨论过的所有其他历史密码一样,它们容易受到频率分析的攻击,这意味着你可以根据字符使用的频率、这些字符在单词中的位置以及它们的重复情况,来猜测信息内容是什么。例如,字母* E 是英语字母表中最常用的字母,因此你可以假设替换中最常见的字母可能也是 E *,然后从这个假设出发解密信息。
为了修复这个缺陷,加密学家发明了一次性密码本。
一次性密码本
一次性密码本,也称为维尔纳密码,是一种当正确使用时无法破解的密码。使用一次性密码本时,你需要制作两份相同的纸张,每份纸张包含一组完全随机的数字,这些数字被称为偏移,并将其中一份交给每一方。这些纸张就是密钥。为了加密消息,你使用这些偏移量将每个字母向前移动。就像关键词密码一样,如果密码本上的第一个数字是 4,你就将消息的第一个字母向前移动 4 个位置,如果第二个数字是 6,你就将消息的第二个字母向前移动 6 个位置。图 5-6 展示了这个例子的加密过程。

图 5-6:使用一次性密码本加密
在这个例子中,你将发送消息 ATTACKATDAWN,经过加密后变为 EYGBPMOMJXEP。接收方将查阅他们的一次性密码本,然后执行相对的向后移动来解密消息。
加密后的文本可能会生成无限多种可能的明文消息。在凯撒密码的情况下,其中你将整个消息按相同的字符数量移动,只有 26 种可能的组合。暴力破解,即测试每一个可能的密钥以恢复原始消息,所需的时间非常短,而且当你成功时,很可能能毫不费力地识别出正确的消息。但由于一次性密码本对每个字母使用不同的偏移,消息可能包含任何适合消息长度的字母或单词组合。从前面的例子来看,你同样可以解密错误的消息,如 ATTACKATNOON 或 NODONTATTACK。
一次性密码本是流密码的原始版本,稍后我们将回到流密码的内容。你可以使用更复杂的密码本和数学运算,现代的加密和密钥交换方法使用了这些相同的概念。
对称加密与非对称加密
今天,我们可以将大多数密码算法分为两种类型:对称加密和非对称加密。在本节中,我将讨论每种类型,并举出一些具体的例子。
对称加密
也被称为私钥加密,对称密钥加密使用一个密钥来加密明文和解密密文。从技术上讲,我们到目前为止在本章探讨的密码都使用了对称密钥;例如,要解码凯撒密码,你将应用与加密时相同的密钥来解密消息。这意味着你必须在发送方和接收方之间共享密钥。这个过程被称为密钥交换,是密码学的一个重要子主题。我将在本章后面详细讨论密钥交换。
你必须在系统所有用户之间共享一个密钥,这是对称密钥加密的一大弱点。如果攻击者获得了这个密钥,他们就能解密消息——更糟糕的是,解密后篡改消息,再重新加密,并将其作为原始消息传递给接收者(这种策略称为中间人攻击)。
分组密码与流密码
数字时代的对称密钥加密使用了两种类型的密码:分组密码和流密码。分组密码以预定的位数(或二进制数字,分别为 1 或 0),称为块,对该块进行加密。块通常为 64 位,但根据所使用的算法和算法可操作的不同模式,块的大小可能更大或更小。流密码则是逐位加密明文消息。你可以通过将分组大小设置为一个位,使分组密码像流密码一样工作。
当前使用的大多数加密算法都是分组密码。尽管分组密码通常比流密码慢,但它们往往更具多功能性。由于分组密码一次处理较大的消息块,它们通常更加消耗资源且实现更为复杂。同时,它们也更容易在加密过程中发生错误。例如,分组密码加密中的一个错误会导致一大段数据无法使用,而流密码中的错误只会破坏一个位。通常可以使用特定的分组模式来检测并补偿这些错误。分组模式定义了加密算法使用的具体过程和操作。你将在下一节中了解更多关于这些模式的信息,我将讨论使用这些模式的算法。
通常,分组密码更适合用于大小固定或事先已知的消息,例如文件,或在协议头中报告大小的消息。在加密未知大小的数据或持续流动的数据(如网络传输中的信息,数据的类型和接收内容是可变的)时,通常更适合使用流密码。
对称密钥算法
一些最著名的加密算法是对称密钥算法。美国政府已将其中几种算法,如 DES、3DES 和 AES,作为保护高度敏感数据的标准算法。我将在本节中讨论这三种算法。
DES是一种分组密码,使用 56 位的密钥(这意味着其加密算法使用的密钥长度为 56 位)。正如你在讨论关键词密码时所见,密钥的长度决定了算法的强度,因为密钥越长,可能的密钥数就越多。例如,8 位密钥的密钥空间(可能密钥的范围)为 2⁸。DES 的密钥空间为 2⁵⁶——即 72057594037927936 个可能的密钥,攻击者必须逐一测试。
DES 于 1976 年首次在美国使用,并随后传播到全球。人们认为它非常安全,直到 1999 年,一个分布式计算项目尝试通过测试整个密钥空间中的每一个可能的密钥来破解 DES 密钥。它们成功了,只用了 22 个小时多一点。事实证明,密钥空间太短;为了解决这个问题,密码学家开始使用3DES(发音为“三重 DES”),它实际上是使用 DES 对每个块进行三次加密,每次使用不同的密钥。
最终,美国政府用AES(一组对称分组密码)替代了 DES。AES 使用三种不同的密码:一种使用 128 位密钥,一种使用 192 位密钥,一种使用 256 位密钥,所有这些都加密 128 位的块。简而言之,AES 和 3DES 之间有一些关键的区别。
-
3DES 是 DES 的三轮变种,而 AES 使用的是 2000 年开发的全新且完全不同的算法。
-
AES 使用比 3DES 更长且更强的密钥,以及更长的分组长度,使得 AES 更难被攻击。
-
3DES 比 AES 慢。
黑客们对 AES 进行了一系列攻击,主要集中在使用 128 位密钥进行加密的攻击。大多数攻击要么失败,要么仅部分成功。在撰写本文时,美国政府仍然认为 AES 是安全的。
其他著名的对称分组密码包括 Twofish、Serpent、Blowfish、CAST5、RC6 和 IDEA。流密码的常见例子包括 RC4、ORYX 和 SEAL。
非对称密码学
马丁·赫尔曼和惠特菲尔德·迪菲在他们 1976 年的论文《密码学的新方向》中首次描述了非对称密码学。⁷ 与对称密钥密码学只使用一个密钥不同,非对称密钥密码学,也称为公钥密码学,使用两个密钥:一个公钥和一个私钥。你使用公钥来加密数据,任何人都可以访问公钥。你可以在电子邮件签名中看到它们,或者它们可以发布在专门用于托管公钥的服务器上。私钥用于解密消息,由接收者严格保管。密码学家使用复杂的数学运算来生成私钥和公钥。这些运算——通常涉及因式分解非常大的质数,如我在本章前面讨论的——足够复杂,以至于目前没有方法能够通过使用公钥来发现私钥。
非对称密钥加密相对于对称密钥加密的主要优势在于你不再需要分发密钥。正如前文所述,在对称密钥加密中,消息发送者需要找到一种与接收方共享密钥的方法。他们可能通过面对面交换密钥、通过电子邮件发送密钥,或通过电话口头传递密钥,但方法必须足够安全,以确保密钥不被截获。而在非对称密钥加密中,你无需共享私密密钥。你只需提供公钥,任何需要向你发送加密消息的人都可以使用它,而不会危及系统的安全性。
非对称密钥算法
RSA 算法以其创始人 Ron Rivest、Adi Shamir 和 Leonard Adleman 的名字首字母命名,是一种在全球范围内使用的非对称算法,包括在安全套接层(SSL)协议中。(协议 是定义设备间通信规则的标准。SSL 用于保护许多常见的交易,如网页和电子邮件流量。)RSA 于 1977 年创建,至今仍是世界上最广泛使用的算法之一。
椭圆曲线加密(ECC) 是一类加密算法,尽管人们有时将其视为单一的算法。椭圆曲线加密以其加密功能所基于的数学问题命名,相较于其他类型的算法,椭圆曲线加密具有几个优点。
ECC 能够在使用较短的密钥时,保持比许多其他算法更强的加密强度。它也是一种快速高效的算法,可以轻松地在处理能力和内存较少的硬件上实现,比如手机或便携设备。多种加密算法,包括安全哈希算法 2(SHA-2)和椭圆曲线数字签名算法(ECDSA),都使用 ECC。
其他非对称算法包括 ElGamal、Diffie–Hellman 和数字签名标准(DSS)。许多协议和应用程序基于非对称加密技术,包括用于保护消息和文件的 Pretty Good Privacy(PGP)、用于常见互联网流量的 SSL 和传输层安全性(TLS)、以及一些用于语音通话的语音通信协议(VoIP)。
PGP
PGP 是由 Phil Zimmerman 创建的,它是最早引起公众和媒体注意的强加密工具之一。PGP 创建于 1990 年代初期,最初版本基于对称加密算法,可以用来保护数据,如通讯和文件。PGP 的原始版本作为免费软件发布,包括源代码。在发布时,PGP 被美国《国际军火贸易条例》(ITAR)法规定为军火。Zimmerman 曾因涉嫌将 PGP 出口到国外而被调查,这在当时是非法的,且被视为武器走私,Zimmerman 因此经历了数年的刑事调查。
哈希函数
哈希函数代表了现代密码学的第三种类型,我们称之为无密钥密码学。与使用密钥不同,哈希函数或消息摘要将明文转换为大致唯一且固定长度的值,通常称为哈希。你可以将这些哈希值视为指纹,因为它们是消息的唯一标识符。此外,相似消息的哈希看起来完全不同。图 5-7 展示了一些哈希。

图 5-7:哈希函数为每条消息生成唯一的值,无论消息多么相似。
请注意,消息 B 与消息 A 只有一个单词的不同,但它生成了一个完全不同的哈希值。消息 C 也是如此,它仅删除了原始消息中的一个空格,但仍然生成了一个独特的哈希值。你不能通过哈希值发现原始消息的内容或其他特征,但可以用它来判断消息是否发生了变化。这意味着,如果你在分发文件或发送通讯时,可以将哈希值与消息一起发送,以便接收方验证其完整性。为此,接收方只需使用相同的算法重新计算消息的哈希值,然后比较两个哈希值。如果哈希值匹配,消息未发生变化;如果不匹配,消息已被篡改。
虽然从理论上讲,可以为两组不同的数据工程出匹配的哈希值,这种现象称为碰撞,但这很困难,通常只有在使用破损的哈希算法时才会发生。一些算法,如消息摘要算法 5(MD5)和安全哈希算法 1(SHA-1),曾经以这种方式受到攻击,尽管这种情况不常见(图 5-8)。

图 5-8:在哈希碰撞中,两条不同的消息产生相同的哈希值。
当发生碰撞时,通常会停止使用受损的算法。需要严格哈希安全的用户大多已经停止使用 MD5,并用 SHA-2 和 SHA-3 替代。
其他哈希算法包括 MD2、MD4 和 RACE。
数字签名
使用非对称算法及其相关的公钥和私钥的另一种方式是创建数字签名。数字签名允许你签署一条消息,以便其他人能够检测消息在你发送之后是否发生了任何变化,确保消息确实由预期的发送方发出,并防止发送方否认他们发送了该消息(这一原则被称为不可否认性,详见第四章)。
为了对消息进行数字签名,发送方首先生成消息的哈希值,然后使用其私钥对哈希值进行加密。接着,发送方将数字签名与消息一起发送,通常是将其附加到消息本身。
当消息到达接收端时,接收方使用与发送方私钥对应的公钥来解密数字签名,从而恢复原始的消息哈希值。接收方可以通过再次对消息进行哈希处理并比较这两个哈希值来验证消息的完整性。这听起来似乎需要不少工作来验证消息的完整性,但通常软件应用程序会为你完成这些工作,因此这个过程通常对用户是透明的。
证书
除了哈希值和数字签名之外,你还可以使用数字证书对消息进行签名。数字证书,如图 5-9 所示,通过验证公钥是否属于正确的所有者,将公钥与个人关联起来,通常作为该人的电子身份识别形式。

图 5-9:数字证书
通常,你可以通过将公钥和身份信息(例如姓名和地址)进行结合,并由处理数字证书的可信实体(称为证书颁发机构)进行签名,从而创建证书。证书颁发机构是颁发证书的实体。它充当交易双方之间的可信第三方,最初签署证书并在后续验证证书是否仍然有效。一家知名的证书颁发机构是 VeriSign。一些大型组织,如美国国防部,可能会选择建立自己的证书颁发机构,以降低成本。
证书允许你验证公钥是否真正与某个个人相关联。在前一节讨论的数字签名中,可能有人伪造了用来签署消息的密钥;这些密钥可能并不属于原始发送者。如果发送者有数字证书,你可以轻松地向证书颁发机构查询,确保发送者的公钥是合法的。
证书授权机构只是你可以建立的基础设施中的一小部分,用于大规模处理证书。这个基础设施被称为公钥基础设施(PKI)。PKI 通常有两个主要组成部分:发行和验证证书的证书授权机构,以及验证与证书关联的个人身份的注册机构,尽管一些组织可能将一些功能分离为不止这些。
公钥基础设施(PKI)也可能会撤销证书,如果证书达到过期日期、遭到泄露或因其他原因不应继续使用。在这种情况下,证书很可能会被加入到证书撤销列表中,该列表通常是一个公开的列表,保存着所有被撤销的证书一段时间。
保护静态数据、传输中的数据和使用中的数据
你可以将密码学的实际应用分为三个主要类别:保护静态数据、保护传输中的数据和保护使用中的数据。静态数据包括存储在设备上的大量数据,如备份磁带、闪存驱动器以及便携设备(如笔记本电脑)中的硬盘。传输中的数据是通过互联网传送的大量信息,包括财务交易、医疗信息、税务申报和其他类似敏感的交换数据。使用中的数据是指正在被主动访问的数据。
保护静态数据
人们常常忽视保护静态数据,即存储在某种设备上的数据,这些数据没有通过网络、协议或其他通信平台进行传输。
从某种意义上讲,静态数据也可以技术上算作是传输中的数据。例如,你可能会邮寄一批包含敏感数据的备份磁带,随身携带包含税表副本的闪存驱动器,或者将包含客户数据库内容的笔记本电脑留在汽车的后座。
攻击者经常利用这一事实。例如,2017 年,有人发现了一只 USB 闪存驱动器,掉落在伦敦希思罗机场外的街道上,并发现它包含了关于女王伊丽莎白二世及其他高级官员和重要人物在机场活动时使用的路线和安保措施的信息。⁸
如果采取必要的步骤通过加密来保护闪存驱动器上的静态数据,这起安全事件就不会发生(当局也不必公开披露事件的发生,这为他们避免了不少尴尬)。
数据安全
我们主要通过加密来保护静态数据,特别是在我们知道包含数据的设备可能会被物理盗窃时。
许多商业产品提供便携设备加密,这些产品通常针对硬盘和便携存储设备,包括像英特尔和赛门铁克等大公司提供的产品。这些商业产品通常会加密整个硬盘(这一过程被称为全盘加密),以及各种可移动媒体,并将数据报告回集中管理服务器或其他安全与管理功能。市场上也有一些免费的或开源的加密产品,例如 VeraCrypt,⁹、BitLocker¹⁰(一些版本的 Windows 附带此工具)和 dm-crypt¹¹(这是 Linux 专用的)。
物理安全
物理安全,我将在第九章中详细讨论,是保护静态数据的重要组成部分。如果你能让攻击者更难以物理访问或窃取存储介质中包含的敏感数据,那么你就解决了大部分问题。
在许多情况下,大型企业拥有包含客户信息、销售预测、商业战略文档、网络图等数据的数据库、文件服务器和工作站,这些数据是他们希望避免公开或落入竞争对手手中的。如果存储这些数据的大楼的物理安全性较弱,攻击者可能仅需进入建筑物,窃取设备,便能轻松带着数据离开。
你还需要意识到一些无法物理保护的区域,并限制离开受保护区域的数据。例如,在一座办公楼中,你可以对包含服务器的数据中心应用额外的物理安全措施。一旦敏感数据离开这些区域,你的保护能力就会变得更加有限。就像我之前讨论过的希思罗机场的 U 盘事件,官员们可能会防止敏感数据被复制到外部驱动器上,以避免数据被带出门外并丢失在街头。
保护传输中的数据
数据通常通过网络传输,无论是封闭的广域网(WAN)、局域网(LAN)、无线网络,还是互联网。为了保护暴露在网络上的数据,你通常会选择加密数据本身或加密整个连接。
保护数据本身
根据你发送的数据类型和所使用的协议,你可以采取多种方式来加密网络传输的数据。
你将经常使用 SSL 和 TLS 来加密两个系统之间的连接,这两个系统通过网络进行通信。SSL 是 TLS 的前身,尽管这两个术语通常可以互换使用,它们几乎是一样的。SSL 和 TLS 与其他协议协同工作,如互联网邮件访问协议(IMAP)和邮局协议(POP)用于电子邮件,超文本传输协议(HTTP)用于网页流量,语音通信和即时消息使用 VoIP。
然而,SSL 和 TLS 保护通常只适用于单一的应用程序或协议,因此,尽管你可能在加密与服务器之间的通信时使用它们,例如与存储你电子邮件的服务器进行通信,但这并不意味着通过你的网页浏览器建立的连接也具有相同的安全级别。许多常见的应用程序支持 SSL 和 TLS,但通常需要单独配置才能使用。
保护连接
保护数据传输的另一种方法是通过虚拟私人网络(VPN)连接加密你所有的网络流量。VPN 连接使用多种协议在两个系统之间创建安全连接。当你从一个可能不安全的网络访问数据时,例如酒店的无线连接时,你可能会使用 VPN。
当前最常用的两种安全 VPN 的协议是互联网协议安全(IPsec)和 SSL。从用户的角度来看,你可以将这两种类型的 VPN 连接配置为具有几乎相同的功能和特性,但它们需要稍微不同的硬件和软件来进行设置。
通常,IPsec VPN 在后台需要更复杂的硬件配置,并且你需要安装一个软件客户端,而 SSL VPN 通常通过从网页下载的轻量级插件运行,并且后台硬件配置较为简单。从安全角度来看,这两种方法的加密水平相对相似。然而,SSL VPN 客户端的一个弱点是,你可能会将其下载到公共计算机或其他随机的不安全设备上,从而为数据泄露或攻击提供了途径。
保护使用中的数据
最后一类需要保护的数据是当前正在使用的数据。尽管我们可以通过加密来保护存储的数据或在网络上传输的数据,但在合法实体可以访问数据时,我们在保护数据方面的能力受到了一定限制。授权用户可以打印文件、将文件转移到其他计算机或存储设备、通过电子邮件发送文件、在点对点文件共享网络上分享文件,并且通常会使我们精心制定的安全措施形同虚设。
2013 年 6 月,公众发现一名名为爱德华·斯诺登的政府承包商故意泄露了包含有关美国国家安全局 PRISM 项目细节的机密信息,该项目表面上旨在收集和审查与恐怖主义相关的通信。¹²尽管此事件发生在本文撰写时已经超过五年,但美国情报界仍在清理此事件的后果,并致力于防止类似事件的再次发生。
总结
加密学自有记录的历史以来,几乎以某种形式存在。早期的加密实践在复杂性上有所不同,从罗马时代的简单替换密码到现代计算机系统发明之前使用的复杂电机械设备。尽管这些原始的加密方法无法防御现代加密攻击,但它们为我们现代的算法奠定了基础。
今天,您通过使用计算机创建复杂的算法来加密您的数据,从而进行加密操作。加密算法主要有三种类型:对称密钥加密、非对称密钥加密和哈希函数。在对称密钥加密中,您使用相同的密钥对数据进行加密和解密,所有操作明文或密文的参与方都可以访问该密钥。在非对称加密中,您使用公钥和私钥。发送方使用接收方的公钥加密消息,接收方使用自己的私钥解密消息。这解决了必须找到一种安全方式在接收方和发送方之间共享单个私钥的问题。哈希函数根本不使用密钥;它们创建一个(理论上)独特的消息指纹,以便我们能够判断消息是否被篡改。
数字签名是哈希函数的扩展,允许您不仅创建哈希以确保消息没有被篡改,还可以使用非对称算法的公钥加密哈希,以确保消息确实由预期的方发送,并确保不可否认性。
证书使您能够将公钥与身份关联,从而确保加密消息确实代表某个特定个人的通信。接收方可以向证书颁发机构——证书授权机构查询,以确定所提供的证书是否确实有效。在证书背后,您可能会发现一个公钥基础设施(PKI),它负责颁发、验证和撤销证书。
一般来说,加密学提供了一种机制,用于保护静态数据、传输中的数据,并在某种程度上保护使用中的数据。它提供了许多基本安全机制的核心,使您能够在数据涉及敏感内容时进行通信和交易。
练习
-
凯撒密码是哪种类型的密码?
-
块密码和流密码之间有什么区别?
-
ECC 属于哪种类型的加密算法?
-
Kerckhoffs 的第二原则的关键点是什么?
-
什么是替换密码?
-
对称加密和非对称加密的主要区别是什么?
-
解释一下 3DES 与 DES 的区别。
-
公钥加密是如何工作的?
-
尝试使用本章中的信息解密此消息:V qb abg srne pbzchgref. V srne gur ynpx bs gurz. —Vfnnp Nfvzbi.
-
在讨论数据的加密安全性时,物理安全为何如此重要?
第六章:合规性、法律和法规

在信息安全中,外部的规则和法规通常会影响你收集信息、进行调查和监控网络等活动的能力。为了遵守这些规则,你可以制定保护组织的要求、设计新系统和应用程序、决定数据保留多久,或者加密或令牌化敏感数据。
在本章中,我将概述一些可能影响你组织的规则,并讨论如何确保符合这些规则。
什么是合规性?
简而言之,合规性是你对管理你所处理信息和你所处行业的规则和法规的遵守。
十年前,大多数信息安全工作只遵循少数几项政策和一个普遍的要求,即防止攻击者入侵。旨在保护数据和消费者的法规定义较为宽松,监管方对其执行也不那么严格。
今天,法律和法规变得更加严格,部分原因是因为像 2018 年 8 月英国航空公司泄露 38 万张支付卡信息事件这样的重大泄露事件,¹使得合规问题受到了更多的关注。现代法规不断更新和发展,给需要遵守规则的公司设定了一个不断变化的目标。
一般来说,你是根据你所遵守的标准来衡量合规性的。在多个行业中,你可能需要遵守多个规则集。虽然你很少会遇到相互矛盾的标准集,但你可能会发现它们在具体细节上有所不同。例如,一套合规规则可能规定服务器备份需要保留一年,而另一套可能规定为六个月。面对这种情况,你可能会发现自己为了简便起见,选择采用所有合规工作中最严格的标准。
请记住,合规性并不等同于安全性。即使你已经投入了数百或数千小时来遵守一套特定的规则,并且即使你已经通过了审计,你也可能并不安全,无法抵御攻击。你执行合规性是为了满足特定第三方的需求——即你的客户或商业伙伴、审计员和负责确保你合规的合规机构。合规性是为了满足业务需求,而不是任何技术性的安全需求。此外,只要这些第三方对你的努力感到满意,你就算是“合规”了——无论你实际是否充分满足了要求。组织通常会在检查员到来时展示他们的“最佳状态”。
合规性类型
合规性主要有两种类型:监管合规性和行业合规性。
监管合规性是你遵守与你所运营行业相关的特定法律。几乎在每种情况下,监管合规都涉及周期性的审计和评估,以确保你按照规定进行操作。为这些审计做准备是合规计划的重要组成部分,因为它们不仅可以教育参与者,还能提供发现和解决问题的机会。
行业合规性是遵守那些不是法律强制要求的规定,但仍然会对你开展业务的能力产生严重影响的行为。例如,接受信用卡的组织通常必须遵守由一群信用卡发行商(包括 Visa、美国运通和 Mastercard)制定的支付卡行业数据安全标准(PCI DSS),这是一套用于处理信用卡交易的规则。该标准定义了安全程序的要求、保护数据的具体标准以及必要的安全控制措施。信用卡发行商每隔几年就会更新该标准,以跟上当前的形势和威胁。
尽管这些信用卡发行商不能在法律上强制执行他们的标准,但他们的规定无疑具有实际影响。基于 PCI 成员卡片处理信用卡交易的商户必须接受每年的安全实践评估。交易量较少的组织可以仅通过填写一份简短的问卷来完成自我评估。然而,随着交易量的增加,要求变得越来越严格,最终会由专门认证的外部评估员进行访问,强制执行渗透测试,要求进行内部和外部漏洞扫描,并采取大量其他措施。
不合规的后果
不合规可能会引发各种后果,具体取决于相关规定的具体要求。
在行业合规的情况下,你可能会失去与合规性相关的特权。例如,如果你未能遵守 PCI DSS 的规定,无法有效处理信用卡交易并保护相关数据,你可能会面临高额罚款,甚至丧失商户身份,无法继续处理交易。对于那些高度依赖信用卡交易的企业,比如零售商店,失去处理信用卡的能力可能会导致他们破产。
在监管合规的情况下,你可能面临更为严厉的处罚,包括因违反相关法律而被监禁。
达成合规性的控制措施
为了遵守标准和监管要求,你通常需要实施物理、管理和技术控制措施。
控制措施类型
物理控制是用来减少物理安全风险的措施。举例来说,包括围栏、守卫、摄像头、上锁的门等。这些控制措施通常通过物理手段防止或阻止未经授权的人员进入或穿越特定区域。
行政控制措施通过实施特定的流程和程序来缓解风险。每当你接受、回避或转移风险时,你很可能正在使用行政控制措施,因为你在制定流程、程序和标准,以防止组织通过承担过多风险而伤害自己。你还需要通过保存政策、程序和标准的记录,并提供证据证明组织已经遵循这些控制措施,来记录你的行政控制措施。
例如,几乎每个标准或法规都要求你拥有信息安全政策,这是一份定义组织信息安全的文件。为了遵守这一要求,你必须实施政策,并能够通过定期文档证明你已经遵循了该政策。审计日并不是发现你缺乏展示政策实施的文档的好时机。适当的文档可能包括电子邮件、来自工单系统的票据以及调查文件。
技术控制措施通过技术手段来管理风险。你可以通过设置防火墙、入侵检测系统、访问控制列表以及其他技术手段来减少风险,以防止攻击者入侵你的系统。
这些控制措施本身都不足以单独应对风险,但每个控制措施都有助于形成分层防御,提供良好的安全性并满足要求。通常,法规本身会规定某些控制措施。例如,PCI DSS 要求包括多种具体的控制措施,组织必须实施这些控制措施以遵守标准。同时,请记住,你的控制措施只有在正确实施的情况下才有效。如果你不正确地实施了某项控制措施,可能会比根本没有实施它更糟,因为这会产生虚假的安全感。
关键控制与替代控制
除了区分不同类型的控制措施外,你还可以将控制措施分为两个重要性等级。关键控制措施是用于管理环境中风险的主要控制措施,具有以下特点:
-
它们提供了一定程度的保障,确保风险将得到缓解。
-
如果该控制措施失败,则不太可能由其他控制措施代替。
-
该控制措施的失败将影响整个过程。
你认为的关键控制措施会根据你的环境和当前的风险而有所不同,你应始终将关键控制措施作为合规或审计工作的一部分进行测试。一个关键控制措施的例子可能是在处理支付卡信息的所有系统上使用防病毒软件。
替代控制措施是替代不切实际或不可行的关键控制措施的控制措施。当你实施替代控制措施时,通常需要向审计员解释它如何实现你所替代控制措施的意图和目标。
例如,尽管法规可能要求你在所有系统上运行防病毒工具,但某些系统可能没有足够的资源运行这些工具而不会带来负面影响。在这种情况下,作为一种补偿性控制措施,你可以使用 Linux 操作系统,因为它们对恶意软件的抵抗力较强。
维持合规性
为了保持长期的合规性,你可以循环执行以下活动,如图 6-1 所示:监控、审查、文档化和报告。

图 6-1:维持合规性
遵循这个过程的每一步,有助于保持控制措施的有效性。
监控
你必须持续监控你的控制措施(以及与其相关的数据),以确定它们是否有效地减轻或减少了风险。在信息安全领域,通常“无新闻”意味着“好消息”。由于你的环境和技术可能发生变化,因此检查你的控制措施——尤其是关键控制措施——是否继续发挥其预定作用是至关重要的。如果没有这样的监控,控制措施很快就会变得无效,可能还不为你所知。
审查
控制措施需要定期审查,以确定它们是否仍然有效,并且是否能够实现你所在环境中管理风险的目标。随着旧风险的演变和新风险的出现,你需要确保控制措施仍能适当地覆盖这些风险,判断是否需要新的控制措施,或者决定是否应当废除旧的控制措施。
文档化
你应当记录审查的结果,并仔细跟踪控制环境的任何变化。文档化有助于你评估趋势,甚至可能预测未来的控制变化,这将帮助你预见未来所需的资源。
报告
在监控、审查和文档化控制措施的状态后,你必须将结果报告给领导层。这不仅能让他们了解控制措施的状态,并帮助他们为组织做出知情决策,还为你提供了申请所需人员和资源的渠道。
法律与信息安全
在信息安全方面,执行法律和法规通常比处理物理事件更为复杂。诸如将攻击归因于特定方,或评估攻击造成的损害(当涉及例如建筑物的破坏时,这些评估通常较为简单)等问题,在信息安全领域会变得更加复杂。
近年来,许多法律和法规旨在应对这些类型的情况。它们中的一些存在空白,而另一些则有较大的重叠。你将根据这些法律来准备或接受合规性评估。让我们来看几个例子。
政府相关的监管合规性
在美国,标准通常是制定管理政府行为及与政府密切合作的个人或组织的法律和法规的基础。在信息安全和合规领域,这些标准通常来自美国国家标准与技术研究院(NIST)发布的系列《特别出版物》(SP)。虽然 NIST 本身不是一个监管机构,但它发布的标准有合规要求,通常通过其他基于 NIST SP 的政府合规标准来执行(是的,这有点复杂)。安全专家在确保组织遵守这些与政府相关的标准方面通常发挥着重要作用。
什么是 NIST?
现在被称为 NIST 的机构最初是在 20 世纪初创建的,旨在制定重量和衡量标准,并作为国家实验室。随着时间的推移,其使命已经演变为促进美国的技术和创新。NIST 的《特别出版物》对信息安全有着重要影响。
两个最常见的政府合规标准是《联邦信息安全管理法》(FISMA)和《联邦风险与授权管理计划》(FedRAMP),它们都基于 NIST SP 800-53《信息系统与组织的安全与隐私控制》。
联邦信息安全管理法
2002 年《联邦信息安全管理法》适用于所有美国联邦政府机构、所有管理联邦项目的州政府机构(如医疗保险),以及所有支持、向联邦政府出售商品或接受联邦政府资助的私营公司。
FISMA 要求组织实施采用基于风险的方法的信息安全控制——这种方法通过列举和补偿具体风险来处理安全问题。
当一个组织通过审计后,合作的联邦机构会授予它操作授权(ATO)。由于 ATO 是针对每个机构的,因此一家与十个不同机构合作的公司必须获得十个不同的 ATO。
联邦风险与授权管理计划
2011 年建立的《联邦风险与授权管理计划》定义了政府机构与云服务提供商签约的规则。² 这一计划适用于云平台提供商,如 AWS 和 Azure,以及基于云的 SaaS 工具提供商。我将在本章稍后讨论这一区别。
与 FISMA 不同,FedRAMP 认证包含一个单一的 ATO,允许组织与任意数量的联邦机构开展业务。由于 FedRAMP ATO 的覆盖范围更广,获取它的要求比 FISMA 更加严格。截止本文写作时,FedRAMP 市场上只有 91 家公司获得了 ATO。³
行业特定的监管合规性
许多监管合规要求适用于特定的操作领域,如医疗保健行业、上市公司和金融机构。让我们来看看其中一些要求。
健康保险可携带性和责任法案(Health Insurance Portability and Accountability Act,HIPAA)
1996 年的健康保险可携带性和责任法案(Health Insurance Portability and Accountability Act,HIPAA)保护美国医疗保健系统患者的权利和数据。安全专业人员应特别关注 HIPAA 的第二标题,该标题规定了保护受保护健康信息(PHI)和电子受保护健康信息(e-PHI)的要求。(通常可以将这些解释为包含患者医疗记录或医疗交易的任何部分。)虽然 HIPAA 主要适用于从事医疗保健或健康保险的组织,但在其他奇怪的情况下也可能适用,例如自我保险的雇主。
HIPAA 要求您确保处理或存储的任何信息的保密性、完整性和可用性;保护此信息免受威胁和未经授权的披露;并确保您的工作人员符合其所有规定。在处理大量 PHI 的机构中,这可能是一项艰巨的任务。
萨班斯-奥克斯法案(Sarbanes–Oxley Act,SOX)
2002 年的萨班斯-奥克斯法案(Sarbanes–Oxley Act,SOX)监管公开上市公司的财务数据、业务和资产。政府出台 SOX 是为了应对多家大公司的财务欺诈事件,特别是 2001 年安然公司丑闻,公众得知该公司虚假报告了多年的财务状况。⁴
SOX 除了其他条款外,还对组织的电子记录保存提出了具体要求,包括记录的完整性、某些信息的保留期限以及存储电子通信的方法。安全专业人员经常帮助设计和实施受 SOX 影响的系统,因此您需要了解这些法规及其对您的要求。
格拉姆-利奇-布莱利法案(Gramm–Leach–Bliley Act,GLBA)
1999 年的格拉姆-利奇-布莱利法案(Gramm–Leach–Bliley Act,GLBA)旨在保护客户的信息(如个人可识别信息(PII),即任何可以识别特定个人的数据)和金融数据,这些数据属于金融机构的客户。有趣的是,GLBA 广泛定义了“金融机构”,包括“银行、储蓄和贷款协会、信用合作社、保险公司和证券公司……一些零售商和汽车经销商,他们收集和分享关于消费者的个人信息,以及利用金融数据向客户收取债务的企业。”⁵
为了遵守 GLBA,你必须确保每一份相关记录免受未经授权的访问,追踪人员对这些记录的访问,并在分享客户信息时通知客户。组织还必须有一个书面的信息安全计划,并具体制定一个全面的信息安全项目来处理组织的安全事务。
《儿童互联网保护法案》
2000 年《儿童互联网保护法案》(CIPA)要求学校和图书馆防止儿童访问互联网上的淫秽或有害内容。CIPA 要求这些机构采取政策和技术保护措施,以阻止或过滤此类内容。此外,这些机构还必须监控未成年人的活动,并提供关于适当在线行为的教育。
CIPA 通过为选择遵守这些标准的机构提供廉价的互联网接入,而不是通过对不遵守的机构施加惩罚,来鼓励机构采用这些标准。
《儿童在线隐私保护法案》
1988 年的《儿童在线隐私保护法案》(COPPA)通过限制组织收集 13 岁以下儿童的个人身份信息,来保护未成年人的隐私。该法案要求组织在线发布隐私政策,合理努力获取家长同意,并通知家长正在收集其子女的信息。许多公司选择对未成年人的账户收取少量费用,作为验证家长同意的方式,而其他公司则完全拒绝为未成年人提供服务。
COPPA 在信息安全界是一个相当敏感的话题,因为它要求组织判断用户的年龄,并为儿童提供更为严格的个人身份信息(PII)类别,如果要收集此类数据,即使是无意中收集,也需要严格的执行,这两项要求都很难做到高准确度。2016 年,移动广告公司 InMobi 因其广告软件无意中追踪到 13 岁以下未成年人的位置,被依据 COPPA 罚款 95 万美元。⁶如你所见,即便组织诚心遵守,合规性仍然很难达成。
《家庭教育权利和隐私法案》
1974 年的《家庭教育权利和隐私法案》(FERPA)保护学生的记录。FERPA 适用于所有年级的学生,且当学生年满 18 岁时,这些记录的权利从父母转移给学生。
FERPA 定义了机构如何处理学生记录以加以保护,并且规定了人们如何查看或共享这些记录。由于学校现在大多以数字形式保存教育记录,信息安全专业人员在处理涉及教育记录的事件和设计讨论时,参与其中并解决一般安全问题并不罕见。
美国以外的法律
外国的计算和数据法律可能与美国的法律大相径庭。如果你的组织在国际上运营,你需要研究你计划开展业务的每个国家/地区的相关法律。你还应该查看是否有任何条约规定了这些国家之间安全实践和信息交换的相关规定。
提前了解你可能遇到的监管问题是有益的。例如,在一个国家,你可能可以收集包含机器列表及其相关用户名、与所有者的员工编号和电子邮件地址相交叉的日志数据。但在另一个国家,收集这些数据可能会更加困难,甚至可能是非法的。
一个与信息安全相关的国际法规示例是《通用数据保护条例》(GDPR),这是欧盟在 2018 年制定的法规。GDPR 涉及欧盟所有个人的数据保护和隐私。该法规适用于任何收集欧盟公民数据的个人或组织,无论你在哪个国家工作。
GDPR 要求组织在收集个人数据之前获得同意,报告数据泄露事件,赋予个人访问和删除已收集数据的权利,并为隐私和隐私计划制定具体的指南。鉴于 GDPR 的广泛适用性,全球的安全和隐私计划在该法律生效时都必须进行调整,这促使了大量客户沟通、网站上新增的隐私导向横幅,以及许多组织政策的更新。⁷
采用合规框架
除了特定法规提供的框架外,为整体合规工作选择一个框架也是有帮助的。例如,如果你的组织必须遵守不同、不相关的法规——比如 HIPAA 和 PCI DSS——你可能需要选择一个更具总体性的框架来指导整个合规工作和安全计划,然后根据特定合规领域的需要进行调整。
在本节中,你将了解一些可以使用的框架。选择一个知名框架也可以让审计过程更加顺利,因为你可以向审计员展示你的程序和已实施的具体控制措施。
国际标准化组织
国际标准化组织(ISO)是一个于 1926 年首次成立的机构,旨在制定国际标准。它已制定了超过 21,000 个标准,涵盖几乎每个行业,从技术、食品安全到农业和医疗保健。⁸
涉及信息安全的 ISO 27000 系列包括以下标准:
-
ISO/IEC 27000,《信息安全管理系统——概述与词汇》
-
ISO/IEC 27001,《信息技术——安全技术——信息安全管理系统——要求》
-
ISO/IEC 27002《信息安全控制的实践守则》
这一系列 ISO 标准,也被行业称为 ISO 27k,讨论了信息安全管理体系,旨在帮助管理组织内资产的安全。这些文档列出了管理风险、控制、隐私、技术问题以及其他广泛细节的最佳实践。
美国国家标准与技术研究院
美国国家标准与技术研究院特别出版物提供了计算与技术中多个主题的指南,包括风险管理。这个领域中两个常被引用的出版物是 SP 800-37《应用风险管理框架到联邦信息系统的指南》和 SP 800-53《联邦信息系统和组织的安全与隐私控制》。
SP 800-37 提出了风险管理框架的六个步骤,这些步骤构成了许多安全程序的基础:
分类 根据系统处理的信息以及泄露或丢失这些数据的影响对系统进行分类。
选择 根据系统的分类和任何特殊情况来选择控制措施。
实施 实施控制措施并记录实施过程。
评估 评估控制措施,确保它们已经正确实施并且按预期运行。
授权 根据系统所面临的风险和为缓解该风险所实施的控制措施来授权或禁止使用该系统。
监控 监控控制措施,确保它们继续有效地缓解风险。
如果你打算根据 SP 800-37 选择控制措施,你可以在 SP 800-53 中找到针对这一目的的具体指南。
自定义框架
你当然可以开发自己的框架或修改现有框架,但在这样做之前你应该仔细考虑。正如你刚才看到的,已经存在很多风险管理框架,它们都经过了充分的审查和测试。你可能不应该在这里重新发明轮子。
技术变革中的合规性
跟上技术变化可能对执法合规的机构和那些试图实现合规的机构带来挑战。一个很好的例子就是本节讨论的云计算。
在将数据和应用程序托管到云端成为一种普遍技术趋势之前,组织通常拥有自己的服务器和基础设施,并将它们托管在内部或共同托管的数据中心。这为谁拥有并负责这些设备的安全提供了相对明确的界限。
现在,几乎整个公司都存在于云端,合规努力已经转移,试图专门应对这些情况;新的政策可能规定如何跟踪和评估第三方的安全和合规工作,新的法规决定如何管理云数据,审计员提出完全不同的问题,需要针对这些类型的环境提供具体证据。
尽管大多数技术变化相对渐进,允许安全和合规行业慢慢适应它,但并非总是如此。有两种相对较新的、潜在的颠覆性技术,可能会导致一些行业的合规要求发生进一步变化:区块链和加密货币。
云中的合规性
对于部分或完全依赖云的组织来说,合规性可能带来一系列额外的挑战。这是因为云服务有不同的模型,每种模型都给你提供不同程度的控制。这些模型包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),如图 6-2 所示。

图 6-2:云模型
从高层次来看,IaaS 为你提供虚拟服务器和存储的访问权限。例子包括 Google Cloud 和 Amazon Web Services。PaaS 为你提供预建的服务器,如数据库或 Web 服务器,例如 Azure,而 SaaS 为你提供访问特定应用程序或应用程序套件的权限,如 Google Apps。
PaaS 为你提供一定程度的控制,而 SaaS 则几乎没有控制。相反,IaaS 要求你承担更大的责任,PaaS 要求你承担一定程度的责任,而 SaaS 要求你承担的责任很少。引用蜘蛛侠中的话,“能力越大,责任越大。”(这句话的归属有些复杂,但我可以相对安全地将其归于斯坦·李在《惊奇幻想》第 15 期中的引用。)
选择使用哪种类型的服务是一个平衡灵活性和可配置性需求与服务易用性之间的决策。如果你想发送一封简单的电子邮件并结束,那么使用像 Gmail 这样的工具(SaaS)是合乎逻辑的。在这种情况下,构建和配置虚拟服务器,在上面安装和配置邮件服务器软件(IaaS),然后发送电子邮件就显得没有太大意义。
谁承担风险?
在每种云模型中,云服务提供商必须对用户无法控制的环境部分负责。这意味着,在某些情况下,你需要直接负责保护你的数据;而在其他情况下,你需要确保你使用的服务能够适当地保护数据。
在 IaaS 环境中,云服务提供商拥有与虚拟基础设施所在的网络和服务器相关的风险。换句话说,它负责确保和维护宿主机(运行虚拟机的服务器)、客户存储卷所在的存储阵列以及宿主机使用的网络等组件。由于 IaaS 让你对环境及其配置有较大的控制权,因此它要求你承担更大的责任。
在 PaaS 环境中,云客户可以直接访问服务器,但无法访问运行这些服务器的基础设施。在这种情况下,云服务提供商负责该基础设施的安全性,包括操作系统补丁、服务器配置、服务器备份和存储卷维护等任务。
在 SaaS 环境中,客户可能根本无法对基础设施或服务器进行任何更改,这意味着云服务提供商对其完全负责。客户可能仍然需要对输入到环境中的数据负责,但不负责环境本身的安全。
审计和评估权限
你与云服务提供商的合同通常会规定你审计和评估云环境安全性的权利。在许多情况下,服务会允许客户在某些特定范围内进行审计和评估。例如,它可能会规定你何时以及如何请求内部审计团队或第三方审计公司对提供商进行审计。这些限制是合理的,因为回应每个审计请求需要大量工作。提供商也可能通过提供年度外部审计结果来回应审计请求,该审计是专门为回应此类请求而进行的。
如果你希望直接评估云服务提供商的安全性,可能会通过渗透测试(我将在第十四章中深入讨论),你可能会遇到阻力。许多提供商直接拒绝此类请求,或者只在非常特定且严格限制的条件下允许渗透测试。这对许多提供商而言是可以理解的,因为他们可能出于同样的原因限制审计。此外,主动的安全测试通常会影响被测试的基础设施、平台或应用程序,提供商可能因此遭遇服务问题。
技术挑战
云服务在合规性方面带来了技术挑战,因为它们是共享资源。如果你在与另一家公司共用同一主机服务器上使用云资源,那么该公司缺乏安全性很可能会影响你的系统安全。
在云服务中,风险随着服务提供商更密切管理的服务而增加,例如 SaaS,因为你和其他客户共享更大一部分环境。你的数据可能和其他客户的数据混合在同一个数据库中,只有应用程序逻辑将你的数据和他们的数据分开。
另一方面,在 IaaS 服务中,尽管你和其他人共享某些服务器资源来托管虚拟机以及一些相同的存储空间,但你的资源和其他人的资源之间存在明显的分隔。
区块链的合规性
区块链是一种分布式且不可编辑的数字账本。交易作为区块被记录到账本中,每个区块通过单向数学握手(类似于第五章中讨论的哈希)与前一个区块相连接。每个参与者都有区块链的副本,51%的参与者的共识定义了接受的链(通常是最长的链)。
在安全术语中,区块链承诺提供一种强有力的完整性保障。当你将某些内容记录到区块链时,你可以非常确信地说,稍后查看时,它不会被更改。例如,沃尔玛使用这项技术来追踪其食品产品的路径,从供应商开始,到将其销售给顾客的商店。⁹
在合规性方面,创建能够展示对区块链工作原理理解的控制措施至关重要。例如,人们常常引用区块链作为无法更改的记录,你可以将数据写入其中,而无需担心数据被更改。不幸的是,这种情况只有在特定条件下才成立。如果你控制了 51%的参与者,就可以在区块链上强制达成共识,在那时你可以随意写入数据。某些公司甚至推广“私有”区块链,实际上这只是通过加密来确保数据的完整性。想要规范区块链的人应当理解它可能存在的缺陷;如果你从一种新兴技术急速转向下一种技术,你可能会设立一些实际上只是“安全表演”的控制措施。
加密货币的合规性
加密货币是一种基于区块链技术的数字货币形式。加密货币无疑是一种颠覆性技术。第一种加密货币比特币于 2009 年出现,自那时以来,其价值波动极大。
比特币通过与保持底层区块链运行相同的方式来生成货币。正如所讨论的那样,为了将每个比特币区块附加到链上,它需要通过数学的“握手”进行验证。这个功能需要所有参与区块链的人提供一定程度的计算能力,作为奖励,参与者会获得一个比特币。这一生成新比特币的过程被称为比特币挖矿。
2019 年 2 月,加拿大最大加密货币交易所 Quadriga 的创始人杰拉尔德·科顿(Gerald Cotton)突然去世。据报道,科顿是一位注重安全的人,他通过存储在高度加密的笔记本电脑中的离线账户管理整个交易所。在他去世后,交易所持有的约 1.9 亿美元加密货币(跨越 11.5 万名客户)全部消失,原因是他的笔记本电脑无法访问。截至目前,关于这一事件的确切情况仍在调查中,尽管有传言称该事件可能涉及某种欺诈行为。
作为一个组织,你很可能受一系列法律和法规的约束,这些法律法规管理着金融交易,并且定义了对投资者的规则以及如何向他们报告。尽管许多企业已经使用加密货币,企业在业务中使用加密货币仍然是一个灰色地带。然而,可以几乎确定的是,作为一个组织,如果因加密货币技术故障导致几百万美元的损失,你将无法不受法律和监管的严重后果而轻松应对。
总结
在本章中,我讨论了与信息安全相关的法律和法规,以及遵守这些规定意味着什么。很多这些法律与计算相关,并且在不同国家之间差异很大。企业可能面临合规性和行业合规性的双重要求,它们通常通过实施控制措施来保持合规。
我还谈到了在云计算和区块链等新技术中的合规问题,这些技术为试图监管它们的人带来了额外的挑战。
练习
-
选择本章涉及的与计算相关的美国法律之一,并总结其主要规定。
-
为什么合规性审计可能是一个积极的事件?
-
COPPA 关注的是什么类型的数据?
-
合规性和安全性之间有何关系?
-
哪些问题可能会使得开展国际信息安全项目变得困难?
-
哪一份 NIST 特别出版物为 FISMA 和 FedRAMP 奠定了基础?
-
为什么行业规定,如 PCI DSS,重要?
-
不合规可能带来哪些潜在影响?
-
哪些 ISO 标准集可能对信息安全项目有用?
-
哪两个项目是你公司可能属于的合规标准集合的指标?
第七章:操作安全

在军事和政府领域,这一过程被称为 OPSEC(操作安全),它是用于保护信息的过程。尽管我们之前讨论了操作安全的某些元素,例如使用加密保护数据,但整个操作安全过程涵盖的内容远不止这些。
操作安全不仅仅是实施安全措施,还包括识别您需要保护的具体内容,以及需要保护它们免受哪些威胁。如果直接跳到实施保护措施,您可能会未能将精力集中在最关键的信息上。此外,在实施安全措施时,您应当采取与所保护内容价值相匹配的措施。如果对所有内容都应用相同级别的安全性,您可能会对一些不太重要的资源过度保护,而对一些更具价值的资源保护不足。
在本章中,我将讨论美国政府关于执行操作安全的指南。随后,我将概述这些概念的起源,并讨论它们作为保护自己和组织的工具在日常生活中的应用。
操作安全流程
美国政府提出的操作安全流程分为五个部分,如图 7-1 所示。

图 7-1:操作安全流程
首先,您需要识别需要保护的信息。然后,分析可能影响这些信息的威胁和漏洞,并制定减轻这些威胁和漏洞的方法。尽管这一过程相对简单,但它是有效的。我们将一一讲解这些步骤。
关键资料识别
操作安全流程中最重要的第一步是识别您的最关键信息资产。任何企业、个人、军事行动、流程或项目必定至少有一些依赖于其他一切的信息。这些信息往往是至关重要的。例如,对于一个软饮料公司来说,可能是它们的秘方;对于一个应用程序供应商来说,可能是它们的源代码;而对于一个军事行动来说,可能是攻击时间表。您应该识别出那些如果被曝光会对您造成最大危害的资产。
威胁分析
下一步是分析与您已识别的关键资料相关的任何威胁。请记住在第一章中提到的,威胁是指可能对您造成危害的事物。利用您的关键资料清单,您可以评估如果关键资料被泄露可能造成的危害,以及可能会利用这些泄露的人。这与许多军事和政府组织用来分类信息并确定谁可以查看的信息处理流程相同。
例如,如果你拥有一家软件公司,你可能会将产品的专有源代码视为关键信息。暴露这些关键信息可能使公司面临攻击者和竞争对手的威胁。攻击者可能会通过确定生成许可证密钥的方案,开发一个工具来盗版你的软件,从而损失收入。竞争对手可能会利用暴露的源代码,复制你软件中的专有功能,并将其用于自己的应用程序,或者他们可能会复制你应用程序的大部分并自己销售。
对每一项关键信息、每个可能在其暴露后利用它的方以及他们可能利用这些信息的方式,重复进行这一步。如你所见,识别为关键信息的资产越多,这一步就越复杂。在某些情况下,你可能会发现只有有限的方可以利用这些信息,并且仅能在有限的方式中使用;而在其他情况下,你可能会发现完全相反的情况。例如,一份用于工业食品加工线大规模生产的秘密巧克力曲奇饼干配方,只对另一家经营此类行业的组织有用。相同的配方如果用于家庭制作,则任何人都能使用。
漏洞分析
漏洞是他人可以利用来伤害你的弱点。操作安全的第三步是分析你为保护信息资产所采取的保护措施中的漏洞。你将通过查看你如何与这些资产互动,以及攻击者可能针对哪些领域进行攻击来破坏这些资产,来完成这一步。
在分析影响源代码的漏洞时,你可能会发现源代码的安全控制措施不够严格,任何可以访问操作系统或网络共享的人都有可能访问、复制、删除或更改源代码。这可能使得已攻陷系统的攻击者能够复制、篡改或完全删除源代码。或者,漏洞可能使得在系统维护时文件易于被意外更改。
你还可能会发现没有任何政策来规定源代码应该存储在哪里,是否应在其他系统或备份介质上存在其副本,或者一般来说它应如何受到保护。这些问题可能会创造出多个漏洞,并可能导致严重的安全漏洞。
风险评估
接下来,你需要决定在操作安全过程的其余部分中需要解决的问题。如第一章所述,风险发生的前提是威胁和漏洞匹配。在软件源代码示例中,威胁之一是应用程序源代码可能被暴露。漏洞则是源代码访问控制不力,并且没有政策规定如何准确控制访问。这两个漏洞可能会导致你的关键性信息暴露给竞争对手或攻击者。
再次强调,要构成风险,你需要匹配的威胁和漏洞。如果你的源代码的机密性不是目标——例如,如果你在创建一个开源项目,且源代码可以公开访问——那么你就不会有风险。同样地,如果你的源代码需要满足严格的安全要求,几乎不可能以未经授权的方式发布,那么你也不会有风险,因为漏洞就不存在。
对策的应用
一旦你发现了对关键性信息的风险,就可以采取措施来缓解这些风险。在操作安全中,这些措施被称为对策。如前所述,要构成风险,你需要一组匹配的威胁和漏洞。当你为风险构建对策时,至少需要缓解威胁或漏洞中的一个。
在源代码示例中,威胁是指你的源代码可能会暴露给竞争对手或攻击者,而漏洞则是指你为保护源代码而设置的安全控制措施不充分。在这种情况下,除非完全改变应用程序的性质,否则你无法采取太多措施来保护自己免受威胁,因此无法缓解威胁。然而,你可以采取措施来缓解漏洞。
例如,为了缓解这个漏洞,你可以采取更强的措施来控制代码访问,并建立一套规则来规定如何控制访问。一旦你像这样拆解威胁/漏洞对,你就不再面临严重的风险。
需要注意的是,这是一个迭代过程,你可能需要多次重复这个循环,以充分缓解任何问题。每次完成循环时,你都会根据之前缓解努力所获得的知识和经验来调整解决方案,从而提高安全性。你还需要在环境发生变化、出现新的因素时重新审视这个过程。
如果你熟悉风险管理,你可能会注意到,操作安全周期缺少一个评估对策有效性的步骤。我认为这个步骤在整个操作安全过程中是隐含的。然而,这个过程当然不是一成不变的,如果你认为加上这个步骤有益,完全可以加入。
操作安全法则
库尔特·哈塞(Kurt Haase),曾是内华达州能源部操作办公室的员工,将操作安全过程总结为三条规则,称为OPSEC 法则。这些法则是另一种思考前面提到的周期的方式,尽管不一定是过程中的最重要部分,但它们确实有助于突出操作安全的一些主要概念。
第一法则:了解威胁
操作安全的第一法则是“如果你不知道威胁,怎么知道该保护什么?”¹ 换句话说,你需要意识到面临的实际和潜在威胁,特别是你关键数据的威胁。这个法则直接映射到操作安全过程中的第二个步骤。
最终,正如前面所讨论的,每一条信息都可能面临其自身的威胁。威胁甚至可能取决于你的位置。尤其是在云服务的情况下,这一点尤为真实。例如,即使你列出了一个位置中面临的所有威胁,如果你将这些数据复制到多个存储区域、多个国家,可能会遇到新的威胁。这是因为不同的地区可能有更容易访问的方,或者相关法律可能在不同地点之间差异巨大。
第二法则:知道需要保护的内容
“如果你不知道该保护什么,怎么知道你正在保护它?”² 这条操作安全法则指出,需要评估你的信息资产,明确什么信息可以视为你的关键数据。这个第二法则映射到操作安全过程中的第一步。
大多数政府环境要求识别和分类信息。每一项信息——可能是一个文档或文件——都会被分配一个标签,如机密或绝密,以标识其内容的敏感性。这种标签化使得识别关键数据的任务变得相对容易,但不幸的是,政府之外很少有人使用这种系统。
商界的一些组织可能会有信息分类政策,但根据我的经验,它们通常是零星地实施这种标签化。一些民用行业,例如那些涉及联邦要求保护数据的行业,如金融或医疗数据,确实会对信息进行分类,但这些都是例外,而非常规做法。
第三法则:保护信息
操作安全的第三条也是最后一条法则是:“如果你没有保护[信息],… 龙会赢!”³ 这条法则强调了操作安全过程整体的重要性。如果你不采取措施保护你的信息不被龙(你的对手或竞争者)获取,他们就会默认获胜。
“龙赢”的案例遗憾地很常见。安全漏洞不断出现在新闻中,并且在跟踪漏洞的网站上也能看到,例如隐私权清理所(www.privacyrights.org/)。在许多情况下,漏洞的发生仅仅是因为疏忽大意,没有遵循最基本的安全措施。
这也适用于 2018 年 9 月,安全研究员发现的加州电子邮件营销公司 SaverSpy 的数据泄露事件。此次泄露包含超过 43GB 的用户数据,包括超过 1000 万 Yahoo 用户的姓名、电子邮件地址、住址和性别。⁴
我曾想象黑客是在黑夜中突破系统并窃取这些信息。但实际上,研究人员是在 Shodan⁵上浏览被攻破的服务器时发现了这些数据;结果发现,包含这些数据的服务器在互联网上完全暴露且未加保护。更糟的是,数据库里还包含了一份来自之前发现这些暴露服务器的攻击者的勒索信。
操作安全过程本应迅速识别出这些关键数据集,让你更有机会避免这种情况。防止泄露所需的安全措施既不复杂也不昂贵,从长远来看,能够为你节省大量的声誉和财务损失。
我们个人生活中的操作安全
操作安全过程不仅在商业和政府中有用,在我们的个人生活中也同样适用。你可能没有有意识地经过操作安全周期中的所有步骤来保护个人数据,但你依然会使用文中讨论的一些方法。
比如说,如果你要去度假几个星期,家里没人,你可能会采取一些措施来确保你不在时家里有一定的安全保障。你可能会列出以下几个能表明房子没人且容易遭受攻击的迹象:
-
晚上没有灯光
-
房子里没有声音
-
堆积在车道上的报纸
-
邮件堆积在邮箱里
-
车道上没有车
-
没有人员进出
你可能会采取措施,确保不会过于明显地向小偷或破坏者展示你的脆弱性。例如,你可以设置灯光定时器,让它们在房子里不同的时间开关。你也可以设置电视或收音机的定时器,制造噪音,让人感觉家里有人。为了解决邮件和报纸堆积的问题,你可以在离开期间暂停它们的投递。为了让房子看起来有人住,你可能还会让朋友每隔几天过来浇水,或者偶尔让他们进出车库移动一下汽车。
操作安全与社交媒体
在社交网络工具的时代,你会经常看到个人操作安全违规行为。现在许多这些工具都配备了位置感知功能,当我们更新状态时,它们能够报告我们的物理位置。
此外,人们经常发布他们要去吃午餐、外出度假等消息。在这两种情况下,我们向公众明确发出了可能不在家或者可能在特定地点的信号——从操作安全的角度来看,这是一种不良做法。
尽管你不会像美国政府那样严格执行这些操作安全措施来保护个人数据,但过程是相同的。当涉及到你的逻辑资产时,采取这些方法尤其重要。
你的个人信息会通过大量的计算机系统和网络传输。虽然你可能会通过小心谨慎地分享个人信息,或者在丢弃含有敏感信息的邮件前将其粉碎,来减轻安全威胁,但不幸的是,你无法控制个人信息可能被暴露的所有途径。
正如你在本章早些时候看到的 SaverSpy 泄露事件一样,你不能总是相信组织会小心地处理你的信息。话虽如此,如果你在泄露发生之前就计划好保护个人数据,至少可以在一定程度上缓解问题。例如,你可以设置监控服务来观察你的信用报告,并且在发生泄露时向这些机构提交欺诈报告。你还可以仔细查看自己的财务账户。虽然这些步骤可能不复杂或特别困难,但如果在问题发生之前采取它们,可能会带来很大的不同。
操作安全的起源
尽管美国政府实施的操作安全过程可能是一个近代的概念,但其基础概念却是古老的。你可以指出历史上任何时期的军事或大型商业组织,都能找到操作安全原则的踪迹。在这一部分,我将介绍一些对现代操作安全发展至关重要的例子。
孙子
孙子是公元前六世纪的中国军事将领。对一些人来说,孙子的著作《孙子兵法》是一部进行军事行动的“圣经”。《孙子兵法》催生了无数衍生作品,其中许多将其传播的原则应用到各种情况中,包括信息安全。该文本记录了操作安全原则的一些最早例子。让我们来看看其中的几个。
第一段是:“如果我能在同时隐藏自己的部署的情况下,确定敌人的部署,那么我就可以集中力量,而敌人则必须分散。”⁶ 这是一个简单的告诫:在保护我们自己的同时,发现对手所掌握的信息。
第二段是:“(在)制定战术部署时,你能达到的最高境界就是隐蔽它们;隐蔽你的部署,你就能避开最为狡猾的间谍和最智慧的大脑的窥探。”⁷ 在这里,孙子表示我们应该在一个对对手难以观察的区域进行战略规划——在这种情况下,就是我们能找到的最高点。他再次强调要保护我们的规划活动,以免泄露给可能反对我们的人。
尽管这些段落写于很久之前,但它们与我们在本章早些时候讨论的操作安全法则密切一致——即,了解威胁,知道要保护什么,然后进行保护。
乔治·华盛顿
美国第一任总统乔治·华盛顿是一个敏锐且高明的军事指挥官,他提倡良好的操作安全实践。在操作安全界,他因曾说过:“即使是微不足道的细节也应该被收集,因为看似无关紧要的事情,当与其他更为重要的事物结合时,可能会得出有价值的结论。”⁸ 这意味着,即使是个别无价值的小信息,若与其他信息结合,也可能变得非常有价值。
这一概念的现代例子是构成身份的三项主要信息:姓名、地址和社会安全号码。单独来看,这些信息是完全无用的。你可以将其中任何一项孤立地展示在广告牌上,让全世界看到,而不至于因此受到任何损害。然而,将这三项信息结合在一起,它们足以让攻击者窃取你的身份,并用来进行各种欺诈活动。
华盛顿还被引用说过:“因为秘密,在大多数此类企业中,成功依赖于此,缺乏它,通常会导致失败。”⁹在此,他指的是一项情报收集计划及其活动需要保持机密。他通常被认为在情报问题上非常了解,并且被认为在任何正式的情报能力出现之前,就已经建立了一个庞大的组织来执行此类活动。
越南战争
在越南战争期间,美国意识到有关部队调动、作战和其他军事活动的信息正被泄露给敌方。显然,在大多数环境中,无论是军事还是其他领域,让我们的对手获取我们的活动信息都是不利的,尤其是当生命可能受到威胁时。为了阻止信息泄露,当局进行了一项代号为“紫龙”的研究,¹⁰以找出泄露的原因。
最终,研究得出了两个主要结论:首先,在那个环境中,窃听者和间谍比比皆是;其次,军方需要一项调查来揭示信息丧失的程度。调查询问了关于信息本身以及信息的脆弱性的问题。进行这些调查和分析的小组创造了操作安全这一术语及其缩写OPSEC。此外,他们看到了建立一个操作安全小组的必要性,该小组将把操作安全的原则传递给政府内的不同组织,并与他们合作以将这些原则落实。
商业
在 1970 年代末和 1980 年代初,一些在军事和政府中使用的操作安全概念开始在商业世界中扎根。工业间谍活动——即为了获得竞争优势而对商业竞争对手进行间谍活动——是一项古老的做法,但随着这一概念在军事世界中变得更加结构化,它也在商业世界中变得更加规范。1980 年,哈佛商学院教授迈克尔·E·波特出版了一本名为《竞争战略:分析行业和竞争对手的技巧》的书。此书至今已出版近 60 版,为我们现在所称的竞争情报奠定了基础。
竞争情报通常被定义为进行情报收集和分析以支持商业决策。竞争情报的对立面是竞争反情报,它包括几年前政府提出的操作安全原则,并且至今仍是开展业务的一个积极部分。你可以在许多大公司中看到这些原则的应用,也可以在像战略与竞争情报专业人员(SCIP)¹¹这样专业组织中看到,巴黎的经济战争学院(Ecole de Guerre Economique)也是其一。
跨机构操作安全支持小组
越南战争结束后,执行紫龙任务并制定政府操作安全原则的小组试图为一个与各政府机构合作的操作安全组织争取支持。他们未能引起军事机构的兴趣,也未能获得美国国家安全局的正式支持。幸运的是,在美国能源部和美国总务管理局的努力下,他们获得了足够的支持得以继续前进。此时,他们草拟了一份文件,提交给时任总统的里根。
由于里根的连任竞选活动,这些努力曾被推迟,但在 1988 年不久后,他签署了《国家决策安全指令 298》,成立了跨机构操作安全支持小组(IOSS)。¹² 今天,IOSS 负责进行各种操作安全意识和培训工作,例如图 7-2 中展示的海军操作安全海报。¹³

图 7-2:操作安全意识海报
总结
操作安全的起源可以追溯到有文字记载的历史。你可以在公元前六世纪孙子兵法中找到类似的原则,在乔治·华盛顿的言论中也有体现,在商业界的文献中也有所论述,甚至在美国政府的方法论中也能找到。尽管正式的操作安全流程是最近才形成的,但它们所依赖的原则却极为古老。
操作安全过程包括五个主要步骤。首先,你需要识别最关键的信息,以便知道需要保护的内容。接着,你要分析你的情况,确定环境中存在的威胁和漏洞。一旦知道了威胁和漏洞,你就可以尝试确定可能面临的风险。当你的威胁和漏洞匹配时,你就有了风险。了解风险后,你可以制定对策来减轻风险。
为了总结这个过程,你也可以参考库尔特·哈塞(Kurt Haase)所写的操作安全法则。他的三条法则涵盖了你可能希望内化的一些关键点。
即使你可能不以正式的方式这么做,你也会在个人生活中运用商业和政府中使用的操作安全原则。识别关键性信息并制定保护措施尤为重要,尤其是在如今大量个人信息通过系统和网络共享的背景下。
练习
-
为什么识别你的关键性信息很重要?
-
操作安全的第一条法则是什么?
-
IOSS 的功能是什么?
-
乔治·华盛顿在操作安全的创建中扮演了什么角色?
-
在操作安全过程中,评估威胁和评估漏洞有什么区别?
-
为什么你可能需要使用信息分类?
-
当你完成了整个操作安全流程后,你就完成了吗?
-
第一个正式的 OPSEC 方法论源自哪里?
-
操作安全的起源是什么?
-
定义竞争性反情报。
第八章:人类因素安全

在信息安全领域,我们将人称为安全程序的“薄弱环节”。无论你设置了多少安全措施,你对员工的行为几乎没有控制,他们可能会点击危险的链接,通过不安全的渠道发送敏感信息,交出密码,或者将重要数据发布在显眼的位置。
更糟糕的是,攻击者可以利用这些倾向进行社交工程攻击,通过操纵他人来获取信息或进入设施。这些攻击通常依赖于人们愿意帮助他人,特别是在面对显得处于困境中的人、令人畏惧的人(如高级经理)或看起来熟悉的人时。
话虽如此,你可以采取措施保护组织免受这些攻击,通过制定适当的政策,并教育员工识别危险。在本章中,你将了解攻击者可能收集的各种数据、几种类型的社交工程攻击,以及如何建立有效的安全培训计划来提醒你的员工。
为社交工程攻击收集信息
为了保护你的组织,你需要了解社交工程师如何收集数据。今天,人们比以往任何时候都能更快地收集到关于个人和组织的信息。在线数据库、公共记录和社交媒体网站上存在着惊人的信息财富,在许多情况下,这些数据是可以自由获取的。许多人会将他们日常活动的详细个人信息发布在网上,供全世界查看。
一旦攻击者收集到有关内部流程、人员或系统的信息,他们就可以利用这些信息进行复杂的攻击。如果攻击者打电话给公司,直接要求一份包含敏感销售数据的报告,电话那头的人很可能会拒绝。然而,如果攻击者使用社交工程技术,打电话时用慌张的语气请求从 SalesCom 服务器上的销售目录中获取最新的 TPS-13 报告副本,因为他们需要在 15 分钟内与黑泽先生开会,且笔记本电脑刚刚崩溃,那么他们更有可能成功。(这是一种被称为"前提设定"的社交工程攻击,我将在本章后面详细讨论。)
了解攻击者可能会在诸如刚才讨论的案例中使用的信息类型是很重要的。在保护个人和商业组织时,你应该关注两个主要的信息来源:人类情报和开放源代码情报。
人类情报
对于全球范围内的军事和执法组织来说,人力情报(HUMINT)是一种通过与人交谈收集的数据。HUMINT 数据可能包括个人观察、人员的日程安排、敏感信息或其他类似的信息。你可以通过敌对手段(例如酷刑)或通过巧妙的骗局欺骗参与者来收集 HUMINT。安全专业人员关注的是后者。
例如,你可以使用 HUMINT 作为进行其他社会工程攻击的基础。你可以观察进出办公楼的交通,注意到该办公室频繁收到包裹,并且每天早晨 8 点都有换班,导致许多人在同一时间进出大楼。在这个繁忙时段,你穿上熟悉的送货制服,进入设施的机会会大大增加。
开放源代码情报(OSINT)
开放源代码情报(OSINT)是从公开可用的来源收集的信息,比如职位发布和公共记录。这些公开的数据可以揭示大量有用的信息,包括特定组织使用的技术、组织结构,以及人员的具体名字和职位。OSINT 是社会工程攻击的主要信息来源之一。
简历和职位发布
在简历中,你可能会找到工作经历、技能以及兴趣爱好,这些信息可以被攻击者用来根据目标的技能或兴趣设定社会工程攻击。在职位列表中,企业通常会曝光他们通常认为是敏感的信息,包括办公室和数据中心的位置、网络或安全基础设施的细节,以及正在使用的软件。招聘人员可能认为在招聘过程中发布这些信息是必要的,但攻击者也可以利用这些信息来规划攻击或增强未来的监视力度。
例如,如果你收集到某公司运行 Windows 服务器在其云托管环境中,并且使用 CompanyX 的杀毒软件,你已经显著减少了在规划攻击时需要考虑的变量数量。如果你收集到更多关于他们信息安全团队的位置和成员的信息,你也许能够预测到他们响应攻击的技能水平和时机,从而使你的攻击更加有效。
社交媒体
攻击者可以轻松地利用社交媒体工具,如 Facebook 和 Twitter,收集开放源代码情报(OSINT),通过跟踪某人的活动、寻找他们的朋友和其他社交联系,甚至追踪他们的物理位置。他们可以利用这些信息来监视目标或采取更直接的行动,比如勒索。在许多情况下,年轻人往往更愿意记录可疑活动,这可能为这类信息提供更丰富的来源。
2016 年美国总统大选结果的操控尝试提供了一个示例,展示了攻击者如何利用社交媒体工具。在大选前的几个月,位于俄罗斯的互联网研究机构购买了大约 3,500 个 Facebook 广告,目的是通过触及种族、执法和移民等主题,在目标选民群体中煽动紧张情绪。2018 年 2 月,美国联邦大陪审团起诉了 13 名为互联网研究机构工作的俄罗斯人,指控他们参与这些活动。¹ 这是社会工程学的经典案例,稍后我会在本章中详细讨论。
公共记录
公共记录可以提供关于目标的大量信息,包括抵押贷款、婚姻、离婚、法律诉讼和停车罚单等证据。攻击者通常利用这些数据进行额外的搜索,找到更多的信息。
公共记录的定义可能会根据记录的地理位置和持有该记录的机构而有所不同。在美国,各州的法律不同,因此在一个州合法访问的信息,在另一个州可能是非法的。
Google 黑客攻击
Google 和其他搜索引擎是信息收集的优秀资源,尤其是当攻击者使用高级搜索操作符时,如下所示:
site 限制结果为特定网站(site:nostarch.com)
filetype 限制结果为特定文件类型(filetype:pdf)
intext 查找包含某些词或词组的页面(intext:security)
inurl 查找 URL 中包含某个词或词组的页面(inurl:security)
你可以将这些操作符结合到一个搜索中,以检索特定的结果。例如,在搜索框中输入site:nostarch.com intext:andress security,应该会返回该书籍出版商的页面,如图 8-1 所示。

图 8-1:Google 搜索操作符的应用
Google Hacking 数据库(www.exploit-db.com/google-hacking-database/),如图 8-2 所示,包含了利用高级搜索操作符进行的预设 Google 搜索,用于查找特定的漏洞或安全问题,如包含密码的文件或易受攻击的配置和服务。

图 8-2:Google Hacking 数据库
这不仅提供了一套预先组装好的搜索,用户可以轻松点击使用,还展示了使用搜索操作符的一些更复杂方式。例如,图 8-2 中的底部搜索展示了三个不同操作符的组合(inurl:、intext:和 ext:)。你可以轻松替换这些术语,重新定向搜索以供自己使用。
文件元数据
元数据 是几乎所有文件中关于数据的数据,它不仅能揭示像时间戳和文件统计信息等平凡的内容,还能展示更有趣的数据,如用户名、服务器名称、网络文件路径以及已删除或已更新的信息。文件元数据为搜索、排序、文件处理等提供数据,而这些数据通常对用户不可见。许多专业的取证工具,如 EnCase (www.guidancesoftware.com/encase-forensic/),具有特定功能,可以在取证调查中快速、轻松地恢复这些数据类型。
图像和视频文件的元数据,称为 EXIF 数据,包含如相机设置和硬件等信息。你可以使用 ExifTool (www.sno.phy.queensu.ca/~phil/exiftool/),一个优秀的跨平台工具来查看和编辑 EXIF 数据,它支持多种文件类型。尤其是一些已经存在很长时间且由多人编辑的文档文件,它们所包含的元数据可能会让你感到惊讶。试试下载并使用它来分析一些文档或图像文件。
含有全球定位系统(GPS)信息的设备生成的图像文件,可能还包含位置信息;如果智能手机启用了相机的定位设置,它会将用户的位置信息嵌入到图像文件中,这意味着将这些图像上传到互联网可能会泄露敏感数据。
目前有许多工具可以帮助从 OSINT(以及其他)来源收集信息。Shodan 和 Maltego 是其中两个较为常见且知名的工具。
Shodan
Shodan,如图 8-3 所示,是一个基于网络的搜索引擎,用于查找保存在互联网上连接设备中的信息。

图 8-3:Shodan
Shodan 允许你搜索特定的信息,如特定的硬件、软件或开放端口。例如,如果你知道某个特定文件传输协议(FTP)服务的一个易受攻击的版本,你可以让 Shodan 在其数据库中列出所有该服务的实例。同样,你也可以请求 Shodan 提供它所知道的某个域名或服务器的所有信息,并即时查看其中可能存在的特定漏洞。
Maltego
Maltego (www.paterva.com/),如图 8-4 所示,是一个情报收集工具,通过特定数据点之间的关系,称为 transforms,来发现与你已经拥有的信息相关的内容。

图 8-4:Maltego
例如,你可以通过提供一个网站的域名给 Maltego,然后使用变换找到网站上列出的姓名和电子邮件地址。通过这些姓名和电子邮件地址,你可以基于相同的邮件格式在互联网上找到其他地址和姓名。你还可以找到托管该域名的服务器的互联网协议(IP)地址,并进一步找到托管在同一服务器上的其他域名。
Maltego 会在图形上显示你的搜索结果,图形展示了每个发现项之间的链接。你可以通过点击图形中的具体项并选择新的变换来进行进一步的搜索。
其他类型的情报
OSINT 和 HUMINT 绝不是你可以收集的唯一类型情报。你还可能会看到其他类型的情报:
地理空间情报(GEOINT) 通常来自卫星的地理信息。
测量与签名情报(MASINT) 从传感器(如光学或天气读取器)收集的测量和签名数据。MASINT 包含一些特定传感器类型的情报,如 RADINT,或者从雷达收集的信息。
信号情报(SIGINT) 通过拦截人们或系统之间的信号收集的数据。你可能还会看到这个术语被称为通信情报(COMINT),用于指人际通信,或电子情报(ELINT),用于指系统间的通信。
技术情报(TECHINT) 关于设备、技术和武器的情报,通常是为了开发对策而收集的。
金融情报(FININT) 关于公司和个人的财务交易数据,通常来自金融机构。
网络情报/数字网络情报(CYBINT/DNINT) 从计算机系统和网络中收集的情报。
大多数其他类型的情报将归类于这些类别中的某一项。
社会工程攻击的类型
本节讨论了在上一节中收集到的信息可以用于进行的一些社会工程攻击。
预设身份
在 预设身份 攻击中,攻击者利用他们收集到的信息,冒充经理、客户、记者、同事的家人或其他值得信赖的人。通过伪造身份,他们创建可信的情境,诱使目标泄露敏感信息或执行他们通常不会为陌生人做的行为。
攻击者可以在面对面的接触中,或通过某种通信媒介使用预设身份。直接互动需要对细节如肢体语言保持高度关注,而间接接触(如通过电话或电子邮件进行的接触)则要求更强的注意力集中在语言习惯上。这两种类型的攻击都需要良好的沟通和心理技能、专业知识以及敏捷的思维。
预设欺骗为社会工程师提供了优势。例如,如果社会工程师能够提及名字,提供关于组织的细节,并使目标有充分的理由相信他们有权获得请求的信息或访问权限——或者,实际上,他们已经拥有了这些信息——那么他们成功的机会将大大增加。
网络钓鱼
网络钓鱼是一种社会工程技术,攻击者通过电子通讯方式,如电子邮件、短信或电话,收集目标的个人信息或在其系统上安装恶意软件,通常通过说服目标点击恶意链接来实现。
用于基于网页的网络钓鱼攻击的虚假网站通常模仿一些知名网站,例如银行、社交媒体或购物网站。有些看起来明显是假的,公司的标志模仿得很差,语法也很糟糕,而其他一些则极其难以与合法页面区分。幸运的是,近年来许多浏览器在安全性方面有所改进,现在通过显示警告(如图 8-5 中的警告)来使网络钓鱼攻击变得更加困难。

图 8-5:网络钓鱼警告
然而,即使没有这些警告,大多数网络钓鱼攻击也会失败,除非目标在被伪造的网站上有账户;比如没有 MyBank 银行账户的人不会轻易上当,点击一个伪造的 MyBank 银行网站。即便目标确实拥有账户,现如今人们对银行或其他网站的未经请求的电子邮件也变得更加谨慎。总体而言,网络钓鱼攻击依赖于接收者对细节的不关注,因此其成功率仍然较低。
为了提高成功率,攻击者可能会转向鱼叉式钓鱼,即针对特定公司、组织或个人的定向攻击。鱼叉式钓鱼攻击需要进行高级侦察,以便信息看起来像是来自目标信任的人,例如人力资源人员、经理、公司 IT 支持团队、同事或朋友。
虽然普通的网络钓鱼攻击可能显得笨拙且构建不良,旨在欺骗大池中的小部分接收者,但鱼叉式钓鱼攻击则采取了相反的策略。例如,鱼叉攻击者通常会发送干净的电子邮件,包含预期的标志、图形和签名区块,并且他们会伪装任何恶意链接。如果攻击的目的是窃取某个网站或服务的凭证,攻击者甚至可能使用刚刚窃取的凭证将目标登录到真正的网站,从而不会留下错误信息或会话断开,令目标察觉到有异常发生。
尾随攻击
物理尾随攻击,或称搭便车攻击,是指通过跟随某人进入一个受控的访问点,例如安全门,而不是使用通常需要的凭证、徽章或钥匙。被授权的人可能故意或无意地让你进入。
尾随行为几乎发生在任何使用技术访问控制的地方,部分原因是授权用户的疏忽,部分原因是大多数人倾向于避免对抗。一些设备技巧,例如知道使用哪些道具,以及利用心理学让攻击者能够利用他人的同情心,将有助于他们进行尾随攻击。
社会工程学的进一步资源
访问 Chris Hadnagy 的官网 www.social-engineer.com/ 以及他那本出色的书《社会工程学:人类黑客的科学》,了解更多关于社会工程学的信息。Hadnagy 在这方面的讲解要比我在这里讲的更为深入,关于社会工程学攻击能够做什么,他有更详细的讨论。
建立安全意识与安全培训计划
为了保护你的组织,你需要通过实施安全培训计划来提高用户的安全意识。这些计划通常包括在新员工入职时进行的由讲师主导或计算机支持的课程,并辅以强制性的小测试。你还可能会定期重复这些培训,以确保员工记住相关信息。
本节概述了你在这些培训计划中通常应该涵盖的一些主题。
密码
虽然你可以使用技术工具来确保用户选择强密码,但你无法轻易控制用户如何使用这些密码。例如,一名员工可能会把自己的密码写下来并粘贴在键盘底部,或者为了方便而与其他用户共享密码。
另一种有害行为是为多个账户使用相同的密码。即使你强制要求用户在工作场所的系统上创建强密码,用户也可能手动将组织中所有其他系统的密码同步为相同密码(包括他们的虚拟私人网络凭证,允许外部访问组织网络),然后回家后再用相同的方式同步他们的互联网论坛凭证、电子邮件和在线游戏密码,以便让生活更轻松。不幸的是,如果攻击者破坏了他们论坛的密码数据库,并发布了用户的电子邮件地址和解密后的密码,攻击者就可以获取大量令人不安的信息——可能包括用户发到家庭地址的公司 VPN 连接说明。
不幸的是,糟糕的密码管理问题是一个难以通过技术手段解决的问题,而教育是解决这个问题的最佳方法之一。你应该推动用户即使在没有被直接强制的情况下,也创建强密码,告诉他们不要将密码放置或记录在可能被轻易破解的地方,并要求他们不要在多个系统或应用程序中反复使用相同的密码。
社会工程学培训
训练用户识别并应对社会工程学攻击是一个非常艰巨的任务,因为这类攻击利用了我们的行为规范和倾向。幸运的是,公众对钓鱼邮件和诈骗的认知逐渐提高。
广泛来说,你应该教导用户对任何看起来不寻常的事情保持怀疑,包括邮箱中不典型的请求或邮件以及工作环境中的陌生人,即使这些情况看起来包裹在一层正常性中。
当面对丝毫疑虑时,要要求人们信任但要验证。你的用户可能会向你的安全操作中心发送大量电话和电子邮件,但至少他们不会把几千美元汇给一个自称是公司副总裁的人,声称自己在出差时被抢劫并急需资金回国。
网络使用
你应该与用户讨论正确的网络使用方式。正如我将在第十章中讨论的那样,今天人们可以访问各种网络,包括从工作场所相对受限的网络到家庭、咖啡馆和机场等开放网络。
一个没有安全意识的用户可能会认为在工作时将笔记本连接到会议室的网络与在酒店连接无线网络是一样的,这同样也等同于在机场连接网络。通常,人们把访问网络看作和使用任何公用设施一样,像是墙插提供的电力或灯具发出的光一样;他们期望它随时存在并且按预期工作。除此之外,大多数人对网络中存在的风险并不会过多思考。
你应该引导用户采取能保护企业网络的行为。这意味着你通常不应允许外部设备连接到网络。用户需要知道他们不能允许供应商在会议室插入设备,也不能将自己的 iPad 连接到生产网络。例如,你应该提供一个适当的备用网络供外部设备使用,如访客无线网络,并确保用户知道如何连接它,以及在使用时的相关限制。
此外,你应该限制在外部网络上使用公司资源,这是许多组织长时间以来严重受损的问题。如果你将敏感数据装载在笔记本电脑中,然后连接到当地咖啡店或酒店的网络,你可能会不小心将这些数据分享给网络中的其他人。
解决这个问题的一个简单技术方案是实施一个 VPN,允许用户访问公司网络。你应该配置 VPN 客户端,使其在发现自己连接到外部网络时自动连接到 VPN。此外,你还应教导用户避免将包含敏感信息的设备连接到不安全的网络。
恶意软件
教育用户关于恶意软件的知识通常包括教他们不要随便点击东西。当他们浏览网页、打开电子邮件附件、浏览社交网络和使用智能手机时,他们应该注意以下常见的警告信号:
-
来自陌生人的电子邮件附件
-
包含潜在可执行文件类型的电子邮件附件,这些文件可能包含恶意软件,如 EXE、ZIP 和 PDF
-
使用缩短网址的网页链接,如
bit.ly/(如果有疑问,用户可以使用像linkexpander.com/或unshorten.me/这样的工具验证缩短网址的目标地址) -
网页链接的名称与预期稍有不同(例如,myco.org 而不是 myco.com)
-
从非官方下载站点下载的智能手机应用
-
非法软件
如果你在用户心中植入一种健康的偏执感,他们会在点击可疑链接之前先打电话给你的帮助台或安全团队询问问题。
个人设备
你应该设定规则,规定员工何时以及如何在工作场所使用个人设备。通常,你可能允许他们在组织网络的边界上使用它;这意味着你允许他们带着笔记本电脑来上班,并将其连接到访客无线网络,但不能连接到与公司生产系统相同的网络。
你还应确保传达这些政策适用于能够连接到网络的设备,如供应商笔记本电脑或移动设备。
清洁桌面政策
清洁桌面政策规定,敏感信息不应长时间无人看管地放在桌面上,例如过夜或午休时。引入此类政策时,你还应该讨论如何妥善处理存储在物理介质上的敏感数据,如纸张或磁带,通过使用碎纸机、数据销毁服务和媒体粉碎机。
对政策和法规知识的熟悉度
最后,虽然重要性不言而喻,如果你希望用户遵守这些规则,你需要有效地传达这些规则。你可能无法通过仅仅向所有用户发送包含冗长政策链接的电子邮件,并让他们声明已经阅读过它,来真正教育他们。相反,你可以尝试将政策中最关键的部分浓缩成备忘录或要点摘要,确保用户能够记住重点。
此外,如果你正在制作培训演示文稿,可以尝试让它更加有趣。例如,如果你有一个小时的时间来为新员工进行安全意识培训,你可以将讲解部分缩短到 30 分钟,然后用剩下的时间进行一个互动的问答竞赛游戏,内容是你刚刚讲解的材料。一旦通过将班级分成小组并添加奖励(比如奖励给获胜者),你就创造了一个更有趣的环境。
你还可以通过海报、赠送钢笔或咖啡杯以及新闻通讯等方式吸引用户的注意。如果你通过反复且多样化的渠道传递信息,你更有可能在长期内教育用户。
总结
在本章中,你探讨了有关信息安全人类因素的各种问题:那些仅靠技术手段无法解决的安全问题。无论是由于疏忽还是针对性的社交工程攻击,组织中的员工都构成了一个安全挑战,而你无法通过技术控制直接应对这一挑战。
我讨论了社交工程攻击的类型,你也看到了攻击者如何利用这些技巧诱使人们在你的组织中提供信息或强迫进行未授权的行为。我还讲解了如何建立安全意识和培训项目。与用户讨论的常见问题包括保护密码、识别社交工程攻击和恶意软件、安全使用网络和个人设备,以及遵守清洁桌面政策。如果你让安全意识和培训项目具有吸引力,这些信息更有可能随着时间的推移在用户中留下深刻印象。
练习
-
为什么人是安全程序中的薄弱环节?
-
定义尾随行为。为什么这会成为一个问题?
-
如何更有效地在你的安全意识和培训工作中接触用户?
-
为什么不应该允许员工将个人设备连接到组织的网络?
-
如何训练用户识别钓鱼邮件攻击?
-
为什么不应该为所有账户使用相同的密码?
-
什么是预文本攻击?
-
为什么在酒店使用无线网络连接公司笔记本可能会很危险?
-
为什么点击来自bit.ly等服务的缩短网址可能会很危险?
-
为什么使用强密码很重要?
第九章:物理安全

本章将讨论物理安全,即我们为保护人员、设备和设施所采取的安全措施。在大多数地方,你会看到如锁、围栏、摄像头、保安和照明等物理安全措施。在高安全级别的环境中,你可能还会注意到虹膜扫描仪、人陷阱(需要你通过两个锁定的门才能进入建筑,类似于具有两个入口的电话亭)或配备存储证书功能的身份证件。
物理安全涉及保护三大类资产:人员、设备和数据。你的首要目标当然是保护人员。人员本身就具有很高的价值,而且比设备或数据更难替代,尤其是当他们在自己的领域有经验并且对他们所执行的过程和任务非常熟悉时。
尽管在本章中我将把人员、数据和设备的保护作为独立的概念进行讨论,但每一类的安全都是紧密相连的。你通常不能——也不应该——制定单独保护任何一类资产的安全计划,而忽略其他类别的安全。
许多大型组织通过实施一套政策和程序来保护他们的资产,这些措施统称为业务连续性规划(BCP)和灾难恢复规划(DRP)。业务连续性规划指的是在紧急状态下确保关键业务功能能够继续运作的计划。灾难恢复规划指的是为潜在灾难做准备的计划,包括灾难发生时及之后该做什么,如设施内的撤离路线图或显示撤离集合地点的标识。
识别物理威胁
然而,在实施任何物理安全措施之前,你必须首先识别威胁。物理安全威胁通常分为几个主要类别,如图 9-1 所示。

图 9-1:物理威胁的类别
Donn Parker 在他的书《打击计算机犯罪》中定义了七种物理威胁类别——极端温度、气体、液体、活体生物、抛射物、运动和能量异常,并在书中介绍了第一章中讨论的 Parkerian 六元组。(尽管这本书是在十多年前写的,我仍然认为它是安全从业者的必读书籍。)
在本章关于保护人员、设备和数据的各个部分中,我将讨论这些威胁如何影响每个资产(如果有影响的话)。
物理安全控制
物理安全控制是你为确保物理安全而采取的设备、系统、人员和方法。物理控制主要有三种类型:威慑性、侦测性和预防性。每种类型的关注点不同,但它们之间并非完全独立,稍后我会讨论这一点。此外,这些控制措施在协同作用下效果最佳。在大多数情况下,单一的控制措施不足以确保你的物理安全。
威慑性控制
威慑性控制旨在劝阻那些可能试图违反其他安全控制的人,通常它们会显示其他安全措施的存在。威慑性控制的例子包括在公共场所张贴的标志,宣称有视频监控的存在,以及在住宅区使用的带有报警公司标志的院子标志,如图 9-2 所示。

图 9-2:威慑性控制
这些标志本身并不能阻止人们采取不当行为,但它们确实指出了采取不当行为可能带来的后果。这些措施有助于让诚实的人保持诚实。
侦测性控制
侦测性控制,如防盗报警器和其他物理入侵检测系统,用于感知并报告不良事件。这些系统通常会检查是否存在未经授权的活动迹象,如门窗开启、玻璃破裂、运动和温度变化。你还可以使用它们检查不良的环境条件,如洪水、烟雾和火灾、电力中断或空气中的污染物。
侦测性系统也可以包括人类或动物守卫,无论他们是亲自巡逻区域,还是通过摄像头或其他技术设备间接监控,如图 9-3 所示。

图 9-3:侦测性控制
使用守卫进行监控既有优点也有缺点。与技术系统不同,生物体可能会分心,而且他们需要离开岗位去吃饭和上厕所。另一方面,守卫能够做出推理和判断,这使得他们在某些情况下比技术解决方案更高效或更具洞察力。
预防性控制
预防性控制使用物理手段来阻止未经授权的实体突破你的物理安全。机械锁是预防性安全的一个极佳示例,因为它们几乎在所有地方都被用来保护企业、住宅和其他地方免受未经授权的进入,如图 9-4 所示。

图 9-4:预防性控制
其他预防性控制包括高围栏、防撞柱,以及再次提到的守卫和警犬,它们既是侦测性也是预防性控制。这些控制可能专门针对人员、车辆或其他关注区域,具体取决于环境。
使用物理访问控制
预防性控制通常构成我们安全工作核心。在某些情况下,它们可能是唯一的物理安全控制。例如,许多房屋有门锁,但没有报警系统或能够威慑犯罪分子的消息。
在商业设施中,您更有可能看到实施所有三种控制方式,通常包括锁具、报警系统和指示报警系统存在的标志。遵循深度防御原则,您设置的物理安全层次越多,您就越安全。
您还应实施与资产价值相一致的物理安全级别,正如第七章所讨论的。如果您有一个空仓库,用高安全性锁、报警系统和武装警卫来保护它是没有意义的。同样,如果您有一屋子的昂贵计算机和电子设备,用便宜的锁而完全放弃报警系统也是不合适的。
保护人员
物理安全主要旨在保护那些维持您业务运转的人员。在许多情况下,您可以通过备份恢复数据,如果旧设施被毁坏或损坏,您可以建立新的设施,购买新的设备,但在合理时间内更换经验丰富的人员是困难的,甚至是不可能的。
人员的物理问题
与设备相比,人员相对脆弱。他们容易受到图 9-1 中列出的几乎所有物理威胁的影响。
极端温度,甚至是非极端的温度,也可能迅速变得不舒适,某些液体、气体或毒素的存在或缺失也可能带来不适。甚至是水,过量也能造成伤害,就像 2018 年佛罗伦萨飓风期间美国南部发生的大规模洪水。
同样,缺乏氧气等气体,或者氧气过多,也会很快对人类造成致命危险。某些化学品在小剂量用于过滤设施中的水时对我们有益,但如果化学比例或混合物发生变化,它们则会变得有害。
各种生物,从较大的动物到几乎看不见的霉菌、真菌或其他微观生物,都可能对人类构成危险。动物可能咬伤或刺伤人;霉菌可能引起呼吸问题。
显著的运动对人类有害,特别是当这种运动来自地震、滑坡、雪崩或建筑物的结构问题时。能量异常也对人类极具危险性。例如,设备的屏蔽或绝缘维护不当,或机械或电气故障,可能使人暴露于微波、电流、无线电波、红外线、辐射或其他有害辐射中。这些暴露的后果可能在电击的情况下立即显现,或者在辐射情况下可能具有长期影响。
其他人可能是对人类构成的最严重威胁之一。有人可能会在黑暗的停车场攻击你的员工。在某些地区,你可能会遇到社会动荡。你可能会成为社会工程攻击的目标,正如在第八章中讨论的那样,攻击者从你的员工那里提取信息,以获得未经授权的进入设施或数据的权限。
烟雾和火灾可能会导致灼伤、烟雾中毒和温度问题(通常情况下,人们在过热时会表现不佳)等其他问题。特别是在大型设施中,烟雾和火灾可能使区域的物理布局变得混乱,难以引导人员安全撤离。如果你的供应品、基础设施或建筑本身因高温而反应并释放毒素、倒塌或产生本节中讨论的其他威胁,问题可能会加剧。
确保安全
由于许多数据中心使用危险化学品、气体或液体来扑灭火灾,设施管理员通常会为灭火系统配备安全覆盖装置,以防止在区域内有人的情况下系统启动。这些措施优先保护人命安全,而非设备和数据。
撤离
同样,在紧急情况下,你应当优先考虑撤离人员,而不是抢救设备。规划撤离程序是确保人员安全的最佳方法之一。规划撤离时需要考虑的主要原则是“哪里”、“如何”和“谁”。
哪里
提前考虑你将撤离到哪里。你需要将所有人带到同一个地方,确保他们远离危险区域,并且可以清点到每个人。如果你没有有序且一致地进行撤离,可能无法确保每个人的安全。商业建筑通常会通过标志和撤离地图展示撤离集结地点。
如何
同样重要的是你将要走的路线,目的地是撤离集结地点。在规划路线时,你需要考虑每个区域最近的出口位置,以及在紧急情况下可能被封堵的备用通道。你还应该避免经过任何潜在危险或无法使用的区域,如电梯或被自动关闭防火门封锁的房间。
谁
撤离过程中最重要的部分,当然是确保将每个人都带出建筑,并确保能在撤离集结地点清点到每一个人。这个过程通常需要至少两个人:一个人确保小组中的每个人都已离开场地,另一个人在集结地点确保每个人安全到达。
演练
尤其在大型设施中,全面撤离可能是一项复杂的任务。在真正的紧急情况下,如果你没有迅速而妥善地撤离,可能会导致大量人员伤亡。
举个例子,考虑 2001 年美国世界贸易中心的袭击。2008 年进行的一项研究发现,只有 8.6%的人员在警报响起时从大楼中撤离。其余人员则留在原地,收拾物品,关闭计算机,执行其他任务。¹ 训练人员在发出撤离信号时迅速并正确地做出反应是非常重要的。
行政控制措施
大多数组织还会采取各种行政控制措施来保护人员安全。行政控制措施可能是由任何权威机构(从公司到联邦政府)制定的政策、程序、指南、法规、法律或类似的规则。
一项常见的行政控制措施是公司使用背景调查来筛选潜在的求职者。这些调查通常包括刑事历史检查、对以前工作和教育经历的核实、信用检查以及药物测试,具体取决于所申请的职位。
公司还可能对员工进行各种定期检查,如药物测试。当员工离职时,雇主通常会进行离职面谈,以确保员工已经归还所有公司财物,并撤销其对系统或区域的访问权限。公司还可能要求员工签署文件,同意不对公司提起法律诉讼,或签署额外的保密协议(NDA)。
保护数据
仅次于人员安全的是数据安全。如第五章中所述,保护数据的主要方式是加密。然而,单靠加密并不足够;攻击者可能通过破解加密算法或获取加密密钥来访问数据。此外,加密不能保护数据免受各种物理条件的影响。
遵循第一章中讨论的深度防御概念,您应当增加额外的安全层,以保护您的物理存储介质免受攻击者、不利环境条件和其他威胁的影响。
数据的物理保护
不利的物理条件,包括温度变化、湿度、磁场、电力和物理冲击,可能会损害物理介质的完整性。此外,每种物理介质都有其优缺点。
磁介质,如硬盘、磁带和软盘,利用运动和磁感应材料的结合来记录数据。强磁场可能会破坏存储在磁介质上的数据完整性,尤其是当介质缺乏金属外壳时,比如磁带。此外,在磁介质运动时(读取或写入时)遭遇震动,可能会导致介质无法使用。
闪存媒介,或将数据存储在非易失性存储芯片上的媒介,更加坚固。如果避免对存储数据的芯片造成直接的冲击,并且保护这些芯片免受电击,它们通常能承受许多其他类型的媒介无法忍受的条件。它们对温度的敏感性较低,只要温度不至于破坏媒介的外壳,它们通常能承受短时间的液体浸泡,只要事后 properly 风干。一些闪存驱动器专门设计为能够在通常会摧毁其他媒介的极端条件下生存。
光学媒介,如 CD 和 DVD,非常脆弱,任何有小孩的人都可以证明这一点。即使是光盘表面上的小划痕,也可能导致它无法使用。它还对温度极为敏感,因为它主要由塑料和薄金属箔制成。在没有保护的环境中,比如专门设计的媒体存储库,各种威胁可能会摧毁光学媒介。
在长时间存储媒介时,你应该考虑技术过时的问题。例如,索尼在 2011 年 3 月停止生产软盘。在此之前,该公司生产了 70%的新软盘。²如今,几乎没有新电脑配备读取软盘的驱动器,在不久的将来,找到能读取这些磁盘的硬件将变得非常困难。
数据的可访问性
你不仅要保护数据的物理完整性,还必须确保在需要访问数据时,数据是可用的。这通常意味着你的设备和设施必须保持正常工作状态,并且存储数据的媒介必须可用。任何我提到的物理问题,都可能导致你的数据既无法访问,又无法使用。
一些可用性问题与基础设施有关。例如,在停机期间,无论是网络、电力、计算机系统或其他组件出现问题,你可能无法远程访问你的数据。如今,许多企业在全球运营,因此即使是短时间无法远程访问数据,也可能带来严重的影响。
为确保数据的可用性,备份数据本身以及提供访问数据所需的设备和基础设施。使用冗余阵列的廉价磁盘(RAID),或 RAID 阵列,以各种配置进行备份。RAID 是一种将数据复制到多个存储设备上的方法,用以保护数据,以防任何一个设备被摧毁。你可以在计算机协会(ACM)数字图书馆中阅读描述基本概念的原始论文《冗余阵列的廉价磁盘(RAID)的理由》。³
你还可以通过网络将数据从一台机器复制到另一台机器,或者将数据复制到备份存储媒介上,如 DVD 或磁带。
残留数据
另一方面,在你需要数据时能够访问它,你也必须能够在不再需要时使数据无法访问。例如,你可能会记得在扔掉含有敏感数据的纸张之前将其销毁。但人们经常忘记电子媒介上存储的数据。
在 2016 年,Blancco 对从 eBay 和 Craigslist 购买的 200 个二手硬盘进行了研究。当研究人员分析这些磁盘的内容时,他们发现许多磁盘仍然包含敏感数据,包括公司信息、电子邮件、客户记录、销售数据、图片和社会保障号码。在许多情况下,根本没有人尝试擦除磁盘上的数据;而在其他情况下,数据擦除的操作也非常不彻底。⁴
除了明显含有存储并持有潜在敏感数据的设备外,你可能还会在复印机、打印机和传真机等设备中发现残留数据,这些设备可能包含易失性或非易失性的内部存储,通常是硬盘的形式。在硬盘中,你可能会找到处理过的文件副本,包括敏感的商业数据。当你将这些设备退役或送修时,务必从存储介质中删除数据。
保护设备
最后,保护你的设备和存放它们的设施。这个类别排在最后,因为它代表了最容易和最便宜的资产部分。如果一个重大灾难摧毁了你的设施和里面的所有计算设备,只要你仍然有员工来运营你的工作并能够访问关键数据,你很快就能恢复工作状态。
尽管恢复到事件发生前的状态可能需要一些时间,但你通常可以相对轻松地更换地面空间或迁移到附近的其他区域,而计算设备既便宜又充足。
设备的物理问题
与员工或数据相比,你会发现对设备的物理威胁要少一些,尽管它们仍然很多。
极端温度——特别是高温——可能会损害你的设备。在包含大量计算机及相关设备的环境中,我们依赖环境调节设备来将温度保持在合理范围内,通常是华氏 60 多度到 70 多度之间。(专家们仍在争论理想的温度范围。)
液体,即使是少量的液体,比如潮湿空气中的水分,也可能会损坏设备。根据液体的种类和数量,它可能会导致多种设备腐蚀、电子设备短路以及其他有害影响。显然,在像洪水这样的极端情况下,任何被浸泡的设备往往会变得完全无法使用。
生物体也可能损坏设备,尽管方式较为轻微。设施中的昆虫和小动物可能会引起电气短路,干扰冷却风扇,啃咬电线,并总的来说造成破坏。
别打扰我
人们在 1947 年 9 月开始使用bug这个词来表示计算机系统中的问题,当时有人发现一只飞蛾在系统中短接了两个连接,导致系统故障。当工作人员移除这只飞蛾时,他们描述该系统已经被调试过了。⁵你可以在图 9-5 中看到这个实际的“bug”。

图 9-5:第一只计算机虫
运动,无论是地球内部还是设施的结构中,都可能对设备造成损害。地震是这种情况的明显例子。能量异常对任何类型的电气设备都可能极其有害,特别是当电源缺失或提供错误电压时。良好的设施设计可以提供一些对这些威胁的保护,但通常你无法缓解严重电气问题的影响,如雷击。
烟雾和火焰对你的设备有害,因为它们会引入极端温度、电气问题、运动、液体(电子设备通常在潮湿状态下无法正常工作)以及各种其他问题。扑灭火灾的努力,根据所采用的方法,可能会造成与火灾本身一样严重的损害。
选址
在规划新设施时,要考虑设施的位置。如果该地点位于易发生自然灾害的区域,最终你可能会发现设施完全无法使用或被摧毁。其他环境威胁可能包括社会动荡、不稳定的电力或公用设施、差的网络连接,或者极端的温度条件。
通过合理的设施设计,你可以通过安装电源过滤器和发电机来弥补一些问题,例如应对电力问题。但其他问题,比如当地温度,最终可能超出我们的控制范围。对于某些类型的设施,如数据中心,保持无故障的环境至关重要,如果遇到严重的环境问题,你可能需要考虑其他地方。
保护访问
在保护设备或设施的访问时,可以通过在设施内部和外部多个区域采取安全措施,运用深度防御的概念。再次强调,实施的防护措施的适当性取决于具体情况。军事设施可能会有最高级别的安全;而一个小型零售店可能只有最低级别的安全。
通常,你会在物业周围看到实施的物理安全措施。最基本的措施可能会控制车辆流量,以确保它不会进入不希望进入的地方。例如,这可以采取安全景观的形式,包括树木、大石块和水泥花坛,放置在建筑物前或车道旁,防止车辆进入。更安全的设施可能还会有围栏、混凝土屏障以及其他更明显的措施。这些控制措施通常是威慑性的,但也可能是预防性的。
设施的入口处很可能会有锁,无论是机械锁还是电子锁,建筑物的门上都会装上。对于非公共建筑,通常的安排是在工作时间保持主入口解锁,并在内部安排保安或接待员。更安全的设施可能会始终保持门锁,并要求佩戴徽章或钥匙才能进入建筑物。
一旦进入设施,物理访问控制可能包括对内部门或建筑物各楼层的上锁,以防止访客或未经授权的人自由进入整个设施。通常,设施会限制对计算机房或数据中心的访问,仅限于那些出于业务需要必须进入的人。你还可能会在这些区域看到更复杂的物理访问控制,例如生物识别系统。
环境条件
当谈到设施内部的设备时,保持适当的环境条件对于持续运营至关重要。计算设备对电力、温度和湿度的变化,以及电磁干扰都非常敏感。在设备数量较多的区域,保持适当的条件至少可以说是具有挑战性的。
建造这些设施的人通常会为其配备紧急电力供应源,如发电机,以及可以根据需要调节温度、湿度并进行加热和冷却的系统。不幸的是,这些控制措施成本较高,较小的设施可能无法适当配备。
总结
在本章中,你学会了如何使用威慑、侦测和预防措施来减轻物理安全问题。威慑措施旨在阻止可能违反你安全的人,侦测措施会提醒你潜在的入侵,预防控制措施则从物理上阻止入侵发生。这些控制措施本身并不是一个完整的解决方案,但它们结合起来可以让你站在更坚实的立场上。
保护人员应该是你在物理安全中的首要关注点。尽管你通常可以替换数据和设备,但你无法替换人员。保护人员的最好方法之一是迅速将他们从危险的情境中移除。你还可以实施各种行政控制措施,确保他们在工作环境中的安全。
保护数据应该是技术型企业的下一个优先事项。确保在需要时能够访问你的数据,并且当不再需要时,它被完全删除。通过保持备份来确保数据的可用性,无论是使用 RAID 保护存储介质故障,还是使用可移动设备,如 DVD 或磁带。
保护你的设备,尽管是你优先级最低的任务,但仍然是一个至关重要的任务。在选择设施的位置时,考虑相关威胁并采取措施缓解它们。采取必要的步骤来保护设施内外的访问权限。最后,保持适合设备的环境条件。
练习
-
物理安全的三个主要问题是什么,按重要性排序?
-
物理安全措施的三种主要类型是什么?
-
为什么你可能想使用 RAID?
-
物理安全最重要的关注点是什么?
-
你可能会采取什么类型的物理访问控制来阻止对车辆的访问?
-
能否举出三个作为威慑手段的物理控制的例子?
-
能否举例说明一个生物体如何可能构成对你设备的威胁?
-
哪一类物理控制可能包括锁具?
-
什么是残留数据,为什么在保护数据安全时它是一个值得关注的问题?
-
你保护人员的主要工具是什么?
第十章:网络安全

计算机网络是一组互相连接的计算机或其他设备,用于便于共享资源。你很可能依赖多种网络来进行日常操作。网络控制并使现代汽车、飞机、医疗设备、冰箱以及无数其他设备得以运行。网络让你能够进行通信、导航道路系统、上学、玩游戏、看电视和听音乐。如果没有一个安全稳定的网络系统,你日常享受的许多便利将变得非常难以使用,甚至完全无法使用。
你的网络可能会面临攻击者的威胁;它们也可能遭遇基础设施或网络设备配置错误,甚至是简单的故障。全球大多数地区都依赖网络,因此失去网络连接及其提供的服务可能会让你陷入困境。最严重的情况是,它可能会摧毁你的业务。
2017 年 1 月,喀麦隆的社会动荡达到了高潮,因大规模抗议活动爆发,抗议焦点是法语在一个官方语言为法语和英语的国家中的主导地位。为了遏制抗议者,政府故意将该国大部分以英语为主的地区从全球网络中断开,使其无法连接互联网。这些地区在 93 天后才恢复了网络连接。¹ 这种类型的故障可能会对各行各业产生深远的影响,破坏医疗、通信、就业、教育、购物以及人们生活的许多其他方面。
尽管喀麦隆的情况可能是一个极端例子,但全球每天都发生着较小的网络故障和其他故障,造成严重的影响。这些问题有些可能源于技术故障。其他可能源于本章中我将讨论的特定分布式拒绝服务攻击(DDoS 攻击)(来自多个分布式来源的 DoS 攻击),或是完全由网络用户未知的临时原因造成。
本章将介绍你可以部署的基础设施和设备,用于保护你的网络安全,以及你可以用来保护网络流量本身的方法。你还将了解一些工具,帮助你验证安全性。
保护网络
你可以使用两种方法来保护你的网络和网络资源。一个选项是通过安全设计网络结构,使其对攻击或技术故障具有抗性。你还可以在网络中及周围部署各种设备,如防火墙和入侵检测系统。
设计安全的网络
通过正确设计网络,你可以完全防止某些攻击,减轻其他攻击的影响,并且在失败时优雅地应对。
减少攻击影响的一个策略是网络分段。当你进行网络分段时,你将网络划分为多个较小的网络,称为子网。你可以控制子网之间的流量流动,根据不同的因素来允许或禁止流量,必要时甚至可以完全阻止流量流动。合理分段的网络可以通过将某些流量限制在需要访问的网络部分内来提升网络性能,同时还可以帮助你局部化技术性网络问题。此外,网络分段可以防止未经授权的网络流量或攻击进入特别敏感的网络部分。
你还可以通过将流量引导到瓶颈点来保护你的网络,瓶颈点是你可以检查、过滤和控制流量的位置。瓶颈点可能是将流量从一个子网转移到另一个子网的路由器,过滤流量的防火墙,或者为像网页或电子邮件等应用过滤流量的应用代理。我将在本章的下一节中详细讨论这些设备。
在设计网络时创建冗余可以帮助缓解问题。某些技术故障或攻击可能会导致部分技术设备(包括网络、网络基础设施设备或如防火墙等边界设备)无法使用。例如,如果你的某个边界设备遭受了 DDoS 攻击,你无法做太多来阻止它。然而,你可以切换到不同的互联网连接或通过不同的设备路由流量,直到找到一个长期的解决方案。
使用防火墙
防火墙是一种用于控制进出网络流量的机制。讨论这一理念的第一篇论文是由 Jeffrey Mogul 于 1989 年撰写的《简单而灵活的数据报访问控制》²,当时他在数字设备公司(Digital Equipment Corporation)工作。1992 年,数字设备公司创建了第一款商业防火墙——DEC SEAL³。
通常,你会将防火墙放置在信任级别变化的地方,比如内部网络和互联网之间的边界,如图 10-1 所示。你也可以在内部网络上安装防火墙,防止未经授权的用户访问敏感性质的网络流量。

图 10-1:防火墙放置
目前许多防火墙通过检查数据包(数据块)在网络中流动来决定哪些应该允许进出。它们的决策依据有多种因素。例如,它们可能根据所使用的协议来允许或拒绝流量,让网页和电子邮件流量通过,但阻止其他一切。我将在本节中介绍防火墙的类型。
包括过滤
数据包过滤是一种最古老和最简单的防火墙技术,防火墙会查看流量中每个数据包的内容,并根据源和目标 IP 地址、端口号以及所使用的协议来决定是否允许或拒绝该数据包。
由于数据包过滤防火墙会逐个检查数据包,而不是与构成流量的其他数据包一起考虑,因此攻击者可以通过发送跨越多个数据包的攻击流量,绕过这种类型的防火墙。为了发现这些攻击,你需要采用更复杂的检测方法。
有状态数据包检查
有状态数据包检查防火墙,或称有状态防火墙,基于与数据包过滤防火墙相同的基本原理,但它们可以在更细粒度的层面上跟踪流量。数据包过滤防火墙检查单个数据包时没有上下文,而有状态防火墙可以监控特定连接上的流量。连接由源和目标 IP 地址、使用的端口以及已存在的网络流量定义。
有状态防火墙使用状态表来跟踪连接状态(流量的正常顺序),只允许属于新连接或已建立连接的流量通过。这有助于防止一些有意破坏的攻击流量,因为它们不像正常的、预期的连接。大多数有状态防火墙也可以作为数据包过滤防火墙使用,且它们通常将两种过滤方式结合使用。除了数据包过滤功能外,有状态防火墙还可以识别并跟踪与用户发起的连接相关的流量,如连接到网站时的流量,并且它们会知道连接何时关闭,这意味着不会再有合法的流量。
深度数据包检测
深度数据包检测防火墙为你的防火墙功能增加了另一层智能,因为它们可以分析流经它们的流量的实际内容。虽然数据包过滤防火墙和有状态防火墙只能查看网络流量的结构来过滤攻击和不良内容,但深度数据包检测防火墙可以重新组装流量内容,以查看它将交付给哪个目标应用程序。
使用一个类比,当你寄送包裹时,快递公司会查看包裹的大小、形状、重量、包装方式以及寄件和收件地址。这通常是数据包过滤防火墙和有状态防火墙的工作方式。而在深度数据包检测中,快递公司不仅会查看这些内容,还会打开包裹,检查其内容,然后判断是否继续运输。
尽管该技术在阻止许多攻击方面有很大的潜力,但它也引发了隐私问题。理论上,控制深度包检测设备的人可以读取你的每一封电子邮件消息,看到你所看到的每一个网页,并且轻松监听你的即时消息对话。
代理服务器
代理服务器是一种专门针对应用程序的防火墙。这些服务器提供安全性和性能特性,通常用于邮件或网页浏览等应用程序。代理服务器可以通过充当瓶颈点,为其后面的设备提供一层安全保护,并允许你记录通过它们的流量以便稍后检查。它们是请求的唯一来源。
许多公司依赖代理服务器来阻止垃圾邮件进入用户的电子邮件帐户,减少工作效率,防止员工访问可能含有不良内容的网站,并过滤可能表明存在恶意软件的流量。
DMZ
非军事区(DMZ)是一种保护层,用于将设备与网络的其他部分分隔开来。你可以通过使用多个防火墙层来实现这一点,如图 10-2 所示。在这种情况下,面向互联网的防火墙可能允许流量通过,连接到位于 DMZ 中的 Web 服务器,但内部防火墙则不会允许来自互联网的流量访问内部服务器。

图 10-2:DMZ
DMZ 创建了一个区域,允许外部访问面向公众的服务器,同时为这些服务器提供一定程度的保护,并限制这些服务器的流量渗透到网络中更敏感的部分。这有助于防止攻击者入侵你的面向公众的服务器,并利用它们攻击位于其后面的其他服务器。
实施网络入侵检测系统
入侵检测系统(IDS) 是监控网络、主机或应用程序是否存在未经授权活动的硬件或软件工具。你可以根据它们检测攻击的方式将 IDS 分类:基于签名的检测和基于异常的检测。
基于签名的 IDS 像大多数防病毒系统一样工作。它们维护一个可能表示攻击的签名数据库,并将传入的流量与这些签名进行比较。通常,这种方法效果良好——除非攻击是新的,或者专门设计成不匹配现有的攻击签名。该方法的一个大缺点是,如果你没有针对该攻击的签名,可能根本不会发现它。此外,攻击者可能可以访问与你使用的 IDS 工具相同的工具,并且可能能够测试攻击,以特意避开你的安全措施。
基于异常的 IDS通常通过确定网络上发生的正常流量和活动类型来工作。然后,它们将当前的流量与此基线进行比较,以检测流量中不常见的模式。此方法可以很好地检测新型攻击或特意设计来避开 IDS 的攻击。另一方面,它可能会比基于签名的 IDS 产生更多的误报,因为它可能会标记那些引起不寻常流量模式或流量激增的合法活动。
当然,你可以安装一个同时使用基于签名和基于异常的 IDS,从而获得每种检测类型的一些优点。这种方式能够更可靠地检测攻击,尽管可能会稍微慢一些,导致检测延迟。
通常,你会将网络 IDS 安装在一个能够监控经过流量的位置,但需要小心放置,以免流量量过大导致 IDS 过载。将网络 IDS 放置在其他过滤设备(如防火墙)之后,可以去除一些明显的不需要的流量。
由于网络 IDS 通常检查大量流量,它们一般只能对流量进行相对粗略的检查,可能会漏掉一些类型的攻击,尤其是那些专门设计来绕过此类检查的攻击。数据包构造攻击使用带有攻击或恶意代码的流量包,但这些数据包的设计目的是避开 IDS、防火墙和其他类似设备的检测。
保护网络流量
除了保护你的网络免受入侵外,你还需要单独保护流经网络的流量。当你在不安全或不受信任的网络上传输数据时,窃听者可能会从你发送的数据中窃取大量信息。如果你使用的应用程序或协议没有加密它们发送的信息,你可能会不小心将你的登录凭证、信用卡号、银行信息和其他数据暴露给任何正好在监听的人。
攻击者可以从有线和无线网络中截取数据,通常只需很少的努力,这取决于网络的设计。尽管不安全的网络是一个安全问题,但如果你拥有正确的工具,它们并非无法克服的问题。
使用虚拟专用网络
虚拟专用网络(VPN)可以帮助你在不安全的网络上发送敏感流量。VPN 连接通常被称为隧道,它是两个节点之间的加密连接。你通常通过在一端使用 VPN 客户端应用程序,并在另一端使用一种叫做VPN 集中器的设备来创建连接——简单来说,就是客户端和服务器。客户端使用 VPN 客户端应用程序来对 VPN 集中器进行身份验证,通常通过互联网进行。一旦建立连接,通过连接到 VPN 的网络接口交换的所有流量都将通过加密的 VPN 隧道传输。
VPN 可以让远程工作人员访问其组织的内部资源;在这种情况下,工作人员的设备就像是直接连接到组织的内部网络一样。
你还可以使用 VPN 来保护或匿名化你通过不受信任的连接发送的流量。像 StrongVPN 这样的公司(* strongvpn.com/ *)将其服务出售给公众,正是为了这样的目的。你可以使用这些 VPN 来防止你的互联网服务提供商记录你流量的内容,阻止同一网络中的其他人窃听你的活动,或隐藏你的地理位置并绕过基于位置的封锁。使用 P2P 文件共享服务分享盗版媒体的人,有时会通过 VPN 来隐藏他们的流量和 IP 地址。
通过无线网络保护数据
如果你使用无线网络发送数据,你将面临几种特定的安全风险。如今,许多地方提供免费的无线互联网接入。一般来说,公共无线网络通常没有设置密码或加密——这些措施通常是用来保护网络流量的机密性。即使在一些需要密码才能接入的网络中,比如酒店的网络,连接到该酒店网络的其他人也有可能看到你的数据。目前,未加放大器的 802.11 无线连接的最远距离大约是 238 英里。⁴
此外,有人可能在你不知情的情况下将无线设备连接到你的网络。未经授权的无线接入点,通常被称为恶意接入点,是一个严重的安全隐患。例如,如果你在禁止无线连接的区域工作,比如一个安全的政府设施,一些有心人可能决定带上自己的接入点并将其安装在桌子下,为附近的户外吸烟区提供无线接入。尽管他的动机可能是良好的,但他简单的行为可能已经使一整套精心设计的网络安全措施无效。
如果恶意接入点的安全性设置不当或完全没有安全性,原本出于良好意图设置接入点的人员,实际上会为在范围内的任何人提供一条直接进入网络的便捷通道,绕过了任何现有的边界安全措施。网络 IDS 可能会发现来自恶意接入点的活动,但不能保证一定会发现。更好的解决方案是仔细记录作为无线网络基础设施一部分的合法设备,并定期使用如 Kismet 之类的工具扫描是否有额外设备,稍后我会在本章中详细讨论这个工具。
对于你网络中合法和授权的设备,保护它们通过的流量的主要方法是加密。你可以将 802.11 无线设备使用的加密分为两大类:有线等效隐私(WEP)和 Wi-Fi 保护接入(WPA、WPA2 和 WPA3)。WPA3 是当前的标准。与其他常见的加密类型相比,WPA3 更容易配置客户端设备,并提供更强的加密,增强了对暴力破解攻击和窃听的保护。⁵
使用安全协议
保护数据的最简单和最有效的方式之一就是使用安全协议。许多常见的旧协议,比如用于文件传输的文件传输协议(FTP)、用于远程操作机器的 Telnet 协议和用于接收电子邮件的邮局协议(POP),在传输数据时并不安全。这些协议通常以明文(未加密的数据)在网络上传输敏感信息,如登录名和密码。任何在网络上监听的人都可以轻松获取这些协议传输的流量,从中窃取敏感信息。
许多不安全的协议都有安全的替代协议,正如我在第十三章中将详细讨论的那样。简而言之,你通常可以找到适用于你要传输的流量类型的安全协议。你可以使用安全外壳(SSH)代替 Telnet 进行命令行操作,也可以使用基于 SSH 的安全文件传输协议(SFTP)来代替 FTP 进行文件传输。
SSH 是一种非常实用的协议,用于保护通信,因为你可以通过它传输多种类型的流量。正如前面提到的,你可以用它进行文件传输和终端访问,此外,它还可以保护其他多种情况下的流量,比如远程桌面连接、通过 VPN 通信和挂载远程文件系统。
网络安全工具
你可以使用多种工具来提高你的网络安全性。攻击者依赖许多相同的工具来渗透网络,因此通过使用这些工具来查找你网络中的安全漏洞,你可以提前防止攻击者入侵。
目前市场上有大量的安全工具,其中许多是免费的或有免费的替代品。许多工具可以在 Linux 操作系统上运行,并且可能需要一些配置。幸运的是,你可以通过安装其中一种安全 Live CD 发行版来使用这些工具,这些 Linux 版本已经预配置了所有工具。一个知名的发行版是 Kali,可以从 www.kali.org/ 下载。
正如我在前面的章节中所讨论的,评估漏洞的关键是要进行彻底且定期的评估,以便在攻击者之前发现漏洞。如果你只是偶尔进行浅显的渗透测试,很可能无法捕捉到环境中所有存在的问题。此外,随着你更新、增加或移除各种网络硬件设备及其上运行的软件,环境中的漏洞也会发生变化。值得注意的是,你可能使用的大多数工具只会发现已知的问题。新出现的或未公开的攻击或漏洞,通常称为零日攻击,仍然可能会让你措手不及。
无线保护工具
正如我在本章前面所讨论的那样,能够通过无线设备访问你网络的攻击者,可能会绕过你精心规划的安全措施。如果你没有采取措施防止未经授权的无线设备,如流氓接入点,可能会在你的网络安全中留下一个大漏洞,而你却浑然不觉。
你可以使用几种工具来检测无线设备。最著名的工具之一叫做 Kismet,它可以在 Linux 和 macOS 上运行,也可以在 Kali 发行版中找到。渗透测试人员常用 Kismet 来检测无线接入点,甚至可以在它们隐藏得很好的情况下找到它们。
其他工具使你能够突破无线网络中使用的不同类型的加密。几种常见的工具,如 coWPAtty 和 Aircrack-NG,可用于破解 WEP、WPA 和 WPA2 加密。
扫描仪
扫描仪,作为安全测试和评估行业的主力工具,是硬件或软件工具,能够使你对设备和网络进行信息查询。你可以将扫描仪分为两大类:端口扫描仪和漏洞扫描仪。这些类型有时会重叠,具体取决于所使用的工具。
在网络安全中,人们倾向于使用扫描仪作为工具来发现环境中的网络和系统。一个著名的端口扫描工具是一个免费的工具,叫做 Nmap,网络映射器的缩写。尽管通常被认为是端口扫描器,Nmap 也可以用于在网络上查找主机,识别这些主机运行的操作系统,并检测任何开放端口上运行的服务的版本。
数据包嗅探器
网络或协议分析仪,也称为数据包嗅探器或简单的嗅探器,是一种可以拦截(或嗅探)网络上流量的工具。嗅探器会监听任何你的计算机或设备的网络接口能够看到的流量,无论你是否被设计为接收这些流量。
注意
Sniffer(大写的 S)是 NetScout(前身为 Network General Corporation)注册商标。我在本书中使用 sniffer 一词时,指的是通用意义上的嗅探器。
要使用嗅探器,你需要将其放置在网络中的一个位置,使其能够看到你想要嗅探的流量。在大多数现代网络中,流量被分割得如此之细,以至于你可能无法看到很多流量(除非是你自己机器上生成的流量)。这意味着你很可能需要访问更高级别的网络交换机,并且可能需要使用专用设备或配置来访问目标流量。
Tcpdump 是 1980 年代发明的经典嗅探器,它是一个命令行工具。它还具有一些其他关键功能,例如流量过滤功能。Tcpdump 仅在类 UNIX 操作系统上运行,但 Windows 系统可以运行该工具的版本,称为 WinDump。
以前被称为 Ethereal 的 Wireshark 是一个功能齐全的嗅探器,能够从各种有线和无线来源拦截流量。它具有图形界面,如图 10-3 所示,并包括许多过滤、排序和分析工具。它是当前市场上最受欢迎的嗅探器之一。

图 10-3:Wireshark
你还可以使用 Kismet,这个工具在本章之前讨论过,用于从无线网络嗅探流量。
数据包嗅探器也有硬件形式,例如 Fluke Networks 的 OptiView 便携式网络分析仪。尽管像这样的装备齐全的便携式分析仪可能提供一些好处,如增加的捕获能力和功能,但它们通常价格昂贵,远远超出了普通网络或安全专业人员的预算。
蜜罐
蜜罐是网络安全工具箱中的一种有些有争议的工具,它是一个系统,可以检测、监控,甚至有时干扰攻击者的活动。你可以配置它们故意展示假的漏洞或材料,使系统对攻击者具有吸引力,例如故意不安全的服务、过时且未打补丁的操作系统,或名为“顶级机密 UFO 文件”的网络共享。
当攻击者访问系统时,蜜罐在他们不知情的情况下监视他们的活动。你可以设置蜜罐为公司提供早期警告系统,发现攻击者的手段,或作为一个故意的目标来监控恶意软件在网络上的活动。
你还可以通过创建蜜罐网络(称为 honeynets)来扩展蜜罐的应用。蜜罐网络将多个蜜罐连接起来,具有不同的配置和漏洞,通常配有某种集中式的监控工具来监视网络中所有蜜罐的活动。蜜罐网络特别有助于理解大规模的恶意软件活动,因为你可以复现多种操作系统和漏洞。
关于蜜罐和蜜网的更多信息,Honeynet Project是一个极好的资源,网址是www.honeynet.org/。Honeynet Project 提供了各种资源,包括软件、研究成果和大量关于这一主题的论文。
防火墙工具
在你的网络工具包中,你可能还会发现包含可以绘制防火墙拓扑图并帮助你找到防火墙漏洞的工具会很有用。Scapy (github.com/secdev/scapy/)是一个广为人知且有用的工具,适用于此类工作。它可以构造特别设计的互联网控制消息协议(ICMP)数据包,避开一些正常的防护措施,这些措施通常用于防止你看到防火墙后面的设备,并可能允许你枚举其中的一些设备。你还可以编写 Scapy 脚本来操控网络流量并测试防火墙和 IDS 的响应,这可以帮助你了解它们运行的规则。
你还可以使用我在本节中讨论的其他一些工具来测试你的防火墙安全性。你可以使用端口扫描器和漏洞扫描器从外部检查防火墙,找出任何意外打开的端口或在你的开放端口上运行的、容易受到已知攻击的服务。你还可以使用嗅探器检查进出防火墙的流量,前提是你能够在一个网络位置安装这样的工具,以便你能看到流量。
总结
当你保护网络时,应从多个角度进行。你应该使用安全的网络设计,确保你已经正确地分段网络,设置了监控和控制流量的瓶颈点,并在需要的地方创建冗余。你还应该实施像防火墙和 IDS 这样的安全设备,以保护自己在网络内部和外部的安全。
除了保护网络本身外,你还需要保护网络流量。为此,你可以使用 VPN 在使用不可信网络时保护连接,实施专门针对无线网络的安全措施,并应用安全协议。
各种安全工具可以帮助你保持网络的安全。在处理无线网络时,你可以使用 Kismet。你还可以使用 Wireshark 或 Tcpdump 监听网络流量,使用 Nmap 扫描网络上的设备,使用 Scapy 和其他类似工具测试防火墙。你还可以在网络上放置被称为蜜罐的设备,专门吸引攻击者的注意,然后研究他们及其工具。
练习
-
你可能会使用工具 Kismet 做什么?
-
解释分段的概念。
-
无线加密的三种主要类型是什么?
-
你可以使用什么工具扫描网络上的设备?
-
你可以使用哪些工具来嗅探无线网络上的流量?
-
为什么你会使用蜜罐?
-
解释一下 IDS 中签名检测和异常检测的区别。
-
如果你需要通过不受信任的网络发送敏感数据,你会使用什么?
-
你会使用 DMZ 来保护什么?
-
状态防火墙和深度包检查防火墙有什么区别?
第十一章:操作系统安全

当你试图保护你的数据、进程和应用程序免受精心策划的攻击时,你可能会发现托管所有这些内容的操作系统存在一些弱点。操作系统是支撑设备基本功能的软件。当前常用的操作系统有多种 Linux 版本,以及由微软和苹果提供的服务器和桌面操作系统。如果你不注意保护操作系统,就没有基础建立强大的安全防线。
你可以通过多种方式减轻对操作系统的威胁。最简单的方法之一是操作系统硬化,即减少攻击者可能利用的入侵途径。当你配置可能面临敌对行为的主机(单独的计算机或网络设备)时,可以使用这种技术。
你还可以在操作系统上添加一些应用程序,旨在对抗攻击者可能用来攻击你的工具。特别是在面向互联网的设备上,最常见和明显的就是反恶意软件工具,它们能保护你免受恶意代码的侵害。前面章节中讨论的防火墙和基于主机的入侵检测系统也能阻止不必要的流量或在流量通过系统时发出警告。
其他安全工具可以通过发现你未曾注意到正在运行的服务、定位已知存在可利用漏洞的网络服务,以及一般性地检查你的系统,来检测主机上潜在的易受攻击区域。
通过应用深度防御的概念并结合这些努力,你可以减轻许多你负责的主机上的安全问题。
操作系统硬化
操作系统硬化是信息安全中的一个相对较新的概念,它旨在减少可供攻击者攻击操作系统的途径。我们将这些区域的总和称为攻击面。¹ 攻击面越大,攻击者成功突破防御的机会就越大。
你可以通过六种主要方式减少攻击面,如图 11-1 所示。

图 11-1:操作系统硬化的六种主要方式
我将逐一讲解这些策略。
移除所有不必要的软件
安装在操作系统上的每一款软件都会增加你的攻击面。如果你想要加强操作系统的安全性,就应仔细审视你加载到系统中的软件,并确保只安装最基本的程序。
比如,如果你正在准备一台网页服务器,你需要安装网页服务器软件、任何支持网页服务器所需的库或代码解释器,以及涉及操作系统管理和维护的任何工具,如备份软件或远程访问工具。你没有理由安装其他任何东西。
三思而后行
在更改操作系统设置、工具和软件时,一定要非常小心。你所做的某些更改可能会对操作系统的功能产生意想不到的影响,而你肯定不希望通过在执行关键功能的机器上亲自体验来发现这一点。在进行更改之前,务必仔细研究这些更改。
一旦在机器上安装了其他软件,即使是出于最好的意图,问题也会开始出现。例如,假设你的某个开发人员远程登录到服务器。他们需要修改一个网页,因此安装了所需的网页开发软件。接着他们需要评估更改,于是安装了自己最喜欢的网页浏览器以及相关的媒体插件,如 Adobe Flash 和 Acrobat Reader,还安装了一个视频播放器来测试一些视频内容。很快,系统不仅包含了不该存在的软件,而且这些软件由于没有 IT 部门的正式支持和维护,未被打补丁或更新,迅速变得过时。此时,你的互联网面向机器上已经存在了一个相对严重的安全问题。
移除所有不必要的服务
同样,你还应该移除或禁用不必要的服务(系统启动时自动加载的软件)。许多操作系统都附带了各种各样的服务,用于通过网络共享信息、查找其他设备、同步时间、允许你访问或传输文件以及执行其他任务。各种应用程序也可能会安装一些服务来提供它们所需的工具和资源。
尝试关闭服务可能是一项令人沮丧的任务,可能需要一些实验。在许多情况下,服务的名称并不能指示其实际功能,追踪它们的功能可能需要一些研究。开始时,最好的方法之一是确定系统监听网络连接的端口,因为这通常能给你提供关于开放端口后端服务的一些线索。例如,如果系统正在监听 80 端口,那么你很可能是在寻找一个网页服务器服务。许多操作系统都内建了允许你执行此操作的工具,如微软操作系统上的 netstat 或第十章中讨论的 Nmap。
除了定位网络上的设备外,Nmap 还可以帮助你确定系统正在监听的网络端口。(要安装 Nmap,可以从nmap.org/下载。)在系统的命令行中运行以下 Nmap 命令:
nmap <IP 地址>
将<IP 地址>替换为你设备的 IP 地址。你将看到类似于图 11-2 所示的结果。

图 11-2:使用 Nmap 定位服务
图 11-2 揭示了系统中运行的几种常见服务,列表如下:
21 端口 文件传输协议(FTP),允许文件传输
23 端口 Telnet,允许远程访问设备
80 端口 超文本传输协议(HTTP),用于提供网页内容
443 端口 安全超文本传输协议(HTTPS),用于通过安全套接层(SSL)或传输层安全性(TLS)协议提供安全的网页
其他几个端口也处于打开状态,运行的服务表明该示例设备是一个打印机。你可以利用这些信息作为关闭不必要服务的起点。例如,如果你不打算允许远程访问该系统或提供网页内容,你会注意到端口 21、23、80 和 443 是开放的。然后,你可以尝试重新配置该设备,以便不运行这些不需要的服务。
更改默认账户
许多操作系统都配有标准账户。通常包括等同于访客账户和管理员账户的账户。可能还有其他账户,例如供支持人员使用的账户,或者允许特定服务或实用程序运行的账户。
在某些情况下,默认账户可能配有过于宽松的权限,允许执行它们能够进行的操作,这可能会给有经验的攻击者带来麻烦,尤其是在他们成功入侵时。默认账户可能有一个标准密码或根本没有密码。如果你允许这些账户保留在系统中,并且没有更改默认设置,攻击者可能轻松进入并占据系统。
为了减少这些安全风险,你应该首先决定是否真的需要这些默认账户,并禁用或删除任何你不会使用的账户。你通常可以关闭或删除访客账户和支持账户,而不会导致问题。在管理账户的情况下,通常有像administrator、admin或root这样的名称,你可能无法安全地从系统中删除它们,否则可能会导致系统故障,或者操作系统可能会阻止你这样做。然而,你可以尝试重命名这些账户,以迷惑那些试图利用它们的攻击者。最后,无论账户的状态如何,你都不应留下默认密码,因为这些密码通常已被记录并广为人知。
应用最小特权原则
如在第三章中讨论的,最小权限原则要求你只给予某个方其完成任务所需的最基本权限。操作系统可以在不同程度上实践这一概念。
大多数现代操作系统将任务分为需要管理员权限和不需要管理员权限的两类。一般来说,普通的操作系统用户可以读取和写入文件,可能还可以执行脚本或程序,但他们只能在文件系统的某个受限区域内进行操作。他们通常不能修改硬件的功能,不能更改操作系统本身依赖的文件,也不能安装可能会改变或影响整个操作系统的软件。通常你需要管理员权限才能执行这些操作。
UNIX 和类 Linux 操作系统的管理员往往会严格执行这些角色。虽然管理员可以允许所有用户以管理员权限操作,但他们很少这样做。在 Microsoft 操作系统中,情况通常是完全相反的。Windows 操作系统的管理员通常更倾向于给予用户管理员权限。尽管微软在使其操作系统对非管理员用户更易用、更有用方面有所改进,但两类管理员之间的心态差异依然很大。
当你允许普通系统用户定期以管理员权限操作时,你就给自己带来了各种安全问题。如果用户执行了一个被恶意软件感染的文件或应用程序,他们是以管理员身份执行的,这意味着该程序拥有更大的自由度去修改操作系统以及宿主上安装的其他软件。如果攻击者入侵了用户账户,而该账户已经被赋予管理员权限,那么攻击者就掌握了整个系统的钥匙。几乎任何类型的攻击,只要获得了主机的管理员权限,都将产生更大的影响。
如果相反,你将系统的权限限制到用户执行所需任务所需的最低权限,那么你将大大减少许多安全问题的发生。在许多情况下,当攻击者试图从权限受限的用户账户执行攻击时,这些攻击将完全失败。这是一种廉价且容易实施的安全措施。
执行更新
为了保持强大的安全性,你必须定期及时地更新操作系统和应用程序。研究人员定期发布新的攻击方法,如果你没有及时应用操作系统和应用程序厂商发布的安全补丁来缓解这些漏洞,你很可能会迅速成为攻击的受害者。
要查看这一操作的示例,可以查看关于恶意软件在互联网上传播的新闻。² 许多恶意软件依然通过利用那些已经被软件供应商修复的已知漏洞继续传播。尽管在计划安装软件更新时保持谨慎是明智的,而且在安装之前彻底测试它们也是一个好主意,但通常不建议长时间拖延更新。
确保系统在安装完毕后及时打好补丁是至关重要的。如果你将一个全新安装且完全未打补丁的系统连接到网络,它可能会迅速被攻陷,即使是在内部网络上也是如此,因为它缺少最新的补丁和安全配置。在这种情况下,最佳做法是将补丁下载到可移动介质上,并在将系统连接到网络之前使用该介质打补丁。
开启日志记录和审计
最后,但绝对不容忽视的是,你应该为你的系统配置并开启适当的日志记录和审计功能,例如那些记录失败登录尝试的功能。虽然配置这些服务的步骤可能会根据操作系统和使用目的的不同而略有不同,但你通常需要能够准确完整地记录系统上发生的重要进程和活动。你应该记录重要事件,如管理员权限的使用、用户登录和登出系统(或登录失败)、对操作系统的更改,以及类似的活动。
你还可能想要增加一些额外的功能来补充操作系统内置的这些工具。你可以安装监控工具,提醒你系统本身的问题或在各种系统或应用日志中可能出现的异常。你还可以安装补充的日志架构来监控多台机器的活动,或者仅仅为确保你拥有所有活动的未被篡改记录,维护系统外部的日志备份副本。
还需要注意的是,查看日志是整个过程中的一个重要环节。如果你收集了日志却从不查看它们,那么收集日志的工作几乎等同于没有进行。
防护恶意软件
世界上的网络、系统和存储设备中存在大量让人瞠目结舌的恶意软件。使用这些工具,攻击者可以禁用系统、窃取数据、进行社会工程攻击、敲诈用户、收集情报等。
一个特别复杂且具有深远影响的恶意软件示例是 Triton。它首次出现在 2017 年 11 月,显然试图破坏工业系统中响应异常操作条件的机制,从而可能对这些系统造成直接损害。³ Triton 针对的设备存在于多种系统中,包括核设施,且具有造成灾难性损害的潜力。
为了保护你的操作系统免受恶意软件的侵害,你可以使用这里概述的一些工具。
反恶意软件工具
就像在第十章中讨论的入侵检测系统一样,大多数反恶意软件应用程序通过将文件与签名进行匹配或检测异常活动来识别威胁。反恶意软件工具通常比依赖异常检测(在反恶意软件领域通常称为启发式)更依赖签名,这主要是因为签名更容易编写并且检测更可靠。应用程序供应商通常每天至少更新一次恶意软件签名,或者在需要时更频繁地更新,因为恶意软件变化迅速。
当工具发现恶意软件时,它可能通过终止任何相关进程并删除检测到的文件或将其隔离,以防止它们执行。有时,它可能只是将文件保持原样。反恶意软件工具有时会检测到其他安全工具或文件,这些工具或文件不是恶意软件,你可能希望将它们忽略并在未来避免干扰。
人们通常会在个人系统和服务器上安装反恶意软件工具,作为常规操作或为了遵守政策。你也可能会在代理服务器上找到这些工具,用来过滤进出流量中的恶意软件。在邮件代理中这种做法较为常见,因为恶意软件经常通过邮件传播。该工具可能完全拒绝邮件、从邮件正文中去除恶意软件,或移除有问题的附件。
可执行空间保护
可执行空间保护是一种技术,能够防止操作系统和应用程序使用某些内存部分来执行代码。这意味着经典攻击,例如缓冲区溢出(在下一页的“什么是缓冲区溢出?”框中讨论过),依赖于能够在劫持的内存部分执行命令,但这种攻击可能根本无法实现。许多操作系统还使用地址空间布局随机化(ASLR),这是一种将内存内容随机移动的技术,使得篡改内存变得更加困难。⁴
什么是缓冲区溢出?
缓冲区溢出攻击通过输入超出应用程序预期的数据来工作——例如,在一个预期仅为 8 个字符的字段中输入 10 个字符,如图 11-3 所示。

图 11-3:缓冲区溢出的示例
根据应用的不同,额外的两个字符可能会被写入内存的某个位置,可能会覆盖其他应用程序或操作系统使用的内存位置。有时可以通过特意构造多余的数据来执行命令。
可执行空间保护需要两个组件才能发挥作用:一个硬件组件和一个软件组件。两大 CPU 芯片制造商,英特尔和 AMD,都提供可执行空间保护组件。英特尔将其称为执行禁用(XD)位,而 AMD 则称之为增强病毒保护。
许多常见的操作系统,包括微软的、苹果的以及几个 Linux 发行版,都实现了可执行空间保护软件组件。
软件防火墙和主机入侵检测
我已经讨论过如何在网络上使用防火墙和入侵检测系统来检测并过滤不良流量。你还可以通过在主机层面上实现类似的一套工具来增加一层安全性。尽管网络防火墙和入侵检测系统通常是专门构建的设备,部署在网络中,但它们执行的实际功能是通过驻留在设备上的专用软件来完成的。你可以将类似的软件直接安装到驻留在你网络中的主机上。此外,在主机上和主机外使用防火墙和入侵检测系统可以增加你的安全防护层。
正确配置的软件防火墙为驻留在你网络中的主机增加了一层有用的安全防护。这些防火墙通常只包含你可能在大型防火墙设备中找到的一部分功能,但它们通常也能够执行类似的包过滤和有状态的包检查。它们的形式可以从内置于常见操作系统中的相对简单版本,到为企业网络设计的大型版本,后者包括集中监控以及更多复杂的规则和管理选项。
主机型入侵检测系统分析主机网络接口上的活动或指向该接口的活动。它们与基于网络的入侵检测系统有许多相同的优点,但操作范围显著缩小。与软件防火墙类似,这些工具可能从简单的消费级版本到复杂的商业版都有。
集中管理的主机入侵检测系统可能存在的一个潜在缺陷是,为了使软件能够实时报告攻击情况,信息需要通过网络传输。如果该主机正通过同一网络受到攻击,软件可能无法完成这一任务。你可以尝试通过从设备向管理机制发送定期信标来缓解这个问题,这样如果信标没有出现,你就可以假设存在问题,但这可能不是一个完全的解决方法,因为没有消息并不总是意味着好消息。
操作系统安全工具
你可以用来评估网络安全的许多相同工具(在第十章中讨论过)也能帮助你评估主机的安全性。例如,你可以使用扫描工具检查主机如何与网络上的其他设备交互,或者你可以使用漏洞评估工具帮助指出可能包含易受攻击的应用程序或服务的特定区域,或者指出已经在你环境中的工具,攻击者可能会用它们来破坏你的安全。我要讨论的这一节中的工具并不是一个详尽无遗的列表,但我会讲解一些重点内容。
扫描器
你可以使用第十章中提到的扫描工具来检测主机中的安全漏洞。例如,你可以查找开放的端口和正在运行的服务版本,检查服务在连接时显示的横幅信息,这些信息可能包括软件版本,或者检查你的系统在网络上展示的信息。
在本章早些时候,我讨论了操作系统强化时,你学习了如何使用 Nmap 发现有服务监听的端口。Nmap 有很多用途,它可以提供更多的信息——例如,特定的供应商或版本信息。图 11-4 展示了使用以下命令对网络打印机进行 Nmap 扫描的结果:
nmap -sS -sU -A -v 10.0.0.121

图 11-4:Nmap 结果
在这种情况下,我使用了-sS来运行 TCP SYN 端口扫描,使用-sU来运行 UDP 端口扫描。我启用了操作系统检测、版本检测和脚本扫描(-A),并且在运行时启用了详细输出(-v)。如果你尝试这个命令,你会发现它的完成时间要比我之前运行的命令长得多。
在图 11-4 中,端口列表显示了几个额外的端口,并且展示了有关正在运行的特定服务和版本的许多信息。返回的http-title告诉你这是一台 Brother HL-L8350CDW 系列打印机。掌握这些信息后,你可能会更有机会成功攻击该设备。
你发现了什么?
当使用启用操作系统检测的 Nmap 进行扫描时,你可能会注意到它报告的设备指纹显示运行着一些奇怪的,甚至是完全错误的东西。有时,Nmap 的操作系统指纹可能会有所偏差,因此如果某些输出看起来不对,最好通过其他工具验证 Nmap 的结果。
除了 Nmap 内置的许多功能外,您还可以使用 Nmap 脚本引擎创建自定义的 Nmap 功能。Nmap 脚本引擎是一个自定义语言和脚本引擎,允许您向 Nmap 添加功能。Nmap 是一个功能强大的工具,拥有丰富的选项、功能和能力。幸运的是,您也可以参考一个很棒的文档,网址是nmap.org/book/man.html。
漏洞评估工具
漏洞评估工具,通常包括许多与 Nmap 类似的功能,旨在寻找并报告主机上的网络服务,这些服务存在已知漏洞。
其中一个著名的扫描工具是 OpenVAS (www.openvas.org/)。您可以通过命令行使用 OpenVAS,但它也有一个方便的图形界面,称为 Greenbone,如图 11-5 所示。OpenVAS 可以对目标进行端口扫描,然后尝试确定在它发现开放的端口上运行的服务(及其版本)。OpenVAS 随后会返回一个给定设备可能存在的漏洞的具体列表。

图 11-5:OpenVAS 界面
OpenVAS 包括一个端口扫描器,用于找到监听服务,从而帮助您识别其中的漏洞。
利用框架
漏洞利用是利用其他软件中的缺陷,使其以创建者未预期的方式行为的小程序。攻击者通常使用漏洞利用来获得系统访问权限或在系统上获取更高权限。作为一名安全专家,您也可以使用这些工具和技术来评估自己系统的安全性,以便在攻击者发现问题之前修复它们。
漏洞利用框架是一个包含预打包漏洞利用和工具的集合,例如网络映射工具和嗅探器。这些框架使得漏洞利用变得简单,并提供了一个庞大的漏洞利用库。漏洞利用框架在 2000 年代初期变得流行,并且至今仍在使用。一些著名的漏洞利用框架包括 Rapid7 的 Metasploit(如图 11-6 所示)、Immunity CANVAS 和 Core Impact。

图 11-6:Metasploit 框架
许多漏洞利用框架是图形化界面工具,您可以像运行其他应用程序一样运行它们。您甚至可以配置一些工具,自动寻找并攻击系统,随着获得更多的访问权限,它们会进一步传播到网络中。
总结
为了确保操作系统的安全,您可以从加固操作系统开始。加固包括移除所有不必要的软件和服务,修改系统上的默认账户,应用最小权限原则,频繁更新软件,并进行日志记录和审计。
你还可以实现额外的软件来保护你的操作系统。反恶意软件工具可以检测、预防并移除恶意软件,你还可以直接在主机上使用防火墙技术,以便在网络接口进出时过滤掉不希望的流量。你还可以安装主机入侵检测系统来检测通过网络发起的攻击。
最后,你可以利用各种安全工具来发现安全漏洞。一些扫描工具,如 Nmap,可以为你提供关于你的系统及其运行的软件的信息。像 OpenVAS 这样的漏洞评估工具可以定位你服务或网络启用软件中的具体安全漏洞。此外,你还可以使用像 Metasploit 这样的攻击框架,攻击系统以获取访问权限或提升你的权限级别。使用一些攻击者所使用的相同技术,可以帮助你发现并解决安全问题。
练习题
-
地址空间布局随机化(ASLR)有什么作用?
-
什么是攻击框架?
-
端口扫描器和漏洞评估工具之间有什么区别?
-
解释攻击面(attack surface)的概念。
-
如果网络上已经有防火墙,为什么你还需要在主机上安装防火墙?
-
什么是操作系统强化?
-
什么是 XD 位,为什么要使用它?
-
可执行空间保护为你做了什么?
-
最小特权原则如何应用于操作系统强化?
-
从
www.nmap.org/下载 Nmap 并安装。使用 Zenmap GUI 或命令行 (nmap <IP 地址>) 进行基本扫描。你能找到哪些开放的端口?
第十二章:移动、嵌入式和物联网安全

到目前为止,我假设你将保护传统桌面或笔记本计算机上的信息。然而,你还会在你的口袋、空调系统、安防系统、病房、汽车以及其他令人眼花缭乱的地方找到脆弱的设备。这就是为什么你的安全计划应包括移动设备、物联网设备和嵌入式设备。物联网设备,如摄像头或医疗设备,是指任何不运行完整桌面操作系统的互联网连接设备。嵌入式设备是指运行在其他设备内部的计算机,比如汽车中的控制器。这些技术通常体积小巧,不易被察觉,但它们密集地散布在我们的世界中。
在许多情况下,人们忽视与这些设备相关的安全问题,因为这些设备要么是无处不在的,如智能手机,要么是鲜有关注的,如医疗设备。然而,当它们被攻击时,后果可能从令人尴尬到致命不等。如果攻击者攻破了这些系统,他们可能会窃取我们的照片库、导致大规模停电使国家一半地区陷入黑暗,或增加我们的胰岛素泵的剂量,造成致命过量。
本章中我将讨论的每个领域都有其特定的安全问题,其中一些问题与其他章节讨论的类似,而另一些则是完全独特的。
移动安全
随着移动设备的普及,它们也变得越来越容易受到安全问题的影响。这些设备拥有强大的硬件资源和功能,并且通常始终连接着某种网络。它们定期进出不同的环境,存储和传输数据而不被察觉——并且不一定遵循标准非移动计算机上认为正常的基本安全措施。
移动设备包括智能手机和平板电脑,通常运行 iOS 或 Android 操作系统,以及各种头戴式设备和智能手表。人们使用移动设备发送和接收电子邮件、浏览网页、编辑文档、播放视频或游戏、听音乐——简而言之,几乎具备非移动计算机的所有功能。
移动设备和计算机之间的界限变得相当模糊。一方面,我们的一些智能手机在处理能力和存储容量上堪比计算机,且操作系统功能相似。另一方面,一些计算机,如小型超极本和类似树莓派的设备,运行着最低配置的硬件,且功耗较低。有些甚至运行移动操作系统,如 Android。由于区分这些设备不再是物理能力的问题,而是设计理念的问题,因此我们应该从安全角度将它们视为相同。
保护移动设备
也就是说,人们通过几种特定的方式来保护移动设备。通常,企业会使用软件和某种政策来维护移动设备的安全。
移动设备管理
在组织环境中使用的许多设备都有一套成熟的工具和功能,可以让你集中管理它们。集中管理意味着这些设备由一个主要系统控制,该系统负责维护它们。集中管理可以让你自动修补漏洞和升级软件,强制用户定期更改密码,调节和跟踪已安装的软件,并根据特定政策调整设备设置。
对于移动设备,你通常可以通过外部管理解决方案来完成这些任务,这一类别被称为移动设备管理、企业移动管理或统一端点管理,具体取决于功能和供应商的不同偏好。随着时间的推移,这些解决方案已经扩展到包括桌面和服务器操作系统。
管理解决方案的具体架构因供应商而异,但大多数使用在移动设备上的代理(软件),以强制设备遵循某种配置。这些代理通常会调节对公司资源的访问权限,如电子邮件、日历或网络资源,如果设备不合规、被盗或用户的雇佣关系终止,代理可以停止客户端的访问。此外,许多管理解决方案还允许你远程清除设备,可以完全清除或仅清除公司数据,甚至完全禁用设备。
随着移动设备与非移动设备之间的界限越来越模糊,管理解决方案的供应商已开始支持一些传统上非移动设备,允许你使用相同的工具和技术远程管理移动和非移动设备。
部署模型
大多数组织都有一项自带设备(BYOD)政策,规定了个人设备和公司设备在工作场所的使用。这项政策可能只允许公司拥有的设备与企业资源交互,或者仅限个人设备使用,或者介于两者之间。
只允许使用公司拥有的移动设备可以使组织更容易进行集中管理。例如,使用移动设备管理解决方案,你可以禁止使用个人电子邮件和文件共享应用程序,并禁用用户安装与业务无关的应用程序的权限。你还可以强制用户安装更新或安全补丁,并定期更改密码,从而创建一个更安全的移动环境。我们通常将公司拥有的移动设备称为公司拥有的仅限业务使用(COBO)或公司拥有的个人启用(COPE),这取决于是否可以将其用于个人用途。
另一方面,如果你只允许个人设备并且不通过移动设备管理来管理它们,那么你将无法使用很多这些功能。某些工具也提供了一些额外的安全功能,例如允许你远程删除数据而无需主动监控它们,但一个精明的技术用户可能能够绕过这些措施。虽然资源有限的小型组织可能会使用这种方法来管理复杂的移动基础设施,但对于大型企业来说,这可能并不是最优选择。
许多组织允许混合使用个人和公司拥有的设备,并有时限制一些个人设备的功能。你可以允许更安全和更值得信赖的设备访问更多的资源,同时让人们在个人设备上访问基本服务,如电子邮件,前提是他们同意通过管理工具管理这些设备并接受一套合理的安全功能。
移动安全问题
移动设备面临几个特定的安全问题。虽然本节内容并非详尽无遗,但概述了一些更常见的风险领域。
基带操作系统
每一款现代移动设备都有一个操作系统,这个操作系统隐藏在你能看到的操作系统之下,叫做基带操作系统。这个小型操作系统运行在独立的处理器上,通常负责处理手机的硬件,如无线电、USB 端口和全球定位系统(GPS)。基带操作系统的类型根据其运行的处理器而有所不同,操作系统通常是设备制造商的专有技术。由于缺乏标准化,加上设备更新不频繁(稍后我会回到这一点),这可能导致漏洞存在多年,甚至是设备的整个生命周期。
鉴于基带操作系统在设备的“正常”操作系统之外工作,攻击者可以利用它们进行各种攻击。例如,2018 年 10 月,攻击者通过基带操作系统使用的信令系统第 7 号(SS7)协议¹,监视了美国总统特朗普的手机,该协议用于路由电话和短信等操作。SS7 协议在 1975 年开发,当时安全性并不是设计目标。
不幸的是,除非设备制造商发布更新,否则除了在设备上添加额外的控制措施来弥补这些漏洞(例如额外的加密或应用程序分段),你无法直接修复这些漏洞。
越狱
越狱,或称为 rooting,指的是修改移动设备,去除设备制造商所施加的限制。通常,你这样做是为了打开通常无法访问的功能,比如管理员访问权限,并安装设备供应商未批准的应用程序。
通常,你通过进行一系列攻击来越狱,从而绕过设备的安全功能。为了让越狱在重启后持续生效,你通常需要禁用这些安全功能或修补设备上的文件以完全删除它们。移动设备通常有多层安全措施,而一个持久的越狱通常需要打一个永久性漏洞,穿透到操作系统核心的内核中。当然,这会使设备暴露于恶意应用程序和外部攻击之下。
当厂商发布新版本的操作系统时,它们会包括修复,补上导致上次越狱漏洞的漏洞。然后,越狱开发者会开始为越狱的下一代版本工作,同时厂商发布操作系统的下一个测试版,周而复始。
为了防止设备越狱,你可以将其连接到外部管理解决方案,该方案会安装自己的应用程序以提供额外的安全层。有些解决方案可能能够完全防止越狱,或者至少在尝试越狱时提醒你。移动反恶意软件应用程序也可能提供一定程度的保护。
恶意应用程序
恶意应用程序可能会危及移动设备的安全。移动应用程序在安装时通常会请求许多权限;通常,它们可以访问敏感信息、登录其他应用程序、读取电子邮件并使用网络连接。
你可能会认为,如果使用未经越狱的设备并从标准操作系统应用商店下载应用程序,就可以确保安全,但事实并非如此。厂商采取的措施来防止恶意应用程序进入其商店并不是万无一失的。2018 年 1 月,RiskIQ 的研究人员分析了苹果和谷歌应用商店中的数千个应用程序,发现了数百个恶意的加密货币应用程序,这些应用程序旨在窃取用户的币。²
更糟糕的是,专门为越狱设备设计的应用程序,这些应用程序来自互联网阴暗的后巷。虽然正常的应用商店在应用程序中采取了安全措施,并对其进行了一定程度的审查,但这些后巷应用程序却没有这样的保护。它们可以在后台执行几乎任何操作,用户界面看不见,你也完全无法知道。
为了防范恶意应用程序,你应该坚持使用标准的应用商店,并避免使用越狱设备。苹果的应用商店中的应用程序通常比其他商店更安全,因为苹果对接受的应用程序有更高的标准。你还可以使用反恶意软件应用程序来增加额外的保护。
更新(或缺乏更新)
最后,移动设备及其应用程序的更新可能会导致重大的安全问题——尤其是当这些更新没有发生时。
人们依赖设备制造商发布对主要操作系统和基带操作系统的更新,但这些更新往往不是及时发布,甚至根本不会发布。通常,制造商会在设备发布后的两三年内持续更新设备,然后便很少再发布新更新,甚至不再发布更新,因为卖给你一台新设备比保持旧设备的更新更加盈利。
苹果设备通常表现得比大多数设备稍好,但即便是苹果的更新,在几年后也会变得不那么频繁。谷歌由于对安卓操作系统的授权更为宽松,通常将更新的责任交给设备的制造商,因此设备的更新体验可能有所不同。此外,设备更新的描述通常缺乏具体细节,因此一些较小的更新,比如修复特定安全问题的更新,可能很难获得更多信息。
应用程序更新也可能存在问题。除了设备出厂时预装的应用程序外,你完全不能保证应用程序的开发者会更新应用程序或修复安全问题,尤其是对于一些小型应用程序。
你可以在一定程度上自己管理更新问题。通过精心选择那些长期以来在更新方面表现更好的厂商的设备,你可以让这些设备保持更长时间的安全。目前,苹果和直接由谷歌销售的设备会获得更频繁的更新和操作系统升级。对于应用程序来说,情况大致相同——大型厂商的应用程序有更高的概率随着时间推移进行更新。
嵌入式安全
嵌入式设备是指内嵌在其他设备中的计算机,通常执行单一功能。嵌入式设备包括从控制你前几天洗车的计算机,到保持糖尿病患者健康的胰岛素泵,甚至一些新型 LED 手电筒中的驱动程序也都是小型的嵌入式设备。这些设备无处不在,你需要付出极大的努力才能避免它们。
嵌入式设备的应用场所
我之前已经稍微提到过嵌入式设备的使用场景。现在,让我们来看一下它们的一些常见应用。
工业控制系统
工业控制系统和监控控制与数据采集系统通常使用嵌入式设备。工业控制系统是指任何控制工业过程的系统。监控控制与数据采集系统是一种工业控制系统,专门监控和控制远程系统,通常是与公用设施和其他基础设施相关的系统。³
这些系统控制着我们的水务系统、核电站、石油管道以及其他多种关键基础设施。如果攻击者控制或篡改了这些系统,后果可能会波及到物理世界。前一章中讨论的 Triton 就是针对工业控制系统的攻击。2007 年的 Stuxnet 病毒是另一个关于攻击这些类型系统影响的经典例子。Stuxnet 被认为是美国和以色列政府联合项目,专门针对控制伊朗铀浓缩设施的系统。⁴该病毒篡改了设施中离心机的控制系统,导致离心机转子转速过快,直到离心机因不稳定而故障。与此同时,病毒阻止了传感器将这一异常活动的信息传送给安全系统,防止其采取必要的应对措施。⁵
尽管这些设备表面上具有高水平的安全性,但其中许多是通过模糊化实现的安全性,这个概念我在前面的章节中讨论过。工业控制系统通常运行专有的实时操作系统(RTOS),类似于移动设备中使用的基带操作系统,并且由于许多相同的原因,存在许多相同的安全问题。
这些设备常常运行在气隔网络上,这种网络与外部没有直接的网络连接。Stuxnet 攻击的伊朗控制系统就是运行在这种类型的网络上,但这并没有阻止它们被感染。只要设施工作人员缺乏安全教育,就可以通过带病毒的 USB 驱动器绕过这些控制。
医疗设备
包含嵌入式系统的医疗设备可以包括从医院中的生命体征监测仪到直接与人体连接的心脏起搏器和胰岛素泵等各种设备。像工业控制系统一样,这些设备通常运行 RTOS,通常需要最小化的用户界面或专用的接口设备来与它们进行通信。
尽管植入你胸部以保持心脏正常运作的心脏设备看起来不像桌面上的计算机,也没有相同的安全需求,但实际上它们之间的关系比你想象的要紧密。2018 年 10 月,美国食品药品监督管理局(FDA)对使用美敦力公司心脏可植入电生理设备的患者和医生发出了警告,这是一种心脏起搏器。⁶ FDA 发现该设备的编程器在下载更新时未与制造商进行安全通信,这可能为攻击者操控编程器或设备本身的设置留下了漏洞,包括发送修改过的固件。
这样的攻击可能是致命的。不幸的是,与其他设备一样,行业缺乏标准化,某种程度上这些设备的保密性和专有性质导致它们比我们常用的经过长期磨砺的桌面操作系统和应用程序更不安全。这些设备没有像更流行的操作系统那样庞大的用户群体,且不容易被攻击者和安全研究人员随意地进行试探和攻击。你可以把它们看作操作系统世界中的脆弱温室兰花。
汽车
一辆车上可以有多达 70 个嵌入式设备通过网络进行通信来驱动汽车。这些设备所通信的网络被称为控制器局域网络总线(CAN 总线)。该总线最早在 1980 年代初期被开发出来,随着车辆变得更加复杂和计算机化,CAN 总线也经历了几次修订。
例如,一辆车的安全气囊系统利用了 CAN 总线,车内各个碰撞传感器监控着碰撞事件,并通过网络将这些事件传递给安全气囊控制系统。安全气囊控制系统还可能询问车内的乘员检测系统,哪些座位已被占用,以及乘员是否符合安全体型,才会触发安全气囊。
几年前,由于 Charlie Miller 和 Chris Valasek 等人的研究,汽车黑客攻击开始引起安全行业的关注。Miller 和 Valasek 成功远程控制了一辆被黑客攻击的 Jeep Cherokee,他们让车加速、关闭刹车系统,甚至控制了方向盘,令当时坐在驾驶座上的《连线》杂志记者感到非常恐惧,尽管记者知道发生了什么事情。⁷
显然,这种攻击的后果可能非常严重。汽车随时环绕在我们身边,每次我们离开家,只要出现这样的一个问题,就有可能危及许多人的生命安全。
如果想要更深入地了解 CAN 总线及其相关设备、它们的安全性以及如何攻击它们,我推荐 Craig Smith 的《汽车黑客手册》,该书详细探讨了许多我在这里无法展开的技术细节。
嵌入式设备安全问题
嵌入式设备面临一些特定的安全问题,接下来我将在本节中进一步讨论这些问题。
升级嵌入式设备
升级嵌入式设备的过程可能会带来一系列有趣的挑战。在许多情况下,你根本无法升级嵌入式设备,或者即便能升级,也往往很困难。由于这些设备通常没有联网功能,你一般不能自动更新它们。
你可以通过专门的外部设备来更新一些设备,例如前面提到的起搏器,该外部设备设计用来与之通信,但这也可能面临挑战。你可能无法像智能手机或台式电脑那样完全重置嵌入式设备或将其送修。在起搏器的情况下,你可能甚至不希望频繁更新其控制软件,因为坏的更新可能会带来心碎的后果(字面意义上)。
至于硬件,工程师通常预期任何嵌入式硬件能与其所在设备的使用寿命相匹配。(对此有一些例外情况,比如工业控制系统中的设备,通常会有足够的支持来进行更换。)除非发生安全召回或更大的设备的保修维修,否则你不太可能找到很多升级的选择。为了防止这种漏洞,应该确保依赖嵌入式系统的硬件保持最新,至少要确保制造商仍然能维修它,尽管这样做可能会非常昂贵。
物理影响
嵌入式设备不仅通常缺乏必要的保护,而且被入侵的嵌入式设备可能会带来巨大的影响。前面我讨论了被黑的吉普车和伊朗的铀离心机案例。那些可能只是冰山一角。许多设备可能影响人类安全,即使一些行业(如与车辆、医疗设备和工业控制系统相关的行业)已经开始加强其嵌入式系统,以抵御故意攻击。由于这类系统的普及,潜在的目标非常多。
除了设备特定和行业特定的问题,政府可能会利用涉及嵌入式设备的安全问题,在国家间的攻击中进行使用。Stuxnet 就是第一个公开的例子。随着嵌入式设备控制着我们的电力、供热、水、卫生、食品生产以及无数其他系统,当国家间的争端升级时,这些设备成为潜在的攻击目标。
最近,供应商和政府已经开始更加关注这些设备。许多公司,如 SANS(ics.sans.org/),现在提供以前非常专业化的工业控制系统安全培训。
不幸的是,除非制造商提供更新或修复,否则你无法做太多事情来保护物理世界免受嵌入式设备的影响。在某些情况下,你可以尝试针对特定情况采取补偿性控制措施,例如添加中介安全层(如防火墙)来保护设备。
物联网安全
物联网(IoT)设备已经广泛存在,并且它们的普及程度还在不断增加——逐渐渗透到我们的烤面包机、冰箱和其他家电中,使我们能够通过互联网访问这些设备。当然,这也带来了许多安全问题。
什么是物联网设备?
1999 年,Kevin Ashton 在与 Auto-ID Center 合作时创造了物联网(Internet of Things)这一术语。⁸ 这个术语指的是他所认为的日益增加的需要提供网络连接,以跟踪和连接各种各样的部件和设备。如今,我们使用这个术语来指代任何具有互联网连接且不运行完整桌面操作系统的设备。
这个术语非常广泛,而且由于物联网(IoT)世界仍然有些像是一个前沿领域,许多与其相关的概念和想法都可以有不同的解释。让我们简要讨论几个常见的物联网设备。
打印机
尽管常见,网络打印机在办公室和家庭中常常被忽视。我们通常将它们视为类似于烤面包机的东西,但实际上,它们是复杂的设备,拥有类似于其他计算机的操作系统,能够在一个或多个网络上进行通信,并且为攻击者提供了多个入侵点。打印机通常在小型嵌入式设备上使用实时操作系统(RTOS),驱动打印机硬件。惠普的 LaserJet 打印机运行 LynxOS 操作系统。⁹ 这些设备会监听多个端口,并运行常见的服务,如 FTP、Telnet、SSH 和 HTTP/HTTPS,以及一些特有的打印服务。此外,它们通常会配备有线和无线网络适配器。打印机通常还配备了足够的内存和存储,以支持发送给它们的大型打印任务。
尽管这些设备遭受攻击的情况并不常见,但它们偶尔会因漏洞而受到攻击。最近的一项漏洞——KRACK 漏洞,可以让攻击者监听无线发送到这些设备的流量,并访问敏感文件。¹⁰
监控摄像头
网络监控摄像头是另一种常见的设备,通常充满了漏洞。一些厂商开发和维护他们的摄像头型号较好,但其他厂商则不然。你可以通过在轻量级平台(通常是 Linux)上运行一些服务,以低廉的价格组装出一台网络摄像头。某些厂商几乎不进行测试,通过修改其他项目的源代码来开发他们的产品。
这些设备通常具有简单的默认管理凭据、后门使得未授权的使用成为可能,或者充满了安全漏洞和配置错误。恶意软件可以轻松利用这些漏洞,发动针对其他设备的攻击,或作为进入环境深层部分的入口。
物理安全设备
物理安全设备包括一些工具,如智能锁,它们可以连接到网络(通常是蓝牙或蓝牙低能耗),并允许通过移动应用程序或其他软件开锁和关锁。
智能锁可以免去你携带钥匙或记住密码的麻烦。在某些情况下,只需将移动设备带到锁的附近就能打开锁;你根本不需要进行任何直接操作。正如你可能预料的那样,这并不总是能增强设备的安全性。
2018 年 7 月,Pen Test Partners 公司对 Tapplock(*tapplock.com/)智能挂锁进行了研究,该锁通过移动应用程序进行解锁。公司发现发送到设备的解锁代码是静态且可重放的,这意味着,即使没有关联的应用程序,你也可以直接通过蓝牙告诉设备解锁,它就会解锁。研究人员还发现,解锁代码依赖于设备广播的 MAC 地址,攻击者可以轻松计算出这个代码。¹¹ 更糟糕的是,另一位研究人员发现 Tapplock 背后的 API 存在漏洞,攻击者可以将任何挂锁附加到他们的账户上,检索到应用程序上次解锁该锁的物理位置,并通过应用程序解锁挂锁。¹²
如果你试图将每个设备都变成物联网设备,你可能会面临像这样的漏洞。虽然你通过智能锁获得了便利,但将像锁这样的设备放在一个对任何连接到互联网的计算机都可以访问的开放 API 后面,实际上会导致严重的漏洞。即便你在强安全性方面投入大量精力,漏洞总是存在,且总有人会去利用它们。
嵌入式设备与物联网设备的区别
嵌入式设备和物联网设备之间的界限有些模糊,人们对于两者的定义常常存在分歧。然而,确实有一些相对较高层次的区别。
嵌入式设备通常并不设计为与人进行常规互动。两种设备通常都被包装在另一个设备内,那个设备可能有某种用户界面,但嵌入式设备通常隐藏在幕后,它通常有更简单的接口,让你可以开关设备或调整其设置。
此外,嵌入式设备通常不会连接到互联网,尽管一些嵌入式设备,如汽车中的嵌入式设备,连接到内部网络。有些人可能会争辩,给嵌入式设备提供互联网连接就会使其转变为物联网设备。
物联网安全问题
物联网设备,当然,面临着来自其网络连接的几个特定安全问题。
透明度不足
通常,你并不知道你的物联网设备具体在做什么。尽管它们的用户界面有限,但它们通常包含与移动设备和桌面计算机类似的功能集。当你的物联网设备在网络上闲置时,它可能正在与任何人通信。你并不总能判断它是否在做一些异常或意外的事情。
除非你安装了特定的工具来发现这些设备在做什么,否则你实际上没有办法回答这些问题。高级用户或许能登录设备的命令行界面,进一步查询设备,但你可能无法从文件系统和日志中获得很多额外的信息,除了一些零散的数据。
发现一个物联网设备具体在做什么的一个方法是将设备连接到虚拟专用网络(VPN),以隔离该设备(使其流量更容易区分),并强制它通过一个可监控的瓶颈点进行通信,然后使用像 mitmproxy(mitmproxy.org/)这样的工具来监听,查看设备到底在尝试与谁通信,以及发送或接收了什么数据。你可以在 GitHub 上的 Data-Life 项目中找到这个工具和相关脚本(github.com/abcnews/data-life/*)。如果设备在网络上非常活跃,你将不得不筛选出大量的结果,以识别连接另一端的设备。你可以预期,大多数物联网设备在正常操作时会与各种其他设备进行通信。例如,它们可能会向供应商请求更新、与 API 进行交互,或检查时间与时间服务器的同步。
一切都是物联网设备
现在各种家电都配备了“智能”功能,并且具备某种形式的网络连接。即便是灯泡和健身器材也会与互联网通信。正如我所讨论的,设备有自己特定的安全漏洞,但它们也面临着由于互联网上设备数量庞大而产生的问题。
2016 年 10 月,一次巨大的分布式拒绝服务(DDoS)攻击让大量互联网服务无法使用,其中包括亚马逊 Web 服务、Twitter、Netflix 和 CNN 等大型服务商的服务。这些停机事件源于针对 Dyn 公司的 DDoS 攻击,Dyn 公司控制着许多根 DNS 服务器,这些服务器构成了互联网基础设施。针对这些服务器的攻击速率达到了每秒 1.2 太字节,这是当时最大的一次 DDoS 攻击,攻击来源超过 10 万个设备,几乎所有设备都是物联网设备。¹³
攻击之所以可能,是因为一种名为 Mirai 的恶意软件将易受攻击的物联网设备招募进了一个僵尸网络(被攻陷系统的网络),并使它们可以被僵尸网络的控制者用来进行 DDoS 攻击。该恶意软件并未进行复杂的攻击,它只是寻找网络上的设备,并尝试使用默认的管理员密码访问这些设备。
当然,用户本可以在首次配置设备时通过更改管理员密码来避免这个问题,但不幸的是,用户很少这样做。当无线接入点首次普及时,也面临类似的问题。制造商可能会以相同的方式解决这个漏洞,就像他们解决无线接入点中的漏洞一样:通过默认情况下将设备出厂时设置为安全状态。
过时的设备
除了市场上大量的易受攻击的设备外,许多旧设备也带来了安全问题。某些类型的物联网设备已经存在大约 20 年了。即使今天开始不再生产不安全的设备,这些旧设备仍然可能在未来至少十年内继续运行。
给旧设备增加安全措施并不容易。你可以通过更新固件来修补某些设备中的漏洞,但这需要执行更新,而大多数设备并不会自动下载更新。许多家中有物联网设备的非技术人员可能既不理解这些设备为何需要更新,也不懂得如何更新。
总结
本章中,我讨论了移动设备、嵌入式设备和物联网设备。这些类别中的每一种都面临着一组特定的潜在安全问题,而你可以在不同程度上减轻这些问题。
对于移动设备来说,基带操作系统、越狱和恶意应用程序可能威胁到你的安全。然而,你可以采取一些措施来管理移动设备,并在一定程度上控制人们如何使用它们,特别是在企业环境中。嵌入式设备广泛存在于许多关键系统中,它们可能对物理世界造成比设备本身更大的影响,而物联网设备或具有网络连接的设备尤其难以监控和保护。
从安全角度来看,这些设备和传统计算机一样重要,尽管它们很少被考虑到。
习题
-
嵌入式设备和移动设备有什么区别?
-
移动设备中的基带操作系统有什么作用?
-
嵌入式设备如何影响物理世界?
-
Mirai 僵尸网络做了什么?
-
监控控制和数据采集系统与工业控制系统有什么区别?
-
越狱移动设备有什么危险?
-
更新嵌入式设备时可能会遇到哪些问题?
-
嵌入式设备和物联网设备有什么区别?
-
物联网设备中可能出现哪些常见的网络连接类型?
-
你可能会使用什么解决方案来防止移动设备被越狱?
第十三章:应用程序安全

在第十章和第十一章中,我讨论了确保网络和操作系统安全的重要性。防止攻击者与网络交互并颠覆操作系统安全的一部分工作就是确保应用程序的安全。
2013 年 12 月,运营超过 1800 家门店的零售商 Target 公司报告称发生了客户数据泄露事件,涉及 4000 万个客户姓名、卡号、卡片到期日和卡片安全码。¹ 一个月后,Target 宣布额外有 7000 万个客户的个人数据遭到泄露。²
这次泄露事件并非源于 Target 系统,而是来自与 Target 网络相连接的一个供应商 Fazio 机械公司的系统。专家们认为攻击是这样发生的:³
-
攻击者通过特洛伊木马(一种恶意软件)攻破了 Fazio 机械公司的系统,并利用网络钓鱼攻击将其植入。
-
由于网络分段不当,攻击者能够利用 Fazio 公司对 Target 网络的访问权限,进一步访问 Target 网络的其他部分。
-
攻击者在 Target 的销售点(POS)系统(基本上是收银机)上安装了名为 BlackPOS 的信用卡收集恶意软件,并利用该恶意软件收集 POS 扫描到的支付卡信息。
-
攻击者将收集到的信用卡号码转移到 Target 网络上受损的文件传输协议(FTP)服务器,然后将其发送到公司外部,最终它们出现在俄罗斯的一个服务器上。
-
攻击者随后将窃取的信用卡和个人数据在黑市上出售。
多个层面的问题促成了此次攻击的发生。任何一个缺失或失效的控制措施——如缺乏网络分段、缺乏反恶意软件工具、以及缺乏数据丢失防护工具——都可能阻止攻击的成功。在本章中,你将了解在软件开发过程中引入的应用程序漏洞、常见的 Web 应用程序漏洞以及影响应用程序使用的数据库漏洞。我还将讨论可以用来保护应用程序的工具。
软件开发漏洞
许多常见的软件开发漏洞可能导致应用程序中的安全问题。这些漏洞包括缓冲区溢出、竞态条件、输入验证攻击、身份验证攻击、授权攻击和加密攻击,如图 13-1 所示。我将在本节中逐一介绍每种漏洞。
通过简单地避免使用允许这些漏洞存在的编程技术,你可以在开发新软件时相对轻松地避免所有这些漏洞。卡内基梅隆大学的计算机应急响应小组发布了一套定义安全软件开发标准的文档,适用于几种编程语言,这是进一步研究安全编码的一个很好的资源。⁴

图 13-1:软件开发漏洞
缓冲区溢出
缓冲区溢出,或称缓冲区超限,发生在你没有正确考虑输入到应用程序中的数据大小时。如果一个应用程序接收数据,大多数编程语言会要求你指定预期接收的数据量,并为这些数据预留存储空间。如果你没有限制接收的数据量(这个过程称为边界检查),那么你可能会接收到 1,000 个字符的输入,而你只为 50 个字符分配了存储空间。
在这种情况下,多出的 950 个字符的数据可能会覆盖内存中其他区域,这些区域被其他应用程序或操作系统使用。攻击者可能会利用这种技术篡改其他应用程序或使操作系统执行他们自己的命令。
正确的边界检查可以完全消除这种类型的攻击。有些语言,如 Java 和 C#,会自动执行边界检查。
竞态条件
竞态条件发生在多个进程(或同一进程中的多个线程)控制或共享资源访问时,而资源的正确处理依赖于事务的正确排序或时机。
例如,如果你通过自动柜员机(ATM)从银行账户取款 20 美元,过程可能如下:
-
检查账户余额($100)。
-
提取资金($20)。
-
更新账户余额($80)。
如果其他人在大约相同的时间启动相同的过程,并试图进行 30 美元的取款,你可能会遇到一些问题。
| 用户 1 | 用户 2 |
|---|---|
| 检查账户余额($100)。 | 检查账户余额($100)。 | |
| 提取资金($20)。 | 提取资金($30)。 | |
| 更新账户余额($80)。 | 更新账户余额($70)。 |
由于两个用户共享对资源的访问权限,账户最终记录了$70 的余额,而你应该只看到$50。两个用户“竞速”访问资源,导致不良情况发生。(请注意,大多数实际银行会采取措施防止这种情况发生。)
竞态条件在现有软件中可能很难检测到,因为它们很难重现。当你开发新应用程序时,只要小心处理用户访问资源的方式,避免依赖时序,你通常可以避免这些问题。
输入验证攻击
如果你不小心验证应用程序的输入——换句话说,确保用户提交的任何输入(例如表单的答案)以可接受的格式到达——你可能会成为格式字符串攻击等问题的受害者。
在格式字符串攻击中,攻击者利用编程语言中的某些打印函数,这些函数本意是格式化输出,但实际上允许攻击者操控或查看应用程序的内部内存。在某些语言中,如 C 和 C++,你可以将特定字符插入到输入中,如%f、%n和%p,以对打印到屏幕的数据进行格式化。例如,攻击者可能会在精心构造的输入中包含%n(将整数写入内存)参数,以将一个值写入他们通常无法访问的内存位置。攻击者可以利用这种技术使应用程序崩溃,或者导致操作系统执行某个命令,从而可能危及系统安全。
为了解决这种攻击,你应该通过过滤输入内容中意外或不希望出现的内容来验证输入。在格式字符串攻击的情况下,你可以尝试从输入中移除有问题的字符,或者你也可以设置错误处理机制,确保预见并补偿此类问题,从而避免它们造成麻烦。
身份验证攻击
身份验证攻击是指试图在没有适当凭证的情况下访问资源的攻击行为。在你的应用程序中实施强大的身份验证机制将有助于抵御这种攻击。
如果你要求应用程序用户创建强密码,将有助于防止攻击者入侵。如果你使用一个包含八个字符、全部为小写的密码,比如hellobob,那么一个相对强大的机器几乎可以瞬间破解这个密码。如果你使用一个包含十个字符、大小写字母、数字和符号的密码,比如H3lloBob!1,那么破解它所需的时间将增加到超过 20 年。⁵ 此外,你的应用程序不应使用那些内置且无法更改的密码(通常称为硬编码密码)。
此外,你应避免在客户端(即最终用户的机器)进行身份验证,因为这样会将身份验证措施置于容易受到攻击的位置。与大多数安全措施一样,当你让攻击者直接访问并随意操作你的控制机制时,你基本上就削弱了这些控制措施的有效性。
如果你依赖本地应用程序或脚本来执行身份验证步骤,然后仅仅将“通过”消息发送到服务器端,那么攻击者可以直接将此消息重复发送到你的后台,而无需完成身份验证。身份验证工作应尽可能远离攻击者的可接触范围,并且最好完全放在服务器端。
授权攻击
授权攻击是指试图在没有适当授权的情况下访问资源的攻击。与身份验证机制一样,将授权机制放置在客户端是一种不好的做法。任何在可能受到用户直接攻击或操控的环境中执行的过程,几乎可以确保在某些时候会成为安全问题。您应该改为在远程服务器上进行身份验证,或者如果设备是便携式的,则在设备硬件上进行身份验证,这样能给您更多的控制权。
当您为某项操作授权用户时,应遵循最小权限原则,如第三章所讨论的那样。如果您没有小心地仅授予最低限度的权限,无论是对用户还是对软件,都可能使自己面临攻击和被攻破的风险。
此外,每当用户或进程尝试进行需要权限的操作时,您应该始终重新检查,以确保该用户确实有权进行该操作,每次尝试时都应如此。如果您的用户因意外或故意而访问了应用程序的受限部分,您应该采取措施防止用户继续操作。
加密攻击
密码学很容易实现得不当,且如此会给您带来虚假的安全感。实现密码学时的一个大错误是开发自己独特的加密方案。目前使用的主要密码算法,如高级加密标准(AES)和里维斯-沙密尔-阿德尔曼(RSA),已经由成千上万的技术人员开发和测试,他们的生计就是开发这类工具。此外,这些算法之所以被广泛使用,是因为它们经得起时间的考验,并没有遭受严重的破解。虽然您自创的算法可能有一定的安全优势,但您可能不应将其用于存储或处理敏感数据的软件中。
除了使用已知的算法外,您还应考虑到所选机制可能在未来变得过时或遭到破坏。这意味着您应该以支持使用不同算法的方式来设计软件,或者至少设计应用程序时要确保更换算法不是一项艰巨的任务。您还应当使得更换软件所使用的加密密钥变得可能,以防您的密钥被破坏或暴露。
网络安全
攻击者可以使用多种技术来攻击网络应用程序,破坏您的机器、窃取敏感信息,并诱使您在不知情的情况下执行操作。您可以将这些攻击分为两大类:客户端攻击和服务器端攻击。
客户端攻击
客户端攻击要么利用加载到用户客户端上的软件中的弱点,要么依靠社会工程来欺骗用户。有很多这样的攻击,但我将特别关注一些使用网络作为攻击媒介的攻击。
跨站脚本攻击 (XSS) 是一种通过将用脚本语言编写的代码放入网页或其他媒体(如 Adobe Flash 动画和某些类型的视频文件)中进行的攻击,这些网页或其他媒体由客户端浏览器显示。当其他人查看网页或媒体时,他们会自动执行代码,从而执行攻击。
例如,攻击者可能会在博客文章的评论区中留下包含攻击脚本的评论。访问该网页的人的浏览器会执行该攻击。
第三章中提到的跨站请求伪造和点击劫持也是客户端攻击。在跨站请求伪造攻击中,攻击者以某种方式在网页上放置一个或多个链接,使其自动执行。该链接在用户当前已通过身份验证的另一个网页或应用程序上启动一项活动,例如在亚马逊上将商品添加到他们的购物车或将钱从一个银行帐户转移到另一个银行帐户。
如果您正在浏览多个页面并且仍然通过了攻击目标页面的身份验证,您可能会在后台执行攻击而永远不会知道。例如,如果您在浏览器中打开了多个页面,包括一个用于 MySpiffyBank.com(一家常见的银行机构)的页面,并且当您访问 BadGuyAttackSite.com 时仍然登录到该页面,则攻击页面上的链接可能会自动执行以让您将钱转移到另一个帐户。虽然攻击者很可能不知道用户通过了哪些网站的身份验证,但他们可以做出有根据的猜测,例如银行或购物网站,并包含专门针对这些网站的组件。
点击劫持是一种利用浏览器图形显示功能来诱骗您点击您可能不会点击的内容的攻击。点击劫持攻击通过在页面或页面的某些部分上放置另一层图形或文本来模糊您点击的内容。例如,攻击者可能会在带有“更多信息”按钮的另一层下隐藏“立即购买”按钮。
这些类型的攻击大多数情况下已经被常见浏览器的新版所阻挡,比如 Internet Explorer、Firefox、Safari 和 Chrome。本节讨论的最常见攻击将被这些浏览器自动阻挡,但在许多情况下,新攻击方式只会导致旧攻击的新变种。此外,许多客户端仍在运行过时或未打补丁的软件,容易受到多年前的攻击。了解常见攻击的工作原理并防范它们,不仅可以为你提供额外的安全保障,还能帮助你理解攻击者是如何开发出更新的攻击手段。
跟上最新的浏览器版本和更新非常重要,因为这些浏览器的供应商会定期更新其保护机制。此外,一些浏览器允许你应用额外的工具来保护自己免受客户端攻击。其中一个较为知名的工具是 NoScript(noscript.net/),它是 Firefox 的一个插件。NoScript 默认阻止大多数网页脚本,并要求你明确启用你希望运行的脚本。使用得当时,像这样的脚本阻止工具可以有效地防止许多你可能遇到的基于网页的威胁。
服务器端攻击
服务器端网页交易中的一些漏洞也可能导致问题。这些威胁和漏洞根据你的操作系统、web 服务器软件及其版本、脚本语言以及其他多个因素有所不同。然而,这些漏洞通常由几个共同的原因引起。
缺乏输入验证
如本章前面所讨论的,软件开发人员常常忽视对用户输入的正确验证,而一些最常见的服务器端网页攻击正是利用这一弱点进行攻击。
目录遍历攻击强烈说明了如果你不验证输入到你的 web 应用程序中的内容,可能会发生什么。攻击者可以利用这些攻击访问 web 服务器结构外的文件系统,从而访问存储内容的地方,这通过使用../字符序列实现,该序列将目录提升一级,从而改变目录。例如,在一个易受攻击的服务器上,访问https://www.vulnerablewebserver.com/../../../etc/passwd将显示/etc/password文件的内容。进一步解释,这个 URL 请求 web 服务器按以下方式在文件系统中移动:
-
从/var/www/html(通常存储网页内容的地方)
-
到/var/www
-
然后到/var
-
然后到 /(根目录)
-
然后回到/etc
-
然后显示/etc/passwd的内容
如果你小心地验证输入并过滤掉可能被用于危害安全的字符,你通常可以在攻击开始之前就阻止这种攻击。在许多情况下,过滤掉特殊字符(例如上述提到的字符以及*、%、‘、;和/)将完全消除此类攻击。
不当或不足的权限
指定不当的用户权限通常会导致 Web 应用程序和各种互联网面向的应用程序出现问题。Web 应用程序和页面通常使用敏感文件和目录,如果这些文件暴露给普通用户,将会导致安全问题。
例如,一个可能导致问题的领域是配置文件的暴露。许多使用数据库的 Web 应用程序(这是绝大多数应用程序的情况)都有配置文件,这些文件保存了应用程序用于访问数据库的凭据。如果这些文件及其所在目录没有得到妥善保护,攻击者可能仅仅通过读取文件中的凭据就能访问数据库,任意操作数据。对于存储敏感数据的应用程序来说,这可能是灾难性的。
同样,如果你没有注意保护 Web 服务器上的目录,可能会发现你的应用程序中的文件被更改、新文件被添加,或者某些文件的内容完全被删除。互联网面向的不安全应用程序通常不会持续太久,就会被攻破。
多余的文件
当 Web 服务器从开发阶段过渡到生产阶段时,开发人员常常忘记清理那些与运行网站或应用程序无直接关系的文件,或者是开发或构建过程中遗留下来的文件。
如果你留下了应用程序构建源代码的归档文件、文件的备份副本、包含你的笔记或凭据的文本文件,或者其他类似的相关文件,你可能正将攻击者需要的材料交给他们,从而使你的系统受到威胁。在部署 Web 服务器时,最后一个步骤应该是确保所有此类文件都已清理或在不再需要时移走。这也是一个良好的定期检查,确保在故障排除或升级期间,这些文件没有被遗留在公共可见的地方。
数据库安全
许多今天正在使用的网站和应用程序依赖数据库来存储它们显示和处理的信息。在某些情况下,数据库应用程序可能保存非常敏感的数据,如税务报告、医疗信息或法律记录,或者它们可能仅仅包含一个编织讨论论坛的内容。无论是哪种情况,这些数据对应用程序的拥有者来说都非常重要,如果数据被损坏或以未经授权的方式篡改,拥有者会感到不便。
有几个问题可能会危害你的数据库安全。经典的列表包括以下内容:⁶
-
网络协议中的未认证漏洞
-
网络协议中的认证漏洞
-
认证协议中的漏洞
-
未认证的功能访问
-
内在 SQL 元素中的任意代码执行
-
可安全执行 SQL 元素中的任意代码
-
通过 SQL 注入进行的权限提升
-
本地权限提升问题
尽管这些问题看起来可能非常复杂,但您可以将其分解为四个主要类别,如图 13-2 所示。在本节中,我将详细介绍每个类别。

图 13-2:数据库漏洞类别
协议问题
任何给定数据库所使用的协议可能存在漏洞。这包括用于与数据库通信的网络协议。这些协议中的漏洞通常涉及常见的软件开发问题,例如本章前面讨论的缓冲区溢出问题。
为了缓解已知的协议问题,您应使用数据库软件的最新版本和补丁,如第十一章所讨论的。为了保护您的数据库免受未知问题(尚未发现的问题)的影响,您应该限制对数据库的访问,无论是通过限制谁能够通过网络连接到数据库,使用第十章中讨论的一些方法,还是通过限制为数据库本身提供的权限和帐户,遵循最小权限原则。
根据使用的特定软件和版本,您还可能发现用于认证数据库的协议存在问题。一般来说,您的软件变得越旧,使用的认证协议就越可能不可靠。许多旧版应用程序会使用已知在某些时候被破解或存在明显架构缺陷的认证协议,例如通过网络以明文形式发送登录凭据,Telnet(一个远程访问设备的工具)就是这样做的。再次强调,最好的防御方法是确保您使用的是所有软件的最新版本。
未认证访问
当您允许用户或进程与数据库进行交互而不提供一组凭据时,就可能会产生安全问题。例如,通过 Web 界面对数据库的一些简单查询可能会意外暴露数据库中的信息;或者您可能会暴露关于数据库本身的信息,例如版本号,这样攻击者就能获得额外的材料来破坏您的应用程序。您还可能会遇到与本章开始时讨论的安全软件开发实践相关的各种问题。
如果用户或进程必须发送一组凭据来启动事务,那么该事务可以根据这些凭据进行监控和适当限制。如果您允许访问应用程序或工具集的某些部分而不要求凭据,您可能会失去对发生的操作的可视性和控制。
任意代码执行
任意代码执行(当通过网络进行时也称为远程代码执行)是指攻击者可以在系统上执行任何他们选择的命令,且没有任何限制。在数据库安全性方面,攻击者能够做到这一点,是因为与数据库通信的语言存在安全漏洞。结构化查询语言(SQL)是目前市场上许多常见数据库所使用的语言。它包含了多个内置元素,这些元素可能会带来安全风险,其中一些可以限制使用,而一些则无法限制。
这些语言元素可能会帮助软件中的漏洞暴露,或者如果你使用不安全的编码实践,也可能带来问题,比如允许攻击者在应用程序内执行任意代码。例如,如果服务器没有适当且安全地配置,任何人都可能从服务器的文件系统中读取或写入数据(使用load_file和outfile功能),这是许多数据库系统中常见的能力。一旦你能够与操作系统本身进行交互,就可以获得进一步攻击、窃取数据等的立足点。
针对这些攻击,你的最佳防御措施是双重的。从消费者方面来看,你应该使用所有软件的最新版本和补丁。从供应商方面来看,你应当要求在所有情况下都使用安全编码实践,以消除漏洞,并进行内部审查,确保这些实践得以遵守。
权限提升
最后一类主要的数据库安全问题是权限提升。权限提升攻击是指将你的访问权限提升到超出你在系统或应用程序中被授权的权限级别。权限提升的目的是获取软件的管理员权限,以进行需要高权限的其他攻击。
你通常可以通过SQL 注入进行权限提升,SQL 注入是一种攻击方式,攻击者通过提交包含 SQL 命令的输入来攻击应用程序。例如,一个较为常见的 SQL 注入例子是,在应用程序的用户名字段中输入字符串' or '1'='1。如果应用程序没有正确过滤输入,这个字符串可能会导致它自动记录你输入了一个合法的用户名,因为你设置了一个始终为真的条件,1 = 1。这使得你可能提升自己的权限等级。
如果你没有正确保护操作系统,数据库中也可能会发生权限提升。数据库应用程序运行在操作系统上,使用操作系统用户的凭证和权限,就像 Web 浏览器或任何其他应用程序一样。如果你不小心保护操作系统及其运行的用户帐户,正如在第十章和第十一章中讨论的那样,你所设置的任何数据库安全措施可能都没有效果。如果攻击者获取了运行数据库软件的帐户,他们可能会拥有做任何他们想做的事情的权限,包括删除数据库本身、修改任何数据库用户的密码、更改数据库功能设置、操控数据等等。
对于操作系统问题,最好的防御措施是第十一章中讨论的硬化和缓解步骤。如果你能防止攻击者首先侵入你的系统,你就能在很大程度上避免这些问题。
应用程序安全工具
你可以使用工具评估和提高应用程序的安全性。我在第十章和第十一章中讨论了其中一些工具,如嗅探器。其他一些工具则较为复杂,如模糊测试工具和逆向工程工具。某些工具还需要一定的软件开发经验和对相关技术的熟悉,才能有效使用。
嗅探器
你可以使用嗅探器来观察与应用程序或协议交换的特定网络流量。在图 13-3 中,我正在使用 Wireshark 来专门检查超文本传输协议(HTTP)流量。

图 13-3:Wireshark 中的 HTTP 流量
在某些情况下,你还可以使用特定操作系统的工具,从嗅探工具中获取额外的信息。一个很好的例子是 Linux 的网络监控工具 EtherApe,它不仅能嗅探网络流量,还能轻松地将你看到的流量与网络目标或特定协议关联起来,如图 13-4 所示。

图 13-4:EtherApe
通常,像这样的图形化表示可以让你更直观地解析数据,轻松地辨别出可能被忽视的流量模式。
Web 应用分析工具
目前有大量的工具可以用来分析网页或基于 Web 的应用程序,其中一些是商业工具,另一些是免费的。大多数这些工具用于寻找常见的漏洞,如 XSS 或 SQL 注入漏洞,错误设置的权限,冗余文件,过时的软件版本,以及其他许多安全问题。
OWASP Zed 攻击代理
OWASP Zed Attack Proxy (ZAP),如图 13-5 所示,是一个免费且开源的 web 服务器分析工具,它会检查本章中提到的许多常见漏洞。

图 13-5:ZAP
ZAP 会索引它能在目标 web 服务器上看到的所有文件和目录,这个过程通常被称为蜘蛛爬行,然后定位并报告它找到的任何潜在问题。
信任但验证
在使用 web 分析工具时,重要的一点是并非工具报告的所有潜在问题都是实际的安全问题。这些工具几乎都会返回一定数量的假阳性,表示问题并不存在。手动验证问题是否真实存在是非常重要的,在采取措施进行缓解之前一定要确认问题的真实性。
Burp Suite
你还可以选择一些商业化的 web 分析工具,它们的价格从几百美元到几千美元不等。一个这样的工具是 Burp Suite (portswigger.net/burp/),它的专业版(本书撰写时为每年 399 美元)倾向于价格较低,但仍然提供一整套功能。Burp Suite 运行在图形界面下,如图 13-6 所示,除了任何 web 评估产品中常见的标准功能外,它还包括一些更先进的工具,用于进行更深入的攻击。

图 13-6:Burp Suite
Burp Suite 也有一个免费的社区版本,允许你使用标准的扫描和评估工具,但不包括访问更高级功能的权限。
模糊测试工具
除了所有可以用来检查软件中已知漏洞的工具外,还有一些工具可以通过一个叫做模糊测试的过程帮助你发现完全意想不到的问题。用于这种技术的工具被称为模糊测试工具,它们通过用各种数据和输入从不同来源攻击你的应用程序,希望能够导致应用程序崩溃或出现一些意外的行为。
模糊测试的概念最初由 Barton Miller 在 1980 年代末为一门研究生级别的操作系统课程开发,⁷,并且它已经在安全研究人员和进行应用程序安全评估的人群中变得非常流行。Miller 在威斯康星大学的模糊测试网页是进一步阅读模糊测试的一个很好的资源,并且其中包括了激发这一分析领域的文献。你可以在 pages.cs.wisc.edu/~bart/fuzz/ 找到它。
有各种各样的模糊测试工具可用;一些具有特定焦点,例如 Web 应用程序或硬件设备,而其他一些则更为通用。OWASP 的模糊测试页面(www.owasp.org/index.php/Fuzzing)列出了许多当前的模糊测试工具和资料。
总结
软件开发过程中引入的几种常见漏洞可能会影响您的应用程序的安全性。您可能会遇到缓冲区溢出、竞争条件、输入验证攻击、身份验证攻击、授权攻击和密码学攻击等问题,仅举几例。尽管这些问题很常见,但通过遵循安全编码准则(无论是组织内部的还是来自国家标准与技术研究所(NIST)或美国计算机应急响应团队(US-CERT)等外部来源的),您可以相对轻松地解决大部分问题。
在网络安全方面,您应该关注客户端问题和服务器端问题。客户端问题涉及针对您运行的客户端软件或使用软件的人的攻击。您可以通过确保使用最新版本的软件及其相关补丁,有时添加额外的安全工具或插件来帮助减轻这些问题。服务器端攻击则是针对 Web 服务器本身的攻击。这些攻击通常利用权限不严格、输入验证不足以及开发或故障排除过程中遗留文件的存在。修复这些问题需要开发人员和安全人员的审慎处理。
对于几乎任何面向互联网的应用程序,数据库安全都是一个大问题。您应该注意协议问题、未经身份验证的访问、任意代码执行和权限提升等问题。通过遵循安全编码实践、保持软件版本和补丁的最新状态,并遵循最小权限原则,您可以减轻许多这些问题。
应用程序安全工具可以帮助您的应用程序抵御攻击。与网络和主机安全一样,您可以使用嗅探器来检查进出应用程序的网络数据。您还可以使用工具来检查现有应用程序的操作方式,并确定攻击者可能利用的弱点。此外,模糊测试工具和 Web 应用程序分析工具可以发现已知或未知的漏洞。
练习
-
模糊测试工具的作用是什么?
-
举一个竞争条件的例子。
-
为什么从 Web 服务器中删除多余的文件很重要?
-
Burp Suite 工具的作用是什么?在什么情况下可能会使用它?
-
网络安全的两大主要类别是什么?
-
SQL 注入攻击是针对数据库还是针对 Web 应用程序的攻击?
-
输入验证为什么重要?
-
解释一次跨站请求伪造(CSRF)攻击及可能采取的预防措施。
-
如何使用嗅探器来提高你的应用程序安全性?
-
如何在你的应用程序中防止缓冲区溢出?
第十四章:评估安全性

一旦你实施了安全措施,你需要确保它们确实在保护你的资产。如第六章所述,遵守法律和法规并不意味着你已经安全。既然如此,你如何评估自己安全的真实水平呢?你有两种主要的方式来做到这一点:漏洞评估和渗透测试。在本章中,我将讨论这两种方法。
漏洞评估
漏洞评估是一个使用专门设计的工具扫描漏洞的过程。两个常见的漏洞评估工具是 Qualys 和 Nessus。为了开发这些工具,供应商必须做大量的工作来编录漏洞,确定这些漏洞适用于哪些平台和应用程序,并按严重性对它们进行分类。供应商通常还会提供关于漏洞的潜在影响、如何修复漏洞等附加信息。
由于保持这些工具的更新需要大量工作,因此一些工具可能会相当昂贵。由于漏洞处于不断变化的状态,供应商需要不断跟进漏洞的变化、发布的修补程序、新出现的变种以及其他许多不断变化的因素。如果没有这些持续的更新,这些工具将很快失去实用性,无法检测到新漏洞或提供准确的信息。
最终,漏洞评估的结果只会给你一个关于你是否安全的信息——也就是,它会告诉你是否在每台主机上存在已知的特定漏洞。
进行漏洞评估需要几个步骤,本节将详细介绍。
映射和发现
要能够扫描漏洞,你需要知道在环境中有哪些设备。通常,你会对一组或一范围的主机进行扫描,而这些主机会随着时间发生变化。如果你没有某种方法来保持主机列表的最新,扫描结果将不完整,或者你可能会扫描完全错误的主机。这在云主机中尤其是一个问题,我将在本章稍后讨论这一点。
环境映射
开始你的漏洞扫描工作时,首先需要创建一个显示网络中设备的环境图。大多数漏洞扫描工具允许你直接创建这样的图;如果没有,你可以从专门为此目的开发的工具(如 Nmap (nmap.org/))导入主机信息。
通常,工具通过查询网络范围内的每个 IP 地址来创建这些网络图。对于大型网络范围,这可能需要很长时间——也许比主机出现和消失的时间还要长。例如,一个Class A的内部网络,通常可以通过其 IP 地址范围 10.0.0.0 到 10.255.255.255 来识别,它可以包含超过 1600 万个 IP 地址。另一个常见的内部网络方案,Class B网络,通常使用类似于 192.168.0.0 的 IP 地址,最多可以包含超过 65,000 个主机。在某些环境中,常常使用一个 Class A 网络和多个 Class B 网络来进行分段。由于大多数工具每查询一个 IP 地址都需要一秒钟或更长时间,你可能需要花费相当长的时间来完成扫描。
如果不小心慢速执行,进行这些发现扫描还可能给你的网络基础设施带来压力。在绘制网络图时,完全有可能过载网络设备,如路由器和交换机,导致它们无法响应。
发现新主机
除了绘制网络图来了解网络中原本存在的设备外,你还需要保持主机列表的最新。 如果你知道网络中任何新设备的位置,可以去特定地方查找,但如果它们不在你预期的位置,你可能会错过某些主机——特别是当它们被放置在某些隐蔽的位置以便隐藏时。
你可以主动或被动地发现新的主机。主动发现涉及一个类似于最初用来绘制网络图的过程:你逐一检查每个 IP,询问它是否有任何响应。这与绘制网络图时遇到的限制有很多相似之处,但你可以将这些更新限制在你已知包含设备的网络部分,以便能够更快速地扫描网络范围,间隔时间也更短。
你还可以使用被动扫描技术来发现网络上的设备。这通常涉及将设备放置在网络瓶颈点,例如路由器或交换机,以监听通过你网络基础设施的流量。通过这种方式,当设备在网络上通信时,你可以自动发现它们,并将其自动添加到你要扫描的主机列表中。
扫描
一旦你知道了自己的主机,你可以对它们进行漏洞扫描。有几种不同类型的扫描可以执行,每种类型也有不同的方法。
未认证扫描
主机的基本漏洞扫描通常是外部和未经认证的扫描。这类扫描不需要主机的任何凭据,也不需要除了网络连接之外的其他访问权限。这样,你几乎可以对任何设备进行扫描。根据扫描的设置,它通常会显示目标主机上开放的端口,揭示这些端口上服务的横幅信息,并根据收集的其他信息推测正在使用的应用程序和操作系统。
认证扫描
你还可以对主机执行认证扫描。认证扫描是使用有效凭据(通常是管理员凭据)进行的扫描。拥有登录主机的凭据通常可以让你收集内部信息,例如已安装的软件、配置文件的内容、文件和目录的权限、系统需要但当前没有的漏洞修补程序以及其他信息。这使你能够比从外部看到的更加全面地了解设备及其潜在漏洞,从而生成更加准确的设备安全状况图像。
然而,认证扫描要求你保持认证凭据的最新状态,既包括漏洞扫描工具端的凭据,也包括主机本身的凭据。一些检查还需要管理员访问权限,而一些系统所有者可能不愿意给你提供这种广泛访问权限的凭据。
代理扫描
代理扫描可以提供一种解决认证扫描一些缺点的方式。代理是安装在每个主机上的一小段软件。该软件作为系统上的用户运行,因此它是经过认证的,但不需要你在设备上或漏洞扫描工具中维护一组单独的凭据。
使用代理的另一个好处是,配置了代理的主机通常会自动向管理设备报告,从而减少了在网络中单独搜索设备的需求。尽管这并不能完全消除这一需求,因为一些设备,如网络设备,可能无法运行代理,但它应该大大减轻你的负担,因为大多数或所有你期望存在的设备应该会自动识别自己。
应用程序扫描
一些工具允许你扫描特定的应用程序。例如,许多成熟的扫描器专门用于扫描 Web 应用程序。这类扫描特定于 Web 技术和漏洞,并且比仅用于主机扫描的扫描器能更深入地搜索应用程序中的问题。你会发现,Web 应用程序扫描器通常是开发得更深入的应用程序漏洞扫描器,事实上,许多扫描器专门用于此目的。一个常见的扫描器是 Burp Suite(portswigger.net/burp/),它在第十三章中提到,是一个非常强大的工具,适用于 Web 应用程序的自动化和手动测试。
漏洞评估中的技术挑战
你可能会遇到许多技术挑战,这些挑战会让你更难以实例化和维护漏洞扫描器。一些最常见和频繁的障碍与云技术和虚拟化技术有关。
云
云中的资源给这里讨论的任务、流程和技术带来了一些变化。如第六章中所述,云提供商可能会有一些特定的规则,规定你在他们的环境中可以做什么、不能做什么,而这些规则可能因云提供商而异。
在进行漏洞扫描时,一些供应商可能根本不希望你在他们的环境中扫描设备,尤其是当他们使用某些云部署模型时。在大多数基础设施即服务(IaaS)模型中,你可能能够在某些边界内并根据特定规则进行扫描。在平台即服务(PaaS)环境中,供应商可能会限制你只能通过代理进行扫描,因为基础设施本身可能对你不可见。在软件即服务(SaaS)环境中,提供商可能根本不希望你进行扫描。
进行云扫描时的另一个考虑因素是环境的波动性。即使是在 IaaS 平台的情况下,设备和 IP 也可能在后台频繁变化,你可能会不小心发现自己正在扫描不再属于你的设备或网络。由未知实体发起的外部漏洞扫描产生的流量几乎无法与攻击流量区分开,因此你不应在没有适当权限的情况下,将这些工具指向其他公司的资源。
容器
云计算和虚拟化环境中另一个常见且可能有问题的特点是容器。容器是一种完全自包含并且可立即运行的虚拟化实例,专门设计用于让环境中某些部分根据负载波动轻松扩展和缩减。例如,您的 Web 服务器集群在深夜时可能负载很轻,缩减到几个容器即可满足需求。而在白天,服务器集群可能会扩展到数百个实例,并根据负载在一天内不断地扩展和缩减。
由于容器可能一秒存在,下一秒就消失,因此它们不适合进行定期的漏洞扫描。容器通常需要专门的漏洞扫描工具来评估其漏洞。
渗透测试
有些人认为漏洞扫描和渗透测试是一样的。虽然渗透测试人员可能会使用漏洞扫描的结果,但这两者是不同的活动,各自有独立的流程。
渗透测试,也称为pentesting或伦理黑客,是测试系统是否存在攻击者可能利用的漏洞的过程。渗透测试比漏洞扫描更深入,且通常是手动进行的。虽然漏洞评估可能帮助你评估部分安全性,但它无法全面评估。
渗透测试的目标是发现安全漏洞,以便在攻击者发现之前修复它们。渗透测试人员使用与真正的恶意黑客(称为黑帽黑客)相同的工具和技术。但与黑帽黑客不同,渗透测试人员有权进行这些活动,这意味着如果在未经另一家公司授权的情况下对你的系统进行渗透测试,那么这在任何意义上都将被视为网络犯罪行为。
你常常会看到渗透测试团队被称为红队,这是一个源自军事的术语。红队在评估系统安全性时,扮演攻击者的角色,尽可能真实地进行测试,同时确保测试安全合理。
渗透测试过程
渗透测试遵循一个相对标准的过程:范围界定、侦察、发现、利用和报告,如图 14-1 所示。

图 14-1:渗透测试过程
尽管对渗透测试过程的描述可能使用略有不同的术语或包含更多或更少的步骤,但一般概念几乎总是相同的。
范围界定
在你进行渗透测试之前,你需要知道你正在测试的对象是什么。你的渗透测试范围可以非常宽泛,比如“所有 MyCompany 的资产”,或者仅列出你可以测试的单独 IP 地址。
此外,组织可能会将你的测试限制在测试或质量保证(QA)环境中,以避免对生产系统造成影响。虽然渗透测试人员通常不会使用故意破坏性的攻击,但他们的工具和技术仍然可能产生不可预见的副作用。
组织还可能在其范围讨论中提供参与规则。这些规则可能会指定测试必须进行的时间、测试人员如果发现严重漏洞时应遵循的程序等等。这些规则会根据被测试的环境和具体组织的不同而大不相同。
侦察
侦察,或称侦查,是你在尝试攻击目标之前进行的研究。这可能包括在互联网上搜索有关目标环境或公司信息、查看招聘信息中是否提到特定技术、研究公司可能使用的一些技术等等。侦察通常是一个被动的活动,但并不总是如此,它几乎接近于将工具指向目标环境。
发现
渗透测试的发现阶段开始了积极的测试阶段。在这里,你可能会运行漏洞评估工具(如果你还没有运行过的话),并检查结果。在这一步中,你会查找主机上的开放端口和服务,以检测可能易受攻击的服务。根据你在这里发现的内容,你可能会根据你收集的具体信息进行额外的研究和侦察。
利用
这个阶段涉及尝试利用你在早期阶段发现的漏洞。这可能包括攻击环境中的漏洞,甚至将多个漏洞结合起来,以便深入渗透到环境中。同样,你在这里发现的内容可能会促使你进行额外的研究和侦察,因为你获得了关于目标的新信息,或者新的目标变得可用。
报告
渗透测试的最后一个阶段是报告。在这里,你需要仔细记录你发现的内容以及重新执行你成功实施的攻击所需的确切步骤。
这一步说明了漏洞评估和渗透测试之间的一个关键区别。漏洞评估可能会产生一个环境中潜在漏洞的列表,但工具无法保证攻击者能够实际利用这些漏洞。在渗透测试中,测试者只会报告那些导致系统可以被实际攻击或有很高可能被利用的问题。
渗透测试分类
你可以通过几种不同的方式对渗透测试进行分类。在测试时,你可以以不同的了解程度、不同的起点或者由不同的团队负责特定部分的方式来进行。
黑盒、白盒和灰盒
你会经常看到渗透测试被称为某种颜色或透明度级别。这指的是测试人员获得的关于被测试环境的信息量。
在黑盒测试中,测试人员对环境的了解仅限于测试范围。这与现实中的攻击非常相似,因为外部攻击者通常也会从这个地方开始。
白盒测试则为测试人员提供关于环境的所有可用信息。这可能包括所有主机的列表、使用的软件、应用程序和网站的源代码等等。尽管这不是一种现实的攻击方式,因为攻击者通常不会拥有这些信息,但它允许测试人员更为彻底地进行测试,并可能发现那些原本未被发现的问题。
灰盒测试是前面提到的两种测试类型的混合体。在这种测试中,攻击者会获得一些关于环境的内部信息,但不会像进行白盒测试时那样得到大量的信息。这是渗透测试中比较常见的一种类型。
内部与外部
渗透测试有时也被称为内部或外部测试,这可以有两种不同的解释。内部和外部可能指的是测试人员获得的访问权限类型。例如,如果你只给测试人员提供从互联网面向的部分访问权限,你可以称之为外部渗透测试。相反,如果测试人员和环境在同一网络上,无论是物理上还是通过虚拟私人网络(VPN)连接,你可以称之为内部测试。在这种情况下,内部测试可能会提供更大的访问权限,因为测试人员将在某些安全层级内开始他们的测试。
内部和外部也可能指的是进行渗透测试的人员或团队类型。外部测试可能指的是聘请的第三方测试公司来进行渗透测试,而内部测试则可能指的是为你的组织工作的渗透测试团队。
渗透测试目标
渗透测试有时会针对特定的技术或环境,如 Web 应用程序、网络或硬件。我将在本节中详细讨论这些内容。
网络渗透测试
尽管网络渗透测试这个术语听起来像是针对特定网络设备进行的测试,比如路由器或交换机,但它通常作为一个总括性渗透测试术语,用于广泛测试主机的漏洞、与 Web 应用程序相关的问题,甚至是容易受到社会工程攻击的员工。
网络渗透测试通常具有广泛的测试范围,但往往在有限的时间内进行(也称为时间限定),因此相较于专门聚焦的测试,它通常会稍显浅显,因为测试者可能没有足够的时间去深入挖掘测试范围内的所有内容。这是较为常见的一种测试类型。
应用程序渗透测试
应用渗透测试,另一种常见的测试类型,直接关注应用程序或应用程序环境。与网络渗透测试所需的工具和技能相比,应用程序测试通常涉及更加专业化的工具和技能,并且更加聚焦。它可以采用两种不同的方法:静态分析和动态分析。
静态分析涉及直接分析应用程序的源代码和资源。例如,测试者可能会仔细检查代码,寻找逻辑错误或由于特定代码行和使用的库而存在的漏洞。进行静态分析时,测试者必须具有强大的开发背景和对使用语言的掌握。
动态分析涉及在应用程序运行时进行测试——换句话说,测试已编译的二进制文件或正在运行的 Web 应用程序。虽然这不能像静态分析那样让测试者深入了解代码,但它更贴近真实的攻击方式。
Web 应用程序测试很常见,因为组织使用 Web 应用程序的频率很高,攻击者也很可能以它们为目标。移动和桌面应用程序也是特定应用程序测试的常见目标,通常通过静态分析技术进行测试。这些应用程序对攻击者来说尤其容易成为目标,因为应用程序和它们的资源的大部分存储在测试者可以控制的设备上。
物理渗透测试
物理渗透测试涉及通过直接测试物理安全措施,例如撬锁或绕过报警系统,来进行测试。像应用程序测试一样,这种类型的测试也需要特定的工具和技能来进行有效测试。这也是一种较为少见的测试类型,因为许多组织更关心黑客是否渗透进他们的系统,而不是有人撬开他们办公室门锁。
测试人员通常会与其他渗透测试一起进行物理渗透测试,或辅助其他测试。例如,如果攻击者能够进入一个设施并进入一个上锁的网络机房,他们可能能够将设备插入网络并留下,这样他们就可以在网络内部执行攻击,而无需亲自到场。
和其他类型的渗透测试一样,通常在特定范围内并以特定目标为导向进行物理渗透测试,无论你是想进入数据中心或办公室,还是将你的恶意设备插入网络。
社会工程测试
社会工程渗透测试使用了第八章中讨论的相同技术,并且通常与其他测试一起进行。社会工程测试非常有效,以至于测试人员几乎总是能够成功,因此许多组织拒绝允许这种测试。为了防止它们成功,工作场所通常需要仔细的准备和良好的教育(或者他们需要保持警觉)。
社会工程测试通常涉及钓鱼攻击,这些攻击容易设置并且可以传递给大量员工。冒充员工并试图未经授权访问设施或资源也是常见的策略。外部审计团队通常会直接走进一个受保护区域的门后,就像是没有使用通行证一样(记住这叫做尾随)。一旦他们这么做,他们就能将一台不明设备带入建筑物并留下,就像前面提到的那样。许多人不会对那个正在空桌子上插入并设置计算机的“IT 人员”提出疑问。
硬件测试
硬件测试是一种稍显不同的渗透测试类型。它通常发生在制造硬件设备的组织中,如网络设备、电视或物联网设备,这些设备常常是渗透测试者的肥沃土壤,因为它们的许多接口对普通用户不可访问且安全性不高。除了测试设备本身,渗透测试者还通常会测试设备上的固件、相关的移动应用程序以及设备用于与服务器通信的应用程序接口(APIs)。
在侦察和发现阶段,你很可能会发现关于硬件的具体信息。此步骤可能涉及拆解设备并查看内部组件和芯片上的标记。还经常可以找到制造商的规格说明,有时这能让你以设备制造商未曾预料的方式访问硬件。
硬件设备通常配备有通用异步接收/发送器(UART)或联合测试行动小组(JTAG)调试端口,打开设备后可以在电路板上访问这些端口。这些端口通常提供终端访问设备的功能,在很多情况下不需要任何身份验证,你可以利用它们来操控设备。
硬件设备的发现阶段可能会稍微复杂一些。测试人员可能会调查设备本身的固件,也许是在从设备内部的闪存存储芯片中提取其副本之后,或者他们可能会测试控制设备的模块或应用程序,甚至是相关的 Web 应用程序。这些设备的软件部分可能非常复杂,因为它们包括了整个操作系统和所有运行设备的应用程序。一些设备,例如智能手机,甚至可能有多个操作系统和软件层次。
漏洞悬赏计划
在过去几年中,许多组织已经开始将漏洞悬赏计划作为一种渗透测试。这些计划的规则和流程与常规的渗透测试基本相同,只是稍有不同。
在一个漏洞悬赏计划中,组织会向发现其资源中漏洞的人提供奖励。这些“悬赏”通常根据发现的问题的严重性而有所不同。奖励可以从一声感谢或一件 T 恤到数十万美元不等。举个例子,在 2018 年 1 月,谷歌向一位中国安全研究人员支付了 11.2 万美元,作为其在 Pixel 智能手机中发现的一个漏洞的奖励。¹
拥有悬赏计划的组织允许任何人在其设定的范围内进行测试,并根据指定的悬赏支付发现特定问题的测试人员奖励。让全世界的任何人随时攻击你的系统听起来可能是个糟糕的主意,但这些计划已经取得了很高的成功率。风险部分得以缓解,原因是这些组织通常会小心地明确规定其计划的具体范围,并且仅对在指定范围内报告的问题支付悬赏。因此,通常没有太多动机去进行范围之外的攻击——比如仅仅是为了“乐趣”。
很多平台代表其他公司管理漏洞悬赏计划。一些知名的漏洞悬赏平台包括 HackerOne (www.hackerone.com/), Bugcrowd (www.bugcrowd.com/), 和 Synack (www.synack.com/)。这些平台还使得那些希望参与计划的人可以轻松查看悬赏内容,以及每家公司提供的范围和奖励。
渗透测试中的技术挑战
就像漏洞分析一样,渗透测试也面临着技术挑战,其中许多问题是相似的。
云
云计算同样会给渗透测试带来一些问题。一个较大的问题是云服务提供商通常不喜欢测试者随意攻击他们的云基础设施。云服务提供商在资源管理方面非常严格,不太喜欢那些消耗大量资源的突发活动。如果允许测试,云服务提供商通常会要求你正式请求渗透测试的许可,并在特定的时间表内、从已知的 IP 地址进行测试。随意对云服务进行攻击的测试者,很可能会发现他们的流量被阻塞,或者更糟的是,相关部门介入。
寻找熟练的测试人员
同时,找到有经验的渗透测试人员也常常是一个难题。经验丰富的高技能测试人员与新手之间的差距,在你可以期待的结果上是巨大的。一个不熟练的测试人员可能仅仅停留在检查漏洞扫描工具输出的结果,这些结果很可能包含未经验证的误报,并遗漏了重大问题。
从渗透测试团队获得的结果较少的报告,往往不是你惊人安全性的有力证明,而是测试团队技能水平的体现。渗透测试技巧需要时间和经验来培养,但渗透测试需求量很大。因此,你可能会遇到一些未经监督的测试,这些测试由没有资格进行的测试人员执行。
这真的意味着你已经安全了吗?
在你评估了漏洞、进行了渗透测试,并修复了所有相关问题后,你真的安全吗?那些邪恶的黑帽黑客是否会在你坚不可摧的安全墙上猛撞,然后夹着尾巴灰溜溜地离开?嗯,可能不会。关于我讨论的所有内容,存在一些警告,而且没有什么是完美安全的。
现实测试
为了准确评估你的安全性,你需要进行现实的测试。这意味着你应该在不妨碍或歪曲结果的情况下进行漏洞评估和渗透测试。这比听起来要难得多。
参与规则
当你为测试设定参与规则时,必须严格遵守外部攻击发生的条件。这项工作的核心目的是模拟攻击者的行为,以便你能够首先发现并修复问题。如果你设定的参与规则人为地提高了你的安全等级,那就没有为自己提供任何帮助。例如,如果你设定了一个规则,要求不进行攻击链(连续进行多个攻击以深入渗透),那么你实际上已经阻止了攻击者获取更深层次环境的能力。
范围
出于类似的原因,设定一个实际可行的范围也非常重要。是的,你必须确保你的测试不会影响生产环境或降低客户服务水平,但组织通常会以这些因素作为借口,设定一个人为狭窄的范围。例如,如果你在零售环境中进行测试,并将处理支付卡数据的系统排除在范围之外,那么你就排除了攻击者试图访问的正是这个部分。
在进行范围决策以保护生产资产时,最好设置一个特定的环境来模拟生产环境,以便可以毫无顾虑地进行测试。
测试环境
如果你使用测试环境进行扫描或测试,你应该确保它与生产环境尽可能相似。许多组织通常会为渗透测试设置理想化的、经过充分修补和高度安全的环境,但在实际生产环境中却没有采取任何相同的措施。设置一个这种“波将金村”的环境与进行这些评估和测试的初衷是背道而驰的。
在这些情况下,通常在云环境中操作会很有帮助。在许多情况下,你可以准确地复制一个完全由云主机和基础设施组成的环境,并将其置于独立的隔离区域,这样你就可以测试一个与生产环境完全相同的环境,并在不再需要时拆除它。
你能发现自己的攻击吗?
评估你安全性的一种方法是,在运行漏洞扫描工具和渗透测试时,密切关注你的日常安全工具和告警系统。如果你正确地评估了安全性,这些活动应该与实际攻击几乎无法区分。如果你没有注意到你的测试进行中,那么你也很可能无法察觉到实际的攻击。在许多情况下,渗透测试人员的隐秘性通常不如攻击者,所以他们应该更容易被发现。
蓝队和紫队
在本章之前,我们提到过渗透测试人员是红队。红队的对立面是蓝队,负责保护组织并抓住红队。蓝队应该像红队攻击一样参与渗透测试的另一面。虽然你可能不想主动阻止来自红队的攻击(干扰测试是一个有争议的话题,因为它可能会影响测试结果),但你一定要记录并记录他们活动的证据。你应该有每次红队成功突破的攻击证据,或者至少了解它是如何避开你的注意力的,这样你才能修复你的安全漏洞。渗透测试的结果是申请额外资源或工具预算以弥补这些漏洞的一个极好的依据。
你也许会听到有人谈论紫队,它们在红队和蓝队之间架起桥梁,帮助确保两者尽可能高效地运作。在小型安全团队的环境中,紫队可能同时扮演红队和蓝队的角色。
仪器化
要在渗透测试人员行动时抓住他们,必须部署适当的监控工具。如果没有入侵检测系统、防火墙来监视异常流量,或者没有反恶意软件和文件完整性监控(FIM)工具等,你就无法获得用于监视这些攻击的数据。合理的工具组合会根据你的环境和安全预算有所不同,但如果需要,你也可以用较少的工具做很多事情。
至少,你应该运行一些在最低硬件上运行并且能够以极低开销部署的开源工具。例如,Security Onion 分发版可以从主机入侵检测、网络入侵检测、全时数据包捕获、日志、会话数据和交易数据中获取数据——这些都可以在预算有限的情况下实现。²
FIM 工具
FIM 工具用于监视特定机器上的应用程序和操作系统文件的完整性。通常,你会使用 FIM 仅监视敏感文件,例如定义操作系统或应用程序配置的文件,或保存特别敏感数据的文件。一旦文件发生变化,可能会有警报通知某人更改,或者在某些情况下,文件可能会自动恢复到原始状态。FIM 工具需要仔细调优,因为如果配置不当,它们可能会产生大量警报“噪音”。
警报
同样,来自工具的适当警报也至关重要。你需要有良好的警报机制,这样你才能知道何时捕获到测试者。你不希望你的工具在角落里低声自语,完全被蓝队忽视。通过适当的警报,你可以接近实时地响应攻击或渗透测试。
你还需要小心你发送的警报。如果你发送了太多警报,特别是虚假的警报,你的蓝队可能会开始完全忽视这些警报。来自医疗行业的常见术语警报疲劳³ 描述的就是这种情况。解决这个问题的方法是谨慎发送可操作的警报(那些能促使特定响应的警报),并尽量减少警报的数量。
今天安全并不意味着明天安全
重要的是要理解漏洞评估和渗透测试只是某一时刻的快照。一次性安全并不意味着永远安全。你必须定期迭代这些过程,以保持它们产生的信息的有效性。
你不断变化的攻击面
攻击面是指攻击者可以用来与你的环境交互的所有点的总和。它包括你的网页服务器、邮件服务器、托管的云系统、在酒店房间里使用笔记本电脑的销售人员、公开的 GitHub 仓库中的内部源代码以及其他成百上千个类似问题。由于你的攻击面由许多不断变化的部分组成,它处于不断变化的状态。你一个月前的漏洞评估或去年的渗透测试可能已经不再完全准确——这就是需要定期更新这些评估的原因。
攻击者也在变化
攻击者也在不断发展他们的攻击和工具。攻击者的数量远多于防御者,而且许多攻击者有直接的经济动机去更新他们的工具和技术。此外,攻击工具经常以丰厚的利润出售给其他黑客。整个网络犯罪行业的运作依赖于保持其工具的更新,至少和安全工具行业对防御者的依赖一样,甚至更多。
如果只安装一层安全防护,并期望它在几年后依旧和安装时一样坚固有效,这是一个错误的赌注。为了应对攻击者的变化,你也需要进行变化。这个“猫捉老鼠”游戏已经推动了安全行业多年来的发展,并将继续这样下去。
技术在你之下更新
更糟糕的是,你的技术可能会在你不知情的情况下发生变化。你常用的许多操作系统、移动应用、云服务、安全工具和代码库都会定期更新,由其创建和维护者进行更新。你智能电视中的操作系统可能在昨晚深夜更新了,暴露了你面临来自互联网的攻击。它可能会在明天再次更新以修复问题,而你当时可能依然不会知道。
你可能会在测试过程中发现由于更新引发的一些安全问题,或者你可能根本不知道这些问题的存在。为了防止这种问题发生,最好的做法是实施多层次的安全控制。
修复安全漏洞是昂贵的
最后,修复安全漏洞是非常昂贵的。它在资源、购买和更新安全控制的成本,以及修复应用程序和网站中不安全代码所需的开发工作方面都是昂贵的。比你想象的更常见的是,组织会在业务优先级面前忽视安全性。你可能会花费大量精力来 catalog 漏洞并编写渗透测试报告,结果却被告知你发现的关键问题要等到其他工作完成后才会处理。在安全领域中,这种情况非常常见,你可能会找到另一种方法来部署安全控制,或者用安全工具来填补漏洞。事情不会总是完美的,但你仍然必须尽力确保组织的安全。
摘要
在本章中,我讨论了漏洞评估以及你可以用来查找主机和应用程序中的安全问题的工具。我还讨论了漏洞评估与渗透测试的区别,以及为什么你应该同时进行这两者。
我介绍了渗透测试、进行渗透测试的过程,以及渗透测试的几个专业子领域,如 Web 应用程序和硬件测试。我还讨论了在云环境和虚拟化环境中进行渗透测试时所面临的挑战。
最后,我讨论了在经过漏洞评估和渗透测试的所有努力后,你是否真的变得更加安全,以及如何判断自己是否进行过测试(或没有进行)。漏洞评估和渗透测试代表了一个特定时间点,这意味着你必须不断地重复这些过程,以保持数据的更新。
练习
-
你可以使用哪些方法来检测环境中的新主机?
-
在漏洞扫描中,代理程序提供了哪些好处?
-
在容器的漏洞扫描中存在哪些挑战?
-
渗透测试与漏洞评估有何不同?
-
红队和蓝队有什么不同?
-
为什么渗透测试的范围定义很重要?
-
静态分析和动态分析有什么区别?
-
Bug 奖励计划与渗透测试有何不同?
-
你所测试的环境对测试结果有什么影响?
-
什么是警报疲劳?
第十五章:注释
该列表中的大量文章和参考文献可以通过所提供的链接在线免费获取。
第一章
-
2002 年《联邦信息安全现代化法案》,44 U.S.C. §3542。
-
Spafford, Eugene. “可引用的 Spaf 语录。” 更新于 2018 年 6 月 7 日。*
spaf.cerias.purdue.edu/quotes.html*。 -
Parker, Donn B. 《反击计算机犯罪》。霍博肯,NJ:Wiley,1998 年。
-
Munroe, Randall. “密码强度。” xkcd:浪漫、讽刺、数学和语言的网络漫画,访问于 2019 年 7 月 2 日。*
xkcd.com/936/*。
第二章
-
Cisco,Talos Intelligence Group. “电子邮件与垃圾邮件数据。” 访问于 2019 年 7 月 2 日。*
www.talosintelligence.com/reputation_center/email_rep*。 -
Pascual, Al, Kyle Marchini, 和 Sarah Miller. “2018 年身份欺诈:欺诈进入了一个新复杂性的时代。” Javelin Strategy,2018 年 2 月 6 日。*
www.javelinstrategy.com/coverage-area/2018-identity-fraud-fraud-enters-new-era-complexity/*。 -
Linux Screenshots. “Android 上的 Google Authenticator。”Flickr,2014 年 7 月 5 日。*
www.flickr.com/photos/xmodulo/14390009579/*。 -
Jain, Anil, Arun Ross, 和 Karthik Nandakumar. “简介。” 收录于 《生物特征识别导论》,第 1–49 页。纽约:Springer,2011 年。
-
Wolf, Flynn, Ravi Kuber, 和 Adam J. Aviv. “我们是如何让自己相信这些事情的?专家和非专家用户采纳生物特征认证的挑战。” 论文发表于 2018 年 4 月 21 日至 26 日于蒙特利尔,魁北克举办的计算机协会 CHI 计算机系统中的人类因素会议。
-
Eberz, Simon, 和 Kasper B. Rasmussen. “评估行为生物特征识别在持续身份验证中的应用:挑战与指标。” 收录于 2017 年 ACM 亚洲计算机与通信安全会议论文集。纽约:ACM,2017 年。
-
Greenberg, Andy. “OPM 现在承认 560 万联邦员工的指纹被黑客窃取,” Wired,2015 年 9 月 23 日。*
www.wired.com/2015/09/opm-now-admits-5-6m-feds-fingerprints-stolen-hackers/*。 -
Kharitonov. “文件:EToken NG-OTP.jpg。”Wikimedia,2009 年 8 月 11 日。*
commons.wikimedia.org/wiki/File:EToken_NG-OTP.jpg*。
第三章
-
Hardy, Norm. “困惑的副官:(或为什么能力可能会被发明)。” ACM SIGOPS 操作系统评论 22 卷,第 4 期(1988 年 10 月):36–38。
-
von Ahn, Luis, Manuel Blum 和 John Langford,“自动区分人类与计算机。” ACM 通信 47 卷,第 2 期(2004 年 2 月):56–60。
-
LaPadula, Leonard J. 和 D. Elliott Bell. 《安全计算机系统:数学基础》(MITRE 技术报告 2547,第 1 卷)。马萨诸塞州贝德福德,MITRE 公司,1973 年 3 月 1 日。
-
Biba, K.J. 《安全计算机系统的完整性考虑》(MITRE 技术报告 3153)。马萨诸塞州贝德福德,MITRE 公司,1975 年。
-
Lin, T.Y. “中国墙安全策略——一种激进模型。”载于 第五届年度计算机安全应用大会论文集。美国新泽西州皮斯卡特维,IEEE,1989 年。
第四章
-
美国政府问责办公室。 “数据保护:Equifax 和联邦机构在回应 2017 年数据泄露事件中的行动。” 2018 年 8 月 30 日。
www.gao.gov/products/GAO-18-559。 -
Kolodner, Jonathan S.,Rahul Mukhi,Martha E. Vega-Gonzalez 和 Richard Cipolla。“所有 50 个州现在都有数据泄露通知法。” Cleary Gottlieb,2018 年 4 月 13 日。
www.clearycyberwatch.com/2018/04/50-states-now-data-breach-notification-laws/ -
Dictionary.com. 词条“审计”。 访问时间:2019 年 7 月 2 日。
dictionary.reference.com/browse/audit/ -
Scott & Scott, LLP. “BSA 审计罚款计算器。” 访问时间:2019 年 7 月 2 日。
bsadefense.com/fine-calculator/。(使用计算器需要注册。) -
商业软件联盟。“BSA 终端用户奖励计划:条款与条件。” 访问时间:2019 年 7 月 2 日。
reporting.bsa.org/r/report/usa/rewardsconditions.aspx/ -
Qualys 主页。访问时间:2019 年 7 月 2 日。
www.qualys.com/。
第五章
-
美国国家安全局。 “18 世纪密码。”中央安全服务,数字媒体中心,密码学机器图像库。 访问时间:2019 年 7 月 2 日。
www.nsa.gov/Resources/Everyone/Digital-Media-Center/Image-Galleries/Cryptologic-Museum/Machines/igphoto/2002138769/ -
美国国家安全局. “Enigma.” 中央安全服务,数字媒体中心,密码学机器图片画廊。访问于 2019 年 7 月 19 日.
www.nsa.gov/Resources/Everyone/Digital-Media-Center/Image-Galleries/Cryptologic-Museum/Machines/igphoto/2002138774/ -
Crypto Museum. “Enigma-E:自己动手制作 Enigma.” 最后修改于 2017 年 10 月 15 日.
www.cryptomuseum.com/kits/enigma/index.htm -
Flash Enigma 模拟器。访问于 2019 年 7 月 2 日.
www.enigmaco.de/. -
Petitcolas, Fabien. “Kerckhoffs 原则《军事密码学》.” 信息隐藏主页。访问于 2019 年 7 月 2 日.
petitcolas.net/kerckhoffs/index.html -
Jacobs, Jay. “更新香农法则.” 行为安全(博客),2010 年 5 月 28 日.
beechplane.wordpress.com/2010/05/28/updating-shannons-maxim/. -
Diffie, Whitfield, 和 Martin E. Hellman. “密码学的新方向.” IEEE 信息理论学报 IT-22, 第 6 期 (1976): 644–54.
ee.stanford.edu/~hellman/publications/24.pdf. -
Warburton, Dan. “希思罗机场安全文件被丢弃在街头引发恐怖威胁.” 镜报, 2017 年 10 月 29 日.
www.mirror.co.uk/news/uk-news/terror-threat-heathrow-airport-security-11428132 -
VeraCrypt 首页。访问于 2019 年 7 月 2 日.
www.veracrypt.fr/. -
“Bitlocker.” Microsoft 文档, 2018 年 1 月 25 日.
docs.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-overview/. -
Broz, Milan, 编辑. “DMCrypt.” 2019 年 6 月更新.
gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt/. -
Greenwald, Glenn, Ewen MacAskill, 和 Laura Poitras. “爱德华·斯诺登:NSA 监控曝光背后的举报者.” 卫报, 2013 年 6 月 11 日.
www.theguardian.com/world/2013/jun/09/edward-snowden-nsa-whistleblower-surveillance/
第六章
-
英国航空公司. “客户数据盗窃。” 访问日期:2019 年 7 月 2 日.
www.britishairways.com/en-gb/information/incident/data-theft/latest-information/ -
FedRAMP. “FedRAMP 加速:政府内变革的案例研究。” 2017 年春季,访问日期:2019 年 7 月 2 日.
www.fedramp.gov/assets/resources/documents/FedRAMP_Accelerated_A_Case_Study_For_Change_Within_Government.pdf -
FedRAMP. “FedRAMP PMO,联邦风险与管理计划仪表盘。” 访问日期:2019 年 7 月 2 日.
marketplace.fedramp.gov/#/products?sort=productName&status=Compliant -
Segal, Troy. “安然丑闻:华尔街宠儿的坠落。” Investopedia, 更新于 2019 年 5 月 29 日.
www.investopedia.com/updates/enron-scandal-summary/ -
美国联邦存款保险公司. “格兰姆-利奇-布莱利法案下的隐私法问题。” 更新于 2009 年 1 月 29 日.
www.fdic.gov/consumers/consumer/alerts/glba.html -
InMobi. “InMobi—FTC 和解,常见问题。” 访问日期:2019 年 7 月 2 日.
www.inmobi.com/coppa-ftc/ -
Davies, Jessica. “GDPR 的影响,5 张图表。” Digiday, 2018 年 8 月 24 日.
digiday.com/media/impact-gdpr-5-charts/ -
国际标准化组织. “关于 ISO 的一切。” 访问日期:2019 年 7 月 2 日.
www.iso.org/about-us.html -
Corkery, Michael, 和 N. Popper. “从农场到区块链:沃尔玛追踪其生菜。” 纽约时报, 2018 年 9 月 24 日.
www.nytimes.com/2018/09/24/business/walmart-blockchain-lettuce.html
第七章
-
Haase, Kurt. “Kurt 的 OPSEC 法则。” 观点 2 (1992)。 宾夕法尼亚州韦恩:国家分类管理协会。
-
Haase.
-
Haase.
-
Cimpanu, Catalin. “MongoDB 服务器泄露了来自电子营销服务的 1100 万个用户记录。” ZDNet, 2018 年 9 月 18 日.
www.zdnet.com/article/mongodb-server-leaks-11-million-user-records-from-e-marketing-service/ -
Shodan 主页。访问日期:2019 年 7 月 2 日。
www.shodan.io/ -
孙子。《孙子兵法》。由 Samuel B. Griffith 翻译。英国牛津:牛津大学出版社,1971 年。
-
孙子。
-
操作安全专业人员协会。“OPSEC 的起源。”访问日期:2018 年 10 月 3 日。
www.opsecprofessionals.org/origin.html(该网站已停用)。 -
中央情报局。“乔治·华盛顿,1789–97。” 情报研究中心,2007 年 3 月 19 日,更新于 2008 年 7 月 7 日。
www.cia.gov/library/center-for-the-study-of-intelligence/csi-publications/books-and-monographs/our-first-line-of-defense-presidential-reflections-on-us-intelligence/washington.html -
国家安全局。《紫龙:美国 OPSEC 计划的起源与发展(第六系列,NSA 时期,第 2 卷)》。马里兰州福特米德:国家安全局,密码学历史中心,1993 年。访问日期:2019 年 7 月 2 日。
www.nsa.gov/news-features/declassified-documents/cryptologic-histories/assets/files/purple_dragon.pdf -
SCIP 主页。访问日期:2019 年 7 月 2 日。
www.scip.org/ -
白宫。“NSDD 298 国家行动安全计划。” 1988 年 1 月 22 日,访问日期:2019 年 7 月 2 日。
catalog.archives.gov/id/6879871/ -
海军行动安全支持小组。“海报。”美国海军,访问日期:2019 年 7 月 2 日。
www.navy.mil/ah_online/opsec/posters.asp
第八章
- Penzenstadler, Nick,Brad Heath 和 Jessica Guynn。“我们阅读了俄罗斯人购买的 3,517 条 Facebook 广告。以下是我们发现的内容。” 《今日美国》,2018 年 5 月 11 日。
www.usatoday.com/story/news/2018/05/11/what-we-found-facebook-ads-russians-accused-election-meddling/602319002/
第九章
-
McConnell, N.C.,K.E. Boyce,J. Shields,E.R. Galea,R.C. Day 和 L.M. Hulse。“英国 9/11 疏散研究:WTC1 幸存者的识别与反应阶段分析。” 《火灾安全杂志》 45 卷,第 1 期(2008 年):21-34。
www.sciencedirect.com/science/article/pii/S0379711209001180/ -
Steven Musil. “索尼为软盘举行最后告别仪式。” CNET News,2010 年 4 月 25 日。
www.cnet.com/news/sony-delivers-floppy-disks-last-rites/。 -
Patterson, David A.,Garth Gibson 和 Randy H. Katz. “廉价磁盘冗余阵列(RAID)的案例。” 见 SIGMOD’88:1988 年 ACM 管理数据国际会议论文集(第 109-116 页)。纽约:计算机学会。
dl.acm.org/citation.cfm?id=50214/。 -
Blancco. 剩余数据:数据恢复研究。2016 年。访问日期:2019 年 7 月 2 日。
www.blancco.com/resources/rs-the-leftovers-a-data-recovery-study/。 -
海军历史与遗产司令部。 “NJ 96566-KN 第一个‘计算机虫’。” 美国海军,访问日期:2019 年 7 月 2 日。
www.history.navy.mil/content/history/nhhc/our-collections/photography/numerical-list-of-images/nhhc-series/nh-series/NH-96000/NH-96566-KN.html。
第十章
-
Kazeem, Yomi. “喀麦隆英语地区的互联网停运终于结束。” Quartz Africa,2017 年 4 月 20 日。
qz.com/africa/964927/caemroons-internet-shutdown-is-over-after-93-days/。 -
Mogul, Jeffrey C. “面向 Unix 基础网关的简单灵活的数据报访问控制。” USENIX 会议论文集,1989 年。
-
Higgins, Kelly Jackson. “谁发明了防火墙?” Dark Reading,2008 年 1 月 15 日。
www.darkreading.com/who-invented-the-firewall/d/d-id/1129238。 -
Kanellos, Michael. “新的 Wi-Fi 距离纪录:382 公里。” CNET News,2007 年 6 月 18 日。
www.cnet.com/news/new-wi-fi-distance-record-382-kilometers/。 -
Burke, Stephanie. “Wi-Fi 联盟推出 Wi-Fi 认证 WPA3 安全协议。” Wi-Fi 联盟,2018 年 6 月 25 日。
www.wi-fi.org/news-events/newsroom/wi-fi-alliance-introduces-wi-fi-certified-wpa3-security/。
第十一章
-
Schneider, Fred B., 编辑。网络空间中的信任。华盛顿特区:国家学术出版社,1999 年。
-
Trend Micro 首页。访问时间:2019 年 7 月 2 日.
www.trendmicro.com/vinfo/us/security/news/malware/. -
Sentryo. “Triton 工业恶意软件分析。” 2018 年 3 月 27 日.
www.sentryo.net/analysis-of-triton-industrial-malware/. -
Barrantes, E.G., D.H. Ackley, T.S. Palmer, D.D. Zovi, S. Forrest, 和 D. Stefanovic, “随机指令集仿真来破坏二进制代码注入攻击。” 见 CCS ’03:第 10 届 ACM 计算机与通信安全会议论文集(第 281–289 页)。纽约:计算机协会,2003 年。
第十二章
-
Oberhaus, Daniel. “什么是 SS7,中国是否在用它窃听特朗普的手机?” 《Vice》, 2018 年 10 月 25 日.
vice.com/en_us/article/598xyb/what-is-ss7-and-is-china-using-it-to-spy-on-trumps-cell-phone/. -
Browner, Ryan. “研究表明黑客正在使用被列入黑名单的比特币应用窃取资金和个人数据。” 《CNBC》, 2018 年 1 月 24 日.
www.cnbc.com/2018/01/24/hackers-targeting-apple-google-app-stores-with-malicious-crypto-apps.html. -
Miessler, Daniel. “ICS/SCADA 入门。” Daniel Miessler(博客),2016 年 2 月 4 日.
danielmiessler.com/study/ics-scada/. -
Ivezic, Marin. “Stuxnet:网络动能武器的始祖。” 《CSO》, 2018 年 1 月 22 日.
www.csoonline.com/article/3250248/cyberwarfare/stuxnet-the-father-of-cyber-kinetic-weapons.html. -
Broad, William J., John Markoff, 和 David E. Sanger. “以色列对蠕虫的测试被认为是伊朗核延迟的关键。” 《纽约时报》, 2011 年 1 月 15 日.
www.nytimes.com/2011/01/16/world/middleeast/16stuxnet.html. -
美国食品药品监督管理局. “影响美敦力植入式心脏设备编程器的网络安全更新:FDA 安全通信。” 2018 年 10 月 11 日.
www.fda.gov/MedicalDevices/Safety/AlertsandNotices/ucm623184.htm. -
Greenberg, Andy. “黑客远程杀死高速公路上的吉普车——我正坐在车里。” 《连线》, 2015 年 7 月 21 日.
www.wired.com/2015/07/hackers-remotely-kill-jeep-highway/. -
McFarlane, Duncan. “物联网的起源。” RedBite(博客),2015 年 6 月 26 日.
www.redbite.com/the-origin-of-the-Internet-of-things/. -
Lynx Software Technologies. “惠普使用 LynxOS®实时操作系统。” 2019 年 7 月 2 日访问.
www.lynx.com/hp-laserjet-printers/. -
HP 客户支持–知识库。“HP 打印安全公告—KRACK 攻击潜在漏洞。” 惠普,2018 年 1 月 9 日,2018 年 1 月 12 日更新.
support.hp.com/us-en/document/c05872536. -
Tierney, Andrew. “完全攻破 Tapplock 智能锁。” Pen Test Partners,2018 年 6 月 13 日.
www.pentestpartners.com/security-blog/totally-pwning-the-tapplock-smart-lock/. -
Stykas, Vangelis. “完全攻破 Tapplock 智能锁(通过 API 方式)。” Medium,2018 年 6 月 15 日.
medium.com/@evstykas/totally-pwning-the-tapplock-smart-lock-the-api-way-c8d89915f025/. -
Woolfe, Nicky. “专家称,导致互联网中断的 DDoS 攻击是历史上最大规模的此类攻击。” 卫报,2016 年 10 月 26 日.
www.theguardian.com/technology/2016/oct/26/ddos-attack-dyn-mirai-botnet/.
第十三章
-
Target. “Target 确认美国商店支付卡数据被未经授权访问。” 新闻稿,2013 年 12 月 19 日.
corporate.target.com/press/releases/2013/12/target-confirms-unauthorized-access-to-payment-car/. -
Target. “Target 更新数据泄露和财务表现。” 新闻稿,2014 年 1 月 10 日.
corporate.target.com/press/releases/2014/01/target-provides-update-on-data-breach-and-financia/. -
Shu, Xiaokui,Ke Tian,Andrew Ciambrone 和 Danfeng Yao. “突破 Target:对 Target 数据泄露的分析及经验教训。” arXiv,2017 年 1 月 18 日,2019 年 7 月 2 日访问.
arxiv.org/pdf/1701.04940.pdf. -
Schiela, Robert. “SEI CERT 编码标准。” Confluence: 卡内基梅隆大学软件工程研究所,2019 年 2 月 5 日。
wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards/。 -
Gibson Research Corporation. “你的干草堆有多大?”访问日期:2019 年 8 月 2 日。
www.grc.com/haystack.htm/ -
Litchfield, David, Chris Anley, John Heasman 和 Bill Grindlay. 《数据库黑客手册:防御数据库服务器》。霍博肯,NJ: Wiley, 2005 年。
-
Miller, Bart. “计算机科学系,威斯康星大学麦迪逊分校,CS 736,1998 年秋季,项目列表”(大纲)。访问日期:2019 年 7 月 2 日。 http://pages.cs.wisc.edu/~bart/fuzz/CS736-Projects-f1988.pdf。
第十四章
-
Hartmans, Avery. “一位超级明星中国黑客刚刚从谷歌赢得了 11.2 万美元,这是谷歌历史上最大的漏洞奖励。” Business Insider,2018 年 1 月 20 日。
www.businessinsider.com/guang-gong-qihoo-360-google-pixel-2-hacking-bug-bounty-2018-1。 -
Security Onion 首页。访问日期:2019 年 7 月 2 日。
securityonion.net/ -
Ryznar, Barbara A. “警报疲劳:一种意外的后果。” Illuminating Informatics(博客)。 AHIMA 期刊,2018 年 7 月 3 日。
journal.ahima.org/2018/07/03/alert-fatigue-an-unintended-consequence/。


浙公网安备 33010602011771号