Skip to content

Latest commit

 

History

History
251 lines (146 loc) · 23.3 KB

ch11.md

File metadata and controls

251 lines (146 loc) · 23.3 KB

第11章 信息安全性

如果你把秘密告诉风,就不该怪风告诉树。

—Kahlil Gibran

信息安全性是衡量系统保护数据和信息免受未经授权的访问的能力,同时仍向授权的人员和系统提供访问权限的指标。攻击(即针对计算机系统采取的旨在造成伤害的操作)可以采取多种形式。它可能是未经授权尝试访问数据或服务或者是修改数据,也可能是拒绝向合法用户提供服务。

表征安全性的最简单方法侧重于三个特征:保密性、完整性和可用性 (CIA):

  • 保密性 是保护数据或服务免受未经授权的访问的属性。例如,黑客无法在政府计算机上访问你的所得税申报表。

  • 完整性 是数据或服务不受未经授权的操纵的属性。例如,自从老师分配成绩后,你的成绩就不会发生变更。

  • 可用性 是系统可供合法使用的属性。例如,拒绝服务攻击不会阻止你从在线书店订购书。

我们将在通用场景中使用这些特征来讨论信息安全性。

安全域中使用的一种技术是威胁建模。“攻击树”类似于第4章中讨论的故障树,安全工程师使用它来确定可能的威胁。树的根是成功的攻击,节点可能是成功攻击的直接原因。子节点分解直接原因,依此类推。攻击是试图破坏中央情报局,攻击树的叶子是场景中的触发条件。对攻击的响应是保护中央情报局或通过监视他们的活动来阻止攻击者。

隐私

与安全密切相关的一个问题是隐私的质量。近年来,隐私问题变得越来越重要,欧盟通过《通用数据保护条例》(GDPR)将其纳入法律。其他司法管辖区也采用了类似的规定。

实现隐私是关于限制对信息的访问,而信息又是关于哪些信息应该被限制访问以及应该允许谁可以访问。应保密的信息的一般术语是个人身份信息 (PII)。美国国家标准与技术研究院 (NIST) 将 PII 定义为“由机构维护的有关个人的任何信息,包括 (1) 可用于区分或追踪个人身份的任何信息,例如姓名、社保号码、生日和籍贯、母亲的婚前姓氏或生物识别记录;(2)与个人链接或可链接的任何其他信息,例如医疗、教育、财务和就业信息。

允许谁访问此类数据的问题更为复杂。用户通常会被要求查看并同意组织发起的隐私协议。这些隐私协议详细说明了收集组织之外谁有权查看 PII。收集组织本身应具有管理该组织内谁可以访问此类数据的策略。例如,考虑一个软件系统的测试人员。要执行测试,应使用实际数据。这些数据是否包括个人身份信息?通常,PII 需要被遮盖后用于测试。

通常,架构师(可能代表项目经理)被要求验证 PII 是否对不需要访问 PII 的开发团队成员隐藏。

11.1 信息安全性的通用场景

基于这些考虑,我们现在可以描述信息安全性的通用场景的各个部分,总结在 表 11.1 中。

表 11.1 信息安全性的通用场景

