危及系统安全的途径

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012

第七法则:最安全的网络是管理良好的网络。 - 安全管理的 10 项不变法则

在经历过灾难性入侵事件的组织中,评估通常表明组织对其 IT 基础结构的实际状态可见性有限,这可能与其“记录的”状态大相径庭。 这些差异所造成的漏洞导致环境可能遭到入侵,在入侵发展到攻击者实际“掌控”环境之前,组织几乎完全无法发现这种风险。

对这些组织的 AD DS 配置、公钥基础结构 (PKI)、服务器、工作站、应用程序、访问控制列表 (ACL) 进行详细评估并采用其他技术,可以揭示不当的配置和漏洞,如果得到修正,可能会阻止最初的入侵。

IT 文档、流程和过程分析可以识别攻击者如何利用管理实践中的漏洞,最终获取完全入侵 Active Directory 林所需的特权。 在完全遭到入侵的林中,攻击者入侵的不仅是单个系统、应用程序或用户帐户,而且还会提升其访问权限,以获得一定程度的特权,他们可以利用这些特权来修改或销毁林的所有方面。 当 Active Directory 安装被破坏到这种程度时,攻击者可以做出更改以便在整个环境中保持某种状态,更糟的是,销毁目录及其管理的系统和帐户。

尽管以下描述中一些经常被利用的漏洞并非针对 Active Directory 的攻击,但它们使得攻击者能够在环境中建立一个立足点,以用于运行特权升级(也称为特权提升)攻击,并最终瞄准和入侵 AD DS。

本文档的这一部分重点说明攻击者通常用来获取基础结构访问权限并最终发起特权提升攻击的机制。 另请参阅以下部分:

注意

尽管本文档的内容重点与 AD DS 域中的 Active Directory 和 Windows 系统相关,但攻击者很少只关注 Active Directory 和 Windows。 在混合了操作系统、目录、应用程序和数据存储库的环境中,经常发现非 Windows 系统也会遭到入侵。 当系统在 Windows 和非 Windows 环境之间提供“桥梁”时尤其如此,例如 Windows 和 UNIX 或 Linux 客户端访问的文件服务器、为多个操作系统提供身份验证服务的目录,或者跨不同目录同步数据的元目录。

AD DS 之所以被攻击者选作目标,是因为它不仅为 Windows 系统,而且为其他客户端提供集中访问和配置管理功能。 提供身份验证和配置管理服务的任何其他目录或应用程序都可以并且将会成为已下定决心的攻击者的目标。 尽管本文档重点说明的是可以降低 Active Directory 安装受到入侵的可能性的保护措施,但使用非 Windows 计算机、目录、应用程序或数据存储库的每个组织也应该为针对这些系统的攻击做好准备。

初始入侵目标

没有人会故意构建一个使组织面临入侵风险的 IT 基础结构。 最初构造的 Active Directory 林通常是原始的,且符合当时的局势。 随着时间的推移,组织会购置新的操作系统和应用程序并将其添加到林中。 而随着 Active Directory 提供的管理优势得到认可,越来越多的内容被添加到目录中,并且越来越多的用户将其计算机或应用程序与 AD DS 集成,域将得到升级以支持最新版 Windows 操作系统提供的新功能。 但是,在经过一定的时间后,即使添加了新的基础结构,基础结构的其他组织部分也可能无法像最初那样得到维护。由于系统和应用程序正常运行,因此没有受到关注,组织开始忘记他们尚未消除落伍的基础结构。 根据我们在评估遭入侵基础结构时看到的情况,环境越旧、越大和越复杂,就越有可能存在大量被普遍利用的漏洞问题。

无论攻击者的动机如何,大多数信息安全漏洞都是从一次入侵一个或两个系统开始。 这些初始事件或网络入口点通常会利用本可以修复但却没有修复的漏洞。 2012 年数据泄漏调查报告 (DBIR) 是 Verizon 风险团队与许多国家的安全机构及其他公司合作编制的年度研究报告,其中指出 96% 的攻击“并不十分困难”,并且“97% 的入侵都可以通过简单或中间控制措施来避免”。这些发现可能是随后普遍利用的漏洞的直接后果。

防病毒和反恶意软件部署方面的差距

第八法则:过时的恶意软件扫描程序只比没有扫描程序略好一些。 - 安全性的十项不变法则(版本 2.0)

分析组织的防病毒和反恶意软件部署通常可以揭示是否为环境的大多数工作站配置了防病毒和反恶意软件,并且这些软件已启用且使用最新版本。 例外的情况通常是不经常连接到企业环境或员工设备的工作站,对于此类情况,防病毒和反恶意软件可能难以部署、配置和更新。

