CN114707155A - 一种静态代码安全检查方法 - Google Patents

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

Info

Publication number
CN114707155A
CN114707155A CN202210377876.2A CN202210377876A CN114707155A CN 114707155 A CN114707155 A CN 114707155A CN 202210377876 A CN202210377876 A CN 202210377876A CN 114707155 A CN114707155 A CN 114707155A
Authority
CN
China
Prior art keywords
codeql
code
engine
rule
scanning
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
Application number
CN202210377876.2A
Other languages
English (en)
Inventor
鲁辉
田志宏
徐一笑
苏申
孙彦斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou University
Original Assignee
Guangzhou University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou University filed Critical Guangzhou University
Priority to CN202210377876.2A priority Critical patent/CN114707155A/zh
Publication of CN114707155A publication Critical patent/CN114707155A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

一种静态代码安全检查方法
技术领域
本发明涉及计算机编程技术领域,尤其涉及一种静态代码安全检查方法。
背景技术
随着网络的普及以及企业数字化转型的新形势,网络与信息安全的挑战日益严峻。企业业务系统经过多年发展,呈现多样化、复杂化、重要性高的特点。企业内部大量系统通过网络互联,在为业务提供支撑的同时,也导致威胁暴露面增加,威胁风险大幅度提高。各种业务系统由大量不同语言类型、不同平台的代码构成,这些代码造成的安全漏洞是被黑客入侵的最主要原因。同时,伴随着互联网产业的发展,大量使用开源软件成为趋势。而开源软件大部分来自企业外部,特别是国外,这些开源软件暗藏的漏洞同样是黑客攻击的重点。Gartner统计,几乎75%的黑客攻击来自代码漏洞。这导致供应链上代码的漏洞也成为了重大的安全威胁。
同时由于互联网时代的高速发展,敏捷开发的普及,代码迭代的速度以及代码量都在翻倍地增长,在企业的CI/CD流程中每天有数千次量级的构建及发布,白盒检测的自动化能力显得极为重要。如果采用人工来进行代码安全审计工作,很难覆盖到一个企业的所有业务代码,自动化代码安全审计是安全自动化绕不去的坎。
目前,基于静态分析的代码安全审计主要和企业安全开发流程相结合,内嵌于软件开发流程为企业提供安全保障。由于技术自身特点,基于代码缺陷特征值的静态检测的检测结果中安全缺陷误报率较高。同时由于软件开发中代码数量的日趋增长以及DevOps等新型开发模式的引入,企业对于开发迭代速度的要求逐步提高,误报率较高的问题成为制约代码安全审计推广和应用的一大阻碍。另外扫描代码的时间消耗也是现阶段的一个重点问题,业务代码量大时的扫描时间会长达几十个小时,造成项目上线时间被延后。
目前的代码审计技术分为静态代码检测技术与动态代码检测技术。静态检测技术涉及的主要方法包括静态分析和程序验证。其利用二进制比对技术(Binary Contrast)、词法分析(Lexical Analysis)、形式化验证技术或者手工测试技术,对被测软件的源程序或二进制代码进行扫描,然后从语法、语义上理解程序的行为,分析程序的特征,找出可能导致程序异常的漏洞。该技术具有简单高效自动化的优势,缺点是仅对代码本身的特征进行检查,对漏洞间复杂的逻辑关联检测力弱,存在大量的误报和漏报。
发明内容
本发明的目的是为了解决现有技术中存在的缺点,而提出一种静态代码安全检查方法,基于github所推出的工具CodeQL,完成各类代码的安全扫描规则编写优化,并将其封装于本发明程序中,以方便测试人员使用。
为了实现上述目的,本发明采用了如下技术方案:
一种静态代码安全检查方法,包括以下步骤:
S1、基于github所开发的CodeQL引擎,将可执行程序封装在CodeQL引擎的内部,并预留调用接口;
S2、通过调用模块与调用接口通讯,并且以Json格式提交toolOptions、skipPaths、openCheckers、whitePathList和scanPath参数;
S3、CodeQL引擎针对Json参数进行解析,完成初步配置;
S4、CodeQL引擎通过调用模块读取用户输入信息,自动获取CodeQL可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用CodeQL进行编译并创建代码快照数据库,否则省略编译步骤,在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,CodeQL引擎将根据规则对代码进行数据流分析及污点分析;
S5、扫描完成后输出扫描结果。
优选地,步骤S2中所述调用模块使用了python的os库进行编写,可以自动获取CodeQL环境变量,调用模块可以代码调用CodeQL的各个功能,包括生成代码快照数据库,更新代码快照数据库、调用规则对代码进行安全扫描等。
优选地,步骤S4中所述的规则模块中内置了大量扫描规则,覆盖各类编程语言,如cpp,csharp,go,java,javascript和python代码规则,覆盖多种漏洞,如XML注入,代码注入,反射型XSS和URL重定向。
优选地,所述CodeQL引擎的内部设置有规则编辑模块,支持用户对规则进行增删修改,方便用户根据具体使用场景做进一步优化。
优选地,所述toolOptions、skipPaths、openCheckers、whitePathList和scanPath,分别为CodeQL环境变量、过滤路径列表、规则列表、白名单和目标代码路径。
优选地,所述CodeQL代码扫描引擎,通过配置文件的修改输入可将命令行工具变得可视化。
本发明具有以下有益效果:
1、本发明基于Github所推出的CodeQL技术,编写规则并利用CodeQL分析引擎对,通过代码封装及规则封装让使用人员不必了解底层的规则编写以及底层调用即可使用CodeQL来进行代码安全扫描,通过Code Database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
2、本发明重点解决了如何通过基于CodeQL技术实现使用代码数据库存储数据流信息,封装规则实现代码安全自动化扫描的问题,降低了误报率,提高了代码安全扫描效率,并方便测试人员进行代码安全检查。
附图说明
图1为本发明实施例的静态代码安全检查方法中CodeQL引擎的执行步骤流程示意图;
图2为本发明实施例的CodeQL引擎的模块组成及其工作时的流程示意图;
图3为本发明实施例CodeQL引擎的工作流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
在本发明的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
参见附图1-3,本发明提供的静态代码安全检查方法,其包括如下步骤:
S1、基于github所开发的CodeQL引擎,将可执行程序封装在CodeQL引擎的内部,并预留调用接口;
S2、通过调用模块与调用接口通讯,并且以Json格式提交toolOptions、skipPaths、openCheckers、whitePathList和scanPath参数;
S3、CodeQL引擎针对Json参数进行解析,完成初步配置;
S4、CodeQL引擎通过调用模块读取用户输入信息,自动获取CodeQL可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用CodeQL进行编译并创建代码快照数据库,否则省略编译步骤,在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,CodeQL引擎将根据规则对代码进行数据流分析及污点分析;
S5、扫描完成后输出扫描结果。
本发明的主要技术构思是:基于CodeQL技术实现构造一个.QL概念的白盒扫描方案,将引擎的实现和规则开发,使用者分割开来。流分析,污点分析等数据流相关的分析由引擎以及引擎的开发者来完成,而使用者只需要关注规则的编写即可,将精力专注于扫描规则的完善及优化上。
本发明方法使用的模块,包括调用模块、规则模块、以及CodeQL引擎模块,其中调用模块使用了python的os库进行编写,可以自动获取CodeQL环境变量,并根据用户输入信息进行扫描项目配置。调用模块可以代码调用CodeQL的各个功能,包括生成代码快照数据库,更新代码快照数据库、调用规则对代码进行安全扫描等。另外还设有过滤路径列表,规则列表,白名单列表等参数,方便使用人员个性化调用。
规则模块为代码安全扫描的符合CodeQL引擎的规则。CodeQL的一个关键特性是,它可以帮助我们跟踪数据在程序中的流动情况,规则模块中存有数百条规则,在扫描过程中会根据目标程序的语言来调用不同规则进行代码静态分析,对代码进行数据流分析及污点分析,查找代码中的漏洞。在规则模块中内置了大量扫描规则,覆盖各类编程语言,如cpp,csharp,go,java,javascript,python。覆盖多种漏洞,如XML注入,代码注入,反射型XSS,URL重定向等。同时支持用户对规则进行增删修改,方便用户根据具体使用场景做进一步优化。
本发明技术方案基于github所推出的CodeQL,将CodeQL的可执行程序进行封装并且开发了调用模块进行调用,通过调用规则模块中的漏洞扫描规则对目标代码进行安全扫描。在扫描开始前首先需要用户以Json格式输入相关信息,包括以下内容:
toolOptions:CodeQL环境变量
skipPaths:过滤路径列表
openCheckers:规则列表
whitePathList:白名单
scanPath:目标代码路径
之后本工具将对用户所输入json进行解析,完成初步配置。通过调用模块读取用户输入信息,自动获取CodeQL可执行程序环境变量,读取json信息获得目标程序的语言类型,判断是否需要编译,如果是需要编译的编程语言,则读取json中的buildscript参数,调用CodeQL进行编译并创建代码快照数据库,否则省略编译步骤。在完成代码快照数据库后,调用模块将会根据编程语言类型调用规则模块中的相应规则,多线程地对目标代码进行扫描,扫描过程中,CodeQL引擎将根据规则对代码进行数据流分析及污点分析,扫描完成后输出扫描结果。
本发明通过Code Database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
另外,本方案主要针对代码安全自动化扫描领域,通过代码封装及规则封装让使用人员不必了解底层的规则编写以及底层调用即可使用CodeQL来进行代码安全扫描。
本发明重点是解决了如何通过基于CodeQL技术实现使用代码数据库存储数据流信息,封装规则实现代码安全自动化扫描的技术问题,降低误报率,提高代码安全扫描效率,方便测试人员进行代码安全检查。本发明是基于通过CodeQL技术实现构造一个.QL概念的白盒扫描方案,将引擎的实现和规则开发与使用者分割开来,使用者只需要将精力专注于扫描规则的完善及优化上,通过Code Database技术可以定位到具体是第几行代码存在漏洞,有清晰的数据流,便于使用人员进行分析研究。
本发明提供的方案中关键技术特征为:
1、对CodeQL的代码封装,通过配置文件的修改输入来调用CodeQL代码扫描引擎,将命令行工具变得可视化。
2、通过规则封装将常见漏洞如SQL注入,XSS,SSRF,命令执行等漏洞的检测规则封装到该装置中,方便使用人员直接调用。
3、将装置使用、规则开发与扫描引擎三者分离,使用人员可只关注装置使用,规则开发者可只专注规则优化,方便人员分工配置。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

