安全简介

有关威胁建模的对话

Michael Howard

内容

Thespians
场景我
场景 II
场景 III
场景 IV

多年前,我读取的 Bill Bryant 的纸张标题为" 设计的身份验证系统: 四场景中的对话框"的说明 Kerberos 身份验证系统。 纸张的方式 grumpy 和 jaded 安全人员认为和响应来自与安全无关的人的问题的反射。 通常,与安全无关的人提问安全用户有关安全,它可以像提取治疗到达一个适当的和安全解决方案,因为在域之间的专业知识的开发人员和安全专业人员没有通信不匹配。 因此我认为我将文档的对话的 amalgam 我必须为一个长安全聊天多年。 我不假设此聊天但是,将执行在原始的 Kerberos 纸张的说,我 profusely 深提前。

该聊天的一个主要目标是绑定在某些主要安全开发生命周期 (SDL) 要求我们实施产品团队此处,在 Microsoft。

Thespians

Paige: 一个年轻、 亮软件开发人员。

Michael: 一个简单的安全专家 Microsoft。

场景我

cubicles,两组之间的小 hallway 指责旨在增强 Agile Software Development 和通信。

Paige: 您好,grumps。 我需要您帮助构建一些软件。

Michael: 使?

Paige: 严重,我希望您构建我正在使用此系统的帮助。

Michael: 您是您要设计的内容、 构建、 测试它,并再询问我要查找安全漏洞的假设?

Paige: 不要感到因此 grumpy。 不,我需要帮助最前面。

暂停: Michael 下脸擦他手,并强制一个笑脸。

Michael: 哇 ! 这是在第一个。 确定,我将帮助。 什么?

Paige: 我们有主干设计布局。 为 Web 应用程序的但我想要确保我们要做正确的安全操作。

Michael: 您是要传递您的最终安全性评论?

Paige 查找 perplexed 和有点 agitated。

Paige: 不要感到因此 GRUMPY ! 不,我要在执行正确的安全操作,我真正执行操作。 我不希望在标题中的此产品错误原因。 我想确保任何敏感数据进行保护,并且我想保留任何紧急修补程序最少。 我们的客户曾告诉我们要减少修补程序部署事件。

Michael 尝试真正错误的 Yoda 模拟。

Michael: 忠告现在。

Paige: 在我们开始?

Michael: Where ' s 威胁模型? 威胁模型没有我们只猜想。

Paige: 下面是。 我们已识别该的威胁,但我猜我们需要确保则缓解正确。

Michael Paige 的办公桌上倾,并快速查找通过威胁模型中。

Michael: 好。 非常好。 我印象。 很好的威胁模型。 如果您 squint,应用程序类似得多的基于 Web 的应用程序: Web 前端、 Web 后端、 数据库服务器、 存储在后端的客户数据的应用程序逻辑。 Hmmm… 非常标准的资料。

确定 Paige: 现在要做什么?

Michael: 我看到您已经标识第一顺序威胁。

Paige: 实际,威胁建模工具做的。

Michael: 我知道,我已被很好 ! 我们来看一些在 biggies。 到目前为止我假设应用程序关系图准确。

Paige: 是,设计已相当稳定的几周。

Michael: 极好。 一个很好的图表是过程的非常重要其余该的因为它是过程的您的应用程序域和我的安全域之间最重要的桥。

场景 II

Michael 提取设置在查看更多详细信息中的威胁建模工具分析 Paige 的办公桌旁的椅子。

Michael: 的首先应该了解的是攻击发生并且没有真正执行任何操作可将其停止。 只要攻击者将绘制一,它们将攻击。 Web 应用程序是一个很大的目标,因为它们通常提供敏感数据的前端和通常充满了真正错误的安全错误。

Paige: 为什么是 Web 应用程序安全错误因此充满?

Michael: 没有经验的数据但我已经看到数千个错误,审阅更多代码比我关心记住,并听到不修复 Bug 的每个 plausible 和 implausible 理由。

我想我们因两件事看到这么多的安全错误。 第一次,大量 Web 代码编写今天,并且大数字法则显示大量代码中的安全错误很少量仍为大错误数。

第二个,大多数开发人员就不知道了问题。 很难过,但 True。 遗憾的是,有大许多存在攻击者的用户知道该问题。

第三个,大量代码被匆忙投放市场。 我听到"获取它存在"所有频繁。 没有将得到我错误 ; 您的 Web 应用程序必须能提供真正的业务价值,而且如果它的附着在开发实验室,它的执行没有任何好处。 如果要构建高公开,如一个的 Web 应用程序的则您需要执行安全的但由于 diligence 以便您不使客户处于危险之中。

