SDL 安全 Bug 栏(示例)

注意:示例文档仅用于说明目的。 下面提供的内容概述了创建安全流程时要考虑的基本标准。 它不是活动或标准的详尽列表,并且不应被视为此类列表。

请参阅本部分中术语的定义

服务器

有关服务器 DoS 场景的完整矩阵,请参阅拒绝服务矩阵

当用户交互是攻击过程的一部分时,通常不适合使用服务器栏。 如果某个关键漏洞仅在服务器产品上存在,并且以需要用户交互的方式被利用并导致服务器受损,则根据客户端严重性数据透视开始时提供的广泛用户交互的 NEAT/数据定义,严重性可从严重降低到重要。

服务器

严重

服务器摘要:导致服务器处于“已拥有”状态的网络蠕虫或不可避免的情况

  • 特权提升:执行任意代码或获得超过所授权限的更多特权的能力

    • 远程匿名用户

      • 示例:

        • 未经授权的文件系统访问:任意写入文件系统

        • 任意代码的执行

        • SQL 注入(允许代码执行)

    • 远程匿名可调用代码中的所有写入访问冲突 (AV)、可攻击的读取 AV 或整数溢出

重要

服务器摘要:非默认关键场景,或存在可帮助防止关键场景的缓解措施的情况

  • 拒绝服务:必须通过发送少量数据的操作“易于攻击”,或以其他方式快速诱导

    • 匿名

      • 持久性 DoS

        • 示例:

          • 发送单个恶意 TCP 数据包将导致蓝屏死机 (BSoD)

          • 发送少量数据包将导致服务失败

      • 带有放大功能的临时 DoS

        • 示例:

          • 发送少量数据包将导致系统在一段时间内不可用

          • Web 服务器(例如 IIS)停机一分钟或更长时间

          • 通过建立会话并使其保持打开状态,在服务器上使用所有可用资源(会话、内存)的单个远程客户端

    • 经过身份验证

      • 对高价值资产使用永久性 DoS

        • 示例:

          • 发送少量数据包导致服务器角色(证书服务器、Kerberos服务器、域控制器)中的高价值资产服务失败,例如当经过域验证的用户可以在域控制器上执行 DoS 时

  • 特权提升:执行任意代码或获得超过预期权限的更多特权的能力

    • 经过身份验证的远程用户

    • 经过身份验证的本地用户(终端服务器)

      • 示例:

        • 未经授权的文件系统访问:任意写入文件系统

        • 任意代码的执行

    • 可由经过身份验证的远程或本地用户(非管理员)访问的所有写入 AV、可攻击的读取 AV 或整数溢出(根据定义,管理员场景没有安全问题,但仍有可靠性问题。)

  • 信息泄漏(有针对性)

    • 攻击者可以从系统中的任何位置查找和读取信息的情况,包括不打算公开或未设计为公开的系统信息

      • 示例:

        • 个人身份信息 (PII) 泄露

          • PII 泄露(电子邮件地址、电话号码、信用卡信息)

          • 攻击者可以在未经用户同意或秘密的情况下收集 PII

  • 欺骗

    • 实体(计算机、服务器、用户、进程)能够以所选择的特定实体(用户或计算机)进行伪装。

      • 示例:

        • Web 服务器错误地使用客户端证书身份验证 (SSL),使攻击者被识别为所选择的任何用户

        • 新协议旨在提供远程客户端身份验证,但协议中存在允许将恶意远程用户视为所选择的其他用户的漏洞

  • 篡改

    • 重启受影响的软件后,在常见或默认情况下修改任何“高价值资产”数据,修改将持续存在

    • 对在常见或默认情况下使用的任何用户或系统数据进行永久性或持久性修改

      • 示例:

        • 在常见或默认情况下修改应用程序数据文件或数据库,例如经过身份验证的 SQL 注入

        • 常见或默认情况下的代理缓存投毒

        • 在常见或默认情况下,未经用户同意修改操作系统或应用程序设置

  • 安全功能:中断或绕过提供的任何安全功能。
    请注意,默认情况下,安全功能中的漏洞评级为“重要”,但评级可能会根据 SDL bug 栏中所述的其他注意事项进行调整。

    • 示例:

      • 在未通知用户或获得同意的情况下禁用或绕过防火墙

      • 重新配置防火墙并允许连接到其他进程

