分享一种源代码安全漏洞的检测方法及系统与流程

如下介绍的分享一种源代码安全漏洞的检测方法及系统与流程,小编精心为您推荐:

如下介绍的分享一种源代码安全漏洞的检测方法及系统与流程,小编精心为您推荐:


本发明涉及计算机技术领域,尤其涉及一种源代码安全漏洞的检测方法及系统。



背景技术:

软件漏洞是当今信息系统绝大多数安全漏洞的来源。软件漏洞是软件中存在的一些缺陷,这些缺陷可以被第三方或程序利用来进行未经授权的资源访问,或改变控制权限来执行其他操作。软件漏洞轻则造成相应的经济或财产损失(如敏感信息被盗,不可用的服务),重则导致严重的灾难,尤其是发生在被人类生活和生计所依赖的关键基础设施的软件系统上(如核,生物,化学实验室,电网,水处理和分配系统,空中交通控制和交通信号系统)。

与代码审计有关的前期工作多聚焦于缓冲区溢出漏洞。D.Wagner等提出了一种用于发现C语言代码中潜在缓冲区溢出的关键安全性问题的方法。该方法将缓冲区溢出检测转化为一个整数约束问题,并使用一些简单的图论技术构建了一个整数约束求解的有效算法。最后利用安全知识设计一个可以捕捉有可能会在实际程序中出现的安全相关性漏洞的启发式。Vinod Ganapathy等提出了一种将C字符的操作建模为一种线性规划,并根据线性规划的相关文献来确定缓冲区范围的方法,来了解并消除源代码中存在的缓冲区溢出漏洞。

代码安全审查的对象是实践于应用中的源代码。这些审计的主要目的是发现安全漏洞和缺陷,然后准确地识别与修复。事实上,安全漏洞的概念被引入到软件主要是由于大多数软件及其功能无法在未知情况下保持正常运行。一般来说,攻击者有两个渠道来利用软件的缺陷:一是通过软件的输入;二是通过软件与其他应用层实例之间的接口。

几乎所有的可利用安全漏洞都可以被用于执行非预期的操作,特殊的输入、接口或环境入口会触发这些安全漏洞从而对系统造成破坏。例如,黑客总是构造一些精心设计的字符串作为应用程序的输入来使其崩溃,或改变它的控制流来做其他恶意操作(如拒绝服务攻击,SQL注入和跨站点脚本攻击)。可利用安全漏洞总是与外部输入、接口或其他环境入口相关。

但是,现有技术中检测攻击者无法通过输入操作、接口或者其他环境条件进入的不可利用性安全流量,从而可以减少源代码审计分析的开销,尤其是对于大型应用程序。



技术实现要素:

有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种源代码安全漏洞的检测方法及系统,所描述的方法可以大大降低误报率,并且提供了一种有效的、仅通过检测可利用的安全流量对源码进行自动化安全审计的解决方案。这种方法避免了检测攻击者无法通过输入操作、接口或者其他环境条件进入的不可利用性安全流量,从而可以减少源代码审计分析的开销,尤其是对于大型应用程序。基于参考树的FSR信息,该方法也可以对修改有漏洞的源码提供精确的指导。

为实现上述目的,本发明提供了一种源代码安全漏洞的检测方法,其特征在于,所述方法包括:

检测和定位源代码中所有的操作入口;

分析每个操作入口,建立参照树,记录安全信息,作为安全属性;

遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

根据检测到的安全漏洞来产生告警提示和修正建议。

上述的一种源代码安全漏洞的检测方法,其特征在于:所述操作入口包括但不限于用户输入、网络输入项、I/O输入项。

上述的一种源代码安全漏洞的检测方法,其特征在于:所述源代码包括C、C++、C#、JAVA和Perl的主流开发语言。

上述的一种源代码安全漏洞的检测方法,其特征在于:所述安全属性为程式化安全规则FSR,包括但不限于正则表达式、ACL。

上述的一种源代码安全漏洞的检测方法,其特征在于:所述利用安全属性来检查是否有可利用安全漏洞的存在包括:检查参考树的父亲节点的FSR和孩子节点的FSR之间是否存在矛盾。

一种源代码安全漏洞的检测系统,其特征在于,所述系统包括:

操作入口定位器,用于检测和定位源代码中所有的操作入口;

