一种静态代码安全检查方法

allin2022-09-03  113



1.本发明涉及计算机编程技术领域,尤其涉及一种静态代码安全检查方法。


背景技术:

2.随着网络的普及以及企业数字化转型的新形势,网络与信息安全的挑战日益严峻。企业业务系统经过多年发展,呈现多样化、复杂化、重要性高的特点。企业内部大量系统通过网络互联,在为业务提供支撑的同时,也导致威胁暴露面增加,威胁风险大幅度提高。各种业务系统由大量不同语言类型、不同平台的代码构成,这些代码造成的安全漏洞是被黑客入侵的最主要原因。同时,伴随着互联网产业的发展,大量使用开源软件成为趋势。而开源软件大部分来自企业外部,特别是国外,这些开源软件暗藏的漏洞同样是黑客攻击的重点。gartner统计,几乎75%的黑客攻击来自代码漏洞。这导致供应链上代码的漏洞也成为了重大的安全威胁。
3.同时由于互联网时代的高速发展,敏捷开发的普及,代码迭代的速度以及代码量都在翻倍地增长,在企业的ci/cd流程中每天有数千次量级的构建及发布,白盒检测的自动化能力显得极为重要。如果采用人工来进行代码安全审计工作,很难覆盖到一个企业的所有业务代码,自动化代码安全审计是安全自动化绕不去的坎。
4.目前,基于静态分析的代码安全审计主要和企业安全开发流程相结合,内嵌于软件开发流程为企业提供安全保障。由于技术自身特点,基于代码缺陷特征值的静态检测的检测结果中安全缺陷误报率较高。同时由于软件开发中代码数量的日趋增长以及devops等新型开发模式的引入,企业对于开发迭代速度的要求逐步提高,误报率较高的问题成为制约代码安全审计推广和应用的一大阻碍。另外扫描代码的时间消耗也是现阶段的一个重点问题,业务代码量大时的扫描时间会长达几十个小时,造成项目上线时间被延后。
5.目前的代码审计技术分为静态代码检测技术与动态代码检测技术。静态检测技术涉及的主要方法包括静态分析和程序验证。其利用二进制比对技术(binary contrast)、词法分析(lexical analysis)、形式化验证技术或者手工测试技术,对被测软件的源程序或二进制代码进行扫描,然后从语法、语义上理解程序的行为,分析程序的特征,找出可能导致程序异常的漏洞。该技术具有简单高效自动化的优势,缺点是仅对代码本身的特征进行检查,对漏洞间复杂的逻辑关联检测力弱,存在大量的误报和漏报。


技术实现要素:

