技术领域
[0001] 本
发明涉及信息安全技术领域,尤其涉及一种软件系统漏洞风险评估方法及装置。
背景技术
[0002] 随着软件系统越来越复杂,规模越来越庞大,促使了组件化软件开发等现代
软件工程方法的应用,软件系统往往不会从零全新开发,而会大量引用或依赖于其他第三方软件。这些软件以
软件包、组件、函数库、模
块、Web服务等形式存在,通过一致的
接口规范,使用函数调用、数据传递、模块组合等方式进行交互,可共同组成大规模复杂的大型软件系统。组件化的软件工程开发方法,有利于组件的重用,可快速利用已有的组件构建复杂应用,能够大幅提高软件开发效率。一些组件由于实现了重要的
基础功能,并且可免费获取开放源代码,具有较高的声誉和很广的使用范围,因此这些组件更可能被用于其他软件系统的开发。
[0003] 尽管依赖第三方软件包有利于进行软件系统的开发,但是给软件系统的安全带来潜在的隐患。这主要是因为开发者使用第三方软件包时,往往会因为软件包是开放的而且具有较高的声誉,只重视其所提供的功能而不会对软件包的安全性进行审计,当软件系统引入软件包时则可能将其脆弱性一并带入;其次,软件测试或维护人员往往将工作
重心放置在自身业务功能方面,容易忽视对所依赖的第三方软件包进行及时的升级和维护。
[0004] 目前,用于软件系统安全风险评估的技术手段有:功能验证、安全漏洞扫描、模拟攻击和侦听技术。
[0005] 功能验证是采用软件
黑盒测试方法对具体的软件功能模块进行验证。该方法适合对单个
软件模块或小型软件系统进行评估,而难以用于大规模复杂软件系统。
[0006] 安全漏洞扫描通常借助特定的漏洞扫描器对软件系统进行检测,能够发现系统中存在的安全漏洞,有利于及时防范避免造成严重的危害。该方法不能有效评估安全漏洞对整体系统的影响,而且往往不能发现新近披露的漏洞。
[0007] 模拟攻击测试也称渗透测试,采用模拟拒绝服务、缓冲区溢出、木
马病毒等实际攻击手段来验证软件系统的安全防护能
力。该技术手段类似于一组特殊的软件黑盒测试案例,对系统的测试
覆盖率难以保证。
[0008] 侦听技术主要是通过分析系统的运行轨迹、运行中的行为以及数据通信等信息,从而推断系统的安全性。该方法难以全面、准确地评估软件系统的安全性。
[0009] 在实现本发明的过程中,
发明人发现
现有技术中至少存在如下技术问题:
[0010] 现有的软件系统安全风险评估方法不能直观准确地对软件系统存在的安全风险进行综合评估。
发明内容
[0011] 本发明提供的软件系统漏洞风险评估方法及装置,能够对软件系统的安全风险进行直观准确的综合评估。
[0012] 一方面,本发明提供一种软件系统漏洞风险评估方法,包括:
[0013] 对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,其中,所述软件包依赖元数据为所述软件系统中记录所有软件包信息的文件;
[0014] 获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系;
[0015] 根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图;
[0016] 基于所述软件包依赖关系子图中各
节点的重要程度,评估漏洞对整体软件系统的安全风险。
[0017] 另一方面,本发明提供一种软件系统漏洞风险评估装置,包括:
[0018] 依赖网络构建单元,用于对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,其中,所述软件包依赖元数据为所述软件系统中记录所有软件包信息的文件;
[0019] 关联关系构建单元,用于获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系;
[0020] 依赖关系子图构建单元,用于根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图;
[0021] 风险评估单元,用于基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。
[0022] 本发明提供的软件系统漏洞风险评估方法及装置,对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,并获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系,根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图,基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。与现有技术相比,本发明基于软件依赖网络来评估漏洞对软件系统带来的影响,能够对软件系统的安全风险进行更加直观准确的综合评估。
附图说明
[0023] 为了更清楚地说明本发明
实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0024] 图1为本发明实施例1提供的软件系统漏洞风险评估方法的
流程图;
[0025] 图2为软件依赖网络示例图;
[0026] 图3为查询与file软件包有直接依赖关系的软件包子图示例图;
[0027] 图4为查询与file软件包有间接依赖关系的软件包子图示例图;
[0028] 图5为图1中S14的流程图;
[0029] 图6为节点重要度系数的计算示例图;
[0030] 图7为本发明实施例2提供的软件系统漏洞风险评估装置的结构示意图;
[0031] 图8为图7中风险评估单元14的结构示意图。
具体实施方式
[0032] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0033] 实施例1
[0034] 本发明实施例提供一种软件系统漏洞风险评估方法,如图1所示,所述软件系统漏洞风险评估方法包括:
[0035] S11、对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,其中,所述软件包依赖元数据为所述软件系统中记录所有软件包信息的文件。
[0036] 例如:Ubuntu系统中的/dists/lucid/main/binary-i386/packages.gz文件,从元数据中可以获取系统中每一个软件包的信息,包括软件包名称、依赖软件包、优先级等。
[0037] 通过依赖软件包信息构建系统中所有软件包的依赖关系网络图G(V,E),即软件依赖网络,其中,V表示图的所有节点集合,E表示所有边的集合。例如,从元数据中读取到软件包B依赖于软件包A,软件包C依赖于软件包B,软件包D依赖于软件包B,则可形成软件依赖网络如图2中所示。
[0038] 其中圆形节点表示软件包,圆形节点之间的有向连接边表示软件包之间的依赖关系。图中软件包B依赖于软件包A;软件包C和软件包D依赖于软件包B,并间接依赖于软件包A;A->B->C和A->B->D为软件依赖链,整个图即构成该软件系统的软件包依赖网络。节点的连接数称为度,根据方向可细分为入度和出度,图中节点B的度为3,其中入度为1,出度为2。
[0039] S12、获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系。
[0040] 具体地,从公开漏洞网络中获取漏洞信息,所述漏洞信息包括漏洞名称、受影响软件包、安全等级、漏洞描述等数据信息;根据所述漏洞信息,构建漏洞与软件包之间的关联关系。
[0041] 例如,从公开漏洞
网站Ubuntu CVE Tracker
[0042] (http://people.canonical.com/~ubuntu-security/cve/main.html)中获取一条漏洞信息CVE-2014-9426,可获得其漏洞名称为CVE-2014-9426,受影响软件包为php5和file,安全等级为中等,漏洞描述为:“The apprentice_load function in libmagic/apprentice.c in the Fileinfo component in PHP through 5.6.4attempts to perform a free operation on a stack-based character array,which allows remote attackers to cause a denial of service(memory corruption or application crash)or possibly have unspecified other impact via unknown vectors.”据此信息,可构建漏洞与软件包之间的关联关系,即软件包php5->CVE-2014-9426,软件包file->CVE-2014-9426。
[0043] S13、根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图。
[0044] 例如,从步骤S11得到的G(V,E)中查询与php5和file两个软件包存在依赖关系的软件包,得到依赖关系子图G’(V’,E’),其中,E’为V’内所有节点之间的边的集合,即:任意一个软件包节点v属于V’,都有v依赖于php5软件包或者v依赖于file软件包。得到的直接依赖软件包子图如图3所示,其中,中心节点为file软件包,其他节点为直接调用file的软件包。
[0045] 通过查询依赖于G’(V’,E’)中所有节点的软件包,可构建间接依赖该软件包的依赖关系子图,以此类推,可查询出所有此类依赖关系的软件包,得到最后的软件包依赖关系子图,如图4所示,中心节点O为file软件包,其他节点为直接或间接调用file的软件包。
[0046] S14、基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。
[0047] 进一步地,如图5所示,所述步骤S14包括:
[0048] S141、计算所述软件包依赖关系子图中各节点的重要度系数。
[0049] 通常,节点被调用的越多,调用它的软件包节点越重要,该软件包的重要性也越高。在这里,用标准PageRank
算法来度量每个节点的重要程度。
[0050] 计算公式为:
[0051] 其中PR(A)为A的PageRank值,C(i)为节点i的出度,BA为所有指向A的节点集,d为阻尼系数,表示任意节点间存在依赖关系的概率,这里将1-d设为每个节点重要程度的最小值。
[0052] 被调用的软件包的节点重要度系数等于调用它的各个软件包的节点重要度系数之和。如图6所示,节点1、2、3、4的重要度系数分别为S1、S2、S3、S4,节点1与节点2、3、4存在依赖关系,节点1的重要度系数S1=S2+S3+S4,这里的S1、S2、S3、S4即根据上述公式计算得到的PR值。
[0053] 其中,每一个节点的重要度系数计算都要考虑调用它的上一级节点,而上一级节点的重要度系数计算同样要考虑其更上一级的节点。
[0054] S142、确定所述漏洞的漏洞威胁系数。
[0055] 具体地,确定所述漏洞所对应的安全等级,根据所述安全等级确定对应的漏洞威胁系数.
[0056] 其中,漏洞分为8个安全等级:不易受攻击的(Not Vulnerable)、待定的(Pending)、未知的(Unknown)、可以忽略的(Negligible)、低(Low)、中(Medium)、高(High)、危险的(Critical),将8个安全等级分别对应0~7,以此作为漏洞的威胁系数RL。
[0057] S143、根据所述漏洞的漏洞威胁系数,计算所述各节点的漏洞风险值。
[0058] 计算公式为:
[0059] 其中,RISK_Si为节点i的漏洞风险值,Step为间接依赖的级数,直接依赖于漏洞所影响软件包的软件包的Step为1。
[0060] S144、根据所述各节点的重要度系数和所述各节点的漏洞风险值,计算综合漏洞风险值。
[0061] 具体地,采用权重分析法,计算所有关联节点的综合漏洞风险值的加权和,即是综合漏洞风险值TOTAL_RISK:
[0062]
[0063] 其中,T_Pi为各关联节点i在整个网络图中的权重,此权重等于该节点的重要度系数Si,RISK_Si为节点i的漏洞风险值。
[0064] 本发明提供的软件系统漏洞风险评估方法,对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,并获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系,根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图,基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。与现有技术相比,本发明基于软件依赖网络来评估漏洞对软件系统带来的影响,能够对软件系统的安全风险进行更加直观准确的综合评估。
[0065] 实施例2
[0066] 本实施例提供一种软件系统漏洞风险评估装置,如图7所示,所述软件系统漏洞风险评估装置包括:
[0067] 依赖网络构建单元11,用于对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,其中,所述软件包依赖元数据为所述软件系统中记录所有软件包信息的文件;
[0068] 关联关系构建单元12,用于获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系;
[0069] 依赖关系子图构建单元13,用于根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图;
[0070] 风险评估单元14,用于基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。
[0071] 进一步地,如图8所示,所述风险评估单元14包括:
[0072] 重要度系数计算模块141,用于计算所述软件包依赖关系子图中各节点的重要度系数;
[0073] 漏洞威胁系数确定模块142,用于确定所述漏洞的漏洞威胁系数;
[0074] 漏洞风险值计算模块143,用于根据所述漏洞的漏洞威胁系数,计算所述各节点的漏洞风险值;
[0075] 综合漏洞风险值计算模块144,用于根据所述各节点的重要度系数和所述各节点的漏洞风险值,计算综合漏洞风险值。
[0076] 进一步地,所述漏洞威胁系数确定模块142,用于确定所述漏洞所对应的安全等级,根据所述安全等级确定对应的漏洞威胁系数。
[0077] 可选地,所述软件包信息包括软件包名称、依赖软件包、优先级。
[0078] 可选地,所述漏洞信息包括漏洞名称、受影响软件包、安全等级、漏洞描述。
[0079] 本发明提供的软件系统漏洞风险评估装置,对软件系统中的软件包依赖元数据进行预处理,构建软件依赖网络,并获取漏洞信息,根据所述漏洞信息构建漏洞与软件包之间的关联关系,根据所述软件依赖网络和所述漏洞与软件包之间的关联关系,查询存在漏洞的软件包以及直接或间接依赖所述软件包的其他软件包,构建软件包依赖关系子图,基于所述软件包依赖关系子图中各节点的重要程度,评估漏洞对整体软件系统的安全风险。与现有技术相比,本发明基于软件依赖网络来评估漏洞对软件系统带来的影响,能够对软件系统的安全风险进行更加直观准确的综合评估。
[0080] 本发明实施例软件系统漏洞风险评估方法及装置,可以适用于对复杂软件系统漏洞风险进行评估,但不仅限于此。
[0081] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过
计算机程序来指令相关的
硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
[0082] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉
本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以
权利要求的保护范围为准。