解析引擎模块,用于分析每个操作入口建立参照树;

漏洞检测器,用于遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

告警修复生成器,用于根据检测到的安全漏洞来产生告警提示和修正建议。

上述的一种源代码安全漏洞的检测系统,其特征在于:所述操作入口定位器搜索外部输入的API。

上述的一种源代码安全漏洞的检测系统,其特征在于:所述解析引擎模块在句法分析中自动分配一些FSR规则。

上述的一种源代码安全漏洞的检测系统,其特征在于:所述外部输入包括但不限于scanf输入、getchar输入、getwindowstext输入、socket输入。

本发明的有益效果是:

本发明中所描述的方法可以大大降低误报率,并且提供了一种有效的、仅通过检测可利用的安全流量对源码进行自动化安全审计的解决方案。这种方法避免了检测攻击者无法通过输入操作、接口或者其他环境条件进入的不可利用性安全流量,从而可以减少源代码审计分析的开销,尤其是对于大型应用程序。基于参考树的FSR信息,该方法也可以对修改有漏洞的源码提供精确的指导。

以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。

附图说明

图1是本发明的一种源代码安全漏洞的检测方法流程图。

图2是本发明的一种源代码安全漏洞的检测系统结构框图。

图3是本发明的检测缓冲区溢出漏洞的参考树示意图。

具体实施方式

如图1所示,一种源代码安全漏洞的检测方法,所述方法包括:

101、检测和定位源代码中所有的操作入口;

102、分析每个操作入口,建立参照树,记录安全信息,作为安全属性;

103、遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

104、根据检测到的安全漏洞来产生告警提示和修正建议。

优选的,所述操作入口包括但不限于用户输入、网络输入项、I/O输入项。而可以用来检测这些操作入口的方法是找到所有用于获取外界输入、用于与接口和其他环境入口做交互的API。

优选的,所述源代码包括C、C++、C#、JAVA和Perl的主流开发语言。

优选的,所述安全属性为程式化安全规则FSR,包括但不限于正则表达式、ACL。每个引用或引申的参考项可以追溯到的节点应该包含在树中。记录和保持原有的安全属性对进一步操作参考树来说是十分必要的。FSR可以定义不同树的安全性能,它是一种可被机器识别的自动处理过程。

优选的,所述利用安全属性来检查是否有可利用安全漏洞的存在包括:检查参考树的父亲节点的FSR和孩子节点的FSR之间是否存在矛盾。

如图2所示,一种源代码安全漏洞的检测系统,所述系统包括:

操作入口定位器201,用于检测和定位源代码中所有的操作入口;

解析引擎模块202,用于分析每个操作入口建立参照树;

漏洞检测器203,用于遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

告警修复生成器204,用于根据检测到的安全漏洞来产生告警提示和修正建议。

优选的,所述操作入口定位器搜索外部输入的API。

优选的,所述解析引擎模块在句法分析中自动分配一些FSR规则。解析引擎利用的是编译器技术,它可以找到所有可以追溯到操作入口的代码块。它可以在句法分析中自动分配一些FSR规则。最后,该引擎将产生源代码参考树。

优选的,所述外部输入包括但不限于scanf输入、getchar输入、getwindowstext输入、socket输入。

以下给出本发明的几种具体应用情景:

情景一:缓冲区溢出漏洞

一般来说,当一个数据块B写入缓冲器A时,若B的大小大于A的合法分配的大小就会发生缓冲区溢出。缓冲器溢出的另一种形式是整数溢出,这是程序的一种潜在问题,即程序中保存的数据大小是通过以字节为单位的数据类型限制的。在这里指定FSR的格式为{FSR:“{length}$”}。

图3为通过解析引擎建立的一棵参考树。所有节点都将被编号为n.n,这体现了父节点和子节点之间的关系。同时,该节点的FSR和位置信息也将被记录下来。安全性分析模块将通过检查每个子节点的FSR是否与其父节点一致来处理参考树。一种解决方案是从参考书中的叶节点开始遍历,比较它们与父节点的FSR。在图3中,节点1.2有两个子节点,子节点1.2.1和1.2.2,他们允许的最大缓冲区长度为30和20。因为它们的父节点(节点1.2)的允许长度为50,所以当子节点到父节点之间可能会发生溢出。于是在这里发现了一个安全漏洞,系统的告警和修复模块会产生警告,并将产生相关修复建议如“建议修改节点1.2的最大缓冲区长度为20”。