Paige: 您说没有两个的原因而提供三个。

Michael: 我知道。 我 lied。

Michael furrows 他 brow。

Michael: 时做上一次转到安全培训?

Paige: 三个星期前,它是 Web 安全类。

Michael: 极好。 用户学类?

Paige: Bryan。

Michael 脸上具有 worried 的外观。 Paige 响应 worried 的外观。

Paige: 什么?

Michael: 只需 kidding 必须我们最好的专家之一。 是否他告诉您他 AJAX 安全著作?

Paige: 的课程。

Paige 和 Michael smirk。

让我们 Michael: 确定重新获得课程。

为 Michael 短暂停查找通过威胁模型。

Michael: 您已记录在数据库服务器存储可能敏感的用户数据。

Paige: 是的。 还有一个在浏览器用 C# 编写的中运行的小客户端应用程序。 此代码可以上载文件从用户通过在 Web 服务器我们后端,文件存储在一起对于快速查找存储在 SQL Server 各种文件元数据文件系统。 我们可能会最终存储几十亿张的文件。

Michael: 这引发安全和隐私栏大量潜在的敏感 ; 数据是,因为它是数据,它恕信息泄漏威胁在后端数据存储区,虽然从客户端到服务器正确的传输中?

Paige: er,是的。

Michael: 确定,给我一个外观进行应用程序的风险。 因此,让我们开始开始。

我看到您有一个用户外部实体,您的系统上。 您清楚地需要验证用户,因为被欺骗。 您如何验证它们?

Paige: 我们使用的用户名和密码或 Windows 身份验证。

Michael: 为什么都?

Paige: 我们有两个不同的使用情况。

Paige 显示威胁建模工具中的核心方案。 第一个是 Internet。 第二个是一个 Intranet 方案。

Michael: 您意味着什么通过 Intranet?

Paige: 从客户端代码检测是否该计算机是域加入,以及如果是,我们更改我们的内部设置充分利用 Windows 平台的几个。

Paige 显示以下代码:

bool _fIsDomainJoined = true;
try {
    Domain d = Domain.GetComputerDomain();
}
catch (ActiveDirectoryObjectNotFoundException e) {
    // not in a domain
    _fIsDomainJoined = false;
}

Michael grimaces。

Michael: 没有将两个错误位于代码。 第一个是您要检查是否在台计算机不是用户帐户加入到域。 就可以使用本地帐户,即使该计算机不加入域登录,因此更改代码以使用 domain.GetCurrentDomain。

下一步,您无法打开。 如果代码引发异常的任何其他类型,并且它的其他位置处理代码中然后该代码将使用加入域的逻辑加入域的标志是 True。 要更改该代码将加入域的标志设置为只在成功的 try 块的 True。

伟大,种方法在仅捕获可以处理该异常的。 许多人捕捉所有异常,甚至无法处理的异常和实际代码错误的只是掩码。

Paige: 确定,得到它。

Michael:,应当特定威胁模型中: 更改 Intranet 域加入。

Paige 更新威胁建模工具。

Michael: 将告诉我有关加入域时使用在 Windows 身份验证。

Paige: 我们使用 NTLM 或 Kerberos。

Michael grins。

Michael: 您是使用 Kerberos?

Paige: 您意味着什么?

Michael: 您说这一个加入域的方案以便应强制 Kerberos。 您应该离开 NTLM 尽可能并使用仅 Kerberos。 Windows 所有当前支持加入域的版本支持 Kerberos。

Paige: 如何我们实施的?

Michael: 只需确保您不请求 NTLM 直接 ; 您的代码中查找"NTLM"和如果看到该,来自请参阅我,我们可以设置权限。 不违反 SDL 并需要 NTLM。 此示例代码是错误的因为它不会利用 Kerberos:

Michael 显示 Paige 一些 C++ 代码,调用的:

AcquireCredentialsHandle(NULL, NTLMSP_NAME ,...)

Paige 使有关使用 Kerberos 的注释。

Paige: 什么特别有关 Kerberos 呢?

只是说我可能未 Michael: 使用 NTLM,因为它在 SDL 中指出,为。 但此处在应使用 Kerberos: 是 NTLM 相比更可伸缩,则验证该客户端和服务器。 NTLM 进行身份验证仅客户端。

现在告诉我有关基于 Internet 的身份验证系统。 您自己的系统或其他是吗?

Paige: 我们使用 Windows Live ID。

Michael: 我会善良。 作为一个安全人我不是用户 ID / 密码身份验证系统的风扇。

Paige: 但我们需要的可用性。

Michael: 完全。 我完全同意。 只需确保使用 Windows Live ID SDK 的最新的版本。

我们已经解决一个威胁: 案例的 Windows Live ID 或 Kerberos 身份验证在此欺骗用户 ; 缓解。 请确保您可以捕获的威胁模型中。

Paige: 完成。

Michael: 可以浏览器中运行此应用程序如恕所有 STRIDE 风险元素因为它是一个过程。 我要重点两个大的威胁。 我们可以明天专注于其他。

让我们看欺骗。 是否确实实际的应用程序且不能使用某些其他应用程序的装作您的代码? 让我们也看提升权限。 最后所需的内容是允许攻击者获取此代码来执行其预期功能之外的任务。 许多安全专业人员要求安全程序是一个执行它应该和没有更多程序。

Paige: 我们有这 nailed。 我认为! 首先,CAB 文件的下载到浏览器的已经过数字签名由从属于安装在 Windows 和 Linux 的默认的此第一个版本我们两个目标平台的根 CA 证书的证书颁发机构。 第二,该代码是 C#,因此我们可以限制为仅通过该代码实际上是仅 FileDialogPermission、 UIPermission、 DnsPermission 和 SocketPermission 要求权限权限。 在是至少这是我们认为我们现在需要权限。

Michael 微笑。

Michael: 哇。 好的资料 ! 您要做一些我认为是出色: 您要卸载运行库或操作系统安全工作而创建自己的安全基础结构。 如果这样做您自己的安全内容,将只得到它错误! 您知道什么酷有关在托管的代码应用程序上使用数字签名?

Michael: 您只是解决在 STRIDE T 威胁: 篡改。 因此请确保威胁模型包含您的数字签名是 T 缓解。

场景 III

Paige 和 Michael 获取一个咖啡馆并头回 Paige 的支持。 Michael 戴帽子一个白色的 T-shirt,因此他 drinks 与 outstretched 的颈部他咖啡 !

Michael: 下一步是服务器。 再次,所以取决于所有 STRIDE 威胁的进程在威胁模型中。 让我们只看一下欺骗。 如何知道网站位于的网站确实需要和不是一个恶意?

Paige: 文Ha ! 我们有此设置 sewn。 实际上,现在,我考虑什么您说前面,我们可能有两种解决方案。 第一个是我们要求 SSL/TLS,这为我们提供了正确的服务器验证?

Michael: 很好。 只要在公用名,或服务器证书中的 CN 与域名称,在 URL 中的相匹配。

Paige: 但是等等。 还有更多。 如果我们使用 Intranet 正在 我意味着域加入方案,我们通过使用 Kerberos 中获取服务器身份验证 ! 酷。

Michael: 我印象。 确定,欺骗解决客户端代码。 欺骗地址的服务器。 欺骗解决客户端。 如何威胁在线: 在数据流从客户端移在的服务器,并数据可以从服务器流到客户端。 清楚地所有 (没有 pun 适用) 都需要信息泄漏和篡改,我和 STRIDE 中的 T,因为它们是数据流。 好消息是您已减轻。

Paige: 它们是?

Michael: 是。

Michael 暂停效果,并查看 Paige 是否获取解决方案。

Paige: Ohhh,没错。 SSL/TLS ! 我们获取连接加密,并篡改检测免费 !

Michael: Correctammundo。

Paige: 您只是说,"Correctammundo !"

Michael: 我很抱歉。 您正确。 用于加密,SSL/TLS 使用如 AES,Symmetric 密钥加密,并进行篡改检测使用消息身份验证代码。 噢,并确保您的 Web 服务器配置为使用 128 位或更好地对称加密的一个 SDL 要求。

Paige 使有关加密密钥长度的注释。

Michael:,但我仍然认为有的房间内的一个 Elephant。 从客户端向服务器排列并且然后存储在文件系统和 SQL Server 中的数据呢? 那么如何缓解信息泄漏和篡改威胁的数据是潜在机密?

Paige: 您意味着什么? 在服务器上是否保护数据?

Michael: 确保是。 一旦数据弹出超出该安全 SSL/TLS 通道的上一步是以明文。 使该问题,如何您避免数据篡改和信息泄露您的管理员的或 dare 我说该攻击者如果它们破坏后端服务器?

Paige: 哇。 我不认为。

通过 Michael 的图标,boyish 的笑脸迅速传播。

Michael: 的就是为什么我获取支付 mediocre bucks !

确定 Paige:,简单。 我们将加密数据说,使用 DES。

Michael 使确实令人讨厌的 FAIL 声音。

Paige: 说明。

