本发明涉及网络安全,具体而言,涉及一种基于代码疫苗iast探针的应用拓扑构建方法及装置。
背景技术:
1、随着应用程序不断增多,以及应用程序的功能不断丰富,浏览器等应用服务器从任一应用程序获取的请求可能会在多个服务间调用与流转,而各个服务间的调用关系通常较为复杂,需要等待各个服务协同处理请求后才返回响应。
2、代码疫苗技术是通过像疫苗一样将代码安全能力注入到应用服务器内部,在内部清晰看到解析后的流量,感知应用程序运行过程的情境上下文,能实现在应用程序运行时诊断应用程序自身存在的漏洞位置和缺陷成因,实现自主检测和响应,积极防御外部危险。其中,代码疫苗技术包括iast(interactive application security testing,交互式应用安全测试)技术。
3、但当在请求-响应处理过程中检测到至少一个节点存在漏洞时,传统的iast工具仅能基于单服务追踪该节点的污点传播路径,使得工作人员不能直观查看外部输入的污点在到达该节点之前经过的所有服务节点、污点在所有服务节点之间的调用关系、污点在各个服务节点内部的传播路径等信息,从而无法高效地进行漏洞分析。
技术实现思路
1、本发明实施例的目的在于提供一种基于代码疫苗iast探针的应用拓扑构建方法及装置,用以实现向用户提供被测程序最新的应用拓扑图,提高漏洞分析效率的技术效果。
2、第一方面,本发明实施例提供一种基于代码疫苗iast探针的应用拓扑构建方法,包括:
3、在被测程序中安装探针,通过所述探针进行预插桩;
4、当监听到请求获取事件时,根据请求在所述被测程序的应用拓扑图中创建初始节点;
5、当监听到所述请求的服务调用事件时,在所述初始节点的下游创建调用节点;
6、当检测到所述调用节点存在漏洞时,在所述调用节点下创建漏洞节点;
7、根据所述漏洞的利用状态选择是否对所述漏洞节点添加威胁标记,得到更新的应用拓扑图。
8、在上述实现过程中,通过在监听到请求获取事件时,根据请求在被测程序的应用拓扑图中创建初始节点,在监听到请求的服务调用事件时,在请求对应的初始节点的下游创建调用节点,并在存在漏洞的调用节点下创建漏洞节点,根据漏洞的利用状态选择是否对漏洞节点添加威胁标记,能够向用户提供被测程序最新的应用拓扑图,提高漏洞分析效率。
9、进一步地,所述通过所述探针进行预插桩,具体包括:
10、通过所述探针对所述被测程序中的请求函数进行预插桩,以监听所述请求获取事件;
11、通过所述探针对所述被测程序中的跨度调用服务触发函数进行预插桩,以监听所述请求的服务调用事件;
12、通过所述探针对所述调用节点对应的被调用服务内的污点源函数、污点传播函数和污点汇聚函数进行预插桩,以截取所述被调用服务的污点信息。
13、在上述实现过程中,通过利用被测程序中的探针对请求函数、跨度调用服务触发函数,以及各个调用节点对应的被调用服务内的污点源函数、污点传播函数和污点汇聚函数进行预插桩,能够保证在被测程序运行过程中实时监听请求获取事件、请求的服务调用事件和截取各个被调用服务的污点信息。
14、进一步地,所述当监听到所述请求的服务调用事件时,在所述初始节点的下游创建调用节点,具体包括:
15、当监听到所述请求的服务调用事件时,获取本次服务调用信息,并判断所述本次服务调用信息是否为直接调用信息;
16、若判定所述本次服务调用信息为直接调用信息,则在所述初始节点下创建所述调用节点;
17、若判定所述本次服务调用信息不为直接调用信息,则根据所述本次服务调用信息定位上级调用节点,在所述上级调用节点下创建所述调用节点。
18、在上述实现过程中,通过当监听到请求的服务调用事件时,根据本次服务调用信息的类型来确定调用节点在应用拓扑图中的创建位置,能够保证在被测程序的应用拓扑图中准确创建调用节点。
19、进一步地,所述获取本次服务调用信息,具体包括:
20、根据所述请求的服务调用事件,确定本次被调用服务;
21、从所述本次被调用服务获取本次服务调用信息;
22、其中,所述本次服务调用信息包括所述本次被调用服务接收的所述请求的请求包和所述请求在所述本次被调用服务的跨度标识码;所述请求的请求包中添加有所述请求的跟踪标识码,或者所述请求的请求包中添加有所述请求的跟踪标识码和所述请求在上次被调用服务的跨度标识码。
23、在上述实现过程中,通过当监控到请求的服务调用事件时,从本次被调用服务获取本次服务调用信息,能够保证快速准确地获取本次服务调用信息。
24、进一步地,所述判断所述本次服务调用信息是否为直接调用信息,具体包括:
25、解析所述本次服务调用信息;
26、若所述本次服务调用信息中没有所述请求在上次被调用服务的跨度标识码,则判定所述本次服务调用信息为直接调用信息;
27、若所述本次服务调用信息中有所述请求在上次被调用服务的跨度标识码,则判定所述本次服务调用信息不为直接调用信息。
28、在上述实现过程中,通过解析本次服务调用信息中有无请求在上次被调用服务的跨度标识码来判断本次服务调用信息的类型,进而确定调用节点在应用拓扑图中的创建位置,能够保证在被测程序的应用拓扑图中准确创建调用节点。
29、进一步地,所述根据所述本次服务调用信息定位上级调用节点,具体包括:
30、根据所述本次服务调用信息中的所述请求在上次被调用服务的跨度标识码,确定所述上次被调用服务;
31、基于当前的应用拓扑图,将所述上次被调用服务对应的调用节点作为所述上级调用节点。
32、在上述实现过程中,通过在请求间接调用本次被调用服务的情况下,根据本次服务调用信息确定上次被调用服务,将应用拓扑图中上次被调用服务对应的调用节点作为上级调用节点,能够保证在被测程序的应用拓扑图中准确定位上级调用节点。
33、进一步地,所述当监听到所述请求的服务调用事件时,在所述初始节点的下游创建调用节点,具体还包括:
34、将所述本次服务调用信息和本次服务应用信息作为所述调用节点的节点信息。
35、在上述实现过程中,通过将本次服务调用信息和本次服务应用信息作为调用节点的节点信息,能够丰富被测程序的应用拓扑图中的展示信息。
36、进一步地,在所述当检测到所述调用节点存在漏洞时,在所述调用节点下创建漏洞节点之前,还包括:
37、根据所述调用节点对应的被调用服务的污点信息,检测所述调用节点是否存在漏洞。
38、在上述实现过程中,通过根据调用节点对应的被调用服务的污点信息,检测调用节点是否存在漏洞,能够保证实时准确地对调用节点进行漏洞检测。
39、进一步地,所述根据所述调用节点对应的被调用服务的污点信息,检测所述调用节点是否存在漏洞,具体包括:
40、将所述被调用服务内污点源函数的参数的哈希值存储在所述被调用服务的污点池中;
41、继续判断所述被调用服务的污点池中是否有所述被调用服务内污点传播函数的参数的哈希值;
42、若有,则将所述被调用服务内污点传播函数的返回值的哈希值存储在所述被调用服务的污点池中;
43、继续判断所述被调用服务的污点池中是否有所述被调用服务内污点汇聚函数的参数的哈希值;
44、若有,则判定所述调用节点存在漏洞。
45、在上述实现过程中,通过基于被调用服务的污点池对调用节点进行漏洞检测,能够提高漏洞检测效率。
46、进一步地,所述当检测到所述调用节点存在漏洞时,在所述调用节点下创建漏洞节点,具体还包括:
47、将所述漏洞的漏洞信息作为所述漏洞节点的节点信息。
48、在上述实现过程中,通过将漏洞信息作为漏洞节点的节点信息,能够丰富被测程序的应用拓扑图中的展示信息。
49、进一步地,所述根据所述漏洞的利用状态选择是否对所述漏洞节点添加威胁标记,得到更新的应用拓扑图,具体包括:
50、基于当前的应用拓扑图,判断所述漏洞节点的所有上游节点中是否有所述初始节点;
51、若有,则确定所述漏洞的利用状态为外部可利用状态,对所述漏洞节点添加所述威胁标记,得到所述更新的应用拓扑图。
52、在上述实现过程中,通过基于当前的应用拓扑图查找漏洞节点的所有上游节点,根据漏洞节点的所有上游节点中有无初始节点来选择是否对漏洞节点添加威胁标记,能够保证在应用拓扑图中准确标记与外部可利用漏洞对应的漏洞节点。
53、第二方面,本发明实施例提供一种基于代码疫苗iast探针的应用拓扑构建装置,包括:
54、探针预插桩模块,用于在被测程序中安装探针,通过所述探针进行预插桩;
55、初始节点创建模块,用于当监听到请求获取事件时,根据请求在所述被测程序的应用拓扑图中创建初始节点;
56、调用节点创建模块,用于当监听到所述请求的服务调用事件时,在所述初始节点的下游创建调用节点;
57、漏洞节点创建模块,用于当检测到所述调用节点存在漏洞时,在所述调用节点下创建漏洞节点;
58、拓扑图更新模块,用于根据所述漏洞的利用状态选择是否对所述漏洞节点添加威胁标记,得到更新的应用拓扑图。
59、第三方面,本发明实施例提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序;所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时实现如上所述的基于代码疫苗iast探针的应用拓扑构建方法。
60、第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上所述的基于代码疫苗iast探针的应用拓扑构建方法。