一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

源代码风险分析方法、装置、电子设备及存储介质与流程

2022-02-22 23:51:01 来源:中国专利 TAG:


1.本发明涉及信息安全技术领域,尤其涉及一种源代码风险分析方法、装置、电子设备及存储介质。


背景技术:

2.由于开发人员的技术水平和安全意识各不相同,导致开发的代码可能存在一些潜在的安全漏洞,攻击者可以通过渗透测试来找到这些漏洞,从而导致应用被攻击、服务器被入侵、数据被下载、业务受到影响等等问题。现有源代码风险分析方法通常存在误报,准确率较低,有改进的必要。


技术实现要素:

3.有鉴于此,本发明实施例提供一种准确率高的源代码风险分析方法、装置、电子设备及存储介质。
4.第一方面,本发明实施例提供一种源代码风险分析方法,包括:
5.获取待分析的目标源代码;
6.对所述目标源代码进行环境检测,得到目标环境检测信息,所述目标环境检测信息包括上下文信息、开发语言、引入的框架和第三方库、以及使用的sdk版本信息中的一个或多个;
7.根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测;
8.若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测;
9.输出风险分析报告。
10.结合第一方面,在第一方面的一种实施方式中,所述根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测,包括:
11.使用内容分析器中的正则规则对所述目标源代码进行检测。
12.结合第一方面,在第一方面的另一种实施方式中,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测,包括:
13.使用语法分析器梳理出所述目标源代码中存在的危害函数;
14.基于抽象语法树分析所述危害函数的入参是否可控来判断是否存在漏洞;
15.或者,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测,包括:
16.使用语法分析器梳理出所述目标源代码中存在的危害函数;
17.使用污点分析器对所述危害函数进行污点分析,定位产生风险的地方以及污点数据流向。
18.结合第一方面,在第一方面的再一种实施方式中,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测之后包括:
19.若存在漏洞,则利用第三方检测模块或插件对所述目标源代码进行检测。
20.结合第一方面,在第一方面的又一种实施方式中,所述输出风险分析报告之前还包括:
21.确定所述目标源代码中对存在的漏洞不存在修复规则。
22.第二方面,本发明实施例提供一种源代码风险分析装置,包括:
23.获取模块,用于获取待分析的目标源代码;
24.第一检测模块,用于对所述目标源代码进行环境检测,得到目标环境检测信息,所述目标环境检测信息包括上下文信息、开发语言、引入的框架和第三方库、以及使用的sdk版本信息中的一个或多个;
25.第二检测模块,用于根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测;
26.第三检测模块,用于若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测;
27.输出模块,用于输出风险分析报告。
28.结合第二方面,在第二方面的一种实施方式中,所述第二检测模块包括:
29.检测单元,用于使用内容分析器中的正则规则对所述目标源代码进行检测。
30.结合第二方面,在第二方面的另一种实施方式中,所述第三检测模块包括:
31.梳理单元,用于使用语法分析器梳理出所述目标源代码中存在的危害函数;
32.判断单元,用于基于抽象语法树分析所述危害函数的入参是否可控来判断是否存在漏洞;
33.或者,所述第三检测模块包括:
34.梳理单元,用于使用语法分析器梳理出所述目标源代码中存在的危害函数;
35.分析单元,用于使用污点分析器对所述危害函数进行污点分析,定位产生风险的地方以及污点数据流向。
36.结合第二方面,在第二方面的再一种实施方式中,所述装置还包括:
37.第四检测模块,用于若存在漏洞,则利用第三方检测模块或插件对所述目标源代码进行检测。
38.结合第二方面,在第二方面的又一种实施方式中,所述装置还包括:
39.确定模块,用于确定所述目标源代码中对存在的漏洞不存在修复规则。
40.第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一所述的方法。
41.第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以
实现前述任一所述的方法。
42.本发明实施例提供的源代码风险分析方法、装置、电子设备及存储介质,首先获取待分析的目标源代码,然后对所述目标源代码进行环境检测,得到目标环境检测信息,之后根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测,若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测,最后输出风险分析报告。这样,本发明实施例采用了二次分析的方式,其中第一次分析能够快速检测出可能存在的风险,之后采用了更为精细的第二次分析,不仅降低了误报,且提高准确率的同时增加了分析效率。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
44.图1为本发明的源代码风险分析方法实施例的流程示意图;
45.图2为本发明的源代码风险分析方法的逻辑原理示意图;
46.图3为本发明的源代码风险分析装置实施例的结构示意图;
47.图4为本发明的电子设备一个实施例的结构示意图。
具体实施方式
48.下面结合附图对本发明实施例进行详细描述。
49.应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
50.一方面,本发明实施例提供一种源代码风险分析方法,如图1所示,本实施例的方法可以包括:
51.步骤101:获取待分析的目标源代码;
52.本步骤中,目标源代码既可以以压缩包的形式提供,也可以以远程仓库地址的形式提供,对于前者,可以将压缩包解压后得到目标源代码,对于后者,可以从远程仓库中复制/克隆至本地从而得到目标源代码。在图2中,输入目标即为目标源代码,经过目标类型检测以及解包/克隆步骤后即得目标源代码,此时可以将目标源代码缓存至本地,以便于后续步骤检测使用。
53.由于可能需要对多个目标源代码进行分析,故可以针对每个目标源代码分别形成一个任务,将任务放在任务队列中,以逐一执行检测任务。
54.作为一种可选的实施例,所述获取待分析的目标源代码(步骤101)可以包括:
55.步骤1011:计算所述目标源代码的哈希值;
56.步骤1012:确定本地预先存储的任务记录中不存在相同的哈希值。
57.上述步骤1011-1022中,可以在本地保存任务记录,记录已经分析过的目标源代码
的哈希(hash)值。参考图2,每次有新目标源代码待分析时,可以先进行任务查询,如果发现此次待分析的目标源代码的哈希值已经存在,则说明曾经分析/检测过,故可直接调用之前的检测记录,转至输出报告步骤;如果不存在,则可将当前目标源代码的检测任务加入任务队列,等待后续处理。任务队列中可同时维护有任务信息,任务信息例如可以包括:任务id、分析目标、目标hash值、使用的分析器、任务状态、分析状态、任务加入时间、分析结果数据等。
58.步骤102:对所述目标源代码进行环境检测,得到目标环境检测信息,所述目标环境检测信息包括上下文信息(可通过对目标源代码目录进行上下文分析得到)、开发语言、引入的框架和第三方库、以及使用的sdk(软件开发工具包)版本信息中的一个或多个;
59.本步骤中,通过对目标环境进行检测,方便后续步骤加载对应的分析规则,该规则可支持自定义和扩展。当前的风险规则包括但不限于xss、sql注入、csrf、错误的配置、服务端伪造、硬编码密码、xpath注入、ldap注入、xml实体注入、文件包含漏洞、代码注入、命令注入、信息泄露、不安全随机数、未验证跳转、反序列化漏洞、废弃的函数、逻辑错误、不安全的函数、不安全的加密、空指针引用、webshell、android漏洞、ios漏洞、引用了存在漏洞的三方。在图2中,本步骤是在获取任务后执行,图2中暂未示出。
60.步骤103:根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测;
61.本发明实施例能够自动识别目标项目编程语言和依赖环境,加载相应的风险规则库,以目标环境检测信息中的开发语言为例,不同语言(c、java、python等)的写法规则不同,可以由此预先构建对应的规则库。
62.本步骤中,先利用内容分析器对目标源代码进行初次判定,该判定方式效率高,但存在一定的误判,故仍需后续步骤进行纠正。本步骤具体可以使用内容分析器中的正则规则来直接进行匹配,比如硬编码密码、错误的配置等,该方式适用于对于一些特征较为明显的风险。也就是说,所述根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测(步骤103),可以包括:使用内容分析器中的正则规则对所述目标源代码进行检测。
63.当利用内容分析器对目标源代码进行判定为安全时,则说明目标源代码不存在漏洞,可以跳过后续所有步骤,或是直接转至最后一步输出报告以告知目标源代码安全;当利用内容分析器对目标源代码进行判定为风险时,则说明目标源代码存在漏洞,此时为避免误判,需要执行后续步骤以进行进一步检测。在图2中,本步骤对应“获取任务”之后的“检测规则加载”和“正则匹配初次判定”。
64.步骤104:若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测;
65.若前一步骤利用内容分析器对目标源代码进行初次判定为存在风险时,执行本步骤。本步骤中,根据目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对目标源代码进行检测。在图2中,本步骤对应“获取任务”之后的“检测规则加载”和“语法分析、污点分析、二次判定”。
66.作为一种可选的实施例,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行
检测(步骤104),可以包括:
67.步骤1041:使用语法分析器梳理出所述目标源代码中存在的危害函数;
68.步骤1042:基于抽象语法树分析所述危害函数的入参是否可控来判断是否存在漏洞;
69.上述步骤1041-1042中,对于规则中定义的风险类型,可以使用语法分析器,先通过预先梳理能造成危害的函数,并定位代码中所有出现该危害函数的地方,继而基于ast(abstract syntax tree,抽象语法树),分析危害函数的入参是否可控来判断是否存在漏洞。
70.由此,本发明实施例实现了基于源代码的风险分析的多种分析手段和技术,其中包含了内容分析、语法和语义分析、控制流分析,该分析技术主要分析源码中存在的风险函数调用、信息泄露、代码执行逻辑等问题。
71.作为另一种可选的实施例,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测(步骤104),可以包括:
72.步骤1041’:使用语法分析器梳理出所述目标源代码中存在的危害函数;
73.步骤1042’:使用污点分析器对所述危害函数进行污点分析,定位产生风险的地方以及污点数据流向。
74.上述步骤1041
’‑
1042’中,对于更深层次的风险函数则可以使用污点分析器进行污点分析,精确定位产生风险的地方以及污点数据流向。
75.本实施例利用污点分析技术,用于检测更深层次的风险类型。污点分析可以抽象成一个三元组《sources,sinks,sanitizers》的形式,其中source即污点源,代表直接引入不受信任的数据或者机密数据到系统中;sink即污点汇聚点,代表直接产生安全敏感操作(违反数据完整性)或者泄露隐私数据到外界(违反数据保密性);sanitizer即无害处理,代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害。污点分析就是分析程序中由污点源引入的数据是否能够不经无害处理,而直接传播到污点汇聚点。如果不能,说明系统是信息流安全的,否则,说明系统产生了隐私数据泄露或危险数据操作等安全问题。
76.步骤105:输出风险分析报告。
77.本步骤中,可以将分析结果渲染成易于查看的分析报告页面,使用者可以直接查看该页面了解项目的扫描结果,该页面中可以包括项目的基本信息、风险分类和占比图、详细的风险点以及相应的解决方案。本步骤中,还可以进行原始数据的导出,用于开发人员进行查看,也可以进行标准的pdf文档的导出,用于使用人员查看。本发明实施例能够自动的为开发人员提供详细的分析报告,避免了人工介入浪费时间成本。在图2中,本步骤对应“输出报告”。
78.作为一种可选的实施例,所述若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测(步骤104)之后、输出风险分析报告(步骤105)之前,可以包括:
79.步骤104’:若存在漏洞,则利用第三方检测模块或插件对所述目标源代码进行检测。
80.前述步骤104中,若判定为安全时,则说明目标源代码不存在漏洞(步骤103中为误判),可以跳过后续所有步骤,或是直接转至最后一步输出报告以告知目标源代码安全;若判定为风险时,则说明目标源代码存在漏洞,此时为提高判断的准确性,还可以执行本步骤104’以进行进一步检测。在图2中,本步骤104’对应“第三方检测模块或插件”。
81.作为另一种可选的实施例,所述输出风险分析报告(步骤105)之前还可以包括:
82.步骤1050:确定所述目标源代码中对存在的漏洞不存在修复规则。
83.有些目标源代码可能已经预先发现其中存在漏洞并进行了修补(例如带有补丁包等),针对该情况,为降低误判,本步骤中可以对目标源代码进行判断是否存在如补丁包之类的修复规则,若存在,则说明漏洞已修复,可以跳过后续步骤,或是直接转至最后一步输出报告以告知目标源代码安全;若不存在,则说明漏洞未修复,可执行输出风险分析报告步骤。在图2中,本步骤对应“修复规则判定”。
84.本发明实施例提供的源代码风险分析方法,首先获取待分析的目标源代码,然后对所述目标源代码进行环境检测,得到目标环境检测信息,之后根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测,若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测,最后输出风险分析报告。这样,本发明实施例采用了二次分析的方式,其中第一次分析能够快速检测出可能存在的风险,之后采用了更为精细的第二次分析,不仅降低了误报,且提高准确率的同时增加了分析效率。
85.本发明实施例通过对源代码的函数调用、参数的输入和输出、预期行为进行分析,对其可能存在的风险进行定位,同时对数据流进行污点追踪,以精确获取其风险传播路径,一方面能够自动检测项目编程语言和环境加载相应的规则,另一方面集成了丰富的分析器且支持用户自定义分析器,再一方面还提高了源代码风险分析的效率和准确性。
86.下面采用一个具体的例子对本发明图1-2所示方法实施例的应用进行说明。
87.securibench-micro是一个开源项目,里边包含了一系列的安全漏洞,用来专门测试静态检测框架能力,采用本发明图1-2所示方法实施例对该开源项目进行风险扫描,能够详细的检测出该项目包含的风险(如下表1所示),具有较高的检测准确率和分析效率。
88.表1
89.风险类型数量sql injection(sql注入)6open redirect(开放式重定向)4path manipulation(路径篡改)14xss(跨站脚本攻击)136hardcoded password(硬编码密码)3path traversal(路径遍历)3information exposure(信息泄露)8poor logging practice(日志技术欠佳)15insecure randomness(不安全随机数)6null dereference(空指针引用)1insecure components(不安全组件)1
deprecated function(废弃的函数)4
90.另一方面,本发明实施例提供一种源代码风险分析装置,如图3所示,该装置可以包括:
91.获取模块11,用于获取待分析的目标源代码;
92.第一检测模块12,用于对所述目标源代码进行环境检测,得到目标环境检测信息,所述目标环境检测信息包括上下文信息、开发语言、引入的框架和第三方库、以及使用的sdk版本信息中的一个或多个;
93.第二检测模块13,用于根据所述目标环境检测信息,利用具有对应规则库的内容分析器对所述目标源代码进行检测;
94.第三检测模块14,用于若存在漏洞,则根据所述目标环境检测信息,利用具有对应规则库的语法分析器、污点分析器和/或用户自定义分析器对所述目标源代码进行检测;
95.输出模块15,用于输出风险分析报告。
96.本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
97.优选的,所述第二检测模块13包括:
98.检测单元,用于使用内容分析器中的正则规则对所述目标源代码进行检测。
99.优选的,所述第三检测模块14包括:
100.梳理单元,用于使用语法分析器梳理出所述目标源代码中存在的危害函数;
101.判断单元,用于基于抽象语法树分析所述危害函数的入参是否可控来判断是否存在漏洞;
102.或者,所述第三检测模块14包括:
103.梳理单元,用于使用语法分析器梳理出所述目标源代码中存在的危害函数;
104.分析单元,用于使用污点分析器对所述危害函数进行污点分析,定位产生风险的地方以及污点数据流向。
105.优选的,所述源代码风险分析装置还包括:
106.第四检测模块,用于若存在漏洞,则利用第三方检测模块或插件对所述目标源代码进行检测。
107.优选的,所述源代码风险分析装置还包括:
108.确定模块,用于确定所述目标源代码中对存在的漏洞不存在修复规则。
109.本发明实施例还提供一种电子设备,图4为本发明电子设备一个实施例的结构示意图,可以实现本发明图1所示实施例的流程,如图4所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一方法实施例所述的方法。
110.处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1所示实施例的描述,在此不再赘述。
111.该电子设备以多种形式存在,包括但不限于:
112.(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。
113.(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。
114.(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
115.(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
116.(5)其他具有数据交互功能的电子设备。
117.本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一方法实施例所述的方法步骤。
118.本发明的实施例还提供一种应用程序,所述应用程序被执行以实现本发明任一方法实施例提供的方法。
119.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
120.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
121.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
122.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献