CN101625641A - 基于安全缺陷知识库的可信软件开发方法 - Google Patents
基于安全缺陷知识库的可信软件开发方法 Download PDFInfo
- Publication number
- CN101625641A CN101625641A CN200910305212A CN200910305212A CN101625641A CN 101625641 A CN101625641 A CN 101625641A CN 200910305212 A CN200910305212 A CN 200910305212A CN 200910305212 A CN200910305212 A CN 200910305212A CN 101625641 A CN101625641 A CN 101625641A
- Authority
- CN
- China
- Prior art keywords
- software
- knowledge base
- security
- defect
- case
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明属于软件安全技术领域,涉及一种基于安全缺陷知识库的可信软件开发方法,包括:(1)建立基于安全缺陷知识库;(2)将设计人员的用例图及需求说明文档作为信息收集的载体,找到设计中相关的误用例,并提供可度量效果及代价分析的缓和方案;(3)针对用例图中的每一个用例,绘制活动图,通过对活动图的结构分析,得到设计阶段即会显现出的软件缺陷;(4)通过对顺序图的分析给出软件中的脆弱点及潜在的攻击模式;(5)针对具体的编程语言及环境选择合适的工具检测代码的编写缺陷;(6)通过对软件成品的安全性评估,得出软件的可靠程度;(7)对所述知识库中的内容进行及时更新。本发明有利于降低开发成本,提高软件的可信度和开发效率。
Description
技术领域
本发明属于软件安全领域,涉及一种可信软件的开发方法。
背景技术
在信息化席卷全球的现代社会,软件已渗透到现代生活的方方面面,这就使得软件安全问题成为广大用户极为关注的问题。从软件开发的角度讲,使用经实践验证的、相对可靠的、可重用流程,有利于实现软件可靠程度的提升。因此,软件开发人员必须采用一种更严格的、更关注安全性的软件开发流程,这种流程旨在尽量减少设计、编码和文档编写过程中出现的漏洞,并在开发生命周期中尽可能早地检测到并消除这些漏洞。如今,有关软件安全的相关问题已经成为软件工程领域的热点。以构建安全可靠的应用程序和系统为出发点,微软公司在传统软件工程流程的基础上提出了安全软件开发生命周期,在软件开发的需求、设计、编码和测试发布等各个阶段都加入了有关安全的讨论。这使得软件在开发过程中就把安全作为其重要组成部分,而不是把安全作为软件功能以外的附加属性。
软件缺陷是指系统或系统成分中,那些可能导致其整体或局部无法实现预期功能的不足点。从这个角度讲,软件缺陷与软件产品本身的功能需求直接相关,系统对特定功能的需求导致了潜在的安全隐患。但大部分的软件缺陷是通过设计的改良、实现的优化来减缓、甚至避免的。2009年CWE/SANS发布了25个最危险的编程错误。这些错误之所以是危险的,是因为他们可能导致攻击者完全接管软件、窃取数据,甚至导致软件系统崩溃。CWE柍<毕萘斜恚-ommon Weakness Enumeration)是美国的MITRE公司(一个非盈利机构)继CVE(CommonVulnerabilities and Exposures)之后的又一个安全漏洞词典。它们收集了到目前为止,已经发现的在整个软件开发生命周期的所有安全漏洞。除此以外,CWE网站还包含了700多个额外的编程错误、设计错误和导致开发漏洞的结构错误等数据。
为了更有针对性的研究攻击者的攻击行为,安全分析专家提出攻击模式的概念,以此来了解并预测可能的攻击行为。简单的讲,攻击模式是一种抽象机制,用来描述一种观察到的攻击是如何被执行的。它所针对的问题即为软件产品攻击者的目标对象,描述的是攻击者用来破坏软件产品的技术。依据攻击范式,攻击模式还提供了本身的适用范围的上下文描述以及缓和攻击的方案。使用攻击模式的动机为软件开发者通过将自己想象为攻击者,参与到威胁中去,从而有效提高软件的安全性。
软件缺陷是软件工作产品中不满足指定要求的成分,其产生过程贯穿于整个软件项目开发生命周期。而攻击模式是安全专家针对网络中发生的大量攻击行为案例进行抽象和总结出的一套攻击某类软件缺陷的模式化方法,也可以说是攻击者利用软件系统中的漏洞展开的一次攻击行为来达到自己的某种不可告人的目的。软件缺陷和攻击模式的关系可以很好的描述为因果联系,前者的多样性决定了后者的复杂性。目前,在软件安全研究领域,国内外专家对两者关系的研究缺乏针对性和全面性,没有一个从工程角度宏观把握安全问题的规范化思路。在工程实践中,软件开发人员对软件缺陷及软件产品面对的各种潜在威胁缺乏充分了解,这也正是导致许多软件产品安全性能严重不足的重要原因。
发明内容
本发明针对这种现状,克服现有技术的缺陷,提出一种基于软件缺陷库、贯穿软件开发生命周期的、面向软件安全性能的整体软件开发方案,用以及时发现在软件开发过程各阶段当中可能出现的安全漏洞,依据本发明提出的方法开发的软件系统,可以帮助软件开发人员修正设计内容、完善实现方法,对软件开发过程提供一种全局性的技术支持并提出带有定量、可行性及代价分析的缓和建议。提高软件的可信度,有效提高软件产品的质量和开发效率。
为此,本发明给出如下的技术方案:
一种基于安全缺陷知识库的可信软件开发方法,包括:
(1)建立基于安全缺陷知识库,该知识库包含:缺陷用例、误用例、缓和用例以及它们之间的关联关系,满足对活动图、顺序图进行检测及完善的需要的自动机形式的攻击模式及软件缺陷,常用代码检测工具的接口,与软件缺陷及攻击模式相关的各项信息及测试用例生成器等,并在该库的基础上,实施以下各个步骤;
(2)将设计人员的用例图及需求说明文档作为信息收集的载体,找到设计中相关的误用例,并提供可度量效果及代价分析的缓和方案;
(3)针对用例图中的每一个用例,分析其自身功能需求及使用边界,绘制活动图,通过对活动图的结构分析,得到设计阶段即会显现出的软件缺陷;
(4)将顺序图作为对象实体间交互信息的主要载体,通过对顺序图的分析给出软件中的脆弱点及潜在的攻击模式;
(5)针对具体的编程语言及环境选择合适的工具检测代码的编写缺陷;
(6)通过对软件成品的安全性评估,得出软件的可靠程度,以此作为成品软件的安全性指标,生成针对具体情况的安全性能测试用例;
(7)对所述知识库中的内容进行及时更新。
本发明提出的一种基于安全缺陷知识库的软件开发方法,有益效果包括:
通过对用户用例图的分析检测,找出需求分析阶段显现出的安全漏洞,并将改进方案分层次提供给用户,让用户综合自身的实际情况酌情修改。由于需求阶段是整个开发活动的源头,这一阶段的正确性是后面一切工作可以顺利开展的基本保证。同时,从软件开发者的角度讲,在与其客户交流需求设计时,将待开发软件面对的各种潜在威胁发现出来、陈其利弊,从根本上也有利于保护软件开发者的权益。
通过对活动图的检测,找到用例功能流程上或用例边界中可能出现的安全漏洞,这些漏洞是由软件设计本身的缺陷导致的。针对检测出的问题,将可行建议提供给用户,为用户的不同安全需求提供不同的缓和意见。
通过对顺序图的检测,找到软件实现设计中的缺陷。这些缺陷往往是通过顺序图的结构反应出来。将检测出的缺陷告知给用户,并建议用户结合其本身的安全性需求及开发预算,来决定采用何种缓和办法。由于顺序图中包含的信息非常丰富,对其的检测往往可以发现一些在前阶段无法发现的安全问题。同时,顺序图也是编码实现的重要指导,对顺序图的完善对于后续编码阶段有非常重要的意义。
前期的全部设计都是通过具体编码来实现的,对代码的检测就显得尤为重要。通过代码检测,可以找到编码中的语法错误、易出错函数的不当使用及不可靠调用关系等安全问题,这些问题的及时修改对软件产品最终的安全性能实现起到决定性作用。
针对前期检测中检测出的各种安全问题,为用户生成用于安全性能测试的用例。这些测试用例可以带有针对性的检测用户前期曾出现过的安全漏洞,更有针对性的进行测试。同时也让用户对安全性能的表现有一个直观的认识,从而更全面的考虑其产品的安全性能。
附图说明
图1:本发明的可信软件开发方法整体流程框图。
图2:网上银行的用例图(基本功能)。
图3:用户修改后的用例图。
图4:用例“访问在线银行”的对应活动图。
图5:ArgoUML绘制的“访问在线银行”动作的顺序图。
图6:安全性能测试过程。
图7:最终用例图。
图8:“访问网上银行”的最终活动图。
具体实施方式
本发明提出一种基于安全缺陷知识库的软件开发方法,主要包括下列步骤:
(1)针对需求分析阶段,将设计人员的用例图及需求说明文档作为信息收集的载体。通过针对这些信息的分析,找到设计中相关的误用例,并根据实际情况,提供可度量效果及代价分析的缓和方案。
(2)针对用例图中的每一个用例,分析其自身功能需求及使用边界。以这些信息为基础,绘制活动图。活动图中包含有用例所描述功能的基本工作流程,带有较丰富的结构信息。通过对活动图的结构分析,可以得到一些设计阶段即会显现出的软件缺陷。
(3)针对设计阶段,将顺序图作为对象实体间交互信息的主要载体,通过对顺序图的分析给出软件中的脆弱点及潜在的攻击模式。顺序图中含有较为丰富的结构信息和逻辑信息,通过对这些信息的分析,可以预见性的发现一些在前期设计阶段中无法发现的软件缺陷。这与前面活动图部分的工作相互补充,达到更理想的效果。
(4)在代码的具体的实现过程中,仍有可能引入与实现语言相关的、不确定的代码编写错误。所以这一阶段要对代码进行检查,并反馈给用户相关的代码漏洞。代码检测技术相对成熟,可用工具也容易得到。针对具体的编程语言及环境选择合适的工具,即可得到比较理想的效果。
(5)在测试阶段,将软件成品的安全性能列为软件检测的重要内容,通过对软件成品的安全性评估,得出软件的可靠程度,以此作为成品软件的安全性指标。这种针对安全性的测试是需要特定测试用例做支持的,本部分的主要目的就是利用前期各阶段测试的结果,为软件测试人员生成针对其具体情况的安全性能测试用例。
(6)所有这些工作都要在安全缺陷知识库的基础上完成。知识库为各阶段不同工作提供不同的信息。具体的讲,在需求分析阶段,提供缺陷用例、误用例、缓和用例,以及它们之间的关联关系;在设计阶段,提供自动机形式的攻击模式及软件缺陷,以满足对活动图、顺序图进行检测及完善的需要;在代码检测阶段,要提供常用代码检测工具的接口;在测试阶段,要提供与软件缺陷及攻击模式相关的各项信息,及测试用例生成器。
(7)为保证安全缺陷知识库的可用性和可靠性,要对知识库中的内容进行及时更新。对于新发现的软件缺陷或攻击模式,要进行适当的处理,并及时添加。知识的获得可以通过网络爬取及主动访问分析来完成。
由于本发明是以安全缺陷知识库为基础的,所以知识库的构建和完善是其有效工作的必要保障。为达到前文叙述中列举的各项功能、性能要求,安全缺陷知识库应具备如下特征:
1、内容上:为软件开发周期中的不同阶段提供有针对性的相应信息。具体的讲,就是:在需求分析阶段,提供缺陷用例、误用例、缓和用例及三者之间的相互关系;在需求及设计分析阶段,提供需求及设计分析阶段常见软件缺陷及攻击模式的相关信息,这些信息应以形式化的方式存在;在设计阶段,提供架构与设计阶段常见的软件缺陷及攻击模式相关信息。同样也是形式化的,但在内容上,与之前阶段的可能不同,因为不同的缺陷可能会在不同的开发阶段出现;还有一点要注意,就是这些关于缺陷及缓和方案的信息都是定量化的。即是说缺陷之间不是完全相同的,其可能造成的威胁及后果严重程度不同、修复或规避它所要付出的代价也不同,这些信息在库中都是有所体现的。在代码阶段,由于可以利用已有的代码检测工具,只需要提供相关工具的接口,或安装、调用链接即可;在测试阶段,要结合之前的检测结果,为用户提供针对安全性能测试的测试用例。
2、形式上:为了方便程序访问以实现客户功能,将相关信息存为程序易解析的形式;对于软件缺陷及攻击模式等的本征信息,则综合使用语义描述、形式化结构表达式等方式,以满足使用中的具体需求。为了对库的内容进行更新及有效信息提取,将相关内容表述成形式化形式(如本体等),以进行严密的表述及逻辑推理,提高库的自我完善能力及使用价值。
3、安全缺陷知识库的有效性与其内容的丰富性密切相关,所以库的自我更新能力是非常重要的一部分。新的软件缺陷及攻击方法层出不穷,这就要求知识库有成长和学习的能力。可以通过网络信息爬取及主动知识获得的方式来收集原始信息。具体的讲,就是通过网络爬虫来搜集网络中的资源,或通过与广大网络使用者的有效交互及信息反馈,来搜罗已出现攻击行为的相关信息。得到这些原始信息后,再经过相应的加工和处理,就能得到可以入库并继续使用的内容,从而达到更新知识库内容的目的。
本发明提出的软件工程方法以安全缺陷知识库为基础,如何对库中提供的内容进行恰当的使用,是关系到最终成果和效用的重要问题。在需求分析阶段,读取用户的用例图,扫描出当中可能产生误用例的用例(风险用例)。在误用例/攻击模式库的支持下,可以检测得到用例中表现出的软件脆弱点及误用例,并给出可行的缓和方案建议。接下来,以用例图为基础,分析用例行为及系统边界,得到针对用例行为或功能的活动图。分析活动图的结构及一定量的语义信息,找到当中是否存在设计缺陷或安全隐患。在设计阶段,以用户的顺序图为信息依托,通过资产信息提取、分析和检测,找到相关软件脆弱点、攻击模式及不可靠的类关系等。
这些阶段的工作结果,都是以修改意见的形式提供给用户的,为用户清楚表述其设计中存在的不安全因素,及这些威胁可能带来的后果是什么、严重程度有多少,以及规避这些安全隐患所有付出的代价又是多少。最终是否采用及采用何种缓和办法,由用户结合其自身的实际情况做以综合考虑后定夺。
在代码分析阶段,由于代码检测技术相对成熟,用户只需链接到其相应编程环境及编程语言的检测工具即可。在最终的测试阶段,要根据对用户前期信息的分析结果(即对其用例图、活动图、顺序图的分析结果),带有针对性的为用户提供安全性能测试用例,通过这样的用例,可以让用户对其软件产品的安全性能表现有一个直观的感受,有利于最终产品质量的提高。
下面通过一个在线银行应用程序的设计及实现过程来展示本发明的作用和效果。通过对在线网上银行应用程序进行用例建模,绘制用例图作为描述整个应用程序的概图,获得的在线网上银行应用程序的用例图如图2所示(在本例中,使用ArgoUML工具完成对下列各阶段视图的绘制)。
通过对用例图的分析检测,发现“访问在线银行”用例可能会引入登录及密码破解相关的误用例“密码暴力破解”。为了避免这种误用例发生,可以采用多种方法,“限制同名用户登录次数”和“限制密码长度”是其中比较常用的。根据以上分析得到的信息,用户可将其用例设计进行修改,这里假设用户采用了“限制密码长度”这种缓和办法。修改结果如图3所示。
将活动图缚到在线网上银行应用程序的每一个用例上,对其进行动态建模,从而完成对在线网上银行应用程序的分解,由于在线网上银行应用程序的结构和功能不复杂,根据建模威胁和评估的需要,我们只是对其进行一层的分解。以第一个用例“访问在线银行”为例,获得的在线网上银行应用程序的分解图如图4所示,图中下划线字体标识的内容即是为根据前阶段用例部分的修改而添加的。检测这一活动图,并未发现有新的缺陷引入,可直接进行下一阶段,即顺序图绘制。而针对这一功能实现的顺序图如图5所示。
通过对顺序图的检测,发现即使强制限制密码长度,仍然可能通过半自动化枚举的方法将用户的密码找出来,也就还存在着密码泄露的潜在威胁。在这里,建议用户将最初建议的缓和用例“限制同名登录次数”加进来。用户从自身应用角度来讲,认为这种情况出现的可能性不大,于是选择并不采纳这一建议。继而进行下一阶段。编码阶段的漏洞与具体使用环境及编程语言有很大关系,这里则不详细列举。
开发进程推进到测试阶段,要为用户提供安全性能测试用例。针对安全性能的测试过程如图6所示。
针对前阶段检测出的安全漏洞,提供给用户的测试用例为一个自动登录“装置”,它会模拟对一个用户名的多次登录。通过测试,发现六位左右长度的密码,是比较容易被自动登录装置突破的。即是说,这样的密码长度并不能有效避免密码的暴力破解。此外,系统的最大负荷并不足够,有待加强。通过这样的测试,用户更清楚的了解到其软件产品面临的安全问题,并重新改进其薄弱之处,直至达到满意的效果。最终修改后的用例图和活动图如图7、图8所示。
Claims (1)
1.一种基于安全缺陷知识库的可信软件开发方法,包括:
(1)建立基于安全缺陷知识库,该知识库包含:缺陷用例、误用例、缓和用例以及它们之间的关联关系,满足对活动图、顺序图进行检测及完善的需要的自动机形式的攻击模式及软件缺陷,常用代码检测工具的接口,与软件缺陷及攻击模式相关的各项信息及测试用例生成器等,并在该库的基础上,实施以下各个步骤;
(2)将设计人员的用例图及需求说明文档作为信息收集的载体,找到设计中相关的误用例,并提供可度量效果及代价分析的缓和方案;
(3)针对用例图中的每一个用例,分析其自身功能需求及使用边界,绘制活动图,通过对活动图的结构分析,得到设计阶段即会显现出的软件缺陷;
(4)将顺序图作为对象实体间交互信息的主要载体,通过对顺序图的分析给出软件中的脆弱点及潜在的攻击模式;
(5)针对具体的编程语言及环境选择合适的工具检测代码的编写缺陷;
(6)通过对软件成品的安全性评估,得出软件的可靠程度,以此作为成品软件的安全性指标,生成针对具体情况的安全性能测试用例;
(7)对所述知识库中的内容进行及时更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910305212A CN101625641A (zh) | 2009-08-05 | 2009-08-05 | 基于安全缺陷知识库的可信软件开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910305212A CN101625641A (zh) | 2009-08-05 | 2009-08-05 | 基于安全缺陷知识库的可信软件开发方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101625641A true CN101625641A (zh) | 2010-01-13 |
Family
ID=41521497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910305212A Pending CN101625641A (zh) | 2009-08-05 | 2009-08-05 | 基于安全缺陷知识库的可信软件开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101625641A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814098A (zh) * | 2010-05-11 | 2010-08-25 | 天津大学 | 基于垂直搜索及语义标注获取软件安全缺陷的方法 |
CN101989230A (zh) * | 2010-10-22 | 2011-03-23 | 中国人民解放军理工大学 | 基于剖面划分的软件安全性测试需求提取与行为描述方法 |
CN102289491A (zh) * | 2011-08-11 | 2011-12-21 | 中国人民解放军信息工程大学 | 基于模糊规则推理的并行应用性能脆弱点分析方法及系统 |
CN105608232A (zh) * | 2016-02-17 | 2016-05-25 | 扬州大学 | 一种基于图形数据库的bug知识建模方法 |
CN107979612A (zh) * | 2012-08-18 | 2018-05-01 | 赋格有限公司 | 提供安全的计算机环境的系统和方法 |
-
2009
- 2009-08-05 CN CN200910305212A patent/CN101625641A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814098A (zh) * | 2010-05-11 | 2010-08-25 | 天津大学 | 基于垂直搜索及语义标注获取软件安全缺陷的方法 |
CN101814098B (zh) * | 2010-05-11 | 2012-05-02 | 天津大学 | 基于垂直搜索及语义标注获取软件安全缺陷的方法 |
CN101989230A (zh) * | 2010-10-22 | 2011-03-23 | 中国人民解放军理工大学 | 基于剖面划分的软件安全性测试需求提取与行为描述方法 |
CN101989230B (zh) * | 2010-10-22 | 2012-07-04 | 中国人民解放军理工大学 | 基于剖面划分的软件安全性测试需求提取与行为描述方法 |
CN102289491A (zh) * | 2011-08-11 | 2011-12-21 | 中国人民解放军信息工程大学 | 基于模糊规则推理的并行应用性能脆弱点分析方法及系统 |
CN102289491B (zh) * | 2011-08-11 | 2014-05-07 | 中国人民解放军信息工程大学 | 基于模糊规则推理的并行应用性能脆弱点分析方法 |
CN107979612A (zh) * | 2012-08-18 | 2018-05-01 | 赋格有限公司 | 提供安全的计算机环境的系统和方法 |
CN105608232A (zh) * | 2016-02-17 | 2016-05-25 | 扬州大学 | 一种基于图形数据库的bug知识建模方法 |
CN105608232B (zh) * | 2016-02-17 | 2019-01-15 | 扬州大学 | 一种基于图形数据库的bug知识建模方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Li et al. | Risk assessment of the geological storage of CO 2: A review | |
JP5791698B2 (ja) | アバップソースコードのコード検査遂行システム | |
CN100461132C (zh) | 基于源代码静态分析的软件安全代码分析器及其检测方法 | |
Panesar-Walawege et al. | Characterizing the chain of evidence for software safety cases: A conceptual model based on the IEC 61508 standard | |
Venson et al. | Costing secure software development: A systematic mapping study | |
CN102141956A (zh) | 用于开发中的安全漏洞响应管理的方法和系统 | |
CN101625641A (zh) | 基于安全缺陷知识库的可信软件开发方法 | |
CN105677332A (zh) | 软件开发需求管理系统 | |
Peraldi-Frati et al. | Requirement traceability in safety critical systems | |
CN103294596A (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
Bunke et al. | An architecture-centric approach to detecting security patterns in software | |
Boring | Human reliability analysis for digital human-machine interfaces: a wish list for future research | |
Gauthier et al. | Extraction and comprehension of moodle's access control model: A case study | |
Gupta et al. | Automated regression test case generation for web application: A survey | |
Damassa et al. | Interpreting INDCs: Assessing transparency of post-2020 greenhouse gas emissions targets for 8 top-emitting economies | |
CN105700934A (zh) | 一种智能编译方法和智能编译系统 | |
Pandey et al. | A framework for producing effective and efficient secure code through malware analysis | |
Mastropaolo et al. | Towards Automatically Addressing Self-Admitted Technical Debt: How Far Are We? | |
Towhidnejad et al. | Fault tree analysis for software design | |
Brida et al. | BeAFix: an automated repair tool for faulty alloy models | |
Zafar | Formal specification and verification of few combined fragments of UML sequence diagram | |
CN115039083A (zh) | 逻辑连接程序执行时生成的异步算法合法性验证使能方法 | |
Izquierdo et al. | Current status and applications of integrated safety assessment and simulation code system for ISA | |
Priya et al. | Test Case Generation from UML models-A survey | |
Nöhrer et al. | Positive effects of utilizing relationships between inconsistencies for more effective inconsistency resolution (NIER track) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20100113 |