Claims (6)

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代码扫描引擎,通过配置文件的修改输入可将命令行工具变得可视化。
CN202210377876.2A 2022-04-12 2022-04-12 一种静态代码安全检查方法 Pending CN114707155A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210377876.2A CN114707155A (zh) 2022-04-12 2022-04-12 一种静态代码安全检查方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210377876.2A CN114707155A (zh) 2022-04-12 2022-04-12 一种静态代码安全检查方法

Publications (1)

Publication Number Publication Date
CN114707155A true CN114707155A (zh) 2022-07-05

Family

ID=82172523

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210377876.2A Pending CN114707155A (zh) 2022-04-12 2022-04-12 一种静态代码安全检查方法

Country Status (1)

Country Link
CN (1) CN114707155A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220329616A1 (en) * 2017-11-27 2022-10-13 Lacework, Inc. Using static analysis for vulnerability detection

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置
CN111309589A (zh) * 2019-11-29 2020-06-19 中国电力科学研究院有限公司 一种基于代码动态分析的代码安全扫描系统及方法
CN113709187A (zh) * 2021-10-25 2021-11-26 深圳市信润富联数字科技有限公司 多服务器的数据请求方法、装置、设备及存储介质
CN114153721A (zh) * 2021-11-16 2022-03-08 大连理工大学 一种基于决策树算法的api误用检测方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置
CN111309589A (zh) * 2019-11-29 2020-06-19 中国电力科学研究院有限公司 一种基于代码动态分析的代码安全扫描系统及方法
CN113709187A (zh) * 2021-10-25 2021-11-26 深圳市信润富联数字科技有限公司 多服务器的数据请求方法、装置、设备及存储介质
CN114153721A (zh) * 2021-11-16 2022-03-08 大连理工大学 一种基于决策树算法的api误用检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
FREEBUF网络安全行业门户: "CodeQL从入门到放弃", pages 1 - 3, Retrieved from the Internet <URL:https://www.freebuf.com/articles/web/283795.html> *
MILKII0: "CodeQL for VSCode搭建流程", pages 2, Retrieved from the Internet <URL:https://www.anquanke.com/post/id/266823> *
绿盟科技研究通讯: "CodeQL漏洞挖掘实战", Retrieved from the Internet <URL:https://cloud.tencent.com/developer/article/1645870> *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220329616A1 (en) * 2017-11-27 2022-10-13 Lacework, Inc. Using static analysis for vulnerability detection

