基于GO语言的注入式污点数据跟踪方法、装置和电子装置与流程

文档序号:30789290发布日期:2022-07-16 09:23阅读:72来源:国知局
基于go语言的注入式污点数据跟踪方法、装置和电子装置
技术领域
:1.本技术涉及计算机
技术领域
:,特别是涉及一种基于go语言的注入式污点数据跟踪方法、装置、电子装置和存储介质。
背景技术
::2.目前市面上存在的基于go语言的污点跟踪技术主要采用了把污点跟踪的代码跟用户代码进行合并编译,然后运行编译后的程序进行监控,存在如下几点缺点。3.a)首先需要拥有用户代码才能进行编译处理,假如用户只有执行文件没有源码将无法进行漏洞检测。4.b)使用重新编译的方式意味着用户每一台在线的机子都需要重新进行编译部署,尤其是对于机器集群巨大的客户来说是一个非常不方便的事情,时间成本巨大。5.c)编译型的注入需要在用户代码中进行一定量的修改,也就意味着用户不需要使用的时候需要去删除修改源码中添加的部分,影响用户使用体验。6.因此目前的编译型污点跟踪技术在使用前的准备工作比较繁琐麻烦,影响用户的使用体验。7.针对相关技术中编译型污点跟踪技术存在的使用前准备工作比较繁琐麻烦,影响用户的使用体验的问题,目前还没有提出有效的解决方案。技术实现要素:8.在本实施例中提供了一种基于go语言的注入式污点数据跟踪方法、装置、电子装置和存储介质,以解决相关技术中编译型污点跟踪技术存在的使用前准备工作比较繁琐麻烦,影响用户的使用体验的问题。9.第一个方面,在本实施例中提供了一种基于go语言的注入式污点数据跟踪方法,所述方法包括:10.获取被检测应用的elf表,通过查询所述elf表获取被检测应用的构建信息,并从所述构建信息中获取用于构建所述被检测应用的方法函数的信息;11.根据所述方法函数的信息,通过预先注入至所述被检测应用中的预设函数结构,获取所述方法函数处理污点数据时的输入数据和输出数据;12.对获取到的所述方法函数的输入数据和输出数据进行标记;13.其中,被标记的各个所述方法函数的输入数据和输出数据用于形成漏洞链路。14.在其中的一些实施例中,所述获取被检测应用的elf表,通过查询所述elf表获取被检测应用的构建信息包括:15.将所述被检测应用的进程文件转化为字符类型以生成elf文件,其中所述elf文件中包括所述elf表,所述elf表中包含有所述被检测应用的构建信息;16.获取所述被检测应用的进程文件在内存中的虚拟地址和地址偏移量;17.根据所述虚拟地址获取所述构建信息在内存中的具体地址空间,结合所述地址偏移量获取所述被检测应用的构建信息。18.在其中的一些实施例中,所述获取所述被检测应用的进程文件在内存中的虚拟地址和地址偏移量包括:19.根据所述进程文件的进程名称,获取所述被检测应用所在的路径;20.基于所述被检测应用所在的路径,通过文件映射关系获取所述进程文件在内存中的虚拟地址和地址偏移量。21.在其中的一些实施例中,所述对获取到的所述方法函数的输入数据和输出数据进行标记之前还包括:22.对所述方法函数进行分类;其中所述方法函数的类型包括:第一类型、第二类型以及第三类型;所述第一类型的方法函数用于接收外部输入的污点数据、所述第二类型的方法函数用于传播污点数据,所述第三类型的方法函数用于触发漏洞。23.在其中的一些实施例中,所述预设函数结构包括数据标记函数和数据获取函数,所述方法函数的信息包括所述方法函数在内存中的地址;24.所述根据所述方法函数的信息,通过预先注入至所述被检测应用中的预设函数结构,获取所述方法函数处理污点数据时的输入数据和输出数据包括:25.根据所述方法函数在内存中的地址,通过数据获取函数进行寄存器地址替换操作,以使所述方法函数的输入数据和输出数据进入所述预设函数结构;26.通过所述数据标记函数对所述输出数据和所述输入数据进行标记和存储。27.在其中的一些实施例中,所述方法还包括:28.根据所述elf表获取所述被检测应用所调用接口的接口列表;29.其中,所述接口列表中包含有所述方法函数。30.在其中的一些实施例中,所述通过预先注入至所述被检测应用中的预设函数结构获取所述方法函数处理污点数据时的输入数据和输出数据包括:31.通过对比所述接口列表中的方法函数和预设函数列表中的方法函数,确定所述被检测应用中需要监测的方法函数;其中,所述预设函数列表中包括预设的需要监测的方法函数;32.通过所述预设函数结构获取所述被检测应用中需要监测的方法函数处理污点数据时的输入数据和输出数据。33.第二个方面,在本实施例中提供了一种基于go语言的注入式污点数据跟踪装置,所述装置包括:第一获取模块、第二获取模块和数据标记模块;34.所述第一获取模块用于获取被检测应用的elf表,通过查询所述elf表获取被检测应用的构建信息,并从所述构建信息中获取用于构建所述被检测应用的方法函数的信息;35.所述第二获取模块用于根据所述方法函数的信息,通过预先注入至所述被检测应用中的预设函数结构获取所述方法函数处理污点数据时的输入数据和输出数据;36.所述数据标记模块用于对获取到的所述方法函数的输入数据和输出数据进行标记;37.其中,被标记的各个所述方法函数的输入数据和输出数据用于形成漏洞链路。38.第三个方面,在本实施例中提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一个方面所述的基于go语言的注入式污点数据跟踪方法。39.第四个方面,在本实施例中提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一个方面所述的基于go语言的注入式污点数据跟踪方法。40.与现有技术相比,本技术中的污点跟踪技术从操作系统的角度入手,通过elf文件获取被检测应用的构建信息,构建信息中包含有方法函数信息,在此基础上采用相应的hook技术获取相应方法函数的输入数据和输出数据,最终实现污点跟踪分析。由于从操作系统的角度获取了方法函数信息,因此注入应用中的预设函数结构,不需要与应用的源代码一起进行编译,而是通过寄存器地址替换操作直接获取方法函数的输入和输出数据并标记,从而确定污点数据的传播链路。因此该污点数据跟踪方法可以直接作用在进程文件中,在应用程序的启动阶段,通过预设函数结构的动态注入,使其能够在不重新编译重启的情况下,获取污点数据的传播链路,并上报相应的漏洞信息。所以解决了现有技术中编译型污点跟踪技术存在的使用前准备工作比较繁琐麻烦,影响用户的使用体验的问题。41.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他特征、目的和优点更加简明易懂。附图说明42.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:43.图1是本实施例的一种基于go语言的注入式污点数据跟踪方法的终端的硬件结构框图。44.图2是本实施例的一种基于go语言的注入式污点数据跟踪方法的流程图。45.图3是本优选实施例的一种基于go语言的注入式污点数据跟踪方法的流程图。46.图4是本实施例的一种基于go语言的注入式污点数据跟踪装置的结构框图。具体实施方式47.为更清楚地理解本技术的目的、技术方案和优点,下面结合附图和实施例,对本技术进行了描述和说明。48.除另作定义外,本技术所涉及的技术术语或者科学术语应具有本技术所属
技术领域
:具备一般技能的人所理解的一般含义。在本技术中的“一”、“一个”、“一种”、“该”、“这些”等类似的词并不表示数量上的限制,它们可以是单数或者复数。在本技术中所涉及的术语“包括”、“包含”、“具有”及其任何变体,其目的是涵盖不排他的包含;例如,包含一系列步骤或模块(单元)的过程、方法和系统、产品或设备并未限定于列出的步骤或模块(单元),而可包括未列出的步骤或模块(单元),或者可包括这些过程、方法、产品或设备固有的其他步骤或模块(单元)。在本技术中所涉及的“连接”、“相连”、“耦接”等类似的词语并不限定于物理的或机械连接,而可以包括电气连接,无论是直接连接还是间接连接。在本技术中所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。通常情况下,字符“/”表示前后关联的对象是一种“或”的关系。在本技术中所涉及的术语“第一”、“第二”、“第三”等,只是对相似对象进行区分,并不代表针对对象的特定排序。49.在本实施例中提供的方法实施例可以在终端、计算机或者类似的运算装置中执行。比如在终端上运行,图1是本实施例的一种基于go语言的注入式污点数据跟踪方法的终端的硬件结构框图。如图1所示,终端可以包括一个或多个(图1中仅示出一个)处理器102和用于存储数据的存储器104,其中,处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置。上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限制。例如,终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示出的不同配置。50.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如在本实施例中的基于go语言的注入式污点数据跟踪方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。51.传输设备106用于经由一个网络接收或者发送数据。上述的网络包括终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。52.在本实施例中提供了一种基于go语言的注入式污点数据跟踪方法,图2是本实施例的一种基于go语言的注入式污点数据跟踪方法的流程图,如图2所示,该流程包括如下步骤:53.步骤s210,获取被检测应用的elf表,通过查询elf表获取被检测应用的构建信息,并从构建信息中获取用于构建被检测应用的方法函数的信息。54.具体的本步骤中,检测终端首先通过被检测应用的elf表,来获取被检测应用的构建信息,由于应用的构建信息中包含了构建应用的方法函数的信息,因此检测终端再从构建信息中获取用于构建被检测应用的方法函数以及方法函数的信息。55.其中,获取被检测应用的elf表,通过查询elf表获取被检测应用的构建信息包括:将被检测应用的进程文件转化为字符类型以生成elf文件,其中elf文件中包括elf表,elf表中包含有被检测应用的构建信息。elf在计算机科学中是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。然后获取被检测应用的进程文件在内存中的虚拟地址和地址偏移量;根据虚拟地址获取构建信息在内存中的具体地址空间,结合地址偏移量获取被检测应用的构建信息。进一步具体的,首先把进程所在的文件读取到内存中,转换成字符类型,去判断是否是一个elf的文件类型,若是则对其进行加载。应用的构建信息一般是存储在elf文件中,然后通过进程文件在内存中的虚拟地址,搜索去获得构建信息所在的具体地址空间,最后通过地址偏移量获取构建版本和具体详细的构建信息。56.示例性地,获取被检测应用的进程文件在内存中的虚拟地址和地址偏移量的步骤为:根据进程文件的进程名称,获取被检测应用所在的路径;基于被检测应用所在的路径,通过文件映射关系获取进程文件在内存中的虚拟地址和地址偏移量。具体的,通过进程名获取到进程的pid(进程的唯一标识),通过pid获取被检测应用所在的完整路径,然后根据该完整路径去读取/proc/{pid}/maps,这个文件显示的是进程所映射的内存区域和访问权限,然后从中去获取进程文件在内存中的虚拟地址的开始结束地址,读写权限,偏移量和映射所属节点号等,把这个数据存储在内存中。57.步骤s220,根据方法函数的信息,通过预先注入至被检测应用中的预设函数结构获取方法函数处理污点数据时的输入数据和输出数据。58.具体的本步骤中,检测终端预先在被检测应用中注入一段函数结构,然后这段函数结构利用方法函数的信息,获取方法函数的输入数据和输出数据。在一个具体的实例中,当用户启动代码项目,触发一条请求,从而开始进行漏洞检测,预设函数结构获取污点数据经过的方法函数的输入数据和输出数据。59.步骤s230,对获取到的方法函数的输入数据和输出数据进行标记;其中,被标记的各个方法函数的输入数据和输出数据用于形成漏洞链路。60.具体的本步骤中,检测终端对方法函数的输入数据和输出数据进行标记,如果污点数据到达漏洞触发函数时,则在线程中把上述数据进行整理形成一条完整的漏洞链路进行上报。即通过标记信息确定最初由外部输入的被污染数据,以及该被污染数据中间经过的所有方法函数。61.进一步具体的,预设函数结构包括数据标记函数和数据获取函数,方法函数的信息包括方法函数在内存中的地址;首先检测终端根据方法函数在内存中的地址,通过数据获取函数进行寄存器地址替换操作,以使方法函数的输入数据和输出数据进入预设函数结构;通过数据标记函数对输出数据和输入数据进行标记和存储。示例性地,数据获取函数可以为一段设置在函数结构中的内联汇编代码,其主要作用就是通过寄存器地址操作,在执行某个方法函数的时候获取对应的输入数据和输出数据,然后送到预设函数结构中;而数据标记函数可以是handle函数,用于对输入的数据进行标记和存储。示例性地,本实施例中采用hook(钩子)技术获取方法函数的输入输出数据。具体地可以通过寄存器地址替换操作获取,而寄存器地址替换操作是指修改寄存器中函数的索引地址。比如需要被监测的方法函数在内存中的地址是0x11,预设函数结构在内存中的地址是0x22,则这个被监测的方法函数的在寄存器中的索引地址是0x11,这时把该方法函数在寄存器中的索引地址改成0x22,这样与该方法函数有关的数据信息就会通过该索引地址进入预设函数结构中,然后就可以获取这个被监测的方法函数的输入输出数据。62.优选的,对获取到的方法函数的输入数据和输出数据进行标记之前还包括:对方法函数进行分类;其中方法函数的类型包括:第一类型、第二类型以及第三类型;第一类型的方法函数用于接收外部输入的污点数据、第二类型的方法函数用于传播污点数据,第三类型的方法函数用于触发漏洞。具体的,初始的外部输入的污点数据通过第一类型的方法函数进入被检测应用程序中,然后在第二类型的方法函数中进行传播,当其传播至第三类型的方法函数中时,说明被检测应用中存在漏洞,需要将该污点数据经过的方法函数进行整理,最终形成漏洞链路。63.需要特别说明的是,本方法应用在go语言环境下,目前的go语言环境下的污点追踪技术,主要是把污点跟踪的代码跟用户代码进行合并编译,然后运行编译后的程序进行监控,因此存在着相应的使用缺陷。本实施例中的污点跟踪技术用于golang应用程序的污点追踪分析,以解决现有技术中在golang语言环境下,需要将污点跟踪代码与用户代码合并编译导致使用不便的缺陷。64.而在本实施例中,通过上述步骤,提供了一种新的基于go语言的注入式污点数据跟踪方法,首先通过elf表获取被检测应用的构建信息,然后再从构建信息获取用于构建被检测应用的方法函数以及方法函数在内存中的地址,最后利用预先注入至被检测应用中的预设函数结构,通过寄存器地址替换操作获取方法函数处理污点数据时的输入数据和输出数据,并对相应的数据进行标记。这些被标记的数据便于后续确定链路漏洞。与现有技术相比,本实施例中的污点跟踪技术从操作系统的角度入手,通过elf文件获取被检测应用的构建信息,构建信息中包含有方法函数信息,在此基础上采用相应的hook技术获取相应方法函数的输入数据和输出数据,最终实现污点跟踪分析。由于从操作系统的角度获取了方法函数信息,因此注入应用中的预设函数结构,不需要与应用的源代码一起进行编译,而是直接通过寄存器地址替换操作直接获取方法函数的输入和输出数据并标记,从而确定污点数据的传播链路。因此该污点数据跟踪方法可以直接作用在进程文件中,在应用程序的启动阶段,通过预设函数结构的动态注入,使其能够在不重新编译重启的情况下,获取污点数据的传播链路,并上报相应的漏洞信息。所以解决了现有技术中编译型污点跟踪技术存在的使用前准备工作比较繁琐麻烦,影响用户的使用体验的问题。65.在其中的一些实施例中,该基于go语言的注入式污点数据跟踪方法还包括:根据elf表获取被检测应用所调用接口的接口列表;其中,接口列表中包含有方法函数。66.通过预设函数结构获取方法函数的输入数据和输出数据,并对输入数据和输出数据进行标记还包括:通过对比接口列表中的方法函数和预设函数列表中的方法函数,确定被检测应用中需要监测的方法函数;其中,预设函数列表中包含有预设的需要监测的方法函数;通过预设函数结构获取被检测应用中需要监测的方法函数的输入数据和输出数据。67.具体的在本实施例中,被检测应用的构建信息中还包括接口列表,通过elf文件中的信息获取该接口列表,接口列表中包含有方法函数。通过比较接口列表和预设函数列表,确定被检测应用中需要监测的方法函数,需要监测的方法函数是指这个方法函数的输入和输出数据需要被捕捉。因此通过该步骤,使得预设函数结构有针对性地获取需要监测的方法函数的输入和输出数据,从而降低不必要的消耗。68.下面通过优选实施例对本实施例进行描述和说明。69.图3是本优选实施例的一种基于go语言的注入式污点数据跟踪方法的流程图。如图3所示,该基于go语言的注入式污点数据跟踪方法包括如下步骤:70.步骤s310,通过进程名称获取被检测应用所在的路径,基于被检测应用所在的路径,再通过文件映射关系获取进程在内存中占用的虚拟地址空间和地址偏移量。71.具体的本步骤中,检测终端通过进程名获取进程的pid(进程的唯一标识),再通过pid获取被检测应用的完整路径,然后根据该路径去读取/proc/{pid}/maps,该文件显示进程所映射的内存区域和访问权限,再从中去获取虚拟地址的开始结束地址,读写权限,偏移量和映射所属节点号等,把这个数据存储在内存中。72.步骤s320,读取被检测应用的进程文件至内存中,并转换成字符类型,然后判断转化后的文件是否为elf文件,若是则对elf文件进行加载。73.具体的本步骤中,检测终端需要根据存储单元的不同位数采用不同方式加载elf文件,具体的根据32位或者64位进行不同方式加载,同时生成elf头;在加载过程中,把elf文件中的sections和segment进行分别加载。74.步骤s330,通过进程在内存中的虚拟地址和地址偏移量,获取被检测应用的构建信息。75.具体的本步骤中,检测终端首先获取构建信息的简略信息,该信息一般保存在elf文件中的section中,通过遍历搜索获得;然后通过进程在内存中的虚拟地址搜索获得构建信息所在的具体地址空间,最后通过地址偏移量获取构建版本和具体详细的构建信息,其中构建信息中包含有构成被检测应用的方法函数。76.步骤s340,获取被检测应用所调用接口的接口列表,并获取各个方法函数在内存中的虚拟地址。77.具体的本步骤中,检测终端获取接口列表需要用到elf文件中的信息,基于elf表信息,通过关键字go_interface_table去搜索全局得到需要的数据。其中接口为部分方法函数的集合,因此接口列表相当于方法函数列表,根据该接口列表,获取每个方法函数在内存中的虚拟地址。78.步骤s350,对方法函数进行分类并标记,同时记录每个方法函数处理污点数据时的输入数据和输出数据。79.具体的本步骤中,把函数分为污染源,传播路径,触发三个阶段。其中污染源阶段的方法函数用于接收外部输入的污点数据,传播阶段的方法函数用于传播污点数据,当污点数据到达触发阶段的方法函数时,说明被检测应用中存在漏洞。80.步骤s360,通过预设函数结构获取方法函数的输入数据和输出数据,并对输入数据和输入数据进行标记和存储。81.具体的本步骤中,检测终端通过预设函数结构获取方法函数处理污点数据时的输入数据和输入数据,以及该方法函数所处的阶段。需要解释的是每一个预设函数结构中都包含了一段内联汇编代码,其主要作用就是通过寄存器地址操作,当进行某个方法函数的时把方法函数对应的输入输出数据读取出来,输入至自定义的预设函数结构中,预设函数结构中还有一个handle函数,用于对输入的数据进行标记和存储,为后续形成漏洞链路做准备。示例性地,本实施例中采用hook(钩子)技术获取方法函数的输入输出数据,具体的通过寄存器地址操作获取。而寄存器地址操作是指修改寄存器中函数的索引地址,比如需要被监测的方法函数的地址是0x11,预设函数结构的地址是0x22,则这个被监测的方法函数的索引地址是0x11,这时把该方法函数的索引地址改成0x22,这样与该方法函数有关的数据信息就会通过该索引地址进入预设函数结构中,然后就可以获取这个被监测的方法函数的输入输出数据,再通过handle函数对数据进行标记和处理。82.本实施例中优选的,该方法还包括根据接口列表的信息数据,遍历自定义的预设函数列表,如果接口列表中存在方法函数与自定义的预设函数列表中的方法函数相同,说明相应地方法函数需要hook,即该方法函数的输入数据和输出数据需要被获取。其中自定义的预设函数列表中包含了预设的需要hook的方法函数。通过该步骤,可以减少不必要的资源消耗,有针对性地获取方法函数的输入和输出数据。83.上述步骤构成了一种新的基于go语言的注入式污点数据跟踪方法,首先通过进程在内存中的虚拟地址和地址偏移量,获取被检测应用的构建信息;然后再从构建信息获取用于构建被检测应用的方法函数,最后利用预先注入至被检测应用中的预设函数结构,通过hook技术获取方法函数处理污点数据时的输入数据和输出数据,并对相应的数据进行标记。这些被标记的数据便于后续确定链路漏洞。与现有技术相比,由于通过构建信息获取了构建应用的方法函数,因此注入应用中的预设函数结构,不需要与应用的源代码一起进行编译,其可以通过获取方法函数的输入和输出数据并标记,从而确定污点数据的传播链路。因此该污点数据跟踪方法可以直接作用在进程文件中,在应用程序的启动阶段,通过预设函数结构的动态注入,使其能够在不重新编译重启的情况下,获取污点数据的传播链路,并上报相应的漏洞信息。所以解决了现有技术中编译型污点跟踪技术存在的使用前准备工作比较繁琐麻烦,影响用户的使用体验的问题。84.本优选实施例中还提供了一种污点数据跟踪测试方法,用于测试本实施例中的基于go语言的注入式污点数据跟踪方法。该方法包括以下步骤:85.步骤a,对被检测应用中向外部发送http请求的方法函数进行插桩,当被检测应用通过上述方法函数向外部发送http请求时,插桩程序获得向外部发送http请求的数据。86.步骤b,判断步骤a中获得的向外部发送http请求的数据中是否有污染数据;若有,则提取其坐标,生成污染数据坐标信息,将污染数据坐标信息以一个固定的key值加入向外部发送http请求的header中。87.步骤c,当另一应用接收到步骤a中发送的http请求后,判断该http请求的header中的固定的key值是否存在,若存在则提取其value,获得污染数据坐标信息。88.步骤d,将步骤c中获得的污染数据坐标信息放到缓存中并进行跟踪,在后续的程序执行流程中,若该http请求的数据被提取,且存有污染数据坐标信息的缓存中提取的数据是被其坐标指向的,则将该数据设置为污染源。89.其中,被检测应用接收到http请求有多种实现方法,本实施例中采用postman进行请求模拟发送请求。90.通过上述步骤对本实施例中的基于go语言的注入式污点数据跟踪方法进行了测试,通过采用hook技术能够获得net/http.(*request).cookie的参数和地址,把cookie中的数据都标记为污染源。经过fmt.sprintf函数标记为传播过程,最后在os/exec.command标记为触发点,同时进行漏洞上报。说明本技术中的基于go语言的注入式污点数据跟踪方法是可行有效的。91.在本实施例中还提供了一种基于go语言的注入式污点数据跟踪装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。以下所使用的术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管在以下实施例中所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。92.图4是本实施例的一种基于go语言的注入式污点数据跟踪装置的结构框图,如图4所示,装置包括:第一获取模块410、第二获取模块420和数据标记模块430;第一获取模块410用于获取被检测应用的elf表,通过查询elf表获取被检测应用的构建信息,并从构建信息中获取用于构建被检测应用的方法函数的信息;第二获取模块420用于根据方法函数的信息,通过预先注入至被检测应用中的预设函数结构获取方法函数处理污点数据时的输入数据和输出数据;数据标记模块430用于对获取到的方法函数的输入数据和输出数据进行标记;其中,被标记的各个方法函数的输入数据和输出数据用于形成漏洞链路。93.需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。94.在本实施例中还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。95.可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。96.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:97.步骤s210,获取被检测应用的elf表,通过查询elf表获取被检测应用的构建信息,并从构建信息中获取用于构建被检测应用的方法函数的地址信息。98.步骤s220,根据方法函数的地址信息,通过预先注入至被检测应用中的预设函数结构获取方法函数处理污点数据时的输入数据和输出数据。99.步骤s230,对获取到的方法函数的输入数据和输出数据进行标记,其中,被标记的各个方法函数的输入数据和输出数据用于形成漏洞链路。100.需要说明的是,在本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,在本实施例中不再赘述。101.此外,结合上述实施例中提供的基于go语言的注入式污点数据跟踪方法,在本实施例中还可以提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种基于go语言的注入式污点数据跟踪方法。102.应该明白的是,这里描述的具体实施例只是用来解释这个应用,而不是用来对它进行限定。根据本技术提供的实施例,本领域普通技术人员在不进行创造性劳动的情况下得到的所有其它实施例,均属本技术保护范围。103.显然,附图只是本技术的一些例子或实施例,对本领域的普通技术人员来说,也可以根据这些附图将本技术适用于其他类似情况,但无需付出创造性劳动。另外,可以理解的是,尽管在此开发过程中所做的工作可能是复杂和漫长的,但是,对于本领域的普通技术人员来说,根据本技术披露的技术内容进行的某些设计、制造或生产等更改仅是常规的技术手段,不应被视为本技术公开的内容不足。[0104]“实施例”一词在本技术中指的是结合实施例描述的具体特征、结构或特性可以包括在本技术的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本领域的普通技术人员能够清楚或隐含地理解的是,本技术中描述的实施例在没有冲突的情况下,可以与其它实施例结合。[0105]以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1