源码网,专注为站长提供最优质的源代码服务 CSS3演示 | 站长工具 | 网页特效 | 网页模板 | 网页素材 | PSD素材 | 手机系统 | W3C教程
广告加载中...
当前位置: 源码网 > 网络技术 > 安全中心 > 安全资讯 > >文章

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

时间:2017-11-27 11:02点击: 次 【

模板交易 网站模板 CMS模板 免费模板 模板交易平台

CTO训练营 | 12月3-5日,深圳,是时候成为优秀的技术管理者了

【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. 威胁历史的检查

推荐文章
热门文章榜