一种基于语义Sink到物理Sink映射的逻辑漏洞检测方法与流程

摘要: 本发明涉及网络安全,尤其涉及一种基于语义sink到物理sink映射的逻辑漏洞检测方法。背景技术:1、在软件开发过程中,对源代码进行自动化审计是发现安全漏洞、保障...
一种基于语义Sink到物理Sink映射的逻辑漏洞检测方法与流程

本发明涉及网络安全,尤其涉及一种基于语义sink到物理sink映射的逻辑漏洞检测方法。

背景技术:

1、在软件开发过程中,对源代码进行自动化审计是发现安全漏洞、保障软件安全性的重要手段。随着软件规模持续增长,源代码复杂度不断提升,亟需通过自动化代码审计提升漏洞检测的效率与覆盖率。

2、现有自动化代码审计普遍采用污点分析技术开展漏洞检测,该技术预先配置由危险函数构成的物理sink清单以及用户可控外部输入点清单,依托构建得到的代码数据流图与调用图,检索用户可控输入点通往危险函数的未经净化的可达路径,并将检索命中的路径作为漏洞进行告警输出。然而,上述方案在面对逻辑漏洞时存在以下问题:

3、1)污点分析的检测高度依赖预置的物理sink危险api清单,但逻辑漏洞的风险落点属于业务语义层面操作,不存在可枚举的固定危险api。即便已经得到完整数据流可达路径,会因为无法匹配清单条目,直接判定不存在漏洞,从而造成逻辑漏洞大量漏报。2)现有技术仅依靠函数签名匹配、数据流可达性完成漏洞判定,不具备业务上下文语义解析能力,无法研判拦截器实际覆盖范围、权限注解是否真正起到数据权限约束作用这类逻辑缺陷,导致判断失误。3)逻辑漏洞对应的敏感sink属于抽象业务概念,无法预先枚举录入清单,现有检测方案不能够自主识别业务安全测试点,难以实现逻辑漏洞的有效定位。

4、因此,亟需一种不依赖固定物理sink清单的逻辑漏洞检测方案,能够基于业务语义识别业务侧敏感操作点,实现对逻辑漏洞的有效识别与研判。

技术实现思路

1、针对现有技术中所存在的不足,本发明提供了一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其解决了现有技术对逻辑漏洞的检测易漏报、难以定位研判的问题。

2、根据本发明的实施例,一种基于语义sink到物理sink映射的逻辑漏洞检测方法,包括以下步骤:

3、s1:获取待检测项目源代码,进行预处理与架构探查,得到包含技术栈、框架类型、鉴权体系及入口形态的项目上下文;

4、s2:对所述项目上下文进行业务语义识别与动态逻辑sink识别,合并携带资源标识的接口、权限校验点及敏感操作点,生成语义sink列表;

5、s3:采用循环重试机制,对所述语义sink列表中的每个语义sink逐项派生,并一对多映射为对应的物理sink函数,将各映射结果聚合,生成含类名、方法名、位置、类型及危险等级的物理sink清单,以所述物理sink清单非空作为循环退出条件,若循环退出后物理sink清单非空则输出进s4,否则终止;

6、s4:对所述物理sink清单中每个物理sink进行反向调用追溯,逐层向上查找至顶层方法并判定参数是否源于外部输入,筛选用户可控入口路径,生成含入口标识及逐跳链路的链路清单;

7、s5:基于所述链路清单追踪数据流并补全缺失定义,逐环节研判权限校验、参数过滤及安全拦截缺失情况,生成包含漏洞类型、缺陷位置及验证流程的结构化漏洞检测结果。

8、进一步地,所述业务语义识别和动态逻辑sink识别由审计智能体基于项目业务功能执行:

9、识别出携带对象资源标识的接口、资源读写操作前的所有权校验点、拦截器白名单内敏感接口,识别结果进行合并,输出逐行存储单个业务安全测试点的文本格式的所述语义sink列表。

10、进一步地,所述语义sink列表经过拆分、去重、数量截断处理,采用逐项派生方式,对每一个语义sink独立执行物理sink映射;其中,单个语义sink映射得到一个或多个物理sink。

11、进一步地,所述循环重试机制配置的最大循环轮数为3,当所述物理sink清单产出非空时退出循环;若未产出所述物理sink清单,则重复执行映射操作,达到最大循环轮数时强制结束循环。

