什么是软件多样性-架构快速进阶教程
1. 概述
在本教程中,我们将研究软件多样性。首先,我们将了解导致软件多样性的动机。最后,我们将研究什么是软件多样性以及如何工作。
2. 了解动机
通常,如果开发人员需要实现解决特定问题的软件,他们会召集团队,分析需求,选择编程工具,并创建一个解决问题的软件程序。
前面描述的方案是在市场上发布新软件的最常见过程。但是,主要是在复杂软件中,发布具有一些未识别错误和潜在安全问题的软件的空间很大。
通过这种方式,使用单个软件实现来解决问题会引起一些担忧:
- 如果软件程序对一个用户失败,则在相同条件下执行它的任何其他用户都可能失败
- 如果攻击者利用软件程序的漏洞创建攻击,则此攻击可能会影响使用它的每个人
所以,问题是:我们如何才能减轻特定软件实现的潜在问题?答案可能是对同一软件进行不同的实现,解决相同的挑战,满足相同的要求,并提供相同的正确结果。简单来说,我们称之为软件多样性解决方案。
3. 软件多样性
如上一节所述,软件多样性由解决相同问题的不同软件实现组成。软件多样性实际上是受生物多样性启发的。例如,许多翅膀形状允许鸟类飞行。然而,有些在特定气候条件下使用时有一些弱点,而另一些则没有。
与代码多样性最相关的是保证给定相同的输入,对于每个不同的实现,程序返回相同的输出。因此,在实践中,所有实现都对输入和输出使用相同的数据模型,并提供相同的操作集。下图描述了所描述的方案:
有几种技术可以实现软件多样性:
- 多供应商:最直接的技术,但通常是最昂贵的技术。三个不同的编程团队接收同一个项目并独立执行,生成同一软件的三个异构实现
- 多编译器:多编译器包含一个多样化引擎,可以为相同的源代码生成不同的二进制文件。因此,它允许开发人员加载不同的插件、规则集和配置,以执行源代码的每次编译
- 随机性:程序员通过该技术修改其不同实现中的程序操作行为。它包括操作内存加载,改变指令顺序以及重新排列程序的基本块
此外,还存在自然的软件多样性。它包括使用可互换的资源来创建不同的软件实现,例如,使用不同的数据库管理系统,甚至在不同的操作系统中运行软件程序。
我们可以强调软件可变性的两个主要好处:安全性和容错能力的改进。在安全性方面,它避免了潜在漏洞和后门的完全传播,隔离了受安全问题影响的软件用户组。在容错方案中,软件可变性避免了使整个可靠系统(例如,使用复制来缓解拜占庭故障的系统)崩溃的错误。
4. 结论
在本教程中,我们研究了软件多样性。我们可以说,多样性是避免已发布软件程序出现灾难性情况的有效替代方案,避免了错误和安全问题的完全传播。