单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第一章 威胁建模,威胁建模是一种基于安全的分析,有助于人们确定给产品造成的最高级别的安全风险,以及攻击是如何表现出来的。其目标是确定需要缓和哪些威胁,如何来缓和这些威胁。威胁建模的重点是以一种相对正式的方式来考虑程序的安全性。,只有你了解了所受到的威胁之后才能创建安全的系统。,通过威胁建模进行安全的设计,威胁建模的其他好处:,威胁建模有利于更好地理解你的应用程序。,威胁建模可以帮助你查找,bug,。,通过威胁建模可以发现以其他任何方式都不太可能发现的复杂的设计,bug,。,威胁建模可以帮助新的小组成员理解应用程序的细节。,威胁建模应该能让基于产品的其他开发小组用到。,威胁模型对测试人员非常有用。,.,第一章 威胁建模威胁建模是一种基于安全的分析,有助于人们确定,1,第一章 威胁建模,通过威胁建模进行安全的设计,威胁建模过程如下:,成立威胁建模小组。,分解应用程序。,确定系统所面临的威胁。,以风险递减的顺序给威胁排序。,选择应付威胁的方法。,选择缓和威胁的技术。,从确定下来的技术中选择适当的方法。,.,第一章 威胁建模通过威胁建模进行安全的设计.,2,第一章 威胁建模,1.1,分解应用程序,成功的威胁建模需要一种更结构化和形式化的方法,不是简单的“想象威胁”。对应用程序进行形式化分解方法:,数据流图(,DFD,,,Data,Flow,Diagram,),统一建模语言(,UML,,,Unified,Modeling,Language,),UML,活动图致力于过程之间的控制流,而,DFD,则是过程间的数据流。,DFD,常用的数据流图符号如下:,一个过程,转换或操作数据,多个过程,转换或操作数据,数据存储,存放临时数据或永久数据的地点,边界,机器、物理、地址空间或信任边界,交互者,向系统输入,认证数据,数据流,描述来自数据存储、过程或交互者的数据流,.,第一章 威胁建模1.1 分解应用程序一个过程多个过程数据存储,3,第一章 威胁建模,1.1,分解应用程序,DFD,分解的指导原则:,应用程序或系统可以分解为子系统,而子系统又可以分解为更低级的子系统。,DFD,分解过程:,分解的第一步是确定要分析的应用程序的边界或作用范围,并了解可信任部分和不可信任部分之间的边界。,DFD,使用一个高级上下文图表定义应用程序的作用范围。然后向下进入较低的层次,使用,0,级图表、,1,级图表、,2,级图表等等。,上下文,0,级,1,级,2,级,.,第一章 威胁建模1.1 分解应用程序上下文0级1级2级.,4,第一章 威胁建模,1.1,分解应用程序,DFD,上下文图表,上下文图表只有一个过程,通常没有数据存储。如下是工资表范例应用程序的上下文图表。,3.0,管理员,1.0,用户,2.0,Web,开发者,4.0,审计员,0.0,工资表应用程序,管理任务请求,工资表信息请求,工资表信息响应,管理任务反馈,更新后的文件,审计实体,内联网,数据中心,.,第一章 威胁建模1.1 分解应用程序3.01.02.04.0,5,第一章 威胁建模,1.1,分解应用程序,定义,DFD,的作用范围时,应考虑以下问题:,忽略应用程序的内部工作方式。,哪些事件和请求是系统必须响应的?,程序将产生什么响应?,标示出每次请求和响应相关的数据源。,确定每次响应的接收者。,.,第一章 威胁建模1.1 分解应用程序.,6,3.0,管理员,1.0,用户,2.0,Web,开发人员,4.0,审计员,14.0,强制管理策略,5.0,服务客户端请求,9.0,强制工资表策略,11.0,访问数据,6.0,身份认证数据,7.0,Web,页面,8.0,Web,服务代码,12.0,工资表数据,13.0,审计日志,管理任务,任务反馈,认证数据,更新后的认证数据,更新后的工资表数据,工资表请求,工资表响应,信任状,身份认证状态,工资表请求,工资表响应,工资表数据请求,工资表数据,工资表数据请求,新的认证数据,审计实体,请求的页面,更新后的文件,更新后的文件,请求的代码,内联网,数据中心,机器边界,数据中心,内联网,工资表范例的,1,级数据流图,.,3.01.02.04.014.05.09.011.06.07,7,第一章 威胁建模,1.1,分解应用程序,在,DFD,中创建和命名实体时,应遵循的规则:,一个过程必须至少有一个数据流流入和一个数据流流出。,所有数据流都从某个过程开始,到某个过程结束。,数据存储通过数据流与过程相连。,数据存储之间不能连接,它们必须通过过程相连。,过程的名称是动词、名词或动词短语。,数据流名称是名词或名词短语。,外部实体或交互者的名称是名词。,数据存储的名称是名词。,一般来讲,如果只是威胁建模,只需深入到两级、三级或四级。,.,第一章 威胁建模1.1 分解应用程序.,8,第一章 威胁建模,1.2,确定系统所面临的威胁,威胁目标:下一步是取出分解过程中确定的各个部分,将其作为威胁模型的威胁目标。分析应用程序结构的原因并非确定其工作原理,而是研究应用程序的组成或资源(,asset,),数据在各部分之间是如何流动的。这些组件或资源通常称为“威胁目标(,threat,target,)”。,考虑威胁时,可考虑如下问题:,未经认证的用户能否浏览秘密网络数据?,不可信任用户能否修改数据库中的记录数据?,是否有人能够拒绝合法用户获得应用程序的服务?,是否有人能够利用某些特性或组件将自己的特权提升为管理员?,.,第一章 威胁建模1.2 确定系统所面临的威胁.,9,第一章 威胁建模,1.2,确定系统所面临的威胁,使用,STRIDE,给威胁分类,(*),STRIDE,是下面,6,种威胁类型的英文首字母缩写:,身份欺骗(,Spooling,identity,)。身份欺骗允许攻击者冒充另一个用户,或者允许恶意服务器冒充合法服务器。,篡改数据(,Tampering,with,data,)。篡改数据包括有恶意地修改数据。,否认(,Repudiation,)。用户拒绝承认他从事过的活动,并且其它方面没有任何办法证明他是在否认。,信息泄露(,Information,disclosure,)。信息被暴露给不允许对它访问的人。,拒绝服务(,Denial,of,service,,,DoS,)。拒绝对合法用户的服务。,特权提升(,Elevation,of,privilege,)。没有特权的用户获得访问特权,从而有足够的能力损坏或摧毁整个系统。,.,第一章 威胁建模1.2 确定系统所面临的威胁.,10,第一章 威胁建模,1.2,确定系统所面临的威胁,威胁树,威胁树的思想:应用程序是由威胁目标组成的,每个目标都有漏洞,任意漏洞被成功攻击都会破坏整个系统。威胁树描述了攻击者破坏各组件所经历的决策过程。当分解过程向你提供了应用程序各部分的清单时,就要标识出每个部分所面临的威胁。一旦标出潜在的威胁后,那么你就能确定怎样用威胁树来表示这些威胁。,1.0,用户,5.0,服务客户端请求,工资表请求,工资表响应,内联网,数据中心,部分,1,级,DFD,,用户和,Web,服务器通过服务客户请求过程进行交互,.,第一章 威胁建模1.2 确定系统所面临的威胁1.05.0工资,11,第一章 威胁建模,浏览从服务器向客户计算机传输敏感用户工资数据的威胁树,威胁,#1,在线浏览秘密工资表数据(,I,),1.1,HTTP,通信不受保护,1.2,攻击者浏览通信数据,与,1.2.1,使用协议分析器嗅探网络通信,1.2.2,监听路由器流通数据,1.2.3,破坏交换机,1.2.2.1,路由器不受保护,1.2.2.2,破坏路由器,1.2.2.3,猜测路由器口令,与,1.2.3.1,各种交换机攻击,.,第一章 威胁建模浏览从服务器向客户计算机传输敏感用户工资数据,12,第一章 威胁建模,大纲是表现威胁树的更为简洁的方式。上述威胁树的大纲表现形式如下:,1.0,在线浏览秘密工资表数据,1.1,HTTP,通信不受保护(与),1.2,攻击者浏览通信数据,1.2.1,使用协议分析器嗅探网络通信,1.2.2,监听路由器流通数据,1.2.2.1,路由器不受保护(与),1.2.2.2,攻破路由器,1.2.2.3,猜测路由器口令,1.2.3,攻破交换机,1.2.3.1,各种交换机攻击,.,第一章 威胁建模大纲是表现威胁树的更为简洁的方式。上述威胁树,13,第一章 威胁建模,改进威胁树增加可读性:,用虚线表示最不可能的攻击点,用实线表示最可能的攻击点。在最不可能的节点下放置圆圈,说明为什么威胁会减弱。,威胁,#1,获取用户口令信息,(I)(S)(E),1.1,监听基本认证连接,1.2,破坏服务器证实存储,1.3,读取本地用户口令的恶意软件,1.3.1,用户“安装”读取口令的病毒,1.3.2,在计算机上安装恶意代码,使用,SSL/TLS,需要对服务器的物理访问,需要对服务器的物理访问,.,第一章 威胁建模改进威胁树增加可读性:威胁#11.11.21,14,第一章 威胁建模,项目,注释,标题,用适当的语言描述,威胁目标,应用程序的哪一部分容易受到攻击?,威胁类型,基于,STRIDE,模型来记录威胁的类型,风险,用你所喜欢的方法来计算风险,威胁树,攻击者如何实施威胁?保持威胁树的简单性,缓和技术(可选),如何缓和威胁?如果已经使用了某种缓和技术,就记录下来;否则,进行下一个威胁。,缓和状态,威胁已经被缓和了吗?是、否、稍微、需要研究,Bug,数量(可选),如果在使用一个跟踪,bug,的数据库,则有要跟踪的,bug,数量,威胁建模需要记录的项目,.,第一章 威胁建模项目注释标题用适当的语言描述威胁目标应用程序,15,第一章 威胁建模,1.3,以风险递减的顺序给威胁分级,通过威胁造成的风险大小,决定哪一个问题要最先研究。风险的计算方法并不重要,只有合理并且保持一致。,一种计算风险的简单方法是用隐患的危险程度(潜在的破坏性)乘以隐患发生的可能性。,风险,CO,=,危急程度,发生可能性,通常,1,表示最低的危急程度或发生可能性,,10,表示最高的危急程度或发生可能性。,风险,CO,越大,威胁对系统造成的风险就越大。例如,最高的风险等级是,100,。,.,第一章 威胁建模1.3 以风险递减的顺序给威胁分级.,16,第一章 威胁建模,使用,DREAD,计算风险,风险计算方法,DREAD,是,Microsoft,使用的方法,其名字是如下短语的首字母组成:,潜在破坏性(,Damage potential),。破坏会有多严重?衡量一个威胁可能造成的实际破坏程度。,再现性(,Reproducibility,)。让潜在的攻击起作用会有多频繁?衡量将威胁变为现实的频繁程度。,可利用性(,Exploitability,)。进行一次攻击需要多少努力和专业知识?,受影响的用户(,Affected,users,)。如果威胁被利用并成为一次攻击,有多少用户会受到影响?,可发现性(,Discoverability,)。一个威胁可被利用的可能性。这是最难衡量的标准。,该方法将上述五个方面的平均值作为风险值(风险,DREAD,)。上述五个方面的取值范围为,1,10,。,.,第一章 威胁建模使用DREAD计算风险.,17,第一章 威胁建模,其他评估风险的方法,如,Internet,安全系统的创始人,Christopher,W.Klaus,提出的方法就是一个比较灵活的方法,它检查威胁隐患的各个方面,创建一个严重性矩阵,用于如何处理和发现问题的优先级。一般需要回答以下问题:,是本地威胁,还是远程威胁?攻击者能够不需要首先获得本地访问权就实施攻击吗?,威胁的结果是什么?特权直接提升?如果是,提升到什么级别?是信息泄露问题吗?是导致特权提升的信息泄露吗?,使攻击成功需要一些动作吗?,.,第一章 威胁建模其他评估风险的方法.,18,第一章 威胁建模,将分解、威胁树、,STRIDE,、,DREAD,结合起来,将所有这些结合起来,就可以从功能分解上