但是,在许多遭到入侵的环境中,服务器群往往得不到始终如一的保护。 据 2012 年数据泄漏调查报道,94% 的数据入侵涉及到服务器(比上一年增长了 18%),69% 的攻击结合了恶意软件。 在服务器群中,防病毒和反恶意软件安装配置不一致、过时、错误甚至已禁用的情况并不少见。 在某些情况下,防病毒和反恶意软件是管理人员禁用的,而在其他一些情况下,这些软件是攻击者在通过其他漏洞入侵服务器后禁用的。 禁用防病毒和反恶意软件时,攻击者会在服务器上植入恶意软件,并专注于在整个服务器群中传播入侵。

重要的是,不仅要确保系统受到最新、全面的防恶意软件措施的保护,而且要监视系统中是否禁用或删除了防病毒和反恶意软件,并在手动禁用了保护时自动重新开始保护。 虽然没有任何防病毒和反恶意软件可以保证预防和检测所有感染,但正确配置和部署的防病毒和反恶意软件方案可以降低受感染的可能性。

不完整的修补

第三法则:如果不及时应用安全修复,则你就不能长久获得网络控制权。 - 安全管理的 10 项不变法则

Microsoft 在每个月的第二个星期二发布安全公告,但在极少数情况下,当确定漏洞会带来紧急风险时,会在每月安全更新的间隔期将安全更新(这些也称为“带外”更新)发布到客户系统。 无论是小型企业将其 Windows 计算机配置为使用 Windows 更新来管理系统和应用程序修补,还是大型组织使用 Microsoft Endpoint Configuration Manager 等管理软件根据详细的分层计划部署修补程序,许多客户都会相对及时地修补其 Windows 基础结构。

但是,很少有基础结构仅包含 Windows 计算机和 Microsoft 应用程序,在遭到入侵的环境中,我们经常发现组织的修补程序管理策略存在缺陷。 这些环境中 Windows 系统的修补方式不一致。 非 Windows 操作系统只是偶尔才修补,甚至被置之不理。 商用现成 (COTS) 应用程序包含的漏洞有对应的修补程序,但却未应用这些修补程序。 网络设备通常配置了出厂默认凭据,但在安装多年后没有固件更新。 供应商不再提供支持的应用程序和操作系统经常会持续运行下去,而事实上它们的漏洞不再得到修补。 其中每个未修补的系统都代表了攻击者的另一个潜在切入点。

IT 的消费化转型带来了其他挑战,因为员工拥有的设备被用来访问企业拥有的数据,而组织几乎完全无法控制员工个人设备的修补和配置。 企业级硬件通常附带企业就绪的配置选项和管理功能,但代价是在个人自定义和设备选择方面的选项较少。 以员工为中心的硬件提供范围更广的制造商、供应商、硬件安全功能、软件安全功能、管理功能和配置选项,而许多企业功能可能完全不存在。

修补程序和漏洞管理软件

如果为 Windows 系统和 Microsoft 应用程序部署了有效的修补程序管理系统,则未修补漏洞造成的部分攻击面已得到解决。 但是,除非非 Windows 系统、非 Microsoft 应用程序、网络基础结构和员工设备也通过修补程序和其他修复保持最新状态,否则基础结构仍然易受攻击。 在某些情况下,应用程序供应商可能会提供自动更新功能;而在其他一些情况下,可能需要制定一种方法来定期检索和应用修补程序与其他修复。

过时的应用程序和操作系统

“不能指望一个使用了六年的操作系统可以避免你受到六个月的攻击。”- 拥有 10 年企业安装保护经验的信息安全专家

尽管“取得最新,保持最新”听起来像是一个营销用语,但过时的操作系统和应用程序会给许多组织的 IT 基础结构带来风险。 2003 年发布的操作系统可能仍接受供应商的支持并提供更新以解决漏洞,但这种操作系统可能不包含较新版本的操作系统中添加的安全功能。 过时的系统甚至可能需要削弱某些 AD DS 安全配置才能支持这些计算机的短板功能。

由不再为应用程序提供支持的供应商编写的、使用旧身份验证协议的应用程序通常无法重新设计为支持更强大的身份验证机制。 但是,组织的 Active Directory 域仍可配置为存储 LAN Manager 哈希或可逆加密密码以支持此类应用程序。 在引入较新操作系统之前编写的应用程序可能无法在当前操作系统上正常运行或根本无法运行,这需要组织维护越来越旧的系统,在某些情况下,还需要维护完全不受支持的硬件和软件。

即使组织已将其域控制器更新为 Windows Server 2012、Windows Server 2008 R2 或 Windows Server 2008,通常也会发现,在服务器群中,有很大一部分成员正在运行 Windows Server 2003、Windows 2000 Server 或 Windows NT Server 4.0(完全不受支持)。 组织维护老化系统的时间越长,功能集之间的差距就越大,因而生产系统就越有可能不受支持。 此外,维护 Active Directory 林的时间越长,我们观察到升级计划中遗漏的旧式系统和应用程序就越多。 这可能意味着运行单个应用程序的单个计算机可能会造成域或林范围的漏洞,因为 Active Directory 配置为支持其旧式协议和身份验证机制。

若要消除旧式系统和应用程序,首先应该专注于识别它们并为其编目,然后确定是否要升级或更换应用程序或主机。 尽管很难找到既没有支持路径也没有升级路径的高度专业化应用程序的替代品,但可以利用称为“创造性破坏”的概念将旧式应用程序取代为提供必要功能的新式应用程序。 本文档稍后的“针对入侵做好规划”中更深入地介绍了如何针对入侵做好规划

配置错误

第四法则:在一开始就没有得到安全保护的计算机上安装安全修复并没有多大好处。 - 安全管理的 10 项不变法则

即使在系统通常保持最新和修补的环境中,我们通常也会发现操作系统、计算机上运行的应用程序和 Active Directory 中存在漏洞或配置错误。 一些错误配置只会导致本地计算机遭到入侵,但在计算机被“掌控”后,攻击者通常会专注于在其他系统中进一步传播入侵,并最终传播到 Active Directory。 下面是我们识别到的、会造成风险的配置的一些常见领域。

在 Active Directory 中

Active Directory 中最常成为攻击者目标的帐户是最高特权组的成员,例如 Active Directory 中域管理员 (DA)、企业管理员 (EA) 或内置管理员 (BA) 组的成员。 应将这些组的成员身份减少到尽可能少的帐户数量,以便限制这些组的攻击面。 甚至可以消除这些特权组的“永久”成员身份;也就是说,可以实现让你能够仅在需要这些组的域范围和林范围特权时,才暂时填充这些组的设置。 如果要使用高特权帐户,应该只在指定的安全系统上使用,例如域控制器或安全管理主机。 减少 Active Directory 攻击面中提供了有助于实现所有这些配置的详细信息。

当我们评估 Active Directory 中最高特权组的成员身份时,通常会发现所有三个最高特权组的成员身份过多。 在某些情况下,组织在 DA 组中有数十甚至数百个帐户。 在其他一些情况下,组织将帐户直接放入内置管理员组,认为该组的特权低于 DA 组。 它不是。 我们经常在林根域中发现几个永久的 EA 组成员,尽管需要用到 EA 特权的情况极少见,哪怕是暂时性使用。 我们也经常在所有三个组中看到 IT 用户的日常管理帐户,尽管这是一个有效的冗余配置。 如减少 Active Directory 攻击面中所述,无论帐户是其中一个组还是所有组的永久成员,该帐户都可用于入侵甚至破坏 AD DS 环境,及其管理的系统和帐户。 减少 Active Directory 攻击面中提供了有关在 Active Directory 中安全配置和使用特权帐户的建议。

在域控制器上

当我们评估域控制器时,经常发现它们的配置和管理方式与成员服务器没有不同。 域控制器有时运行安装在成员服务器上的相同应用程序和实用工具,原因不是域控制器需要它们,而是应用程序是标准生成的一部分。 这些应用程序可能在域控制器上提供极少量的功能,但要求使用需要打开端口的配置设置、创建高特权服务帐户,或者为不应连接到域控制器的用户授予系统访问权限,而提出这些要求的目的并非出于身份验证和组策略应用程序的需求,因而大幅增大了其攻击面。 在某些入侵行为中,攻击者使用了已安装在域控制器上的工具,目的不仅是获取域控制器访问权限,而且还是修改或损坏 AD DS 数据库。