12、进一步地,循环重试结束后执行分支分流判断:

13、当所述物理sink清单非空时,执行对物理sink的反向调用追溯;

14、当所述物理sink清单为空时,直接跳转至漏洞归集输出。

15、进一步地,所述反向调用追溯采用逐行拆分并逐项并行处理的方式执行,其中,所述并行处理的最大并发度为3。

16、进一步地,所述反向调用追溯的具体过程为:

17、采用文本检索工具定位物理sink所在类、方法及行号,再逐层向上查找其调用者,直至到达无调用者的顶层方法;

18、对顶层方法判定其参数是否来自http请求、消息队列、rpc或文件上传等外部输入,以确定是否存在用户可控入口。

19、进一步地,对反向调用追溯失败的未链接成功物理sink,通过语义补偿推断,验证链路有效性,将补偿得到的有效链路并入所述链路清单。

20、进一步地,所述逐环节研判包括:

21、读取入口方法完整代码并提取参数来源;沿链路逐跳追踪数据流,对链路中缺失的中间方法或类,利用语言级定义解析工具检索其定义进行补全;

22、逐环节判断是否存在权限校验缺失、参数过滤缺失或安全拦截缺失,综合入口参数可控性、中间处理缺陷及sink敏感性,判定是否构成逻辑漏洞,并输出包含漏洞类型、缺陷位置、危险等级及验证流程的结构化检测结果。

23、进一步地,所述结构化检测结果中的缺陷位置取自链路最后一跳物理sink对应的代码位置;当检索不到有效代码位置时,填充预设占位标识。

24、本发明的技术原理为:本发明基于语义sink识别到物理sink映射的两阶段转换机制。首先通过审计智能体对项目上下文进行业务语义分析,识别出不可枚举的逻辑安全测试点,生成语义sink列表。采用循环重试与逐项派生机制,将每个语义sink映射为代码中真实存在的物理sink及其位置。对物理sink执行反向调用追溯,构建从用户可控入口至sink的完整调用链路。最后逐链路补全代码定义,逐环节研判权限校验、参数过滤及安全拦截的缺失情况,输出结构化检测结论。

25、相比于现有技术,本发明具有如下有益效果:

26、1、本发明采用审计智能体执行业务语义识别生成语义sink列表,再映射得到物理sink,不再依赖预置危险api清单,解决逻辑漏洞风险落点不存在可枚举固定危险api导致漏报的技术问题,实现业务层面敏感安全测试点的自主识别。

27、2、本发明补全链路缺失的代码定义,沿调用链路逐环节研判权限校验、参数过滤、安全拦截缺失情况,解决现有技术缺少业务上下文语义解析、无法识别权限类逻辑缺陷的技术问题,实现业务逻辑维度的漏洞研判。

28、3、本发明依托配置化流程编排引擎,保持动词节点序列与字段契约不变,仅替换底层执行工具,解决抽象业务敏感sink无法预先枚举、多语言检测重复开发工作量大的技术问题,实现上层业务流程跨编程语言复用。

1.一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:包括以下步骤:

2.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述业务语义识别和动态逻辑sink识别由审计智能体基于项目业务功能执行:

3.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述语义sink列表经过拆分、去重、数量截断处理,采用逐项派生方式,对每一个语义sink独立执行物理sink映射;其中,单个语义sink映射得到一个或多个物理sink。

4.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述循环重试机制配置的最大循环轮数为3,当所述物理sink清单产出非空时退出循环;若未产出所述物理sink清单,则重复执行映射操作,达到最大循环轮数时强制结束循环。

5.如权利要求4所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:循环重试结束后执行分支分流判断:

6.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述反向调用追溯采用逐行拆分并逐项并行处理的方式执行,其中,所述并行处理的最大并发度为3。

7.如权利要求6所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述反向调用追溯的具体过程为:

8.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:对反向调用追溯失败的未链接成功物理sink,通过语义补偿推断,验证链路有效性,将补偿得到的有效链路并入所述链路清单。

9.如权利要求1所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述逐环节研判包括:

10.如权利要求9所述的一种基于语义sink到物理sink映射的逻辑漏洞检测方法,其特征在于:所述结构化检测结果中的缺陷位置取自链路最后一跳物理sink对应的代码位置;当检索不到有效代码位置时,填充预设占位标识。