一种基于Golang语言的IAST安全测试方法和系统与流程


一种基于golang语言的iast安全测试方法和系统
技术领域
1.本发明涉及软件漏洞检测技术领域,特别涉及一种基于golang语言的iast安全测试方法和系统。


背景技术:

2.目前市场上软件测试方法主要有3种一种是dast(动态应用安全测试,黑盒),一种是sast(静态应用安全测试,白盒),另外一种是iast(交互式应用安全测试),现有技术中iast(交互式应用安全测试)的实现方案需基于字节码的插桩,该技术方案只实现方式适用于java语言,然而对于golang语言尚无iast的实现方式。


技术实现要素:

3.本发明其中一个发明目的在于提供一种基于golang语言的iast安全测试方法和系统,所述方法和系统通过修改go应用源码,并在go应用源码中编入iast安全测试逻辑,从而实现go应用可以实现iast功能。
4.本发明另一发明目的在于提供一种基于golang语言的iast安全测试方法和系统,所述方法和系统采用加载agent_tool解析go源码中的ast语法树,并在ast语法树指定位置位置中添加漏洞检测逻辑实现iast安全测试。
5.本发明另一发明目的在于提供一种基于golang语言的iast安全测试方法和系统,所述方法和系统在go应用启动时就运行编入iast安全测试逻辑,从而可以实现快速安全测试。
6.为了实现至少一个上述发明目的,本发明进一步提供一种基于golang语言的iast安全测试方法,所述方法包括:
7.获取应用golang源码,并在所述源码中添加编译参数;
8.解析所述源码,获取ast语法树;
9.在所述ast语法树中编入iast安全测试逻辑代码,生成修改后的golang源码;
10.将所述修改后的golang源码进行编译,生成执行文件;
11.启动应用,执行iast安全测试逻辑,所述执行文件收集应用的环境数据和第三方库数据,获取应用漏洞信息。
12.根据本发明其中一个较佳实施例,在述源码中添加toolexec编译参数,且在添加所述toolexec编译参数后加载agent_tool工具,通过所述agent_tool工具对所述golang源码进行分析,以获取所述ast语法树。
13.根据本发明另一个较佳实施例,在获取所述ast语法树后,在所述ast语法树的指定节点编入agent代码,所述agent代码包括iast安全测试逻辑,其中所述指定节点包括表达式类型节点、语句节点和声明节点中的任意至少一种。
14.根据本发明另一个较佳实施例,所述golang源码的分解析方法包括:
15.采用agent_tool工具中的词法分析器对源码进行词法分析,生成token;
16.采用agent_tool工具中的语法分析器检索所述token,进一步生成ast语法树。
17.根据本发明另一个较佳实施例,所述golang源码包括golang应用源码,第三方库golang源码和golang语言自身源码。
18.根据本发明另一个较佳实施例,在所述指定节点编入agent代码后,生成修改后的golang源码文件,并将所述修改后的源码文件存放在指定编译目录中。
19.根据本发明另一个较佳实施例,生成执行文件的方法包括:
20.调用go_build对所述修改后的golang源码文件进行编译;
21.生成包括agent代码的golang二进制执行文件。
22.根据本发明另一个较佳实施例,在启动应用后,所述agent代码执行漏洞检测,并将获取的的环境数据、第三方库数据和漏洞检测结果发送给iast服务端,用于展示漏洞检测结果。
23.根据本发明另一个较佳实施例,所述iast安全测试逻辑包括:
24.采用重放请求在原始请求中拼接payload字符;
25.检测sink点,并判断所述sink点是否存在payload字符;
26.若存在,则判断应用存在漏洞。
27.为了实现至少一个上述发明目的,本发明进一步提供一种基于golang语言的iast安全测试系统,所述系统执行上述一种基于golang语言的iast安全测试方法。
附图说明
28.图1显示的是本发明一种基于golang语言的iast安全测试方法一种流程示意图。
29.图2显示的是本发明一种基于golang语言的iast安全测试方法另一种流程示意图。
具体实施方式
30.以下描述用于揭露本发明以使本领域技术人员能够实现本发明。以下描述中的优选实施例只作为举例,本领域技术人员可以想到其他显而易见的变型。在以下描述中界定的本发明的基本原理可以应用于其他实施方案、变形方案、改进方案、等同方案以及没有背离本发明的精神和范围的其他技术方案。
31.可以理解的是,术语“一”应理解为“至少一”或“一个或多个”,即在一个实施例中,一个元件的数量可以为一个,而在另外的实施例中,该元件的数量可以为多个,术语“一”不能理解为对数量的限制。
32.请结合图1和图2,本发明提供了一种基于golang语言的iast安全测试方法流程示意图。所述方法通过修改golang源码来实现在golang应用中进行iast安全测试,因为iast安全测试的逻辑是植入到golang源码中,可以实现golang应用在启动时自动执行iast安全测试,自动检测应用的漏洞信息。
33.具体的,所述方法包括:首先需要获取golang应用数据,并在所述golang应用编译时加入特殊的指定参数,其中所述指定参数为toolexec编译参数,所述toolexec编译参数用于启动对应的工具,进一步根据所述toolexec编译参数加载agent_tool工具,所述agent_tool为代理工具,所述agent_tool工具在golang应用编译时解析所述应用的golang
源码,且所述golang源码包括golang应用源码,第三方库golang源码和golang语言自身源码,在解析所述golang源码后,获取ast语法树,并采用所述agent_tool工具在所述ast语法树的指定位置编入agent代码,其中编入的agent代码包括iast安全测试逻辑,需要说明的是所述指定位置将根据不同的预设规则和文件而不同,比如所述指定位置包括但不仅限于:os.open、fmt.fprintf。进一步采用所述agent_tool工具将编入所述agent代码的ast语法树编译生成新的golang源码文件,并将所述新的golang源码文件放入到指定的编译目录中,其中所述编译目录为所述agent_tool工具中gobuild运行的目录,其中所述指定编译目录包括但不仅限于c:\users\chen\appdata\local\temp\go