当我们提取域控制器上的 Internet Explorer 配置设置时,发现用户已使用在 Active Directory 中拥有高特权级别的帐户登录,并使用这些帐户从域控制器访问 Internet 和 Intranet。 在某些情况下,这些帐户在域控制器上配置了 Internet Explorer 设置以便能够下载 Internet 内容,或者从 Internet 站点下载了免费软件实用工具并将其安装在域控制器上。 默认情况下为用户和管理员启用了 Internet Explorer 增强的安全配置,但我们经常观察到为管理员禁用了该配置。 当高特权帐户访问 Internet 并将内容下载到任何计算机时,该计算机将面临严重风险。 如果该计算机是域控制器,则整个 AD DS 安装都面临风险。

保护域控制器

应将域控制器视为关键的基础结构组件,与文件、打印和应用程序服务器相比,其受保护程度应该更高、配置方式更严格。 域控制器应该只运行为保证域控制器正常工作,或者为防范域控制器遭受攻击而所需的软件。 不应允许域控制器访问 Internet,安全设置应由组策略对象 (GPO) 配置和实现。 防范域控制器遭受攻击中提供了有关安全安装、配置和管理域控制器的详细建议。

在操作系统中

第二法则:如果攻击者可以更改你的计算机上的操作系统,则这台计算机就不再属于你自己了。 - 安全性的十项不变法则(版本 2.0)

尽管一些组织为不同类型的服务器创建了基线配置,并允许在安装操作系统后对其进行有限的自定义,但受感染环境的分析经常发现大量以临时方式部署并手动和独立配置的服务器。 执行相同功能的两个服务器之间的配置可能完全不同,两者都没有以安全的方式进行配置。 相反,服务器配置基线可能持续地强制执行,但也可能持续地配置不当;也就是说,服务器的配置方式会在给定类型的所有服务器上造成相同的漏洞。 不当的配置包括禁用安全功能、向帐户(特别是服务帐户)授予过多的权利和权限、跨系统使用相同本地凭据,以及允许安装会造成自身漏洞的未经授权应用程序和实用工具等做法。

禁用安全功能

组织有时会禁用高级安全 Windows 防火墙 (WFAS),因为他们认为 WFAS 难以配置或需要工作密集型配置。 但是,从 Windows Server 2008 开始,在服务器上安装任何角色或功能时,默认会为其配置正常运行该角色或功能所需的最少特权,并且 Windows 防火墙会自动配置为支持该角色或功能。 通过禁用 WFAS(而不是在原地使用其他基于主机的防火墙),组织会增大整个 Windows 环境的攻击面。 外围防火墙提供了一些保护措施来防范从 Internet 直接针对环境的攻击,但它们无法防范利用其他攻击途径的攻击,例如偷渡式下载攻击,或来自 Intranet 上其他遭入侵系统的攻击。

用户帐户控制 (UAC) 设置有时会在服务器上已禁用,因为管理人员发现其提示具有侵扰性。 尽管 Microsoft 支持文章 2526083 描述了可以在 Windows Server 上禁用 UAC 的场景,但除非你运行服务器核心安装(按设计禁用了 UAC),否则请只在经过慎重考虑和研究之后才在服务器上禁用 UAC。

在其他情况下,服务器设置已配置为安全性较低的值,因为组织将过时的服务器配置设置应用于新操作系统,例如将 Windows Server 2003 基线应用于运行 Windows Server 2012、Windows Server 2008 R2 或 Windows Server 2008 的计算机,且不更改基线以反映操作系统中的更改。 在部署新操作系统时,不要将旧服务器基线沿用于新操作系统,而应该检查安全更改和配置设置,以确保实现的设置适用且适合新操作系统。

授予过高特权

在我们评估的几乎所有环境中,都为 Windows 系统上的本地帐户和基于域的帐户授予了过高的特权。 用户在其工作站上被授予本地管理员权限,为成员服务器运行的服务配置的权限超出了其正常运行所需的权限,服务器群中的本地管理员组包含数十甚至数百个本地帐户和域帐户。 只要入侵计算机上的一个特权帐户,攻击者就可以入侵登录到该计算机的每个用户和服务的帐户,然后获取并利用凭据将入侵传播到其他系统。

尽管传递哈希 (PTH) 和其他凭据盗窃攻击在当今无处不在,但这是因为有免费可用的工具可以在攻击者获取计算机的管理员或系统级访问权限时轻松提取其他特权帐户的凭据。 即使没有可用于从登录会话中获取凭据的工具,拥有计算机访问特权的攻击者也可以轻松安装用于捕获击键、屏幕截图和剪贴板内容的击键记录器。 拥有计算机访问特权的攻击者可以禁用反恶意软件、安装 rootkit、修改受保护的文件或在计算机上安装恶意软件,从而自动进行攻击或将服务器转变为偷渡式下载主机。