中等
  • 拒绝服务

    • 匿名

      • 默认/常用安装中未放大的临时 DoS。

        • 示例:

          • 通过建立会话并使其保持打开状态,在服务器上使用所有可用资源(会话、内存)的多个远程客户端

    • 经过身份验证

      • 持久性 DoS

        • 示例:

          • 已登录的 Exchange 用户可以发送特定的邮件,并使 Exchange Server 崩溃,并且崩溃不是由于写入 AV、可攻击的读取 AV 或整数溢出导致的

      • 默认/常用安装中放大的临时 DoS。

        • 示例:

          • 普通 SQL Server 用户执行某个产品安装的存储过程,并在几分钟内消耗 100% 的 CPU

  • 信息泄漏(有针对性)

    • 攻击者可以从特定位置轻松读取系统信息的情况,包括系统信息,这些信息不是有意/设计为公开的

      • 示例:

        • 有针对性地泄露匿名数据

        • 有针对性地泄露文件的存在

        • 有针对性地泄露文件版本号

  • 欺骗

    • 实体(计算机、服务器、用户、进程)可以伪装成不同的、不能被特别选择的随机实体。

      • 示例:

        • 客户端正确地向服务器进行身份验证,但服务器从另一个碰巧同时连接到服务器的随机用户取回会话

  • 篡改

    • 在特定场景中对任何用户或系统数据的永久性或持久性修改

      • 示例:

        • 在特定场景中修改应用程序数据文件或数据库

        • 特定场景中的代理缓存投毒

        • 在特定场景中未获得用户同意的情况下修改操作系统/应用程序设置

    • 重启操作系统/应用程序/会话后,在常见或默认情况下对不持久的数据进行临时修改

  • 安全保证:

    • 安全保证是一项安全功能,或者是客户希望提供安全保护的其他产品功能。 通信(显式或隐式)表明,客户可以依赖于功能的完整性,这就是它成为安全保证的原因。 安全公告将针对安全保证中的缺陷发布,这些缺陷会破坏客户的信任或信赖。

      • 示例:

        • 使用正常的“用户”权限运行的进程无法获取“管理员”特权,除非已通过特意授权的方法提供了管理员密码/凭据。

        • 在 Internet Explorer 中运行的基于 Internet 的 JavaScript 无法控制主机操作系统的任何内容,除非用户显式更改了默认安全设置。

  • 信息泄漏(无针对性)

    • 运行时信息

      • 示例:

        • 随机堆内存的泄漏

  • 篡改

    • 重启操作系统/应用程序后,在特定情况下对不持久的数据进行临时修改

客户端

广泛的用户操作定义如下:

  • “用户交互”只能在客户端驱动的场景中发生。

  • 通常,简单的用户操作(例如预览邮件、查看本地文件夹或文件共享)并不是广泛的用户交互。

  • “广泛”包括用户手动导航到特定网站(例如,键入 URL)或单击“是/否”进行决定。

  • “非广泛”包括用户单击电子邮件链接。

  • NEAT 限定符(仅适用于警告)。 显而易见,UX 是:

    • 必要的(是否确实需要为用户提供决策?)

    • 需要解释的(UX 是否向用户提供做出此决定所需的所有信息?)

    • 可操作的(在良性和恶意情况下,用户是否可以采取一系列步骤来做出好的决策?)

    • 经过测试的(是否有多名人员查看了警告,以确保人们了解如何对警告作出响应?)

  • 澄清:请注意,广泛的用户交互的效果不是严重性降低一级,而是在某些情况下严重性降低,在这些情况中,“广泛的用户交互”一词显示在 bug 栏中。 其目的是帮助客户区分快速传播和可蠕虫攻击,因为用户相互作用,攻击速度会减慢。 由于用户交互,此 bug 栏不允许将特权提升降低到重要级别以下。

客户

严重

客户端摘要:

  • 网络蠕虫或不可避免的常见浏览/使用场景,其中客户端处于“已拥有”状态,而不会显示任何警告或提示

  • 特权提升(远程):执行任意代码或获得超过预期权限的更多特权的能力

    • 示例:

      • 未经授权的文件系统访问:写入文件系统

      • 执行任意代码而不需要大量用户操作

      • 远程可调用代码中的所有写入 AV、可攻击的读取 AV、堆栈溢出或整数溢出(无需大量用户操作)