6.本发明的目的是为了解决现有技术中存在的缺点,而提出一种静态代码安全检查方法,基于github所推出的工具codeql,完成各类代码的安全扫描规则编写优化,并将其封装于本发明程序中,以方便测试人员使用。
7.为了实现上述目的,本发明采用了如下技术方案:
8.一种静态代码安全检查方法,包括以下步骤:
9.s1、基于github所开发的codeql引擎,将可执行程序封装在codeql引擎的内部,并
预留调用接口;
10.s2、通过调用模块与调用接口通讯,并且以json格式提交tooloptions、skippaths、opencheckers、whitepathlist和scanpath参数;
11.s3、codeql引擎针对json参数进行解析,完成初步配置;
12.s4、codeql引擎通过调用模块读取用户输入信息,自动获取codeql可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用codeql进行编译并创建代码快照数据库,否则省略编译步骤,在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,codeql引擎将根据规则对代码进行数据流分析及污点分析;
13.s5、扫描完成后输出扫描结果。
14.优选地,步骤s2中所述调用模块使用了python的os库进行编写,可以自动获取codeql环境变量,调用模块可以代码调用codeql的各个功能,包括生成代码快照数据库,更新代码快照数据库、调用规则对代码进行安全扫描等。
15.优选地,步骤s4中所述的规则模块中内置了大量扫描规则,覆盖各类编程语言,如cpp,csharp,go,java,javascript和python代码规则,覆盖多种漏洞,如xml注入,代码注入,反射型xss和url重定向。
16.优选地,所述codeql引擎的内部设置有规则编辑模块,支持用户对规则进行增删修改,方便用户根据具体使用场景做进一步优化。
17.优选地,所述tooloptions、skippaths、opencheckers、whitepathlist和scanpath,分别为codeql环境变量、过滤路径列表、规则列表、白名单和目标代码路径。
18.优选地,所述codeql代码扫描引擎,通过配置文件的修改输入可将命令行工具变得可视化。
19.本发明具有以下有益效果:
20.1、本发明基于github所推出的codeql技术,编写规则并利用codeql分析引擎对,通过代码封装及规则封装让使用人员不必了解底层的规则编写以及底层调用即可使用codeql来进行代码安全扫描,通过code database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
21.2、本发明重点解决了如何通过基于codeql技术实现使用代码数据库存储数据流信息,封装规则实现代码安全自动化扫描的问题,降低了误报率,提高了代码安全扫描效率,并方便测试人员进行代码安全检查。
附图说明
22.图1为本发明实施例的静态代码安全检查方法中codeql引擎的执行步骤流程示意图;
23.图2为本发明实施例的codeql引擎的模块组成及其工作时的流程示意图;
24.图3为本发明实施例codeql引擎的工作流程示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
26.在本发明的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
27.参见附图1-3,本发明提供的静态代码安全检查方法,其包括如下步骤:
28.s1、基于github所开发的codeql引擎,将可执行程序封装在codeql引擎的内部,并预留调用接口;
29.s2、通过调用模块与调用接口通讯,并且以json格式提交tooloptions、skippaths、opencheckers、whitepathlist和scanpath参数;
30.s3、codeql引擎针对json参数进行解析,完成初步配置;
31.s4、codeql引擎通过调用模块读取用户输入信息,自动获取codeql可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用codeql进行编译并创建代码快照数据库,否则省略编译步骤,在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,codeql引擎将根据规则对代码进行数据流分析及污点分析;
32.s5、扫描完成后输出扫描结果。
33.本发明的主要技术构思是:基于codeql技术实现构造一个.ql概念的白盒扫描方案,将引擎的实现和规则开发,使用者分割开来。流分析,污点分析等数据流相关的分析由引擎以及引擎的开发者来完成,而使用者只需要关注规则的编写即可,将精力专注于扫描规则的完善及优化上。
34.本发明方法使用的模块,包括调用模块、规则模块、以及codeql引擎模块,其中调用模块使用了python的os库进行编写,可以自动获取codeql环境变量,并根据用户输入信息进行扫描项目配置。调用模块可以代码调用codeql的各个功能,包括生成代码快照数据库,更新代码快照数据库、调用规则对代码进行安全扫描等。另外还设有过滤路径列表,规则列表,白名单列表等参数,方便使用人员个性化调用。
35.规则模块为代码安全扫描的符合codeql引擎的规则。codeql的一个关键特性是,它可以帮助我们跟踪数据在程序中的流动情况,规则模块中存有数百条规则,在扫描过程中会根据目标程序的语言来调用不同规则进行代码静态分析,对代码进行数据流分析及污点分析,查找代码中的漏洞。在规则模块中内置了大量扫描规则,覆盖各类编程语言,如cpp,csharp,go,java,javascript,python。覆盖多种漏洞,如xml注入,代码注入,反射型xss,url重定向等。同时支持用户对规则进行增删修改,方便用户根据具体使用场景做进一步优化。
36.本发明技术方案基于github所推出的codeql,将codeql的可执行程序进行封装并且开发了调用模块进行调用,通过调用规则模块中的漏洞扫描规则对目标代码进行安全扫描。在扫描开始前首先需要用户以json格式输入相关信息,包括以下内容:
37.tooloptions:codeql环境变量
38.skippaths:过滤路径列表
39.opencheckers:规则列表
40.whitepathlist:白名单
41.scanpath:目标代码路径
42.之后本工具将对用户所输入json进行解析,完成初步配置。通过调用模块读取用户输入信息,自动获取codeql可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用codeql进行编译并创建代码快照数据库,否则省略编译步骤。在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,codeql引擎将根据规则对代码进行数据流分析及污点分析,扫描完成后输出扫描结果。
43.本发明通过code database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
44.另外,本方案主要针对代码安全自动化扫描领域,通过代码封装及规则封装让使用人员不必了解底层的规则编写以及底层调用即可使用codeql来进行代码安全扫描。
45.本发明重点是解决了如何通过基于codeql技术实现使用代码数据库存储数据流信息,封装规则实现代码安全自动化扫描的技术问题,降低误报率,提高代码安全扫描效率,方便测试人员进行代码安全检查。本发明是基于通过codeql技术实现构造一个.ql概念的白盒扫描方案,将引擎的实现和规则开发与使用者分割开来,使用者只需要将精力专注于扫描规则的完善及优化上,通过code database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
46.本发明提供的方案中关键技术特征为:
47.1、对codeql的代码封装,通过配置文件的修改输入来调用codeql代码扫描引擎,将命令行工具变得可视化。
48.2、通过规则封装将常见漏洞如sql注入,xss,ssrf,命令执行等漏洞的检测规则封装到该装置中,方便使用人员直接调用。
49.3、将装置使用、规则开发与扫描引擎三者分离,使用人员可只关注装置使用,规则开发者可只专注规则优化,方便人员分工配置。
50.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