用于将入侵扩展到单台计算机之外的策略各不相同,但传播入侵的关键是获取对其他系统的高访问特权。 通过减少对任何系统拥有访问特权的帐户数量,不仅可以减少该计算机的攻击面,而且还能减少攻击者从该计算机获取有价值凭据的可能性。

标准化本地管理员凭据

长期以来,安全专家一直在争论重命名 Windows 计算机上的本地管理员帐户是否有价值。 对于本地管理员帐户,真正重要的是,是否在多台计算机上为其配置了相同的用户名和密码。

如果本地管理员帐户在服务器之间命名为相同的值,并且分配到该帐户的密码也配置为相同的值,则攻击者可以在其已获取管理员或系统级访问权限的计算机上提取该帐户的凭据。 攻击者不必首先入侵管理员帐户;他们只需入侵属于本地管理员组成员的用户帐户,或者配置为作为 LocalSystem 运行或者以管理员特权运行的服务帐户即可。 然后,攻击者可以提取管理员帐户的凭据,并在网络登录中将这些凭据重播到网络上的其他计算机。

只要另一台计算机的本地帐户的用户名和密码(或密码哈希值)与提供的帐户凭据相同,登录尝试就会成功,攻击者将获得对目标计算机的访问特权。 在最新版本的 Windows 中,内置管理员帐户默认处于禁用状态,但在旧版操作系统中,该帐户默认处于启用状态。

注意

某些组织有意将本地管理员帐户配置为已启用,因为他们相信这会在所有其他特权帐户被锁定在系统之外时提供“故障保护”。 但是,即使禁用本地管理员帐户,并且没有其他可用帐户可以启用该帐户或以管理员特权登录到系统,系统也可以启动到安全模式,并且可以重新启用内置的本地管理员帐户,如 Microsoft 支持文章 814777 中所述。 此外,如果系统仍可成功应用 GPO,则可以修改 GPO 以(暂时)重新启用管理员帐户,或者可以配置受限组以将基于域的帐户添加到本地管理员组。 可以执行修复,并可以再次禁用管理员帐户。 若要有效防范使用内置本地管理员帐户凭据的横向入侵,必须为本地管理员帐户配置唯一的用户名和密码。 若要通过 GPO 为本地管理员帐户部署唯一密码,请参阅 technet 上的通过 GPO 管理内置管理员帐户密码的解决方案。  

允许安装未经授权的应用程序

第一法则:如果攻击者可以说服你在自己的计算机上运行他们的程序,则这台计算机就不再是你一个人的了。 - 安全性的十项不变法则(版本 2.0)

无论组织是否跨服务器部署一致的基线设置,都不应允许安装不属于服务器的已定义角色的应用程序。 如果允许安装不属于服务器的指定功能的软件,则服务器可能会无意中或者以恶意方式安装软件,从而增大服务器的攻击面、造成应用程序漏洞或导致系统不稳定。

应用程序

如前所述,安装和配置的应用程序使用的帐户特权通常比应用程序实际所需特权更高。 在某些情况下,应用程序的文档会指定服务帐户必须是服务器本地管理员组的成员,或者必须配置为在 LocalSystem 的上下文中运行。 这通常不是因为应用程序需要这些权限,而是因为确定应用程序服务帐户所需的权限需要投入额外的时间和精力。 如果未以正常运行应用程序及其配置的功能所需的最低特权安装应用程序,则系统可能会遭受利用应用程序特权的攻击,而不是遭受针对操作系统本身的任何攻击。

缺乏安全的应用程序开发实践

基础结构的作用是支持业务工作负载。 如果在自定义应用程序中实施这些工作负载,则必须确保使用安全最佳做法开发应用程序。 企业范围事件的根本原因分析通常表明,最初的入侵是通过自定义应用程序(尤其是那些面向 Internet 的应用程序)实现的。 其中的大多数入侵是通过 SQL 注入 (SQLi) 和跨站点脚本 (XSS) 攻击等众所周知的攻击入侵手法实现的。

SQL 注入是一种应用程序漏洞,允许用户定义的输入修改传递给数据库执行的 SQL 语句。 此输入可以通过应用程序中的字段、参数(例如查询字符串或 Cookie)或其他方法提供。 这种注入的后果是提供给数据库的 SQL 语句与开发人员的意图在根本上不同。 以用于评估用户名/密码组合的常见查询为例:

SELECT userID FROM users WHERE username = 'sUserName' AND password = 'sPassword'

