《软件安全设计原则.docx》由会员分享,可在线阅读,更多相关《软件安全设计原则.docx(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件平安设计原那么软件的平安设计应该尽量遵循一些平安设计原那么,这些原那么是软件开发和软件测试中有 关平安经验的高度总结,用于指导平安开发人员(特别是软件架构师和设计师)开发更为安 全的软件。下面是一些基本的平安设计原那么。1)最小特权原那么对于请求存储资源的主体,只应该分配最少的必要权限,而且应该保证赋予权限分配的 必要时间最短。如果授予一个用户或进程、组件超过其行为必要的权限范围的许可,该用户 或进程、组件就有可能获得或修改其没有权限处理的信息。2)权限别离原那么尽量把软件划分为不同独立的组件,把权限别离成不同的权限许可和认证条件,把用户 别离成不同的权限角色。不要将权限一次性授予给一个用
2、户,而是根据需要提供多重的认证 与检查机制再进行授予。3)最少共享机制原那么防止多个主体共享同一个资源,因为敏感的信息可能通过相同的机制在这些主体之间共 享导致被其他用户获取。每个主体应该有不同的机制或不同的机制实例,在保证多用户存取 访间的灵活性的同时,防止由单一的共享机制导致潜在违背平安性的行为。4)完全中立原那么每次主体对资源的请求,系统都应该实行认证和执行检查,特别是和平安相关的内容。以防止错误的赋予主体过高的权限或者在第一次授予权限之后,主体被攻击之后攻击者 滥用相关权限。为了提高性能,一些系统会缓存主体的权限,这种做法易使系统具有较高的 平安风险。5)心理可接受度原那么平安机制应该
3、尽可能对用户透明,只引入少量的资源使用障碍,对用户友好,才能在使 用时方便用户的理解和使用,真正起到平安防护的作用。如果平安机制阻碍了资源的可用性 或使得资源难以获取,那么用户很可能会选择关闭这些平安机制或功能。6)默认故障处理保护原那么当系统失效或产生故障时,必须是以平安的方式来处理系统信息,系统故障处理默认应 该是平安的设置。例如:即使丧失了可用性,也应该保障系统的机密性和完整性;故障发生 时必须阻止未授权的用户获得访问权限;发生故障后,应该不向远程未授权的用户暴露敏感 信息,如错误号和错误信息,服务器信息之类。7)经济机制原那么复杂性是评估一个系统平安性的重要因素之。如果设计、实现的功能
4、是非常复杂的,那 么系统存在平安漏洞的可能性那么大大增加,一些问题在复杂的系统中很难被及时发现。系统 的设计和实现应该尽量简单,以降低因复杂性带来的平安问题。8)不信任原那么开发者应该假定系统环境是不平安的。减少对用户,外部系统,其他组件的信任,对外 部实体所有的输入都需要进行检查,即使对于可信的外部用户输入。另外也不应该信任每次 对函数或系统的调用操作都必然会成功,如内存的分配,因此必须对每次函数或系统的调用 的返回值进行检查,并进行正确的处理。9)纵深防御原那么软件应该设置多重平安措施,并充分利用操作系统提供的平安防护机制,形成纵深防御 体系,以降低攻击者成功攻击的机率和危害。结合多重平安
5、措施使攻击者要绕过每一个机制 才能到达目的,提高了攻击者的攻击本钱和要求,降低了平安危害。10)保障最弱环节原那么攻击者一般从系统最薄弱的环节发起攻击,而不是针对已经加固的组件。相对于破解一 个数学上已经证明了比拟平安的算法,攻击者更喜欢利用软件的平安漏洞。因此软件开发者 必须了解自己软件的薄弱点,针对这些弱点实施更强的平安保护措施。11)公开设计原那么应该假定政击者有能力获取系统足够的信息来发起攻击,而不是依赖于攻击者不可能知 道来保护系统的平安。如果设计的加密算法存在弱密钥,或者系统设有万能口令,等等,攻 击者通过反汇编分析能够获取这些信息,攻击者还可能是内部被辞退的员工,因此,依赖于 攻
6、击者无法掌握某些特定信息来保护自己的平安是不可靠的。12)隐私保护原那么系统收集到的用户信息都必须实施妥善和平安的保护。攻击者获得了用户的隐私数据之 后,可以发起进一步针对用户的各种攻击,如:欺骗等,不应该向其他用户泄露用户的隐私 信息。13)攻击面最小化原那么攻击面(Attack Surface),通常也称受攻击面,是指对一个软件系统可以采取的攻击方 法集合。因为攻击者对软件的攻击是从其暴露在外部的接口、功能、服务和协议等资源来实 施的,通过对每种资源计算其被攻击成功的可能性,并将这些可能性综合归纳,即可以衡量 软件的攻击面大小。可以看出,一个软件的攻击面越大,其平安风险也就越大。减少攻击面是平安设计中的一个重要步骤,软件设计人员需要仔细评估软件中所有的功 能模块和接口的特性,分析其可能存在的平安风险,并设定相应的限制措施。如果一个功能 /数据接口不是必要的,那么应该取消或禁止,或者默认不开启的。如果一个功能/数据接口的 配置没有特殊的理由,默认那么应该按平安的方式进行设置。