情景二:特权提升漏洞

特权提升漏洞允许攻击者或代码获取其本不应有的更高水平的权限。这里的特权可能不仅代表用户(如管理员,超级用户或访客)的特权,也代表代码(如内核或用户模式)的特权。因此,可以使用访问控制列表(ACL)来分类处理这样的漏洞。

情景三:信息泄露或数据篡改漏洞

信息泄露和数据篡改漏洞允许非法用户或代码修改系统内的数据,以实现恶意攻击或将受保护的数据暴露给到没有权限访问该数据的用户。对于这些漏洞的FSR规则也在ACL中有描述。

综上,本发明中所描述的方法可以大大降低误报率,并且提供了一种有效的、仅通过检测可利用的安全流量对源码进行自动化安全审计的解决方案。这种方法避免了检测攻击者无法通过输入操作、接口或者其他环境条件进入的不可利用性安全流量,从而可以减少源代码审计分析的开销,尤其是对于大型应用程序。基于参考树的FSR信息,该方法也可以对修改有漏洞的源码提供精确的指导。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。


技术特征:

1.一种源代码安全漏洞的检测方法,其特征在于,所述方法包括:

检测和定位源代码中所有的操作入口;

分析每个操作入口,建立参照树,记录安全信息,作为安全属性;

遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

根据检测到的安全漏洞来产生告警提示和修正建议。

2.如权利要求1所述的一种源代码安全漏洞的检测方法,其特征在于:所述操作入口包括但不限于用户输入、网络输入项、I/O输入项。

3.如权利要求1所述的一种源代码安全漏洞的检测方法,其特征在于:所述源代码包括C、C++、C#、JAVA和Perl的主流开发语言。

4.如权利要求1所述的一种源代码安全漏洞的检测方法,其特征在于:所述安全属性为程式化安全规则FSR,包括但不限于正则表达式、ACL。

5.如权利要求1所述的一种源代码安全漏洞的检测方法,其特征在于:所述利用安全属性来检查是否有可利用安全漏洞的存在包括:检查参考树的父亲节点的FSR和孩子节点的FSR之间是否存在矛盾。

6.一种源代码安全漏洞的检测系统,其特征在于,所述系统包括:

操作入口定位器,用于检测和定位源代码中所有的操作入口;

解析引擎模块,用于分析每个操作入口建立参照树;

漏洞检测器,用于遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;

告警修复生成器,用于根据检测到的安全漏洞来产生告警提示和修正建议。

7.如权利要求6所述的一种源代码安全漏洞的检测系统,其特征在于:所述操作入口定位器搜索外部输入的API。

8.如权利要求6所述的一种源代码安全漏洞的检测系统,其特征在于:所述解析引擎模块在句法分析中自动分配一些FSR规则。

9.如权利要求7所述的一种源代码安全漏洞的检测系统,其特征在于:所述外部输入包括但不限于scanf输入、getchar输入、getwindowstext输入、socket输入。

技术总结
本发明公开了一种源代码安全漏洞的检测方法及系统,所述方法包括:检测和定位源代码中所有的操作入口;分析每个操作入口,建立参照树,记录安全信息,作为安全属性;遍历参考树,利用安全属性来检查是否有可利用安全漏洞的存在;根据检测到的安全漏洞来产生告警提示和修正建议。本发明中所描述的方法可以大大降低误报率,并且提供了一种有效的、仅通过检测可利用的安全流量对源码进行自动化安全审计的解决方案。这种方法避免了检测攻击者无法通过输入操作、接口或者其他环境条件进入的不可利用性安全流量,从而可以减少源代码审计分析的开销,尤其是对于大型应用程序。基于参考树的FSR信息,该方法也可以对修改有漏洞的源码提供精确的指导。

技术研发人员:司徒健辉;林广银;文革萍
受保护的技术使用者:广东电力发展股份有限公司沙角A电厂
文档号码:201710448153
技术研发日:2017.06.14
技术公布日:2017.09.15

分享一种源代码安全漏洞的检测方法及系统与流程的相关内容如下:

标题:分享一种源代码安全漏洞的检测方法及系统与流程|http://www.wc10086.cn/286002.html

本文来自网络,不代表本站立场,转载请注明出处!