场景部分 描述 可能的值
来源 攻击可能来自组织外部或组织内部。攻击可能源自人类或其他系统。它可能以前已被识别(正确或不正确)或可能未知的。

  • 另一个系统

    即:
  • 组织内部
  • 组织外部
  • 先前确定的
  • 未知
  • 触发事件 该触发事件是一次攻击。 未经授权的尝试:
  • 显示数据
  • 捕获数据
  • 更改或删除数据
  • 访问系统服务
  • 更改系统的行为
  • 降低可用性
  • 工件 攻击的目标是什么?
  • 系统服务
  • 系统内的数据
  • 系统的一个或多个组件
  • 系统生成或使用的数据
  • 环境 攻击发生时系统的状态如何? 该系统是:
  • 在线或离线
  • 联网的或者未联网的
  • 有防火墙保护的或者没有保护的
  • 全部可操作的
  • 部分可操作的
  • 不可操作的
  • 响应 该系统确保可以维护保密性、完整性和可用性。 处理的执行方式是
  • 保护数据或服务免受未经授权的访问
  • 未经授权不得操纵数据或服务
  • 处理各方得到保证
  • 处理各方不能否认他们的参与
  • 数据、资源和系统服务将可用于合法用途

    系统通过以下方式跟踪其中的活动
  • 记录文件访问或修改
  • 记录访问数据、资源或服务的尝试
  • 在发生明显攻击时通知适当的实体(人员或系统)
  • 响应度量 系统响应的度量与成功攻击的频率、抵抗和修复攻击的时间和成本以及这些攻击的间接损害有关。 以下一项或多项:
  • 有多少资源受到损害或被保护
  • 攻击检测的准确性
  • 检测到攻击之前经过了多长时间
  • 抵抗了多少次攻击
  • 从成功的攻击中恢复需要多长时间
  • 有多少数据容易受到特定攻击
  • 图11.1 显示了从通用场景派生出的具体场景的示例:远程位置的一名心怀不满的员工试图在正常操作期间不正确地修改工资率表。检测到未经授权的访问,系统维护审计跟踪,并在一天内恢复正确的数据。

    A sample security scenario is presented.

    图 11.1 安全方案示例

    11.2 信息安全策略

    思考如何在系统中实现信息安全性的一种方法是关注物理安全性。安全设施只允许有限地进入(例如,通过使用围栏和安全检查站),有侦查入侵者的手段(例如,通过要求合法访客佩戴徽章),有威慑机制(例如,通过武装警卫),有应对机制(例如,自动锁门)和恢复机制(例如,异地备份)。这些导出了四类策略:检测、抵抗、反应和恢复。信息安全策略的目标显示在 图11.2 中,图11.3 概述了这些策略类别。

    The goal of security tactics to control response diagram is presented. The stimulus is an attack. The response is the system detects, resists, or recovers.

    图11.2 信息安全策略的目标

    A flowchart of the security tactics.

    图 11.3 信息安全策略

    检测攻击

    检测攻击包含四类策略:检测入侵、检测服务拒绝、验证消息完整性和检测消息延迟。

    • 检测入侵。 此策略将系统中的网络流量或服务请求模式与存储在数据库中的一组签名或已知恶意行为模式进行比较。签名可以基于协议特征、请求特征、有效负载大小、应用程序、源或目标地址或端口号。

    • 检测拒绝服务。 此策略将进入系统的网络流量的模式或特征与已知拒绝服务 (DoS) 攻击的历史配置文件进行比较。

    • 验证消息完整性。 此策略采用校验和或哈希值等技术来验证消息、资源文件、部署文件和配置文件的完整性。校验和是一种验证机制,其中系统单独维护文件和消息的冗余信息,并使用此冗余信息来验证文件或消息。哈希值是由哈希函数生成的唯一字符串,其输入可以是文件或消息。即使原始文件或消息中的微小更改也会导致哈希值发生重大更改。

    • 检测消息传递异常。 此策略旨在检测潜在的中间人攻击,其中恶意方正在拦截(并可能修改)消息。如果消息传递时间通常是稳定的,则通过检查传递或接收消息所需的时间,可以检测到可疑的耗时行为。同样,连接和断开连接的异常数量可能指示出此类攻击。

    抵抗攻击

    有许多众所周知的抵抗攻击的方法:

    • 识别参与者。识别参与者(用户或远程计算机)侧重于识别系统的任何外部输入的来源。用户通常通过用户 ID 进行标识。其他系统可以通过访问代码、IP 地址、协议、端口或其他方式“识别”。

    • 验证参与者。身份验证意味着确保参与者实际上是或者它声称的那样。密码、一次性密码、数字证书、双因素身份验证和生物识别提供了一种身份验证方法。另一个例子是CAPTCHA(完全自动化的公共图灵测试,用于区分计算机和人类),这是一种用于确定用户是否是人类的挑战-响应测试。系统可能需要定期重新进行身份验证,例如当你的智能手机在一段时间不活动后自动锁定时。

    • 授权参与者。授权意味着确保经过身份验证的参与者有权访问和修改数据或服务。此机制通常通过在系统内提供一些访问控制机制来启用。可以按参与者、参与者类或角色分配访问控制。

    • 限制访问。此策略涉及限制对计算机资源的访问。限制访问可能意味着限制资源的访问点数量,或限制可以通过访问点的流量类型。这两种限制都会最大程度地减少系统的攻击面。例如,当组织希望允许外部用户访问某些服务但不允许访问其他服务时,将使用隔离区 (DMZ)。DMZ 位于外网和内网之间,由一对防火墙保护,两端各一个。内部防火墙是对内联网的单点访问;它的作用是对接入点数量的限制,并控制允许通过 内网 的流量类型。

    • 限制暴露。 这种策略的重点是尽量减少敌对行动造成的损害的影响。这是一种被动防御,因为它不会主动阻止攻击者造成伤害。限制暴露通常是通过减少可以通过单个接入点访问的数据或服务量来实现的,因此减少在单个攻击中受到损害。

    • 加密数据。保密性通常是通过对数据和通信应用某种形式的加密来实现的。加密为永久维护的数据在授权之外提供额外的保护。相比之下,通信链路可能没有授权控制。在这种情况下,加密是通过可公开访问的通信链路传递数据的唯一保护。加密可以是对称的(读取器和写入器使用相同的密钥)或非对称的(读取器和写入器使用成对的公钥和私钥)。

    • 分离实体。分离不同的实体可以限制攻击的范围。系统内部的分离可以通过以下方式实现:在连接到不同网络的不同服务器上进行物理分离,使用虚拟机,或者通过“空气间隙”——即系统的不同部分之间没有电子连接。最后,敏感数据通常与非敏感数据分离,以减少那些可以访问非敏感数据的用户发动攻击的可能性。

    • 验证输入。在系统或其部分接收到输入时进行清理和检查是抵御攻击的重要早期防线。这通常通过使用安全框架或验证类来实现,以执行诸如过滤、规范化和输入的清理等操作。数据验证是防御诸如SQL注入(在其中插入恶意代码到SQL语句中)和跨站脚本攻击(XSS,服务器上的恶意代码在客户端上运行)等攻击的主要形式。

    • 更改凭据设置。许多系统在交付时都分配了默认的安全设置。强制用户更改这些设置可以防止攻击者通过可能公开可用的设置来访问系统。同样地,许多系统要求用户在一定时间后选择新的密码。

    对攻击做出反应

    有几种策略旨在应对潜在的攻击。

    • 撤销访问权限。 如果系统或系统管理员认为攻击正在进行,则访问可能会严格限制为敏感资源,即使对于正常合法的用户和使用也是如此。例如,如果你的桌面受到病毒的威胁,则在从系统中删除病毒之前,你对某些资源的访问可能会受到限制。

    • 限制登录。重复的登录失败尝试可能表明存在潜在的攻击。许多系统如果从某台计算机反复尝试登录账户失败,会限制从该计算机访问。当然,合法用户在尝试登录时可能会犯错,因此限制访问可能只持续一段特定时间。在某些情况下,系统会在每次不成功的登录尝试后将锁定时间加倍。

    • 通知参与者。持续的攻击可能需要操作员、其他人员或合作系统采取行动。当系统检测到攻击时,必须通知此类人员或系统(一组相关参与者)。

    Recover from Attacks

    从攻击中恢复

    一旦系统检测到并尝试抵抗攻击,它就需要恢复。恢复的一部分是恢复服务。例如,可以为此目的保留其他服务器或网络连接。由于成功的攻击可以被视为一种失效,因此处理从失效中恢复的可用性策略集(来自第4章)也可以用于这方面的安全性。

    除了用于恢复的可用性策略之外,还可以使用审计和不可否认性策略:

    • 审计。 我们对系统进行审计——即记录用户和系统的行为及其影响——以帮助追踪攻击者的行为并识别攻击者。我们可能会分析审计追踪,试图起诉攻击者或为未来创建更好的防御措施。

    • 不可否认性。 这种策略确保消息的发送者不能在事后否认发送过该消息,同时接收者也不能否认收到过该消息。例如,你不能否认从互联网上订购了某样东西,而商家也不能否认收到了你的订单。这可以通过数字签名和可信第三方认证的某种组合来实现。

    11.3 基于策略的安全问卷

    基于第11.2节中描述的策略,我们可以创建一组受启发的安全策略问题,如表11.2所示。为了获得支持安全的架构选择的概览,分析师会问每个问题,并将答案记录在表格中。这些问题的答案随后可以成为进一步活动的重点:文档调查、代码或其他工件的分析、代码的逆向工程等。

    表11.2 基于策略的信息安全调查表

    策略组 策略问题 支持与否(是/否) 风险 设计决策和位置 原因和假设
    入侵检测 系统是否支持入侵检测,例如,通过将系统中的网络流量或服务请求模式与存储在数据库中的一组特征或已知恶意行为模式进行比较?
    系统是否支持拒绝服务攻击的检测,例如,通过将进入系统的网络流量的模式或特征与已知 DoS 攻击的历史配置文件进行比较?
    系统是否支持通过校验和或哈希值等技术验证消息完整性
    系统是否支持检测消息延迟,例如,通过检查传递消息所需的时间?
    抵御攻击 系统是否支持通过用户ID、访问码、IP 地址、协议、端口等进行参与者识别
    系统是否支持通过密码、数字证书、双因素身份验证或生物识别等方式对参与者进行身份验证
    系统是否支持参与者授权,确保经过身份验证的参与者有权访问和修改数据或服务?
    系统是否支持通过限制对资源的接入点数量或限制可以通过接入点的流量类型来限制对计算机资源的访问
    系统是否支持通过减少可经过单个接入点访问的数据或服务量来限制暴露
    抵御攻击 系统是否支持传输中的数据或静态数据的数据加密
    系统设计是否考虑通过在连接到不同网络、虚拟机或“气隙”的不同服务器上进行物理分离来分离实体
    系统是否支持更改凭证设置,强制用户定期或在关键事件时更改这些设置?
    系统是否在系统范围内以一致的方式验证输入,例如,使用安全框架或验证类来执行外部输入的筛选、规范化和清理等操作?
    应对攻击 系统是否支持通过限制对敏感资源的访问来撤销访问,即使对于正常合法的用户和正在发生攻击的用户?
    系统是否支持在多次登录尝试失败等情况下限制登录
    当系统检测到攻击时,系统是否支持通知参与者,例如操作员、其他人员或协作系统?
    从攻击中恢复 系统是否支持维护审计跟踪以帮助跟踪攻击者的操作并识别攻击者?
    系统是否保证不可否认性的属性,这保证消息的发送者以后不能否认已发送消息,并且收件人不能否认已收到消息?
    你是否检查过第4章中的“从故障中恢复”策略类别?

    11.4 信息安全的模式

    两种更广为人知的安全模式是拦截验证器和入侵防御系统。

    拦截验证器

    此模式在消息的源和目标之间插入一个软件元素(包装器)。当消息源位于系统外部时,此方法具有更大的重要性。此模式最常见的职责是实现验证消息完整性策略,但它也可以包含检测入侵和检测拒绝服务(通过将消息与已知入侵模式进行比较)或检测消息传递异常等策略。

    好处:

    • 根据您创建和部署的具体验证器,这种模式可以涵盖“检测攻击”类别下的大部分策略,全部包含在一个包中。

    权衡:

    • 通常,引入中介需要付出额外的性能代价。

    • 入侵模式会随着时间而变化和演化,因此这个组件必须保持更新,以保持其有效性。这给负责系统的组织带来了维护的责任。

    入侵防御系统

    入侵预防系统(IPS)是一个独立组件,其主要目的是识别和分析任何可疑活动。如果该活动被认为是可接受的,它将被允许。相反,如果该活动是可疑的,那么该活动将被阻止并报告。这些系统寻找整体使用中的可疑模式,而不仅仅是异常消息。

    好处:

    • 这些系统可以包含大多数“检测攻击”和“对攻击做出反应”策略。

    权衡:

    • IPS 查找的活动模式会随着时间的推移而变化和发展,因此模式数据库必须不断更新。

    • 采用 IPS 的系统会产生性能代价。

    • IPS可作为现成的商用组件提供,这使得它们无需开发,但可能并不完全适合特定应用。

    其他值得注意的安全模式包括分隔和分布式责任。这两者结合了“限制访问”和“限制曝光”的策略——前者针对信息,后者针对活动。

    正如我们在安全策略列表中包含(通过引用)可用性策略一样,可用性的模式也适用于信息安全性,通过抵消试图阻止系统运行的攻击。还要考虑 第4章 中讨论的可用性的模式。

    11.5 扩展阅读

    我们在本章中描述的架构策略只是使系统信息安全的一个方面。其他方面包括以下内容:

    • 编码。C 和 C++ 中的安全编码 [Seacord 13] 描述了如何安全地编码。

    • 组织流程。组织必须拥有负责信息安全各个方面的流程,包括确保系统升级以实施最新的保护。NIST 800-53 提供了组织流程的枚举列表 [NIST 09]。组织流程必须考虑内部威胁,这些威胁占攻击的 15-20%。[Cappelli 12] 讨论内部威胁。

    • 技术流程。Microsoft的信息安全开发生命周期包括威胁建模:microsoft.com/download/en/details.aspx?id=16420

    常见弱点枚举列表是系统中发现的最常见漏洞类别的列表,包括 SQL 注入和 XSS: https://cwe.mitre.org/。

    NIST已经出版了几卷,给出了信息安全术语[NIST 04]的定义,信息安全控制类别[NIST 06],以及组织可以使用的信息安全控制的枚举列表[NIST 09]。信息安全控制可能是一种策略,但也可以是组织、编码或技术性质的。

    关于信息安全工程系统的好书包括Ross Anderson的信息安全工程:构建可靠分布式系统指南,第三版[Anderson 20],以及Bruce Schneier的系列书籍。

    不同的领域具有与其领域相关的不同安全实践集合。例如,支付卡行业(PCI)已经为参与信用卡处理的人员建立了一套标准(pcisecuritystandards.org)。

    维基百科关于“安全模式”的页面包含大量安全模式的简要定义。

    访问控制通常使用称为OAuth的标准执行。你可以在 https://en.wikipedia.org/wiki/OAuth 阅读有关OAuth的信息。

    11.6 问题讨论

    1. 编写一组具体的汽车信息安全场景。特别要考虑如何指定有关车辆控制的场景。

    2. 有记录以来最复杂的攻击之一是由一种名为Stuxnet的病毒进行的。Stuxnet于2009年首次出现,但在2011年广为人知,当时有消息称它显然严重损坏或使伊朗铀浓缩计划中涉及的高速离心机丧失能力。阅读有关Stuxnet的信息,看看你是否可以根据本章中描述的策略制定防御策略。

    3. 信息安全性和易用性通常被视为相互矛盾。信息安全性通常会强加一些过程和流程,这些过程和流程对临时用户来说似乎是不必要的开销。然而,有人说信息安全性和易用性是(或应该)齐头并进的,并认为使系统易于安全使用是向用户提高信息安全性的最佳方式。请讨论。

    4. 列出一些信息安全关键资源的示例,DoS 攻击可能针对这些资源并试图耗尽这些资源。可以使用哪些架构机制来防止此类攻击?

    5. 本章中详述的哪些策略可以抵御内部威胁?你能想到任何应该添加的吗?

    6. 在美国,Netflix通常占所有互联网流量的10%以上。你如何识别对 Netflix.com 的 DoS 攻击?你能创建一个场景来描述这种情况吗?

    7. 公开披露组织生产系统中的漏洞是一个有争议的问题。讨论为什么会这样,并确定公开披露漏洞的利弊。这个问题对于作为架构师的你有什么影响?

    8. 同样,公开披露组织的信息安全措施和实现这些措施的软件(例如通过开源软件)也是一个有争议的问题。讨论为什么会这样,确定公开披露信息安全措施的利弊,并描述这会如何影响你作为架构师的角色。