项目iOS Developer程序员

iOS安全概要-1-风险评估和威胁建模(Risk Assessm

2016-06-20  本文已影响441人  Doris_Lee

1 风险评估和威胁建模(Risk Assessment and Threat Modeling)

你写一行代码之前,花时间去设计你的软件与安全意识。正确的做这些是非常困难的;如果你的安全分析过程看起来简单,你可能错过相当根本的东西和失去适当地安全编码设计的大部分好处。

风险评估和威胁建模的三个步骤:

  1. 评估风险。确定你不得不损失多少。
  2. 确定潜在的威胁。算出你的代码可能被攻击各种事情(包括你的框架和库代表你做的事情)。
  3. 减轻威胁。确保您的代码可能被攻击的部分得到很好的保护。

1.1 评估风险(Assessing Risk)

评估你的代码可能造成破坏的风险,你应该首先假定您的程序将被攻击。

1.1.1假设你的软件将受到攻击

攻击者攻击你的程序花费的时间和精力多少将取决于几个因素,包括:

基于这些因素,你需要决定什么级别的风险是可以接受的。数据丢失,贵公司将花费1000美元来纠正不证明一项10000美元的开发工作能关闭所有潜在的安全漏洞。另一方面, 从长远来看,损害公司的声誉可能比设计和开发安全的代码花费是更高的成本。

1.1.2评估风险

评估风险时需要考虑一些因素:

- 如果你的软件被成功的攻击,可能会发生什么糟糕的事情?
会使窃取用户的身份,允许攻击者控制用户的电脑,或者只是让黑客在弹球得到异常高的分数吗?

1.2 确定潜在的威胁(Determining Potential Threats)

风险评估提供了有可能被攻击一些迹象和攻击可能造成多少伤害。下一步是找出你可能会受到怎样的攻击,包括攻击你所有的利益,不只是攻击你的软件也攻击你的服务器,你的公司,等等。为此,您将创建一个威胁模型来描述放置任何有价值的东西(信息、资金等)的转手。

1.2.1创建一个威胁模型

应用程序,守护进程,或其他软件系统的威胁模型应该是一个高级数据流模型,用图解释每信息进入或离开你的代码或代码之间的主要部分的每一个节点。在高级别上,它应该包括这些方面:

这个分析的目的,你应该只考虑理论类的攻击,没有实际的具体的攻击。例如,一个字处理器如果没能妥善处理一个损坏的文件,这样可能会允许攻击者注入代码。这并不重要,你的特定代码是否有具体的错误,使这成为可能。
一些潜在的攻击目标可能包括程序输入或输出,存储数据和程序的操作环境。

1.2.2考虑威胁的类型

需要考虑以下几种类型的威胁,包括威胁数据、服务可用性和系统的完整性。
数据威胁
攻击者可以修改数据,包括:

同样,攻击者可以危害数据和获取访问机密。

攻击者可以通过命令程序直接修改或破解数据,或返回不应该被修改或返回的数据。然而,攻击者还可以通过程序控制计算机间接修改或破解数据。

此外,直接修改常常导致进一步访问,可以允许额外的间接修改。例如,攻击者可能会修改直接程序内部数据,然后使用这些修改后的数据注入任意代码向系统的密码数据库中添加一个新管理员。

服务可用性威胁
攻击旨在减少服务可用性称为拒绝服务攻击(denial of service attack)。这些攻击可能导致应用程序或守护进程停止运行,或做一个服务器很忙,合法用户不能访问它。
攻击者可以在许多方面执行拒绝服务攻击:

系统完整性攻击
攻击系统完整性建立其他攻击修改系统以这样一种方式,它可以不再被信任。如果攻击者可以在代码中找到一个安全漏洞,攻击者可能会:

1.3 减轻威胁(Mitigating Threats)

在你确认你的软件生态系统(应用程序、服务器、当地的守护进程和代理等等) 哪些部分可能会被攻击之后,你必须采取措施来减轻这些威胁,减少他们的破坏性。

1.3.1使用常用的缓解技术

缓解威胁的手段在计算机软件是多种多样的,但是一些核心技术是很常见的:

1.3.2 知道取舍

在决定如何减轻威胁时,请记住,经常有安全性和便利性之间权衡。软件安全必须安全性和可用性之间取得平衡。考虑软件设计的两个极端的例子:

显然这两个极端条件没有达到理想的安全性和便利性之间的平衡。作为一名开发人员,这是你的责任来决定您的软件哪些地方应该融入基于当您的程序被破坏(风险)会造成的连续损害,以及软件可能面临的攻击类型(威胁)。

1.4 完成之后(After You Finish)

即使当你完成这个评估,你的工作没有完成,你应该重复这个定期评估。特别是:

1.5通用标准(Common Criteria)

美国政府、加拿大、英国、法国、德国和荷兰合作开发一套标准化的流程和标准,可用于评估软件产品的安全性。这个过程和这套标准被称为通用标准(Common Criteria)。
作为一个尝试系统化安全评估,通用标准可以帮助显示大量的你可以寻找的潜在问题。另一方面,对于任何标准化方案,通用标准不能预见的漏洞还没有见过的。因此,通用标准标准比人们希望的不太灵活。

上一篇 下一篇

猜你喜欢

热点阅读