Similar Documents

Publication Publication Date Title
JP5042315B2 (ja) ソースコード内のセキュリティ脆弱性の検出
CN108614707B (zh) 静态代码检查方法、装置、存储介质和计算机设备
CN106203113B (zh) 安卓应用文件的隐私泄露监控方法
CN105550594B (zh) 安卓应用文件的安全性检测方法
Felty et al. Feature specification and automated conflict detection
US6944848B2 (en) Technique using persistent foci for finite state machine based software test generation
CN101377759A (zh) 自动化界面测试系统
CN112799937B (zh) 基于GitHub自动化检测Maven项目中依赖冲突问题的方法
CN111694746A (zh) 面向编译型语言AS3的Flash缺陷模糊测评工具
CN112256271B (zh) 一种基于静态分析的区块链智能合约安全检测系统
CN105653946A (zh) 基于组合事件行为触发的Android恶意行为检测系统及其检测方法
Zhang et al. Aspect Composition in the Motorola Aspect-Oriented Modeling Weaver.
Miller et al. A case study in model‐based testing of specifications and implementations
CN111737697B (zh) 一种基于原子化功能的安全扫描系统及扫描方法
CN114707155A (zh) 一种静态代码安全检查方法
CN115495745B (zh) 一种基于风险函数的工业软件源代码静态检测方法及系统
CN111752841A (zh) 单测模拟方法、装置、设备与计算机可读存储介质
Gao et al. A systematic regression testing method and tool for software components
Jain et al. Sniffdroid: Detection of inter-app privacy leaks in android
Huang An empirical study on real bug fixes in smart contracts projects
Zheng In regression testing selection when source code is not available
CN112632546A (zh) 广电行业自动化代码分析方法
Mahmood et al. Automated refactorings in Java using IntelliJ IDEA to extract and propogate constants
Xiao et al. Performing high efficiency source code static analysis with intelligent extensions
CN109308256A (zh) 一种java程序动态分析方法、设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination