基于攻击面的软件体系结构安全性研究
2015-12-23徐社会张琳琳魏春霞
徐社会,张琳琳,赵 楷,王 杰,魏春霞
(新疆大学 信息科学与工程学院,新疆 乌鲁木齐830046)
0 引 言
软件体系结构是于系统开发的早期阶段构建,其设计决策直接影响后续整个软件开发过程中的各个阶段[1,2]。软件体系结构代表系统更高层次的抽象,反映了系统组成元素的交互关系,并且许多安全属性的出现来源于系统组成元素的交互过程,因此在软件体系结构设计阶段处理系统的安全需求是一个理想点。同时,软件架构师选择设计决策的好坏决定了系统会如何实现安全相关的需求,不同的设计决策会出现不同的安全性问题,所以,设计策略的制定应该谨慎决定。为了消除设计决策引发的安全问题,需要一种在安全需求方面评估体系结构设计的方法。
Manadhata等将攻击面作为评估指标对软件的安全性实施度量[3,4],攻击面是指攻击者能够进入系统产生破坏的方法集合。攻击面度量值越大表明系统被攻击的可能性越大,从而软件不安全的可能性也越大。基于攻击面度量指标的软件安全度量比较的是具有相似功能的不同软件或者同一软件不同版本之间的安全性。攻击面概念的提出得到了软件产业界的积极响应,目前攻击面度量方法已经应用在SAP 软件系统的开发[5]和微软的安全软件开发过程[6]中。此外,文献 [7]等将攻击面、拒绝服务和攻击图作为安全度量指标,提出一种综合评估方法比较同类软件或某一软件不同版本的安全性;文献 [8]提出结合攻击面和信息熵的软件安全度量方法。然而,上述攻击面度量方法主要侧重于软件的实现阶段而不是软件体系结构的设计阶段。在软件体系结构中评估攻击面临一系列挑战:如何对软件体系结构进行建模,如何将攻击面的概念扩展到软件体系结构的模型中以及如何通过软件体系结构转换减小软件体系结构的攻击面。针对上述问题,在扩展Manadhata等的方法的基础上,将攻击面的概念应用在软件体系结构模型中,作为评估指标对软件体系结构的安全性进行评估,并结合案例研究就如何减小系统的攻击面进行了体系结构转换。
1 相关工作
1.1 软件体系结构模型
软件体系结构已经在软件工程领域有着广泛的应用,但迄今为止还没有一个统一的定义[9]。它可以理解为软件开发过程中早期的一项软件制品,是一组使系统满足涉众(stakeholder)功能性和非功能性需求的设计决策,其中安全性是系统的非功能性需求[10]。软件体系结构模型在评估设计决策对软件预期质量属性的影响方面是一个很有用的方法。例如:体系结构模型可以用于分析性能属性方面的设计模型是否满足软件的性能需求。基于此,可以采用软件体系结构模型评估早期设计决策的好坏。
软件体系结构是一个多维的工件,通过采用不同的视角,可以显示系统设计的不同方面。例如:一些特定类型的视图侧重于面向部署的架构,而另一些则关注于面向代码的架构[11]。使用构件连接件类型的视图 (componentand-connector,C&C)可以捕获系统的动态方面。C&C 视图显示了系统运行时的属性,通常包括构件、连接件、端口和角色等。构件代表了系统的计算元素,端口是构件与外部环境交互的组织接口,连接件表示了构件之间的交互路径,角色是连接件的接口。攻击面关注于系统和所在环境之间的交互。例如:发送或接受数据到 (来自于)环境。由于这些交互发生时,系统正在运行,本文中体系结构建模方法是从C&C视角考虑的。
1.2 攻击面
关于攻击面的概念,没有一个统一的定义,不同的学者针对不同的研究领域提出相应的攻击面概念。
文献 [12]针对同一软件的不同版本之间的安全性比较,提出了相对攻击面的概念。通过采用状态机建模系统,将攻击面建模为一个抽象的三元组即攻击目标和驱动 (targets and enablers)、通道和协议 (channels and protocol)、访问权限 (access rights)。攻击目标和驱动指的是攻击者使用的资源,资源的类型有两种:进程和数据;通道指的是从发送方到接收方的一种通信方式;访问权限是指对系统资源访问的约束集合。文中将攻击面的评估方式建模为函数 f (target,enablers,channels,protocols,access rights)。由于定义一个通用的精确的函数f很困难,并且函数f的具体实现因软件系统的不同而不同,文中没有对函数f进行进一步细化。
根据以往攻击者对系统实施的攻击,许多攻击的发生是由于发送来自系统操作环境的数据 (例如:利用缓冲区溢出)或者接受源于系统的数据 (例如:符号连接攻击)。在上述两种类型的攻击中,攻击者连接系统,使用系统的通道(如TCP协议)、调用系统的方法 (如API)和发送 (接受)数据项 (如:输入字符串)到 (来自)系统。Manadhata等认为攻击者通过使用系统的方法、通道和环境中的数据项攻击系统。他们将系统的方法、通道和数据项统称为系统的资源,依据系统的资源将攻击面定义为一个三元组<MEs,CEs,IEs>,其中s代表一个给定的系统,E代表系统所在的环境,M 是系统的方法 (method),C 是系统与外界交互的通道 (channel),I 代表存储与环境中的不可信数据项 (untrusted data item),MEs是系统s 的方法集,CEs是系统s的通道集,IEs是不可信数据项集。由于资源被攻击者利用的可能性并不相等,导致资源在攻击面评估中,所占的比值也不相等。Manadhata等使用潜在破坏与代价比值 (Damage Potential/Effort Spend Ratio,DER)量化系统攻击面的大小。
文献 [13]针对Web应用的攻击面进行了评估。一个典型的Web应用攻击面包含有以下3个部分:客户端、服务端和后台系统。客户端构成Web应用的用户界面,呈现了html代码、图片、处理用户的输入和向代码提供运行时环境;Web服务端响应客户端的请求。在响应客户端请求过程中可能要访问后台系统,如数据库。文中通过攻击面向量对Web应用的攻击面进行评估。攻击面向量 (attack surface vector)是一个欧几里德范数。攻击面向量的组成包括:页面创建方法、安全机制、cookie、用户角色、访问权限等22项。文中对提到的方法进行了实例化验证。
2 软件体系结构中建模攻击面
Manadhata等的研究是从系统的角度考虑攻击面,主要适用于系统的实现阶段。本文在Manadhata等研究的基础上,扩展了攻击面的定义,对软件体系结构的攻击面进行建模。为了在体系结构层表示和估算系统的攻击面,我们需要将攻击面的概念在软件体系结构中进行表示。目前许多常见的体系结构架构可以采用扩展方式建模与攻击面相关的属性和语义,本文是从C&C视角考虑的。
在软件体系结构中:构件是系统功能的模块单元,构件可以是一组代码,也可以是一个独立的程序,充当系统的访问控制;端口是构件与操作环境交互的外部接口;连接件连接着系统外部的组件与系统内部组件之间的交互;数据库 (或文件)可以看作是寄存在系统外部环境中被使用的数据源。
定义1 软件体系结构攻击面 (software architecture attack surface,SAAS)。给定软件体系结构a,a与外界交互环境Ea,a的攻击面是一个三元组,<CpEa,CoEa,DiEa>,其中CpEa是a中与Ea交互的构件,CoEa是a中构件与外部构件交互中使用的连接件,DiEa是Ea中被a使用的数据项。
对于已定义好的软件体系结构攻击面的评估,由于构件是系统的核心资源,构件与外界环境的交互主要通过构件的端口实现。同时一个构件可以有多个端口,构件的端口基于自身的特权 (privilege)访问系统环境中的其它单元,因此构件的评估依据构件的端口特权;由于攻击者使用连接件与系统外部构件进行通信,连接件上运行的通信协议 (protocol)能够对数据的交换施加限制,因此连接件的评估使用连接件上运行的通信协议估算;攻击者发送或者接受数据项时,不同的数据项类型 (dataType)对数据的交互进行约束,数据项的评估参照数据项的类型。
对于系统的软件体系结构,构件、连接件、端口可以看作软件体系结构的资源。攻击者只有获得资源的访问权限才可以使用资源。攻击者为了使用资源需要付出一定的代价。直观上攻击者使用资源的代价依据分配给资源的访问权限。由于资源是软件体系结构的一部分,资源的访问权限可以看成是体系结构的访问权限。
定义2 软件体系结构攻击面度量 (SAAS Metrics,简称SAASM)。给定软件体系结构,a,a的攻击面为<CpEa,CoEa,DiEa>,a的访问权限是a.accessRight,a的攻击面度量值是一个三元组
为了对软件体系结构的攻击面进行建模,需要使用一种体系结构建模工具对攻击面进行描述。Acme是由卡内基梅隆大学的软件研究所开发的一种体系结构描述语言 (architecture description language,ADL),提供了基本体系结构元素和扩展机制描述系统的软件体系结构。Acme定义了7种基本体系结构元素,本文主要使用了其中4种,见表1。
表1 Acme的体系结构元素
AcmeStudio是一个支持Acme的软件体系结构设计开发环境,使用AcmeStudio可以方便快速地设计系统的体系结构,并且它也支持对所设计的软件体系结构进行分析和逐步求精[14]。通过采用AcmeStudio,本文可以快速地进行体系结构的分析和设计,并根据估计面度量值,对体系结构进行转换。
为了使Acme能够描述本文的攻击面,我们使用了Acme的扩展机制,为体系结构元素添加新的属性,绑定攻击面的概念和体系结构的架构,并允许为属性分配数值,在Acme中称作 “家族” (family)。本文创建了一个侧重于安全方面的family建模攻击面。具体情况本文将结合案例进行描述。
3 攻击面评估案例研究
假设存在一名开发人员Lee有一个Java应用,通过socket连接主机和端口,它连接有两个主机/端口対,从一个连接中接受查询SQL数据库的数据,从另一个连接中接受查询LDAP数据库的数据。该开发人员设计的程序专门用于其公司的员工即每一名用户都是可信的,每一名用户的访问权限都相同。根据案例描述,我们在AcmeStudio中使用攻击面family对案例体系结构的攻击面进行建模,案例的体系结构阶段的攻击面如图1所示。图1中构件Java_Program 是案例中描述的Java应用,构件接受用户的输入,并且与SQL _DB 数据库和LDAP 数据库通信,图中SQL_DB和LDAP 都代表存在于系统外部的不可信数据项,连接Java_Program 和不可信数据项的通道运行着TCP协议,通过Java_Program 的端口进行访问。最后用户通过第3个端口访问Java_Program。图2给出了Acme中Java应用的体系结构模型和代码表示。
图1 AcmeStudio的案例体系结构模型
由于系统内只有一个构件Java_Program,Java_Program 分别与外部构件User,SQL_DB 和LDAP 交互,所有Java_Program 共有3 个端口。根据案例描述可知,与User交互的端口有authenticated 特权,与SQL_DB 和LDAP交互的端口需要对数据进行操作,拥有root特权。Java_Program 构件与环境中外部构件通信使用的连接件见表2。同时Java_Program 使用的外部数据项有两项:SQL_DB和LDAP,数据项对应类型分别为SQL 和LDAP,在此不再以列表列出。此外,由于系统中每一名用户都是可信的,Java_Program 的访问权限是authenticated。
图2 案例体系结构代码表示
表2 Java_Program 构件使用的连接件
当估算攻击面时,需要将攻击面属性与分配的数值进行映射。例如:对于构件来说,root级别的端口对系统产生的攻击大于authenticated,而authenticated 大于anonymous,即构件端口特权分配的数值应满足的关系是root>authenticated>anonymous。我们在AcmeStudio中建立的攻击面family允许为攻击面属性分配数值。为了简单起见,我们设定攻击面相关属性分配的数值范围为1~10,每一个属性最大和最小值对应10和1,中间值为5,因此端口特权root分配最大的数值10,authenticated分配的数值为5,anonymous分配数值是1。攻击面相关属性数值的分配是主观的,基于我们设计阶段的系统属性。根据攻击面属性的理解,结合数学中参数灵敏性分析,我们将攻击面各属性值分配见表3。
根据以上设置条件和第2 节定义的攻击面度量公式,经过计算,可知Java_Program 的攻击面大小为<5.00,4.00,2.20>。为了减小软件体系结构的攻击面,我们需要进行软件体系结构转换。结合文献 [15]提出的转换思想,构件Java_Program 与SQL_DB和LDAP的交互可以通过一个端口执行,同时连接SQL_DB 和LDAP 连接件可以采用RPC协议而不是TCP 减小软件体系结构的攻击面,转换后体系结构的攻击面模型如图3所示,转换后的攻击面大小为<3.00,2.40,2.20>,减小了系统的攻击面。关于软件体系结构的转换有许多可行的方法,本文在此不再进行叙述。
表3 攻击面属性分配值
图3 转换后的软件体系结构模型
4 结束语
软件体系结构的安全性研究对于开发安全的软件起着至关重要的作用。本文研究了如何在软件体系结构设计阶段采用攻击面对系统的安全性进行评估。通过将攻击面的概念映射到体系结构的组成元素,采用Acme对体系结构设计阶段的攻击面进行建模,对攻击面的形式化模型进行评估,然后对软件体系结构进行转换,重新进行评估,最终减小系统的攻击面。
在下一步的工作中,本文将对体系结构阶段攻击面评估的参数进行灵敏度分析,并探索如何在一个实际系统的开发中,基于攻击面指标对软件体系结构的安全性进行研究。
[1]Almorsy Y M,Grundy J,Ibrahim A S.Automated software architecture security risk analysis using formalized signatures[C]//Proceedings of the International Conference on Software Engineering.IEEE Press,2013:662-671.
[2]CHEN Jiali,ZHANG Linlin,ZHANG Yahong,et al.Aspect-oriented software architecture metrics based on scenes[J].Computer Applications Research,2013,30 (2):483-486 (in Chinese).[陈佳丽,张琳琳,张亚红,等.基于场景的面向方面软件体系结构度量方法 [J].计算机应用研究,2013,30 (2):483-486.]
[3]Manadhata P K,Wing J M.An attack surface metric [J].IEEE Transactions on Software Engineering,2011,37 (3):371-386.
[4]Manadhata PK,Wing J,Maxion RA,et al.An attack surface metric[R].CMU-CS-08-152.Pittsburgh:Carnegie Mellon University,2008.
[5]Manadhata P K,Karabulut Y.Report:Measuring the attack surface of enterprise software [M].Engineering Secure Software and Systems.Springer Berlin Heidelberg,2009:91-100.
[6]Howard M,Lipener S.The security development lifecycle[M].O’Reily Media,Incorporated,2009:75-90.
[7]ZHANG Xin,GU Qing,CHEN Daoxu.Software systems for security metrics research based on comparative assessment[J].Computer Science,2009,36 (9):122-126 (in Chinese).[张鑫,顾庆,陈道蓄.面向对比评估的软件系统安全度量研究 [J].计算机科学,2009,36 (9):122-126.]
[8]ZHANG Xuan,LIAO Hongzhi,LI Tong,et al.Software security measure based on software entropy and attack surface[J].Computer Applications,2013,33 (1):19-22 (in Chinese).[张璇,廖鸿志,李彤,等.基于信息熵和攻击面的软件安全度量 [J].计算机应用,2013,33 (1):19-22.]
[9]WANG Dan,ZHANG Fan,ZHANG Zhihong.Research and application of multi-tier architecture based on component[J].Journal of Computer Engineering and Design,2010,31 (6):1255-1263 (in Chinese).[王丹,张帆,张志鸿.基于构件的多层体系结构的研究与应用 [J].计算机工程与设计,2010,31 (6):1255-1263.]
[10]ZHANG Li,GAO Hui,WANG Shouxin.Software architecture evaluation techniques [J].Journal of Software,2008,19 (6):1328-1339 (in Chinese).[张莉,高辉,王守信.软件体系结构评估技术[J].软件学报,2008,19 (6):1328-1339.]
[11]Gennari J,Garlan D.Measuring attack surface in software architecture[R].CMU-ISR-11-121,Carnegie Mellon University,2012.
[12]Howard M,Pincus J,Wing J M.Measuring relative attack surfaces[M].Springer US,2005:109-124.
[13]Heumann T,Türpe S,Keller J.Quantifying the attack surface of a web application [C]//Sicherheit,2010:305-316.
[14]LIU Changlin,ZHANG Guangquan,HUANG Jing.An aspect-oriented software architecture design methods based on ACME [J].Suzhou University (Engineering Science Edition),2011,31 (2):6-13 (in Chinese). [刘长林,张广泉,黄静.一种基于ACME的面向方面软件体系结构设计方法 [J].苏州大学学报 (工科版),2011,31 (2):6-13.]
[15]Hafiz M,Johnson R.Improving perimeter security with securityoriented program transformation [C]//Proceedings of Software Engineering for Secure System.IEEE,2009:61-67.