当数据库服务器收到此查询时,它会指示服务器查询用户表,并返回用户名和密码与用户提供的值(可能是通过某种登录表单提供的)匹配的任何 userID 记录。 在这种情况下,开发人员的意图自然是仅在用户可以提供正确用户名和密码的情况下才返回有效记录。 如果用户名或密码不正确,数据库服务器将找不到匹配的记录并返回空结果。

当攻击者执行意外操作(例如提供自己的 SQL 来代替有效数据)时,就会出现此问题。 由于 SQL 是由数据库服务器即时解释的,因此会如同代码是由开发人员自己输入的一样处理注入的代码。 例如,如果攻击者输入 administrator 作为用户 ID,输入 xyz 或 1=1 作为密码,则数据库处理的最终语句将是:

SELECT userID FROM users WHERE username = 'administrator' AND password = 'xyz' OR 1=1

当数据库服务器处理此查询时,将在查询中返回表中的所有行,因为 1=1 始终计算为 True,因此是否知道或提供正确的用户名和密码并不重要。 在大多数情况下,最终结果是用户以用户数据库中第一个用户(在大多数情况下,这是管理用户)的身份登录。

除了简单的登录之外,诸如此类的格式错误的 SQL 语句还可用于添加、删除或更改数据,甚至从数据库中丢弃(删除)整个表。 在将 SQLi 与过高特权结合使用的极端情况下,可以运行操作系统命令来创建新用户、下载攻击工具或执行攻击者选择的任何其他操作。

在跨站点脚本中,漏洞是在应用程序的输出中造成的。 攻击始于攻击者向应用程序提供格式错误的数据,但在这种情况下,格式错误的数据采用脚本代码(例如 JavaScript)形式,该代码将由受害者的浏览器运行。 利用 XSS 漏洞,攻击者可以在启动浏览器的用户的上下文中运行目标应用程序的任何功能。 XSS 攻击通常由网络钓鱼电子邮件发起,攻击者在其中诱导用户选择某个链接,以连接到应用程序并运行攻击代码。

XSS 经常在网上银行和电子商务场景中被利用,在其中,攻击者可以在被利用用户的上下文中购物或转帐。 如果对基于 Web 的自定义标识管理应用程序展开有针对性攻击,攻击者可以利用 XSS 创建自己的标识、修改权限,并成就系统性入侵。

跨站点脚本和 SQL 注入的全面讨论超出了本文档的范畴,但开放式 Web 应用程序安全项目 (OWASP) 发布了 10 大攻击列表,其中深入讨论了漏洞和对策。

无论对基础结构安全性的投资有多大,如果在该基础结构中部署设计和编写不当的应用程序,环境就很容易受到攻击。 即使是安全良好的基础结构,也往往无法针对这些应用程序攻击提供有效的对策。 使问题变得更复杂的是,设计不当的应用程序可能需要为服务帐户授予过多权限才能正常运行。

Microsoft 安全开发生命周期 (SDL) 是一套旨在提高安全性的结构化过程控制,从需求收集的早期阶段开始,一直延伸到应用程序的整个生命周期,直到应用程序退役。 这种有效安全控制集成不仅从安全角度来看非常重要,而且对于确保应用程序安全成本符合目标和进度有效也很关键。 在保证代码实际完整性的前提下评估应用程序安全问题要求组织只在部署应用程序之前甚至部署之后做出应用程序安全决策。 组织可以选择在将应用程序部署到生产环境之前解决应用程序缺陷(这会产生成本和延迟),或者可以将应用程序部署到存在已知安全漏洞的生产环境中(这会使组织面临入侵风险)。

某些组织将修复生产代码中安全问题的整个成本设定为每个问题 10,000 美元以上,而对于在没有有效 SDL 的情况下开发的应用程序,每 100,000 行代码平均就可能有 10 多个高严重性问题。 在大型应用程序中,成本会迅速上升。 相比之下,许多公司在 SDL 的最终代码评审阶段设定了每 100,000 行代码少于一个问题的基准,并致力于杜绝生产环境中的高风险应用程序出现问题。

实现 SDL 可以通过在应用程序的要求收集和设计中尽早包含安全要求来提高安全性,从而为高风险应用程序提供威胁建模;需要对开发人员进行有效的培训和监督;并且需要清晰、一致的代码标准和实践。 SDL 的最终效果是显著提高应用程序安全性,同时降低开发、部署、维护和停用应用程序的成本。 SDL 的设计和实现详细讨论超出了本文档的范畴,有关详细指导和信息,请参阅 Microsoft 安全开发生命周期