重要

客户端摘要:

  • 常见的浏览/使用场景,其中客户端处于“已拥有”状态并带有警告或提示,或通过广泛的操作实现而不带有提示。 请注意,这并不区分提示的质量/可用性以及用户单击提示的可能性,而只是表明存在某种形式的提示。

  • 特权提升(远程)

    • 通过大量用户操作执行任意代码

      • 远程可调用代码中的所有写入 AV、可攻击的读取 AV、堆栈溢出或整数溢出(需要大量用户操作)

  • 特权提升(本地)

    • 本地低权限用户可以将自己提升为其他用户、管理员或本地系统。

      • 本地可调用代码中的所有写入 AV、可攻击的读取 AV 或整数溢出

  • 信息泄漏(有针对性)

    • 攻击者可以从系统中查找和读取信息的情况,包括不打算公开或未设计为公开的系统信息。

    • 示例:

      • 未经授权的文件系统访问:从文件系统读取

      • PII 的泄露

        • PII 的泄露(电子邮件地址、电话号码)

      • 家庭电话场景

  • 拒绝服务

    • 系统损坏 DoS 需要重新安装系统和/或组件。

      • 示例:

        • 访问网页将导致注册表损坏,从而使计算机无法启动

    • Drive-by DoS

      • 条件:

        • 未经身份验证的系统 DoS

        • 默认公开

        • 没有默认的安全功能或边界缓解措施(防火墙)

        • 无用户交互

        • 无审核和惩罚跟踪

        • 示例:

          • 移动电话中的 Drive-by 蓝牙系统 DoS 或短信

  • 欺骗

    • 攻击者能够提供与用户必须依赖用于在默认/常见方案中做出有效信任决策的 UI 不同,但在视觉上相同的 UI。 信任决策定义为:用户执行操作时,会将某些信息视为特定实体(系统或某些特定的本地或远程源)提供的。

      • 示例:

        • 在浏览器的地址栏中显示另一个 URL,该 URL 与浏览器在默认/常见情况下实际显示的站点的 URL 不同

        • 在浏览器的地址栏上显示与地址栏完全相同,但在默认/常见情况下显示虚假数据的窗口

        • 在“是否要运行此程序?”对话框中显示 与要在默认/常见情况下实际加载的文件不同的文件名

        • 显示用于收集用户或帐户凭据的“虚假”登录提示

  • 篡改

    • 重启操作系统/应用程序后,在常见或默认情况下永久性修改任何用户数据或用于做出信任决策的数据,修改将持续存在。

      • 示例:

        • Web 浏览器缓存投毒

        • 在未获得用户同意的情况下修改重要的操作系统/应用程序设置

        • 修改用户数据

  • 安全功能:中断或绕过提供的任何安全功能

    • 示例:

      • 在通知用户或获得同意的情况下禁用或绕过防火墙

      • 重新配置防火墙并允许连接到其他进程

      • 使用弱加密或以纯文本形式保存密钥

      • 绕过 AccessCheck

      • 绕过 Bitlocker;例如,不加密部分驱动器

      • 绕过 Syskey,一种无需密码即可对 syskey 进行解码的方法

中等
  • 拒绝服务

    • 永久性 DoS 需要冷重启或会导致蓝屏/Bug 检查。

      • 示例:

        • 打开 Word 文档会导致计算机蓝屏/进行 Bug 检查。

  • 信息泄漏(有针对性)

    • 攻击者可以从系统的已知位置读取信息的情况,包括不打算公开或未设计为公开的系统信息

      • 示例:

        • 文件的目标存在性

        • 文件的目标版本号

  • 欺骗

    • 攻击者能够提供与特定场景中用户习惯信任的 UI 不同,但在视觉上完全相同的 UI。 “习惯信任”是指用户基于与操作系统或应用程序的正常交互而通常熟悉的任何内容,但通常不被认为是“信任决策”。

      • 示例:

        • Web 浏览器缓存投毒

        • 在未获得用户同意的情况下修改重要的操作系统/应用程序设置

        • 修改用户数据

  • 拒绝服务

    • 临时 DoS 需要重启应用程序。

      • 示例:

        • 打开 HTML 文档将导致 Internet Explorer 崩溃

  • 欺骗

    • 攻击者能够提供与较大攻击场景单一部分的 UI 不同,但在视觉上完全相同的 UI

      • 示例:

        • 用户必须前往“恶意”网站,单击欺骗对话框中的按钮,然后便容易受到基于不同浏览器 bug 的漏洞攻击

  • 篡改

    • 重启操作系统/应用程序后,对任何不持久数据进行临时修改。

    • 信息泄漏(无针对性)

      • 示例:

        • 随机堆内存的泄漏