技术特征:
1.一种静态代码安全检查方法,其特征在于,其包括以下步骤:s1、基于github所开发的codeql引擎,将可执行程序封装在codeql引擎的内部,并预留调用接口;s2、通过调用模块与调用接口通讯,并且以json格式提交tooloptions、skippaths、opencheckers、whitepathlist和scanpath参数;s3、codeql引擎针对json参数进行解析,完成初步配置;s4、codeql引擎通过调用模块读取用户输入信息,自动获取codeql可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用codeql进行编译并创建代码快照数据库,否则省略编译步骤,在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,codeql引擎将根据规则对代码进行数据流分析及污点分析;s5、扫描完成后输出扫描结果。2.根据权利要求1所述的静态代码安全检查方法,其特征在于:步骤s2中所述调用模块使用了python的os库进行编写,可以自动获取codeql环境变量,调用模块可以代码调用codeql的各个功能,包括生成代码快照数据库,更新代码快照数据库、调用规则对代码进行安全扫描等。3.根据权利要求1所述的静态代码安全检查方法,其特征在于:步骤s4中所述的规则模块中内置大量扫描规则,覆盖各类编程语言,包括cpp,csharp,go,java,javascript和python代码规则,覆盖多种漏洞,如xml注入,代码注入,反射型xss和url重定向。4.根据权利要求3所述的静态代码安全检查方法,其特征在于:所述codeql引擎的内部设置有规则编辑模块,支持用户对规则进行增删修改,方便用户根据具体使用场景做进一步优化。5.根据权利要求1所述的静态代码安全检查方法,其特征在于:所述tooloptions、skippaths、opencheckers、whitepathlist和scanpath,分别为codeql环境变量、过滤路径列表、规则列表、白名单和目标代码路径。6.根据权利要求1所述的静态代码安全检查方法,其特征在于:所述codeql代码扫描引擎,通过配置文件的修改输入可将命令行工具变得可视化。

技术总结
本发明公开了一种静态代码安全检查方法,其包括如下步骤:S1、将可执行程序封装在CodeQL引擎的内部;S2、通过调用模块与调用接口通讯,并且以Json格式提交参数;S3、CodeQL引擎针对Json参数进行解析,完成初步配置;S4、CodeQL引擎将根据规则对代码进行数据流分析及污点分析;S5、输出扫描结果。该方法主要是基于通过CodeQL技术实现构造一个.QL概念的白盒扫描方案,将引擎的实现和规则开发与使用者分割开来,使用者只需要将精力专注于扫描规则的完善及优化上,通过CodeDatabase技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。便于使用人员进行分析研究。便于使用人员进行分析研究。


技术研发人员:鲁辉 田志宏 徐一笑 苏申 孙彦斌
受保护的技术使用者:广州大学
技术研发日:2022.04.12
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-3401.html

最新回复(0)