一种集成安全测试的软件设计方法

时间:2022-09-09 09:10:02

一种集成安全测试的软件设计方法

【 摘 要 】 文章提出了一种集成安全测试的软件设计方法以及如何在设计阶段增强软件的安全性。使用DFD可以把软件内部实现划分可信模块和非可信模块,构造新的安全构造型标识非可信模块,设计安全关键类,分解安全测试用例,加入关键类的安全单元测试,并验证安全模式的有效性。

【 关键词 】 安全测试;软件设计;统一建模语言;安全模式

1 引言

随着信息技术的快速发展,计算机网络及信息系统广泛地应用于政府机关、军事部门、商业企业等各个领域,极大地改善了人们的生产条件和生活水平,深刻改变并持续地影响着人们对未来的认识。与此同时,非法访问、恶意攻击、信息窃取、木马病毒等各种针对计算机网络和信息系统的攻击手段层出不穷,给各行各业造成了巨大的损失。其中,由于软件脆弱性原因而导致的重大安全事件屡见不鲜。软件脆弱性是指在软件的需求分析、设计、编码和运行期间存在的漏洞,利用该漏洞可能危害系统的安全。经验证明,防止软件脆弱性的最佳实践就是在软件的设计阶段引入安全设计,将安全特性应用在软件的每一个方面,而不是在事后作为补救措施来添加安全特性。

传统意义上的软件开发更关注软件设计上是否满足功能、性能和操作等业务需求,忽略甚至无视软件的安全需求,从而导致软件存在可以被攻击者非法利用的安全隐患。因此,本文提出一种以安全模式为基础,通过扩展统一建模语言支持安全测试的软件设计方法。

2 相关概念

2.1 UML的扩展机制

统一建模语言(Unified Modeling Language, UML)是一种通用的可视化建模语言,适用于软件生命周期的各个阶段。尽管UML已经提供了丰富的建模元素和符号,可满足大多数情况下对软件的建模需要,但缺少必要的对软件进行安全建模的要素。使用UML的profile应用扩展机制自定义安全特性要素可实现软件安全特定领域建模。

2.2 安全模式

在信息安全领域公认原则是,使用标准的、经过长期时间检验的解决方案来保证软件在其生命周期内安全、有效和稳定地运行。安全模式描述了在特定场景下重复发生的问题,并为这些问题提供了经过实践被证明是安全的通用解决方案。

3 集成安全测试的软件开发方法

开发人员在软件设计阶段就要时刻有安全观念,考虑软件安全需求,定义软件安全目标,了解网络常用攻击技术、方法及应对措施,对软件面临的安全威胁进行建模,编写满足安全目标的测试用例,引入安全模式进行软件架构设计并评审,及早发现安全问题。

3.1 需求分析

一般情况下,在软件需求分析阶段,软件设计人员最常见的一种错误就是只注重软件的业务需求,往往忽略了软件的安全需求。“安全的软件开发生命周期(SDL)”描绘了一种结构化的方法,用以贯彻和实现软件的安全开发。遵守SDL,安全问题可以在软件生命周期的早期得以评估和解决。

在软件需求分析阶段,除了功能、性能、操作等需求外,设计者还要考虑几个问题。

1) 安全需求和原则

在需求分析阶段,设计者就必须考虑安全原则及规则,创建一份系统范围的规范,编写系统涉及到的安全需求。安全需求可能是明确的(包含在业务需求内),也可能是模糊的、含混的甚至是没有说明的。OWASP(开放式Web应用程序安全计划组织)制定了一些安全标准和指南用以指导软件设计者遵循安全设计原则来开发软件。据此,设计者可以对软件的安全性做出概要说明,阐述软件在所设计的运行环境中面临的安全威胁有哪些。

2) 安全目标

安全目标是指为使软件在所设计的运行环境中能够有效运行,防止、缓解外部攻击对系统可能造成的危害而采取的措施和必须达到的要求。安全目标的制定可以减少软件的“特性蔓延”,防止添加不必要的特性而导致软件脆弱性的出现。安全目标与需求相关。对于明确的安全需求,

3) 威胁模型

威胁模型的基本观点是,如果不对系统所面临的威胁进行评估,以及采取措施降低威胁风险,那么就无法建立起安全的系统。威胁模型有助于设计者更好地理解所开发的系统,发现较高层次的设计问题,判断出系统最具风险的“安全关键点”,确定系统的风险区域和采取的技术手段。

4) 安全策略

为了防止、缓解威胁模型所描述的系统威胁,必须制定系统的安全策略,采用必要的安全技术和手段。安全模式描述了在特定场景下重复发生的问题,并为这些问题提供了经过实践被证明是安全的通用解决方案。以安全模式为基础,分析威胁模型所发现的问题,制定安全策略,可以建立安全的、有效地系统解决方案,防止使用临时的、随意的系统解决方案。

3.2 软件设计

3.2.1 软件功能形式化分解

从业务需求的角度出发,软件被划分为多个功能,每个功能的实现都是由单个或多个组件(模块)来完成的。软件功能形式化分解的任务是确定软件中相对独立功能的边界或作用范围。一般来说,软件脆弱性的产生通常是由于对数据不正确的处理造成的,特别是当数据从不可信任区域进入可信任区域时。使用数据流图(DFD,Data Flow Diagram)以数据为核心,对软件功能进行形式化分解,根据数据传递的方向和作用范围,设定可信任区域和不可信任区域之间的边界。