术语的定义

已经过身份验证
任何必须通过网络进行身份验证的攻击。 这意味着,必须能够进行某些类型的日志记录,才能识别攻击者。

匿名
无需进行身份验证即可完成的任何攻击。

client
在单一计算机上本地运行的软件,或通过网络访问服务器提供的共享资源的软件。

默认/常用
随时处于活动状态或覆盖超过 10% 的用户的任何功能。

scenario
需要特殊的自定义或用例才能实现的任何功能,覆盖少于 10% 的用户。

服务器
配置为运行软件,等待并满足在其他计算机上运行的客户端进程的请求的计算机。

严重
一个被评为具有最高潜在损害的安全漏洞。

重要说明
一个被评为具有重大潜在损害的安全漏洞,但级别低于严重。

中等
一个被评为具有中等潜在损害的安全漏洞,但级别小于重要。


一个被评为具有较低的损坏潜力的安全漏洞。

有针对性的信息泄漏
能够有意选择(目标)所需的信息。

临时 DoS
临时 DoS 是满足以下条件的情况:

  • 目标因为攻击而无法执行正常操作。

  • 对攻击的响应与攻击的规模大致相同。

  • 在攻击完成后,目标会立刻返回正常的功能级别。 应为每个产品评估“立刻”的精确定义。

例如,攻击者在网络上不断发送数据包时,服务器将无响应,并且在数据包流停止后,服务器将恢复正常。

带有放大功能的临时 DoS

带有放大功能的临时 DoS 是满足以下条件的情况:

  • 目标因为攻击而无法执行正常操作。

  • 对攻击的响应超出了攻击的规模。

  • 攻击完成后,目标将返回正常的功能级别,但需要一些时间(可能需要几分钟)。

例如,如果你可以在网络上发送恶意的 10 字节数据包并导致 2048k 的响应,则你在通过放大攻击工作来对带宽进行 DoS 攻击。

永久性 DoS

永久性 DoS 是指需要管理员启动、重启或重新安装所有或部分系统的 DoS。 自动重启系统的任何漏洞也是永久性 DoS。

拒绝服务(服务器)矩阵

经过身份验证与匿名攻击 默认/常用与场景 临时 DoS 与永久性 DoS 评级
经过身份验证 默认/常用 永久性 中等
经过身份验证 默认/常用 带有放大功能的临时 DoS 中等
经过身份验证 默认/常用 临时 DoS
经过身份验证 场景 永久性 中等
经过身份验证 场景 带有放大功能的临时 DoS
经过身份验证 场景 临时 DoS
匿名 默认/常用 永久性 重要
匿名 默认/常用 带有放大功能的临时 DoS 重要
匿名 默认/常用 临时 DoS 中等
匿名 场景 永久性 重要
匿名 场景 带有放大功能的临时 DoS 重要
匿名 场景 临时 DoS

免责声明

本文档并未详尽参考 Microsoft SDL 实践。 额外的保证工作可以由产品团队自行决定执行(不强制要求记录)。 因此,不应将该示例视为 Microsoft 保护所有产品所遵循的确切过程。

本文档按“原样”提供。 本文档中表达的信息和观点(包括 URL 和其他 Internet 网站引用)如有更改,恕不另行通知。 您自行承担其使用风险。

本文档不向你提供对任何 Microsoft 产品中的任何知识产权的任何法律权利。 您可为了内部参考目的复制和使用本文档。

© 2018 Microsoft Corporation。 保留所有权利。

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported许可