您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 网络/安全 > 正文

如何通过威胁建模构建安全的Web应用程序

发表于:2017-11-23 作者:陈峻编译 来源:51CTO.com
一、概述

在当前的网络计算环境中,各种形式的安全已经成为所有Web应用程序的普遍需求。保密性、完整性和保密性的需求日益增加,可以说安全已经成为了一种至关重要的互联网技术。为了设计出一个安全的Web应用程序,对潜在威胁进行分析和建模是非常必要的。

Web应用程序/威胁

威胁建模是一套过程:首先要通过识别各种目标对象的漏洞来优化网络、应用以及互联网安全,然后确定应对的措施,从而防范或缓解威胁对系统的影响。

威胁是一种具有恶意(如DoS攻击)或偶然(信息泄漏)性质的,潜在或实际存在的不良事件。因此威胁建模就是一个识别和评估应用程序威胁与漏洞的活动计划。

同时,威胁建模也是一个持续的过程,各个公司需要专门制定和实施一个框架来缓解威胁。

本文目的是在Web应用程序中识别相关的威胁和漏洞,通过建立一套安全框架,来设计出一个安全的Web应用程序。

二、威胁建模的各种实用工具

Web应用程序里会出现各种各样的漏洞,如果这些漏洞被利用,就会给组织的各项功能和资产构成威胁,因此企业应该根据漏洞对自身的影响程度来进行防范。

威胁建模可用于:

  • 识别那些可以被用来利用和攻击组织资产的潜在威胁。
  • 设计应用程序,以满足安全目标。
  • 在对潜在的威胁进行排序时,有助于关键性的工程决策。
  • 识别重要且特定环境中,如公司网络中的各种漏洞。
  • 对在开发和运营过程中所产生的安全问题进行优先级排序和风险的缓解。

三、Web应用程序的威胁建模过程

与Web应用程序的威胁建模有关的主要步骤如下:

  • 安全目标的识别
  • 资产的识别
  • 应用程序的排查
  • 系统建模
  • 威胁的识别
  • 漏洞的识别
  • 威胁代理的选择
  • 威胁历史的检查
  • 资产和漏洞的优先级排序
  • 威胁影响的分析

1. 安全目标的识别

安全的目标与约束关系到客户数据和应用程序的机密性、完整性和可用性。

具体包括:

  • 保护客户账户的详细信息和客户的信用记录,防止攻击者获得敏感的客户数据,包括密码、个人信息、金融历史、客户信用卡号码、银行相关细节、或旅游行程。
  • 确保应用程序的随时可用性,如:满足应用程序可用性的服务水平协议(SLA)或标准的合规要求。
  • 防止未经授权的用户任意修改信息,尤其是财务信息。
  • 保证公司的客户数据的可用性与机密性,如:保护公司在线业务的可靠性,或对客户数据保密性与完整性的信誉承诺。

2. 资产的识别

根据场景的不同,资产对应的资源价值也不尽相同。对于业务来说,资产可能是信息的可用性,或是其信息本身,比如说是客户的数据。识别并创建一张包含有公司内每项潜在资产的列表是非常必要的。该列表应能体现资产项是否符合“安全边界”的标准。以下列出了各种敏感资产的一些共性:

  • 电脑与笔记本
  • 路由器和网络设备
  • 打印机和传真机
  • 存有公司敏感信息的数字型或模拟型相机
  • 销售、客户信息、员工信息类型数据
  • 公司的智能手机/掌上电脑
  • VoIP电话、IP交换机(数字型电话交换机)、相关的服务器
  • VoIP或常规电话的录音和记录
  • 电子邮件
  • 员工的日程表和活动日志
  • 网页,特别是那些要求客户填写详细信息,并支持网络数据库查询的脚本
  • Web服务器
  • 安全摄像头
  • 员工门禁卡
  • 服务访问点(如:任何扫描仪和受控房间的入口)

对攻击者而言,这些资产可以被用来实现对应用程序的滥用,进而对数据或各种特权操作的非法获取。

3. 应用程序的排查

该步骤涉及到Web应用程序的功能、通信和安全机制等,因此这里应该尽可能多地获取目标应用的信息。通过收集应用程序的主要功能、特点、作用、关键用途、技术和安全机制等,来辅助识别出相关的威胁。

下面就是在创建应用程序排查时,所需要考虑的事项:

(1) 详细收集部署的拓扑结构、关键服务的逻辑层次、通信端口和各种协议。

(2) 识别应用程序中的用户角色,比如:谁可以做什么、有哪些特权用户组、内部用户、管理员、来宾用户和互联网普通用户,以同样的方法去标识Web服务和数据库的各个角色。

(3) 识别应用程序的关键使用场景也是非常重要的。主要是找出应用程序的重要功能和它是如何实现的。其中一些典型的应用场景包括:用户浏览和搜索各种产品,将它们放入购物车;已注册用户登录,并通过购物车下订单。通过识别应用程序的功能和使用,将有助于您更好地区分它们是如何被正常使用,还是被误用了。

(4) 识别并罗列出应用程序所用到的技术和软件。例如:操作系统的类型、Web服务器与数据库的类型与版本。比如:.Net、C#或其他。这不仅有助于把更多的注意力放在特定技术的威胁上,也能帮助我们确定正确的、且最为合适的缓解技术。

(5)识别应用程序正在使用哪些安全机制。此方面所涉及到的要点包括:

  • 输入数据的有效性
  • 认证与授权机制
  • 会话管理
  • 使用到的加密技术
  • 审计与日志

4. 系统建模

在威胁建模过程的开始阶段,安全设计者们需要对系统有足够的了解。应用系统的模型是在用例和架构模型的基础上创建的。因此,您对应用程序的了解越多,就越容易揭露威胁和发现漏洞。可见,在该步骤中,应用程序会被彻底解析,以创建出一个安全的配置原型。

在对应用程序的解析过程中,会涉及对每个组件(网站,Web服务或数据库),及其相互连接的解读,定义使用场景,以及识别各种前提条件与内外部依赖关系(如AD、邮件系统等)。

我们可以用不同的技术来对计算系统进行建模。下面就是在创建应用程序和系统模型时需要考虑的事项:

  • 识别系统的信任边界,如:边界防火墙,或Web应用程序与第三方服务的边界点。
  • 绘制应用程序的数据流程图(Data Flow Diagram,DFD),它能将应用程序分解为不同的功能部件,并标注出进出系统组件各个部分的数据流向,其中包括有:用户登录的方式,Web应用程序、数据库服务器、第三方服务或Web服务之间的数据流。
  • 识别应用程序的接入点,当然它们可能也是攻击的入口。比如说:通过端口80或端口443的Web请求,内、外部用户的登录页面,管理界面等。
  • 识别退出点,因为它们也可能就是攻击的向量。比如说:一个搜索页面可以记录用户的搜索字符串和相应的结果、以及包含能够显示产品细节的索引页。

我们所要建立的系统模型是一个能反映系统本质特征,并有助于识别各种由于应用程序用到了特殊逻辑或技术而引发的威胁。可以说我们的建模越完整、越详细,就越有助于其他阶段的成功实现。

5. 威胁的识别

在这一阶段,那些可能会影响到系统、并攻击资产的威胁会被识别出来。可以说威胁的识别正是系统安全的关键。威胁的识别一般包括:分析每一个入/出口,逐层逐步地检查应用程序及其各种特性。

下面列出了可能会影响到应用程序的各种威胁:

  • 基于字典的蛮力攻击。
  • 发生在浏览器和Web服务器之间的网络窃听,进而捕获客户端的信任凭证。
  • 攻击者可能捕获的具有身份信息的cookies。
  • SQL注入,即:攻击者能够利用输入验证上的漏洞,在数据库中执行命令,从而访问和/或修改各种数据。
  • 通过注入脚本代码生成的跨站点脚本。
  • 信息的泄漏。
  • 攻击者控制Web服务器,获取对数据库的非授权访问,通过运行针对数据库的命令,从而未经授权地访问Web服务器资源和静态文件。
  • 发现数据库中用于加密敏感数据的密钥(包含有客户的信用卡号码)。

6. 漏洞的识别

为了找出与上述威胁相对应的漏洞,我们应当对应用的各个层面进行审查。通过既定的漏洞类别,对错误经常出现的领域予以关注。

下面是常见的应用程序漏洞:

(1) 与漏洞相关的身份验证,如:缺乏密码的复杂性、或是缺少密码重试的逻辑管理。

(2) 无效数据的输入

  • 所有输入是否都有效?
  • 如何进行验证?
  • 是否对类型、长度、格式和取值范围进行验证?
  • 良好的数据参照标准是什么?
  • 哪个模块负责验证?

(3) 异常处理

  • 哪些信息需要被用作故障处理?
  • 哪些信息应该呈现给最终用户?
  • 攻击者能获取到的有用异常信息细节。
  • 向最终用户/客户提供的详细错误消息。

(4) 被用在错误算法中的弱加密密钥

(5) 通过Web应用程序暴露的管理功能模块

(6) 远程代码执行的漏洞

(7) SQL注入、跨站脚本

(8) 用户名枚举

(9) 参数调整

(10) 特殊授权操作和用户权限升级

(11) 会话和cookie

7. 威胁代理的选择

威胁代理是指有能力产生各种威胁的人或事件。根据上述提到的场景,主要的威胁代理/事件有:

  • 内部人员和一般用户
  • 黑客和黑客团体
  • 各种蠕虫、木马和病毒
  • 自然和环境的事件(洪水、火灾等)

8. 威胁历史的检查

现在我们已经编制了一份当前威胁的清单,但如果能把将来可能出现的威胁也考虑进去就更好了。因此如果您要预测将来的威胁,第一步就是要检查公司的各种记录,并与曾经见证过公司有关安全威胁的员工进行交流。

大多数威胁都会自我重演,所以通过对公司过去经历和您自己清单上的相关威胁的编录,您就会得到自己公司有关漏洞的“全景图”。

9. 资产和漏洞的优先级排序

我们现在已经制定出了一张公司可能面临的资产和安全威胁的完整列表。我们不能将每个资产或威胁的优先级一概而论。在该步骤中,我们通过对资产和漏洞排定优先级,来获知公司存在的最大安全风险。

下列步骤有助于排定资产和漏洞的优先级:

计算并制定风险和概率的矩阵

  • 计算风险。
  • 计算概率。
  • 计算影响。

各种对策的实施一般取决于资产和漏洞的危险程度。我们可以用各种技术来进行排序。其中微软的DREAD(危害程度、可重复性、可利用性、受影响的用户、可发现性)模型就是一种流行的威胁和漏洞排序方法。

10. 威胁影响的分析

术语影响指的是威胁对资产所构成的结果。威胁的影响可分为如下几类:

  • 轻微:少量业务资产的损失,尚未改变业务秩序。
  • 中等:业务中断,适度影响到了业务的运作。
  • 主要:立即部署对策,不然会导致“歇业”。
  • 灾难性:威胁一发生就会导致“歇业”。

威胁的影响可能会导致市场份额、商业资本、用户、股东和业务合作伙伴、以及公司声誉的损失。

威胁对资产所产生的直接结果包括:信息的泄漏、修改、破坏、损耗、干扰和未经授权的访问。

11. 安全威胁响应计划的制定

该步骤主要是基于资产和漏洞的优先级列表,来制定针对特定威胁的响应计划。虽然这些安全响应并非是应对安全威胁的唯一选择,但它们能涵括公司所面临绝大部分的威胁。

除了一些基本的威胁应对计划之外,下面的安全实施策略也是需要的:

  • 实施网络访问控制列表(ACLs)
  • 实施IDS/IPS
  • 实施互联网下载管理(译者注:Internet Download Manager,IDM)
  • 各种备份
  • 内容与邮件过滤
  • 实施物理安全

三、结论

应用程序的建模对于识别应用的威胁和漏洞是非常重要的,它会直接影响到公司的业务运营。同时,它有助于更好地理解公司资产、应用程序和整体业务所面临的各种风险。

我们讨论到了各种应用的潜在威胁和威胁建模过程中的各种需求。可见,威胁建模为Web应用程序的加固提供了一个良好的安全框架。

使用该框架将有助于识别系统中的各种威胁和漏洞。在创建和实施Web应用程序安全框架时,下面两个关键点是值得重视的:

  1. 开发人员最常犯的错误
  2. 最有效的改进

有研究表明:对于应用程序当前和将来威胁与漏洞的建模,可以很大程度上提高公司的安全水平。安全策略在具体实践中能够有助于保护网络不受威胁和漏洞的困扰,并保持系统的机密性、完整性和可用性。

最后,要提醒大家的是:“黑客无假期”,在如今的技术环境中,我们要时刻提防各类攻击者和那些“脚本小子”。

原文标题:Web Application Threat Modeling,作者:Akash Shrivastava