build389788622。并且将运行所述agent代码需要的配置文件保存在相同的指定编译目录中。
34.所述agent_tool工具将根据指定编译目录中的配置文件调用内部的golang原始编译指令(go build)对所述新的golang源码文件进行编译,生成带有agent指令逻辑的golang二进制可执行文件,进一步执行所述带有agent指令逻辑的golang二进制可执行文件,使得编入的agent代码可以运行。需要说明的是上述带有agent指令逻辑的golang二进制可执行文件在golang应用启动时运行,且当所述带有agent指令逻辑的golang二进制可执行文件运行时,编入的agent代码可以执行iast安全测试逻辑,golang应用启动后可以通过agent收集golang应用的环境信息以及golang应用所用到的第三方库,且将所述环境信息和第三方库上传到iast server端(iast服务端)。也就是说,当golang应用在启动时,可以和所述iast server端建立通讯链接,且通过自身的agent代码运行iast安全测试逻辑后,将所述golang应用中存在的安全漏洞可视化展现于iast server端。其中所述agent代码运行iast安全测试逻辑所检测的安全漏洞包括但不仅限于漏洞数据流、请求、代码位置信息和漏洞参数等安全漏洞。
35.值得一提的是,所述ast语法树的解析方法包括:
36.采用词法分析器(lexer)对golang源码(source code)进行词法分析,生成token,然后将生成的所述token传入到语法分析器中(parser),所述语法分析器将检索token生成最终的ast语法树。在所述ast语法树的指定位置编入agent代码。需要说明的是,所述ast语法树主要由3种类型的节点构成,所述节点分别为:表达式和类型节点(expressions and type nodes)、语句节点(statement nodes)和声明节点(declaration nodes)。在本发明中优选在所述语句节点开始位置编入带有iast安全测试逻辑的agent代码。
37.所述iast安全测试逻辑包括主动检测和被动检测,在本发明中,golang应用在启动时优选执行主动检测,其中所述主动检测方法包括如下步骤:通过重放请求在原始请求中拼接payload字符,检测sink点,并判断所述sink点是否包含payload字符,若存在payload字符,则说明在本次主动检测中的golang应用存在漏洞。其中所述sink点为iast安全测试的内置规则,所述sink点包括但不仅限于os.open、fmt.fprintf等函数。
38.特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分从网络上被下载和安装,和/或从可拆卸介质被安装。在该计算机程序被中央处理单元(cpu)执行时,执行本技术的方法中限定的上述功能。需要说明的是,本技术上述的计算机可读介质可以是计算机可读信号介质或者计算机
可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线段、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线段的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线段、电线段、光缆、rf等等,或者上述的任意合适的组合。
39.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
40.本领域的技术人员应理解,上述描述及附图中所示的本发明的实施例只作为举例而并不限制本发明,本发明的目的已经完整并有效地实现,本发明的功能及结构原理已在实施例中展示和说明,在没有背离所述原理下,本发明的实施方式可以有任何变形或修改。