CN109657475A - 代码漏洞排查方法、装置、设备及存储介质 - Google Patents
代码漏洞排查方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109657475A CN109657475A CN201811531459.9A CN201811531459A CN109657475A CN 109657475 A CN109657475 A CN 109657475A CN 201811531459 A CN201811531459 A CN 201811531459A CN 109657475 A CN109657475 A CN 109657475A
- Authority
- CN
- China
- Prior art keywords
- code
- parameter
- request
- join
- loophole
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000003860 storage Methods 0.000 title claims abstract description 51
- 238000011835 investigation Methods 0.000 claims abstract description 56
- 238000013507 mapping Methods 0.000 claims abstract description 16
- 238000001514 detection method Methods 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims description 86
- 230000015654 memory Effects 0.000 claims description 14
- 238000012360 testing method Methods 0.000 claims description 5
- 230000009466 transformation Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 14
- 239000000284 extract Substances 0.000 abstract description 6
- 238000005304 joining Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 9
- 241000208340 Araliaceae Species 0.000 description 5
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 5
- 235000003140 Panax quinquefolius Nutrition 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 235000008434 ginseng Nutrition 0.000 description 5
- 238000012545 processing Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 235000014510 cooky Nutrition 0.000 description 2
- 230000007257 malfunction Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及安全检测,公开了一种代码漏洞排查方法、装置、设备及存储介质,该方法包括:接收漏洞排查指令,提取指令中包含的请求标识,在映射关系中查找对应的日志存储路径;根据日志存储路径获取目标日志文件并读取入参出参数据;获取该入参出参数据对应的标准出参数据,将入参出参数据中包含的目标出参数据与标准出参数据进行比对,并获取比对结果,由于是根据指令中携带的请求标识获取代码调用时的日志文件以及其中存放的入参出参数据,再通过将入参出参数据中包含的目标出参数据与标准出参数据进行比对,从而能够根据比对结果准确地判定代码调用过程中是否存在代码漏洞,实现了对代码漏洞的准确排查,提高了漏洞排查效率。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种代码漏洞排查方法、装置、设备及存储介质。
背景技术
软件程序在实际应用中,可能会出现漏洞或缺陷(bug),对于线下程序代码而言,开发人员可根据bug对代码进行更改调试,但有些bug只在线上发生,且某些场景下线上代码是不能随意更改调试的,这就导致了bug排查时变得较为费劲且耗时较长。更重要的是,由于一些开源脚本语言框架(如PHP的laravel开发框架)对应的设计模式较多,一旦出现bug对代码进行调试和跟踪将会耗费大量的人力物力,因此,如何简单有效的对线上代码进行代码漏洞的排查,是一个亟待解决的问题。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种代码漏洞排查方法、装置、设备及存储介质,旨在解决现有技术无法简单有效的对线上代码进行代码漏洞排查的技术问题。
为实现上述目的,本发明提供了一种代码漏洞排查方法,所述方法包括以下步骤:
接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
优选地,所述接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识的步骤之前,所述方法还包括:
接收代码调用请求,检测所述代码调用请求中是否包含预设调用参数;
在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息,所述函数调用信息包括函数调用时的入参出参数据;
将所述函数调用信息写入所述代码调用请求对应的日志文件,并获取所述日志文件的日志存储路径;
按预设规则生成所述代码调用请求对应的请求标识,并构建所述请求标识与所述日志存储路径之间的映射关系。
优选地,所述在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息的步骤,包括:
在所述代码调用请求中包含预设调用参数时,获取所述代码调用请求中携带的互联网协议地址;
检测所述互联网协议地址是否属于预设互联网协议地址白名单;
若属于,则调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息。
优选地,所述按预设规则生成所述代码调用请求对应的请求标识的步骤,包括:
获取所述代码调用请求对应的请求接收时间,调用预置随机数生成插件生成目标随机数;
对所述请求接收时间进行时间格式转换,获取对应的时间戳;
将所述互联网协议地址、所述目标随机数以及所述时间戳进行组合,获取所述代码调用请求对应的请求标识。
优选地,所述获取所述入参出参数据对应的标准出参数据的步骤,包括:
获取所述入参出参数据中包含的入参数据,根据所述入参数据在测试用例数据库中查找对应的目标测试用例;
获取所述目标测试用例对应的出参数据,并将获取到的出参数据作为标准出参数据。
优选地,所述将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果的步骤之后,所述方法还包括:
在所述比对结果为所述目标出参数据与所述标准出参数据不相同时,判定所述代码调用请求在所述请求生命周期内存在代码执行漏洞;
从所述函数调用信息中读取所述代码调用请求对应的调用堆栈,并根据所述调用堆栈确定所述代码执行漏洞对应的目标代码。
优选地,所述根据所述调用堆栈确定所述代码执行漏洞对应的目标代码的步骤,包括:
获取所述调用堆栈中存放的代码执行顺序,并根据所述代码执行顺序中包含的若干个代码标识确定所述代码调用请求对应的调用代码;
根据所述入参数据从所述调用代码中确定所述代码执行漏洞对应的目标代码。
此外,为实现上述目的,本发明还提出一种代码漏洞排查装置,所述装置包括:
指令响应模块,用于接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
数据获取模块,用于根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
数据比对模块,用于获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
此外,为实现上述目的,本发明还提出一种代码漏洞排查设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的代码漏洞排查程序,所述代码漏洞排查程序配置为实现如上文所述的代码漏洞排查方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有代码漏洞排查程序,所述代码漏洞排查程序被处理器执行时实现如上文所述的代码漏洞排查方法的步骤。
本发明通过接收漏洞排查指令,提取漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找请求标识对应的日志存储路径;根据日志存储路径获取目标日志文件,并读取目标日志文件中预先存放的入参出参数据;获取入参出参数据对应的标准出参数据,将入参出参数据中包含的目标出参数据与标准出参数据进行比对,并获取比对结果,由于本发明是根据指令中携带的请求标识获取代码调用时的日志文件以及其中存放的入参出参数据,再通过将入参出参数据中包含的目标出参数据与标准出参数据进行比对,从而能够根据比对结果准确地判定代码调用过程中是否存在代码执行漏洞,实现了对代码执行漏洞的准确排查,提高了漏洞排查效率。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的代码漏洞排查设备的结构示意图;
图2为本发明代码漏洞排查方法第一实施例的流程示意图;
图3为本发明代码漏洞排查方法第二实施例的流程示意图;
图4为本发明代码漏洞排查方法第三实施例的流程示意图;
图5为本发明代码漏洞排查装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的代码漏洞排查设备结构示意图。
如图1所示,该代码漏洞排查设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对代码漏洞排查设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作***、数据存储模块、网络通信模块、用户接口模块以及代码漏洞排查程序。
在图1所示的代码漏洞排查设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明代码漏洞排查设备中的处理器1001、存储器1005可以设置在代码漏洞排查设备中,所述代码漏洞排查设备通过处理器1001调用存储器1005中存储的代码漏洞排查程序,并执行本发明实施例提供的代码漏洞排查方法。
本发明实施例提供了一种代码漏洞排查方法,参照图2,图2为本发明代码漏洞排查方法第一实施例的流程示意图。
本实施例中,所述代码漏洞排查方法包括以下步骤:
步骤S10:接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
需要说明的是,本发明方法的执行主体可以是nginx服务器,nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器;所述请求标识可以是在执行本步骤之前,nginx服务器为接收到的代码调用请求(以下以http请求为例进行说明)生成的,用于对该代码调用请求进行唯一标记的请求标识信息。
应理解的是,在某些特殊场景下,nginx服务器通常会接收到php或java应用发送的http请求,而这些http请求对应的请求生命周期中可能会涉及到多个php代码(函数)的调用,因此为便于后续研发人员对这些http请求进行代码调用的bug排查,本实施可预先将事先为各http请求生产的请求标识与各http请求对应日志文件的日志存储路径进行关联(即构建所述映射关系),以简化bug排查的流程,提高bug排查效率。其中,所述请求生命周期,即请求从发起到响应结束的过程。
在具体实现中,nginx服务器在接收到用户输入的漏洞排查指令时,对该指令进行解析,获取其中包含的待排查的代码调用请求对应的请求标识,然后在预先构建的存放有请求标识和日志存储路径对应关系的所述映射关系中查找该请求标识对应的日志存储路径。
步骤S20:根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
应理解的是,所述入参出参数据,即入参数据(输入参数)和出参数据(输出参数),所谓输入参数是函数的调用者传递给函数的实现者,对函数来说,是函数外部传入给函数内部使用的数据;所谓输出参数是函数的实现者传递给函数的调用者,对函数来说,是函数内部返回给函数外部的数据。本实施例中http请求在调用不同的php函数时,需要将输入参数(入参)传递给待调用的函数,并获取该函数返回的输出参数(出参)。当然,该输出参数也可以作为下一个待调用的函数的输入参数。
可理解的是,所谓bug排查,即检查http请求在代码(函数)调用时是否存在调用出错,本实施例中通过将各代码(函数)对应的入参出参数据与预期的入参出参数据进行比对,即可根据比对结果确定是否存在调用出错的情况。
在具体实现中,nginx服务器根据获取到的日志存储路径获取待排查的代码调用请求对应的日志文件,然后从该日志文件中读取该代码调用请求对应的入参出参数据。
步骤S30:获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
应理解的是,所述标准出参数据,即代码调用请求整个请求生命周期内调用的代码(函数)对应的准确的输出参数。
可理解的是,函数调用过程中入参数据一般不会存在错误,当bug发生时代码(函数)的执行会中断,进而导致函数输出错误的出参数据,因此只需要将实际代码(函数)调用时的出参数据与标准的出参数据进行比对,就可以实现bug排查。
在具体实现中,nginx服务器可通过获取所述入参出参数据中包含的入参数据,根据所述入参数据在测试用例数据库中查找对应的目标测试用例;然后获取所述目标测试用例对应的出参数据,再将获取到的出参数据作为标准出参数据与所述入参出参数据中包含的目标出参数据进行比对,获取bug排查的比对结果。
进一步地,本实施例中,研发人员可预先在nginx服务器侧建立一个入参数据与测试用例标识之间的关联关系,以便nginx服务器在获取到入参数据时,根据该关联关系准确地查询到目标测试用例对应的测试用例标识,从而实现对目标测试用例的快速确定。当然,实际应用中研发人员也可以之间将入参数据和入参数据对应的出参数据关联后存放到电子表格(例如Excel表格)中,以便nginx服务器在获取到入参数据时,直接通过查询该电子表格获取所述标准出参数据,具体的标准出参数据的获取,本实施例对此不做限制。
本实施例通过接收漏洞排查指令,提取漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找请求标识对应的日志存储路径;根据日志存储路径获取目标日志文件,并读取目标日志文件中预先存放的入参出参数据;获取入参出参数据对应的标准出参数据,将入参出参数据中包含的目标出参数据与标准出参数据进行比对,并获取比对结果,由于本实施例是根据指令中携带的请求标识获取代码调用时的日志文件以及其中存放的入参出参数据,再通过将入参出参数据中包含的目标出参数据与标准出参数据进行比对,从而能够根据比对结果准确地判定代码调用过程中是否存在代码执行漏洞,实现了对代码执行漏洞的准确排查,提高了漏洞排查效率。
参考图3,图3为本发明代码漏洞排查方法第二实施例的流程示意图。
基于上述第一实施例,本实施例提供的代码漏洞排查方法在所述步骤S10之前,还包括:
步骤S01:接收代码调用请求,检测所述代码调用请求中是否包含预设调用参数;
需要说明的是,本实施例中所述代码调用请求可以是php或java应用发送的代码(函数)调用请求。所述预设调用参数包括所述代码调用请求对应的请求方法(如GET、POST和HEAD)、请求URL(统一资源定位符,Uniform Resource Locator)以及请求中携带的cookie参数等。
相应地,所述检测所述代码调用请求中是否包含预设调用参数的步骤,具体可包括:检测所述代码调用请求对应的请求方法是否为预设类型的请求方法,以及请求URL或携带的cookie中是否包含有预先设定的请求参数,例如请求发起方对应的互联网协议地址(IP地址)等。
步骤S02:在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息,所述函数调用信息包括函数调用时的入参出参数据;
应理解的是,所述钩子(Hook)函数,也称钩子程序,实际上是一个处理消息的程序段,通过***调用,把它挂入***。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。
可理解的是,通常情况下,php或java应用发送的http请求对应的请求生命周期中可能会涉及到多个php函数的调用,因此nginx服务器需要对整个php函数调用过程中涉及的函数调用情况进行记录,得到函数调用信息。
在具体实现中,nginx服务器在检测到代码调用请求中包含预设调用参数时,即可通过预先设置的钩子函数记录所述代码调用请求在请求生命周期内的所有函数调用信息;其中,所述函数调用信息包括函数调用时的入参出参数据,以及调用堆栈。
进一步地,为了保证函数调用过程中的信息安全,本实施例nginx服务器还将对接收到的代码调用请求进行权限检测,具体的,nginx服务器在检测到所述代码调用请求中包含预设调用参数时,获取所述代码调用请求(或预设调用参数)中携带的互联网协议地址,并检测所述互联网协议地址是否属于预设互联网协议地址白名单;若属于,则判定该代码调用请求具有代码调用权限并调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息;若不属于,则拒绝对所述代码调用请求进行后续响应。
步骤S03:将所述函数调用信息写入所述代码调用请求对应的日志文件,并获取所述日志文件的日志存储路径;
应理解的是,日志文件是记录在操作***或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。本实施例中nginx服务器可将记录到的函数调用信息写入到对应的日志文件,并获取该日志文件的日志存储路径。
步骤S04:按预设规则生成所述代码调用请求对应的请求标识,并构建所述请求标识与所述日志存储路径之间的映射关系。
可理解的是,nginx服务器可能会在同一时间接收到很多php或java应用发送的请求,而每个请求对应的处理流程并不一定相同,进而带来了请求日志文件的差异,因此为了有效的对每个请求对应的日志文件进行区分,本实施例中nginx服务器可对不同的请求对应的日志文件进行分区保存,获取日志文件的日志存储路径,然后通过按所述预设规则生成的请求标识对日志存储路径进行标记,即构建所述请求标识与所述日志存储路径之间的映射关系,以实现后续对日志文件的快速获取。
进一步地,本实施例中,所述按预设规则生成所述代码调用请求对应的请求标识的步骤,可具体包括:获取所述代码调用请求对应的请求接收时间,调用预置随机数生成插件生成目标随机数;对所述请求接收时间进行时间格式转换,获取对应的时间戳;将所述互联网协议地址、所述目标随机数以及所述时间戳进行组合,获取所述代码调用请求对应的请求标识。例如,若nginx服务器记录到的请求接收时间为2018-09-19 15:33:19,转换为Unix时间戳则为1537342399;调用预置随机数生成插件生成目标随机数为235;获取到的IP地址为58.19.23.209,即可按照“时间戳+IP+随机数”的请求标识生成规则来生成所述请求标识“2355819232091537342399”。
本实施例通过预先设置的钩子函数对代码调用请求在请求生命周期内的函数调用信息进行记录,并通过生成对应的请求标识来对包含有该函数调用信息的日志文件的日志存储路径进行标记,既实现了对代码调用请求的实时监控,也为后续通过记录到的函数调用信息对函数调用过程中出现的漏洞提供了有效的排查途径。
参考图4,图4为本发明代码漏洞排查方法第三实施例的流程示意图。
基于上述各实施例,在本实施例中,所述步骤S30之后,所述方法还包括:
步骤S40:在所述比对结果为所述目标出参数据与所述标准出参数据不相同时,判定所述代码调用请求在所述请求生命周期内存在代码执行漏洞;
需要说明的是,本实施例中判断目标出参数据与标准出参数据是否相同并非是严格意义上的完全等同,而是目标出参数据是否包含于标准出参数据,例如目标出参数据为{A,B,C},而标准出参数据为{A,B,C,D,E,F},此时目标出参数据包含于标准出参数据,也可判定目标出参数据与标准出参数据“相同”,即判定代码执行不存在bug。
在具体实现中,nginx服务器在检测到目标出参数据与标准出参数据不相同时,表明代码调用请求在对不同的代码(函数)进行调用的过程中出现bug,此时即可判定代码调用请求在自身的请求生命周期内存在代码执行漏洞。
步骤S50:从所述函数调用信息中读取所述代码调用请求对应的调用堆栈,并根据所述调用堆栈确定所述代码执行漏洞对应的目标代码。
应理解的是,所谓堆栈,即一种能够反映数据项按序排列的数据结构;本实施例中,所述调用堆栈(call stack)反映了当前断点处函数是被那些函数按照什么顺序调用的。当故障(bug)发生时,如果程序被中断,我们基本上只可以看到最后出错的函数,但通过利用call stack就可以知道当出错函数被哪一个函数调用的时候出错,从而实现对bug的准确查找。
具体的,nginx服务器可获取所述调用堆栈中存放的代码执行顺序,并根据所述代码执行顺序中包含的若干个代码标识确定所述代码调用请求对应的调用代码;根据所述入参数据从所述调用代码中确定所述代码执行漏洞对应的目标代码。
应理解的是,所述代码执行顺序,即代码(函数)被调用过程中的调用顺序,例如代码调用请求需要调用4个函数“function1,function2,function3,fun tion4,且function1调用function2,function2调用function3,function3调用f unction4”,当function4运行时,调用堆栈中就将呈现出调用顺序为function4-function3-function2-function1的“堆栈”特征,且最后被调用的函数出现在堆栈的最上方或栈顶。本实施例中,所述代码标识可以是各被调用的函数对应的标识信息,例如上述“function1、function2”等,在具体实现中,nginx服务器在获取到调用堆栈中存放的代码执行顺序后,可根据其中包含的代码标识在代码数据库中进行模糊匹配,获取匹配成功的所有调用代码,并根据日志文件中保存的入参数据,从匹配成功的所有调用代码中确定出代码执行漏洞对应的目标代码。
本实施例通过在检测到代码调用请求在请求生命周期内存在代码执行漏洞时,从函数调用信息中读取代码调用请求对应的调用堆栈,并根据调用堆栈确定代码执行漏洞对应的目标代码,实现了对出现漏洞的代码文件的精确定位,为程序开发人员改善代码漏洞提供了便利,有效的节省了人力物力。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有代码漏洞排查程序,所述代码漏洞排查程序被处理器执行时实现如上文所述的代码漏洞排查方法的步骤。
参照图5,图5为本发明代码漏洞排查装置第一实施例的结构框图。
如图5所示,本发明实施例提出的代码漏洞排查装置包括:
指令响应模块501,用于接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
数据获取模块502,用于根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
数据比对模块503,用于获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
本实施例通过接收漏洞排查指令,提取漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找请求标识对应的日志存储路径;根据日志存储路径获取目标日志文件,并读取目标日志文件中预先存放的入参出参数据;获取入参出参数据对应的标准出参数据,将入参出参数据中包含的目标出参数据与标准出参数据进行比对,并获取比对结果,由于本实施例是根据指令中携带的请求标识获取代码调用时的日志文件以及其中存放的入参出参数据,再通过将入参出参数据中包含的目标出参数据与标准出参数据进行比对,从而能够根据比对结果准确地判定代码调用过程中是否存在代码执行漏洞,实现了对代码执行漏洞的准确排查,提高了漏洞排查效率。
基于本发明上述代码漏洞排查装置第一实施例,提出本发明代码漏洞排查装置的第二实施例。
进一步地,本实施例中所述代码漏洞排查装置还包括日志记录模块,所述日志记录模块,用于在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息,所述函数调用信息包括函数调用时的入参出参数据;将所述函数调用信息写入所述代码调用请求对应的日志文件,并获取所述日志文件的日志存储路径;按预设规则生成所述代码调用请求对应的请求标识,并构建所述请求标识与所述日志存储路径之间的映射关系
进一步地,所述日志记录模块,还用于在所述代码调用请求中包含预设调用参数时,获取所述代码调用请求中携带的互联网协议地址;检测所述互联网协议地址是否属于预设互联网协议地址白名单;若属于,则调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息。
进一步地,所述日志记录模块,还用于获取所述代码调用请求对应的请求接收时间,调用预置随机数生成插件生成目标随机数;对所述请求接收时间进行时间格式转换,获取对应的时间戳;将所述互联网协议地址、所述目标随机数以及所述时间戳进行组合,获取所述代码调用请求对应的请求标识。
进一步地,所述数据比对模块503,还用于获取所述入参出参数据中包含的入参数据,根据所述入参数据在测试用例数据库中查找对应的目标测试用例;获取所述目标测试用例对应的出参数据,并将获取到的出参数据作为标准出参数据。
进一步地,本实施例中所述代码漏洞排查装置还包括漏洞查找模块,所述漏洞查找模块,用于在所述比对结果为所述目标出参数据与所述标准出参数据不相同时,判定所述代码调用请求在所述请求生命周期内存在代码执行漏洞;从所述函数调用信息中读取所述代码调用请求对应的调用堆栈,并根据所述调用堆栈确定所述代码执行漏洞对应的目标代码。
进一步地,所述漏洞查找模块,还用于获取所述调用堆栈中存放的代码执行顺序,并根据所述代码执行顺序中包含的若干个代码标识确定所述代码调用请求对应的调用代码;根据所述入参数据从所述调用代码中确定所述代码执行漏洞对应的目标代码。
本发明代码漏洞排查装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者***中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种代码漏洞排查方法,其特征在于,所述方法包括:
接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
2.如权利要求1所述的方法,其特征在于,所述接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识的步骤之前,所述方法还包括:
接收代码调用请求,检测所述代码调用请求中是否包含预设调用参数;
在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息,所述函数调用信息包括函数调用时的入参出参数据;
将所述函数调用信息写入所述代码调用请求对应的日志文件,并获取所述日志文件的日志存储路径;
按预设规则生成所述代码调用请求对应的请求标识,并构建所述请求标识与所述日志存储路径之间的映射关系。
3.如权利要求2所述的方法,其特征在于,所述在所述代码调用请求中包含所述预设调用参数时,调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息的步骤,包括:
在所述代码调用请求中包含预设调用参数时,获取所述代码调用请求中携带的互联网协议地址;
检测所述互联网协议地址是否属于预设互联网协议地址白名单;
若属于,则调用预置钩子函数记录所述代码调用请求在请求生命周期内的函数调用信息。
4.如权利要求3所述的方法,其特征在于,所述按预设规则生成所述代码调用请求对应的请求标识的步骤,包括:
获取所述代码调用请求对应的请求接收时间,调用预置随机数生成插件生成目标随机数;
对所述请求接收时间进行时间格式转换,获取对应的时间戳;
将所述互联网协议地址、所述目标随机数以及所述时间戳进行组合,获取所述代码调用请求对应的请求标识。
5.如权利要求4所述的方法,其特征在于,所述获取所述入参出参数据对应的标准出参数据的步骤,包括:
获取所述入参出参数据中包含的入参数据,根据所述入参数据在测试用例数据库中查找对应的目标测试用例;
获取所述目标测试用例对应的出参数据,并将获取到的出参数据作为标准出参数据。
6.如权利要求2至5任一项所述的方法,其特征在于,所述将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果的步骤之后,所述方法还包括:
在所述比对结果为所述目标出参数据与所述标准出参数据不相同时,判定所述代码调用请求在所述请求生命周期内存在代码执行漏洞;
从所述函数调用信息中读取所述代码调用请求对应的调用堆栈,并根据所述调用堆栈确定所述代码执行漏洞对应的目标代码。
7.如权利要求6所述的方法,其特征在于,所述根据所述调用堆栈确定所述代码执行漏洞对应的目标代码的步骤,包括:
获取所述调用堆栈中存放的代码执行顺序,并根据所述代码执行顺序中包含的若干个代码标识确定所述代码调用请求对应的调用代码;
根据所述入参数据从所述调用代码中确定所述代码执行漏洞对应的目标代码。
8.一种代码漏洞排查装置,其特征在于,所述装置包括:
指令响应模块,用于接收漏洞排查指令,提取所述漏洞排查指令中包含的请求标识,在预先构建的映射关系中查找所述请求标识对应的日志存储路径;
数据获取模块,用于根据所述日志存储路径获取目标日志文件,并读取所述目标日志文件中预先存放的入参出参数据;
数据比对模块,用于获取所述入参出参数据对应的标准出参数据,将所述入参出参数据中包含的目标出参数据与所述标准出参数据进行比对,并获取比对结果。
9.一种代码漏洞排查设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的代码漏洞排查程序,所述代码漏洞排查程序配置为实现如权利要求1至7中任一项所述的代码漏洞排查方法的步骤。
10.一种存储介质,其特征在于,所述存储介质上存储有代码漏洞排查程序,所述代码漏洞排查程序被处理器执行时实现如权利要求1至7任一项所述的代码漏洞排查方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811531459.9A CN109657475A (zh) | 2018-12-14 | 2018-12-14 | 代码漏洞排查方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811531459.9A CN109657475A (zh) | 2018-12-14 | 2018-12-14 | 代码漏洞排查方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109657475A true CN109657475A (zh) | 2019-04-19 |
Family
ID=66113202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811531459.9A Pending CN109657475A (zh) | 2018-12-14 | 2018-12-14 | 代码漏洞排查方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109657475A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110347589A (zh) * | 2019-06-11 | 2019-10-18 | 烽火通信科技股份有限公司 | 一种软件单元测试自动化检测方法及*** |
CN110866258A (zh) * | 2019-10-12 | 2020-03-06 | 平安科技(深圳)有限公司 | 快速定位漏洞方法、电子装置及存储介质 |
CN111753330A (zh) * | 2020-06-18 | 2020-10-09 | 百度在线网络技术(北京)有限公司 | 数据泄露主体的确定方法、装置、设备和可读存储介质 |
CN113051582A (zh) * | 2021-04-28 | 2021-06-29 | 重庆电子工程职业学院 | 一种计算机软件技术开发调试*** |
CN117076333A (zh) * | 2023-10-16 | 2023-11-17 | 成都无糖信息技术有限公司 | 一种基于脚本断点与浏览器自动化的漏洞验证方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106415507A (zh) * | 2014-06-06 | 2017-02-15 | 日本电信电话株式会社 | 日志分析装置、攻击检测装置、攻击检测方法以及程序 |
WO2017071579A1 (zh) * | 2015-10-26 | 2017-05-04 | 北京奇虎科技有限公司 | Android***漏洞挖掘的方法及装置 |
CN108268354A (zh) * | 2016-12-30 | 2018-07-10 | 腾讯科技(深圳)有限公司 | 数据安全监控方法、后台服务器、终端及*** |
-
2018
- 2018-12-14 CN CN201811531459.9A patent/CN109657475A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106415507A (zh) * | 2014-06-06 | 2017-02-15 | 日本电信电话株式会社 | 日志分析装置、攻击检测装置、攻击检测方法以及程序 |
US20170126724A1 (en) * | 2014-06-06 | 2017-05-04 | Nippon Telegraph And Telephone Corporation | Log analyzing device, attack detecting device, attack detection method, and program |
WO2017071579A1 (zh) * | 2015-10-26 | 2017-05-04 | 北京奇虎科技有限公司 | Android***漏洞挖掘的方法及装置 |
CN108268354A (zh) * | 2016-12-30 | 2018-07-10 | 腾讯科技(深圳)有限公司 | 数据安全监控方法、后台服务器、终端及*** |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110347589A (zh) * | 2019-06-11 | 2019-10-18 | 烽火通信科技股份有限公司 | 一种软件单元测试自动化检测方法及*** |
CN110866258A (zh) * | 2019-10-12 | 2020-03-06 | 平安科技(深圳)有限公司 | 快速定位漏洞方法、电子装置及存储介质 |
CN110866258B (zh) * | 2019-10-12 | 2023-11-21 | 平安科技(深圳)有限公司 | 快速定位漏洞方法、电子装置及存储介质 |
CN111753330A (zh) * | 2020-06-18 | 2020-10-09 | 百度在线网络技术(北京)有限公司 | 数据泄露主体的确定方法、装置、设备和可读存储介质 |
CN111753330B (zh) * | 2020-06-18 | 2023-08-29 | 百度在线网络技术(北京)有限公司 | 数据泄露主体的确定方法、装置、设备和可读存储介质 |
CN113051582A (zh) * | 2021-04-28 | 2021-06-29 | 重庆电子工程职业学院 | 一种计算机软件技术开发调试*** |
CN117076333A (zh) * | 2023-10-16 | 2023-11-17 | 成都无糖信息技术有限公司 | 一种基于脚本断点与浏览器自动化的漏洞验证方法 |
CN117076333B (zh) * | 2023-10-16 | 2024-02-23 | 成都无糖信息技术有限公司 | 一种基于脚本断点与浏览器自动化的漏洞验证方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109657475A (zh) | 代码漏洞排查方法、装置、设备及存储介质 | |
CN108595329B (zh) | 一种应用测试方法、装置及计算机存储介质 | |
US9547579B1 (en) | Method and apparatus for automatically detecting defects | |
CN109308263B (zh) | 一种小程序测试方法、装置及设备 | |
CN111897724B (zh) | 一种适用于云平台的自动化测试方法及装置 | |
WO2018059393A1 (zh) | 移动应用程序测试方法、服务器、终端及存储介质 | |
CN110554962A (zh) | 回归测试的流程覆盖方法、服务器及计算机可读存储介质 | |
CN110879781B (zh) | 程序调试方法、装置、电子设备及计算机可读存储介质 | |
CN110119350A (zh) | 软件开发工具包测试方法、装置和设备及计算机存储介质 | |
CN112069068A (zh) | 自动化测试数据处理方法、装置、设备及可读存储介质 | |
CN112463588A (zh) | 一种自动化测试***及方法、存储介质、计算设备 | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN111522749B (zh) | 页面测试方法、装置、可读存储介质及电子设备 | |
WO2021196674A1 (zh) | ***代码的测试方法、装置、计算机设备和存储介质 | |
CN109542763A (zh) | 页面监测方法、装置、计算机设备和存储介质 | |
JP4587976B2 (ja) | アプリケーションの脆弱性検査方法および装置 | |
CN112559343B (zh) | 测试路径生成方法及相关设备 | |
CN117234916A (zh) | 一种工作流应用的测试方法、装置、电子设备及存储介质 | |
CN112612706A (zh) | 自动化测试方法、计算机设备及存储介质 | |
CN116166536A (zh) | 一种测试方法、装置、电子设备及存储介质 | |
CN115514677B (zh) | 服务器拨测方法及*** | |
CN115454860A (zh) | 一种自动化测试的方法、装置、存储介质及电子设备 | |
US20160275002A1 (en) | Image capture in application lifecycle management for documentation and support | |
CN115705297A (zh) | 代码调用检测方法、装置、计算机设备以及存储介质 | |
KR102111392B1 (ko) | 테스트 통합 관리시스템 및 그 제어방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |