|
在其它影响因素相同的情况下,简单的解决方案是最安全的。
在开发软件时间,代码写的越多,出现错误的几率也就越大。在统计学上代码行数和错误数量之间是存在简单对应的关系的:代码越多,错误越多。由于很多(不是全部)的错误可以被当作安全方面的脆弱点予以利用,因此,对于单一软件来说系统开发量就可以对安全造成重大影响。
在为软件系统添加功能时,不论需要多少行代码来执行这些功能,都有可能导致错误的出现。这是因为系统中不同功能块的相互作用,有时会产生惊人的效果,特别是当这些功能严重地互相依赖时。这种风险由于功能并行的增加而日益扩大,因为多项功能可能依赖于同一时间的某项单独功能,并且也有可能对该功能产生影响,通过这种共同的无计划依赖,它们之间同时具有相互影响的趋势。
复杂的软件除了在安全技术方面带来严重的后果外,也会给我们的理解力带来影响。系统越大就越复杂,对于一个人来说,这时间了解系统所有不同部分的方式就更麻烦。当系统中的互动部分没有被完全理解,从事这方面工作的人是不会从这些相互作用中认识到安全问题的,并且会因此而无法妥善解决这些问题。
因此,简化才是安全方面最重要的策略。有很多方法可以用来对系统进行简化处理:
最小化设计
抵制添加功能到系统中的冲动是非常困难的,但考虑到避免问题和错误带来的可衡量回报可以帮助你做到这一点。当考虑是否要在系统中额外功能时,应该确认是存在实际需要,还是仅仅为了加入到列表项目中,而在实际中可能永远不会使用。
模块化配置
在单一系统中可能需要包含多项功能,这些功能可能涉及到在本地执行系统,挑选和使用的功能可以根据需要选择系统的不同部分,在专用的基础上尽可能地简化系统。基于这个原因,分解成"模块",可以让系统根据需要提供服务,防止在执行过程中导致复杂性增加。人们可以根据自己的需要选择功能,而不是启动整个系统,不能排除不需要的功能。
注意分散关注
将功能分解成为不能直接互同的离散部分可以协助降低系统的复杂性。这就是我们通常说的"分散关注"。通过增加系统部分的独立性,系统管理将变得更加简单也不容易出现漏洞导致意想不到的安全问题。
在Unix体系中,经常被提到的一条原则就是"专注一件事,将它做到完美"。对于系统设计中的所有工具来说,该原则都是要遵循的,只针对一件事,并将它做好。当出现多件需要同时进行的事情时,可以选择使用多种工具来满足复杂性方面的要求,这样的话,复杂性就不会成为系统本身的组成部分。在Unix和类Unix系统设计中就提供了简单的自动化机制,可以在离散的工具之间创建特定的临时连接。这样的话,单一用途的工具就可以与其它工具进行灵活合作,处理更多复杂任务的功能也得到了很好的支持和鼓励。
对于安全来说,它可能不算是一颗灵丹妙药,但这种保持系统简单的模式涵盖了简化系统的所有三项要点:最小化设计、模块化配置和注意关注分离。因此,从Unix体系安全的角度来看,我们建议,软件开发者重视"专注一件事,将它做到完美"这一原则,不要忽略。 |
|
|
|
|
|
|