首页  ·  知识 ·  架构设计
软件安全设计原则
CIO之家的朋友  CIO之家的朋友们  综合  编辑:范特西   图片来源:网络
软件的安全设计应该尽量遵循一些安全设计原则,这些原则是软件开发和软件测试中有关安全经验的高度总结,用于指导安全开发人员(特别是软件架构师和设计师)开发更为安全的软件。下面是一些基本

软件的安全设计应该尽量遵循一些安全设计原则,这些原则是软件开发和软件测试中有 关安全经验的高度总结,用于指导安全开发人员(特别是软件架构师和设计师)开发更为安 全的软件。下面是一些基本的安全设计原则。

 1)最小特权原则 

对于请求存储资源的主体,只应该分配最少的必要权限,而且应该保证赋予权限分配的 必要时间最短。如果授予一个用户或进程、组件超过其行为必要的权限范围的许可,该用户 或进程、组件就有可能获得或修改其没有权限处理的信息。

 2)权限分离原则 

尽量把软件划分为不同独立的组件,把权限分离成不同的权限许可和认证条件,把用户 分离成不同的权限角色。不要将权限一次性授予给一个用户,而是根据需要提供多重的认证 与检查机制再进行授予。 

3)最少共享机制原则 

避免多个主体共享同一个资源,因为敏感的信息可能通过相同的机制在这些主体之间共 享导致被其他用户获取。每个主体应该有不同的机制或不同的机制实例,在保证多用户存取 访间的灵活性的同时,防止由单一的共享机制导致潜在违背安全性的行为。 

4)完全中立原则 

每次主体对资源的请求,系统都应该实行认证和执行检查,特别是和安全相关的内容。 以避免错误的赋予主体过高的权限或者在第一次授予权限之后,主体被攻击之后攻击者 滥用相关权限。为了提高性能,一些系统会缓存主体的权限,这种做法易使系统具有较高的 安全风险。 

5)心理可接受度原则 

安全机制应该尽可能对用户透明,只引入少量的资源使用障碍,对用户友好,才能在使 用时方便用户的理解和使用,真正起到安全防护的作用。如果安全机制妨碍了资源的可用性 或使得资源难以获取,那么用户很可能会选择关闭这些安全机制或功能。

 6)默认故障处理保护原则 

当系统失效或产生故障时,必须是以安全的方式来处理系统信息,系统故障处理默认应 该是安全的设置。例如:即使丧失了可用性,也应该保障系统的机密性和完整性;故障发生 时必须阻止未授权的用户获得访问权限;发生故障后,应该不向远程未授权的用户暴露敏感 信息,如错误号和错误信息,服务器信息之类。 

7)经济机制原则 

复杂性是评估一个系统安全性的重要因素之。如果设计、实现的功能是非常复杂的,那 么系统存在安全漏洞的可能性则大大增加,一些问题在复杂的系统中很难被及时发现。系统的设计和实现应该尽量简单,以降低因复杂性带来的安全问题。

 8)不信任原则 

开发者应该假定系统环境是不安全的。减少对用户,外部系统,其他组件的信任,对外 部实体所有的输入都需要进行检查,即使对于可信的外部用户输入。另外也不应该信任每次 对函数或系统的调用操作都必然会成功,如内存的分配,因此必须对每次函数或系统的调用 的返回值进行检查,并进行正确的处理。

 9)纵深防御原则 

软件应该设置多重安全措施,并充分利用操作系统提供的安全防护机制,形成纵深防御 体系,以降低攻击者成功攻击的机率和危害。结合多重安全措施使攻击者要绕过每一个机制 才能达到目的,提高了攻击者的攻击成本和要求,降低了安全危害。 

10)保障最弱环节原则 

攻击者一般从系统最薄弱的环节发起攻击,而不是针对已经加固的组件。相对于破解一 个数学上已经证明了比较安全的算法,攻击者更喜欢利用软件的安全漏洞。因此软件开发者 必须了解自己软件的薄弱点,针对这些弱点实施更强的安全保护措施。

 11)公开设计原则 

应该假定政击者有能力获取系统足够的信息来发起攻击,而不是依赖于攻击者不可能知 道来保护系统的安全。如果设计的加密算法存在弱密钥,或者系统设有万能口令,等等,攻 击者通过反汇编分析能够获取这些信息,攻击者还可能是内部被辞退的员工,因此,依赖于 攻击者无法掌握某些特定信息来保护自己的安全是不可靠的。 

12)隐私保护原则 

系统收集到的用户信息都必须实施妥善和安全的保护。攻击者获得了用户的隐私数据之 后,可以发起进一步针对用户的各种攻击,如:欺骗等,不应该向其他用户泄露用户的隐私 信息。 

13)攻击面最小化原则

 攻击面(Attack Surface),通常也称受攻击面,是指对一个软件系统可以采取的攻击方 法集合。因为攻击者对软件的攻击是从其暴露在外部的接口、功能、服务和协议等资源来实 施的,通过对每种资源计算其被攻击成功的可能性,并将这些可能性综合归纳,即可以衡量 软件的攻击面大小。

可以看出,一个软件的攻击面越大,其安全风险也就越大。 减少攻击面是安全设计中的一个重要步骤,软件设计人员需要仔细评估软件中所有的功 能模块和接口的特性,分析其可能存在的安全风险,并设定相应的限制措施。如果一个功能 /数据接口不是必要的,则应该取消或禁止,或者默认不开启的。如果一个功能/数据接口的 配置没有特殊的理由,默认则应该按安全的方式进行设置。

本文作者:CIO之家的朋友 来源:CIO之家的朋友们
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的