序言
软件系统的二进制漏洞被挖掘出来越来越多。这些漏洞是由没有充分保护系统的软件设计和实现以及没有充分关注消除导致安全漏洞的实现缺陷的开发实践引起的。
软件开发者不了解相关的软件漏洞,因此很多软件中的漏洞变成了不可避免的。
本文主要讨论下软件开发的五个安全原则,通过这些原则降低我们设计和开发的软件系统出现的漏洞风险。
最简机制原则
安全机制应该小而简单,以便可以轻松实施和验证。这是一个广为人知的原则,适用于系统和软件设计的所有方面,并且与安全性特别相关。
复杂的设计增加了在实施、配置和使用中出错的可能性。此外,随着安全机制变得更加复杂,实现适当水平的保证所需的工作量也急剧增加。因此,在系统设计上花费更多精力来实现问题的简单解决方案通常更具成本效益。
默认故障保护原则
必须检查对每个对象的每次访问权限,并且要明确识别每个请求的来源并授权访问资源。每当主体尝试读取对象时,操作系统都应该调解该动作。
首先,它确定是否允许主体阅读客体。如果是这样,它为发生读取提供资源。如果主体再次尝试读取对象,系统应检查主体是否仍被允许读取对象。大多数系统不会进行第二次检查。他们将缓存第一次检查的结果,并根据缓存的结果进行第二次访问。
开放式原则
软件设计无法通过隐藏潜在的攻击者或代码的模糊性来保护它。设计不应该是秘密。加密系统和访问控制机制应该能够经受住公开审查并且仍然是安全的。我们可以通过将保护机制与保护密钥或密码解耦来实现这一点。
这种方法带来了额外的优势,即允许对机制进行彻底检查,而不必担心审阅者会损害保护措施。实施开放式设计还允许用户验证保护方案是否适合特定应用。
特权分离原则
在可能的情况下,需要两把钥匙才能解锁的保护机制比只允许访问者只需一把钥匙的保护机制更加稳健和灵活。
权限分离通过需要多个条件来授予权限,从而消除了单点故障。一个典型权限分离的例子是“双因素认证”。
最小特权原则
系统的每个程序和每个用户都应该使用完成工作所需的最少权限集进行操作。这种方法减少了攻击者必须以提升的权限执行任意代码的机会。
1、授予每个系统、子系统和组件可以操作的最少权限。
2、以这样一种方式获取和放弃特权,即在任何给定点,系统只拥有它所从事的任务所需的特权。
3、如果不需要进一步更改,则放弃更改权限的权限。
4、设计程序以尽早使用特权,最好是在与潜在对手(例如用户)交互之前,然后在程序的其余部分放弃它们。
0结束1
原文始发于微信公众号(安全架构):软件架构的一些安全原则
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论