Michael: 加密可降低信息的泄漏威胁,但加密会至少不使用复杂的密码模式不降低篡改的威胁。 此外,因为它并不安全,并且是违反 SDL 策略不能使用 DES。 您可以使用 AES 对称加密。

Paige: 如何我们修复此,然后?

Michael: 我会说老实话,不简单。 加密是相当容易。 您只需调用某些库代码,传递一个键,纯文本、 初始化向量,密码器类型完成密钥的大小、 密码模式,填充模式,与您。

Paige: 您正在被 cynical。

Michael: 我不。 是简单的一部分 !

Paige: 您 utterly 丢失了。

Michael: 困难的部分是关键管理。 如何生成加密密钥? 存储它们? 您如何撤消它们? 您如何传输它们之间的计算机或用户? 如果密钥是丢失?

Paige: 我们只允许用户访问他或她自己的数据。

Michael: 的使事情变得有点更容易一些。 但不是多 ! 在可能,依赖于操作系统。

Paige: 因此什么我们可以使用?

场景 IV

Michael 深的一并 swivels Paige 向他椅子。

Michael: 所有是权利这里我将怎么。 您有两种不同的方案: Internet 和基于域的。 基于域的是特定于 Windows 因此利用 Windows 操作系统安全基元尽可能。

Paige: 确定,请转上。

Michael: 保护私人数据在 SDL 指令使用数据保护 API (DPAPI) 因此只需使用它。 客户端代码可以检测加入域的用户执行时,因此只需调用 CryptProtectData 和 CryptUnprotectData 和将其保留的。 Windows 负责密钥管理以及需要加入域的计算机之间传输密钥。 另一个优点是此解决方案实施非常少用户。 用户不知道数据保护。 所有发生透明地,而且"psychologically 接受"用户。

Paige 查找 puzzled。

Paige: 什么?

Michael: 计划我下的一周和我们将讨论几个重要的安全原则,应该了解: 钟 LaPadula 泄漏模型 Saltzer 和 Schroeder 安全设计原则。

Paige 打开 Outlook,并将以下周的约会添加。

Paige: 回到我们的应用程序: 内容有关的数据和篡改检测完整性?

Michael: DPAPI 地址太 !

Paige: 看起来像一个无 brainer 给我。

Michael: 是并且您是符合 SDL !

Michael 和 Paige grin 如 Paige 更新威胁模型。

Paige: 那么 Internet 方案怎么样?

Michael: 这是在可以获得非常复杂。 若要老实说,我没有解决方案的现在,并且设计一个是很困难,因为我需要了解有关您的应用程序的一些事项。 是否支持哪些操作系统? 应服务器管理员确实拥有访问数据的权限? 如何生成和存储加密密钥? 您的审核要求是什么? 假定加密使用来自如果用户忘记了密码在该用户的数据? 我可以使将 !

您想对此讨论在明天 Paige:?

Michael: 确保,我们应专门整个的小时,实际,使两个小时 !

但我们总结此聊天之前,我需要向几个代码级别问题。 首先,您使用 Web 应用程序,以便使用 SDL 批准 ValidateRequest 和 ViewStateUserKey,右?

Paige: 绝对。

Michael: 并在适当,您使用的 HTML 编码库?

Paige: 是。 所有输入来自外部在的服务器,然后都回显使用编码后,包括在的数据库中的元数据, Microsoft AntiXSS 库.

Michael: 好。 和 Cookie?

Paige: 标记为 HttpOnly 中。

Paige 打开 Visual Studio,并显示下面的 Web 服务器中的代码行:

cookie.HttpOnly = true;

Michael: 极好 ! SQL 语句?

Paige: 使用存储过程和参数化的查询和拒绝访问基本的数据库对象。

Michael: Bryan 告诉您好 !

Paige: 感谢。 和,这是非常有用的聊天。 我了解了许多今天。

要听到 Michael: 好。 我们仍需要大量覆盖,但是我想我们关闭正确的启动。 我们可以查看您的威胁模型的其余部分之后我们已经解决 Internet 后端数据安全问题。 但在的下,我认为我们已经解决一些大问题。

Michael 获取设置返回到其 cubical。 然后停止,并打开周围。

挂 Michael: 噢,起。 隐私声明将对右该 Web 站点?

Paige: 是。 我们的律师和隐私朋友们制作一个我们。

Michael: 问题,这是已解决的另一个 SDL 要求。

将您的问题和评论发送到的安全简报 briefs@Microsoft.com.

Michael Howard 是一个主要安全程序 Microsoft 经理,关注安全流程改进和最佳实践。 他是的包括 Writing Secure Code for Windows Vista 的许多安全性书籍 The Security Development LifecycleWriting Secure Code,和 19 Deadly Sins of Software Security