在图2中,假设软件功能A是由模块1和模块2共同完成,其中模块2接收并储存模块1传递的数据。

3.2.2威胁建模

软件功能形式化分解把软件功能的内部实现分为可信任区域和不可信任区域。处于不可信任区域的组件(模块)是威胁建模的设定目标,注重分析其运行过程中可能面临的安全威胁有哪些。本文使用STRIDE安全模型进行分类:身份欺骗(Spoofing identity)、篡改数据(Tampering with data)、否认(Repudiation)、信息泄露(Information disclosure)和拒绝服务(Denial of service)。经分析,模块1的安全威胁主要有身份欺骗(S)、篡改数据(T)和否认(R)3类,模块2无安全威胁。因此,模块1是非可信任的,模块2是可信任的。通过威胁建模,实现软件某个独立功能的内部模块被分为可信模块和非可信模块。

3.2.3 UML的安全测试扩展

为使UML提供安全测试支持,满足安全策略要求,本文把非可信模块定义为一个类,利用UML的profile扩展机制构建如下构造型:

“构造型securityTest 继承自Class”。

其语义是:它代表了系统中一个非可信模块所面临的安全威胁等信息。其中,安全需求来自于威胁建模形成的安全需求文档;威胁模型说明该模块可能面临的安全威胁;STRIDE对安全威胁进行分类;安全模式是指为解除威胁在模块实现时要采用的安全模式;安全测试用例描述攻击者面对此类问题通常采用的技术和手段;安全验证标记用来标识模块是否已通过安全测试。

属性:该构造型的属性信息如表1所示。

约束:(1)安全需求来自于威胁建模形成的安全需求文档;(2)Stride限制为身份欺骗(S)、篡改数据(T),否认(R)、信息泄露(I)、拒绝服务(D)和特权提升(E)6类,Stride是这6类的组合;(3)解除威胁的安全模式来自于安全模式库;(4)安全测试用例对应于软件测试中的安全测试用例文档;(5)只有通过全部安全测试用例,安全验证标识才可以设为True。

3.2.4 非可信模块的安全测试

UML安全测试扩展标记了非可信模块的安全需求和安全测试用例。对于设计者来说,首先要依据业务需求设计非可信模块的概要类图,确定类与类之间的关系。其次,根据安全需求从安全模式库中检索符合要求的安全模式,在概要类图的上下文环境中选择合适的安全模式应用于模块的实现。再次,把实现安全模式和数据处理的类标记为安全关键类。

安全关键类是实现非可信模块功能、抵御网络攻击、缓解安全威胁的核心,具有十分重要的作用。传统的单元测试侧重于验证类提供的接口及其实现是否正确,缺少对类提供接口的安全测试。通过分解安全测试用例,将安全测试用例转化为对安全关键类的单元安全测试。

只有在安全关键类完成单元安全测试后,才能对非可信模块进行安全测试,验证所采用的安全模式是否可以真正防止或缓解威胁模型中描述的安全威胁。如果采用的安全模式无法通过安全验证,需要重新选择安全模式。

4 软件安全设计方法

软件安全工程从软件开发生命周期的角度在软件开发的每一个阶段都考虑安全因素。如微软的SDL定义了一系列的活动来支持安全开发,在设计阶段主张遵循常见的安全设计原则,降低软件受到的攻击面。OWASP的CLASP方法在设计阶段实施风险分析和威胁建模,并且建议使用安全相关信息注解类图。UMLSec扩展的核心思想是为UML模型元素定义构造型,与模型关联时,构造型为这些模型元素增加安全相关信息。POAD方法提出构建模式库,通过模式合成进行软件设计。

5 结束语

软件安全问题是一个系统性问题,必须在软件开发的每一个阶段都予以重视。本文提出在软件设计阶段使用DFD以数据传递与处理为核心,将软件功能进行形式化分解,把功能内部实现划分为可信模块和不可信模块,采用安全模式解决不可信模块面临的安全威胁,设计模块实现的安全关键类,分解安全测试用例,对安全关键类进行安全单元测试,验证在非可信模块实现时所采用的安全模式是否可以解除安全威胁,从而将软件的安全测试提前到了设计的早期,减低了后期维护的风险和成本。下一步的工作,需要深入研究不同领域软件系统存在的典型安全问题,设计具有通用性的单元安全测试方法和规范,并将该方法应用到更多的软件项目中。

参考文献

[1] http:///.

[2] Thomas H, Koen Y, Riccardo S. An Analysis of the Security Patterns Landscape [C] Proc.of the 3rd International Workshop on Software Engineering for Secure System. Washington D.C, USA: IEEE Computer Society, 2007.

[3] http:///security/sdl/.

[4] http:///zh-cn/magazine/cc163519.aspx.

[5] 张明德,郑雪峰,蔡翌.应用安全模型研究[J].信息网络安全,2012,(08):121-125.

[6] 常艳,王冠.网络安全渗透测试研究[J].信息网络安全,2012,(11):3-4.

[7] 魏为民,袁仲雄.网络攻击与防御技术的研究与实践[J].信息网络安全,2012,(12):53-56.

作者简介:

于晗(1977-),男,理工大学指挥信息系统学院,讲师;主要研究方向为信息安全与通信。

上一篇:阿里巴巴与雅虎 下一篇:对非法用工单位伤亡人员赔偿标准的分析与思考