CN113139183A - 一种检测方法、装置、设备及存储介质 - Google Patents

一种检测方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113139183A
CN113139183A CN202010055397.XA CN202010055397A CN113139183A CN 113139183 A CN113139183 A CN 113139183A CN 202010055397 A CN202010055397 A CN 202010055397A CN 113139183 A CN113139183 A CN 113139183A
Authority
CN
China
Prior art keywords
flow
flow request
request parameter
syntax tree
code injection
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.)
Granted
Application number
CN202010055397.XA
Other languages
English (en)
Other versions
CN113139183B (zh
Inventor
黄志伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sangfor Technologies Co Ltd
Original Assignee
Sangfor Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sangfor Technologies Co Ltd filed Critical Sangfor Technologies Co Ltd
Priority to CN202010055397.XA priority Critical patent/CN113139183B/zh
Publication of CN113139183A publication Critical patent/CN113139183A/zh
Application granted granted Critical
Publication of CN113139183B publication Critical patent/CN113139183B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (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)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种检测方法、装置、设备及存储介质,该方法的步骤包括:获取代码注入流量的流量请求参数;对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树;基于抽象语法树的节点关系得到流量请求参数中包含的语法结构;对语法结构执行分析操作得到检测结果。由于本方法基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。此外,本申请还提供一种检测装置、设备及存储介质,有益效果同上所述。

Description

一种检测方法、装置、设备及存储介质
技术领域
本申请涉及网络安全领域,特别是涉及一种检测方法、装置、设备及存储介质。
背景技术
代码注入漏洞通常是由于程序缺乏对输入及输出数据的校验而导致的,攻击者可以利用这类漏洞获取服务器控制权,因此代码注入漏洞具有极大的危害。
当前攻击者对于代码注入漏洞的入侵方式通常是以向服务器发送流量数据包的方式发起注入攻击,流量数据包中包含有恶意参数,以此通过将恶意参数注入到服务器的业务代码的方式实现对于服务器的业务控制。传统对于代码注入流量的检测方法主要基于静态规则实现,这类技术要求安全人员根据已知异常的代码注入流量的特征,编写以正则表达式描述的静态规则,当检测场景下的实际代码注入流量与静态规则匹配时,则判定该实际代码注入流量为发起代码注入攻击的异常流量,但是由于当前的异常流量往往采取隐藏关键字的方式避免与匹配静态规则,并且隐藏关键字的手段相对丰富,因此当前对于代码注入流量的检测难以确保对于异常流量的识别准确性。
由此可见,提供一种检测方法,以相对提高对于异常流量的识别准确性,是本领域技术人员需要解决的问题。
发明内容
本申请的目的是提供一种检测方法、装置、设备及存储介质,以相对提高对于异常流量的识别准确性。
为解决上述技术问题,本申请提供一种检测方法,包括:
获取代码注入流量的流量请求参数;
对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树;
基于抽象语法树的节点关系得到流量请求参数中包含的语法结构;
对语法结构执行分析操作得到检测结果。
优选地,对语法结构执行分析操作得到检测结果,包括:
根据语法结构识别流量请求参数的行为意图特征,并根据行为意图特征生成相应的恶意置信度;
基于恶意置信度生成检测结果。
优选地,在基于恶意置信度生成检测结果之前,方法还包括:
获取语法结构基于节点关系的生成过程;
判断生成过程是否满足异常生成标准;
若生成过程满足异常生成标准,则提高恶意置信度,并执行基于恶意置信度生成检测结果的步骤;
若生成过程不满足异常生成标准,则执行基于恶意置信度生成检测结果的步骤。
优选地,基于抽象语法树的节点关系得到流量请求参数中包含的语法结构,包括:
基于抽象语法树的节点关系得到初始语法结构;
将初始语法结构中满足流量请求参数对应语法标准的表达式设置为语法结构。
优选地,基于抽象语法树的节点关系得到初始语法结构,包括:
基于抽象语法树的节点关系执行字符串拼接运算得到初始语法结构。
优选地,当词素序列中包含变量标识符时,基于抽象语法树的节点关系得到初始语法结构,包括:
基于抽象语法树的节点关系获取变量名与变量值之间的映射关系;
生成记录有映射关系的初始语法结构。
优选地,在对流量请求参数中的词素进行划分得到词素序列之前,方法还包括:
判断流量请求参数中是否存在不符合流量请求参数对应的语法的标识符;
若存在不符合流量请求参数对应的语法的标识符,则根据不符合流量请求参数对应的语法的标识符对流量请求参数执行补全上下文操作,并执行对流量请求参数中的词素进行划分得到词素序列的步骤;
若不存在不符合流量请求参数对应的语法的标识符,则执行对流量请求参数中的词素进行划分得到词素序列的步骤。
优选地,在获取代码注入流量的流量请求参数之前,方法还包括:
接收网络流量,并在网络流量中获取请求参数中包含有预设特征字符的代码注入流量,预设特征字符为代码注入操作对应的请求参数中具有的特征字符。
此外,本申请还提供一种检测装置,包括:
参数获取模块,用于获取代码注入流量的流量请求参数;
语法树生成模块,用于对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树;
表达式获取模块,用于基于抽象语法树的节点关系得到流量请求参数中包含的语法结构;
表达式分析模块,用于对语法结构执行分析操作得到检测结果。
此外,本申请还提供一种检测设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上述的检测方法的步骤。
此外,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的检测方法的步骤。
本申请所提供的检测方法,首先获取代码注入流量的流量请求参数,进而对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树,进而根据抽象语法树的节点关系得到流量请求参数中包含的语法结构,进而对语法结构执行分析操作得到检测结果。由于本方法基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。此外,本申请还提供一种检测装置、设备及存储介质,有益效果同上所述。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的一种检测方法的流程图;
图2为本申请实施例公开的一种具体的检测方法的流程图;
图3为本申请实施例公开的一种具体的检测方法的流程图;
图4为本申请实施例公开的一种具体的检测方法的流程图;
图5为本申请实施例公开的一种具体的检测方法的流程图;
图6为本申请实施例公开的一种检测装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
当前攻击者对于代码注入漏洞的入侵方式通常是以向服务器发送流量数据包的方式发起注入攻击,流量数据包中包含有恶意参数,以此通过将恶意参数注入到服务器的业务代码的方式实现对于服务器的业务控制。传统对于代码注入流量的检测方法主要基于静态规则实现,这类技术要求安全人员根据已知异常的代码注入流量的特征,编写以正则表达式描述的静态规则,当检测场景下的实际代码注入流量与静态规则匹配时,则判定该实际代码注入流量为发起代码注入攻击的异常流量,但是由于当前的异常流量往往采取隐藏关键字的方式避免与匹配静态规则,并且隐藏关键字的手段相对丰富,因此当前对于代码注入流量的检测难以确保对于异常流量的识别准确性。
为此,本申请的核心是提供一种检测方法,以相对提高对于异常流量的识别准确性。
请参见图1所示,本申请实施例公开了一种检测方法,包括:
步骤S10:获取代码注入流量的流量请求参数。
需要说明的是,本步骤中的代码注入流量指的是用于向服务器的业务代码执行代码注入操作的流量,由于通过代码注入流量对服务器的业务代码执行代码注入操作需要在代码注入流量中携带有与代码注入相关的字符串、标识名、注释内容以及子表达式等,而上述的代码注入对象往往存在于代码注入流量的流量请求参数中,因此流量请求参数的内容决定着代码注入流量对服务器中业务代码的行为意图,进而在本步骤获取到的代码注入流量中的流量请求参数的基础上,能够进一步通过对流量请求参数进行分析的方式判定实现对代码注入流量的检测。
步骤S11:对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树。
在获取到流量请求参数后,本步骤进一步依照流量请求参数中的词素对流量请求参数进行划分,生成相应的词素序列。本步骤中的词素指的是在流量请求参数中具有实际含义或表示实际功能的字符串,例如对于流量请求参数划分的词素可以具体包括但不限于流量请求参数中的功能关键字、变量、数字、注释以及相对应的开放符号以及封闭符号等。
在基于流量请求参数中的词素生成词素序列后,进一步基于词素序列生成抽象语法树。由于词素序列中的记录有流量请求参数的各个词素,因此本步骤进一步对词素之间的层级关联关系进行分析,因此基于词素序列生成体现层级关联关系的抽象语法树。
在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。
步骤S12:基于抽象语法树的节点关系得到流量请求参数中包含的语法结构。
需要说明的是,由于抽象语法树中的各节点之间的节点关系能够体现词素之间的关系以及词素与代码注入操作之间的相关性,得到流量请求参数中与代码注入操作行为相关的语法结构,进而即使流量请求参数中对于代码注入操作行为相关的语法结构进行一定手段的隐藏处理,也能够通过抽象语法树所体现的词素之间的关联性对词素进行整合,并还原出流量请求参数中包含的语法结构。
步骤S13:对语法结构执行分析操作得到检测结果。
在获取到流量请求参数中包含的语法结构后,本方法进一步对语法结构执行分析操作,得到检测结果,由于语法结构能够相对明确的体现流量请求参数的代码注入意图,因此相对确保了检测结果的可靠性。
本申请所提供的检测方法,首先获取代码注入流量的流量请求参数,进而对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树,进而根据抽象语法树的节点关系得到流量请求参数中包含的语法结构,进而对语法结构执行分析操作得到检测结果。由于本方法基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。
请参见图2所示,本申请实施例公开了一种检测方法,包括:
步骤S20:获取代码注入流量的流量请求参数。
步骤S21:对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树。
步骤S22:基于抽象语法树的节点关系得到流量请求参数中包含的语法结构。
步骤S23:根据语法结构识别流量请求参数的行为意图特征,并根据行为意图特征生成相应的恶意置信度。
本步骤在基于抽象语法树的节点关系得到流量请求参数中包含的语法结构后,进一步根据语法结构识别流量请求参数的行为意图特征,具体可以采用的方式包括但不限于根据语法结构中的关键字判定流量请求参数具体的行为意图特征。当流量请求参数中的关键字数量为多个时,判定流量请求参数的行为意图特征,可以具体根据预设关键字组合与预设行为意图特征之间的第一对应关系判定得到与当前的关键字组合对应的行为意图特征,进而本实施例可以进一步对各个预设行为意图特征与可疑程度分值之间的第二对应关系,进而在根据语法结构识别到流量请求参数的行为意图特征后,进一步根据识别到的行为意图特征产生相应的可疑程度评分,即生成相应的恶意置信度。
步骤S24:基于恶意置信度生成检测结果。
本步骤基于恶意置信度生成检测结果的方式具体可以是将恶意置信度作为检测结果输出,也可以通过判断恶意置信度是否达到异常阈值范围,如果是,则生成包含有异常状态信息的检测结果,否则,生成包含有正常状态信息的检测结果。
本实施例根据语法结构识别流量请求参数的行为意图特征,并根据行为意图特征生成相应的恶意置信度,进而基于恶意置信度生成检测结果,能够相对确保检测结果内容的准确性。
请参见图3所示,本申请实施例公开了一种检测方法,包括:
步骤S30:获取代码注入流量的流量请求参数。
步骤S31:对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树。
步骤S32:基于抽象语法树的节点关系得到流量请求参数中包含的语法结构。
步骤S33:根据语法结构识别流量请求参数的行为意图特征,并根据行为意图特征生成相应的恶意置信度。
步骤S34:获取语法结构基于节点关系的生成过程。
需要说明的是,在本实施例中,在根据行为意图特征生成相应的恶意置信度后,为了确保恶意置信度的准确性,进一步获取语法结构基于抽象语法树中节点关系的生成过程,由于本实施例中语法结构的生成过程与流量请求参数的生成过程存在直接关联,并且是互为反向执行的过程,因此可以理解的是,语法结构的生成过程能够体现流量请求参数生成过程中是否采用了隐藏关键字的手段以及隐藏关键字手段的复杂程度,进而语法结构基于节点关系的生成过程与代码注入流量的恶意置信度之间存在直接关联,因此本步骤获取语法结构基于节点关系的生成过程,并在后续步骤中对生成过程进行异常判定。
步骤S35:判断生成过程是否满足异常生成标准,如果是,则执行步骤S36以及步骤S37,否则,执行步骤S37。
在获取到语法结构基于节点关系的生成过程后,进一步判断该生成过程是否满足异常生成标准,此处的异常生成标准是预先设定的恶意代码注入流量的流量请求参数在生成过程中具有的特征标准。
步骤S36:提高恶意置信度。
步骤S37:基于恶意置信度生成检测结果。
当生成过程满足异常生成标准,则说明当前代码注入流量的流量请求参数在生成过程中采用了复杂程度较高的隐藏关键字的手段,因此在生成的恶意置信度的基础上,进一步提高提高恶意置信度,进而基于提高后的恶意置信度生成检测结果;相反的,当生成过程不满足异常生成标准,则说明当前代码注入流量的流量请求参数的在生成过程中未采用隐藏关键字的手段或采用了相对简单的隐藏关键字的手段,因此在此情况下,无需对恶意置信度进行提高,即可直接基于恶意置信度生成检测结果。
本实施例通过判断生成过程是否满足异常生成标准,以此决定是否对恶意置信度进行调整,进一步确保了恶意置信度的准确性,进而确保了检测结果的准确性。
请参见图4所示,本申请实施例公开了一种检测方法,包括:
步骤S40:获取代码注入流量的流量请求参数。
步骤S41:对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树。
步骤S42:基于抽象语法树的节点关系得到初始语法结构。
步骤S43:将初始语法结构中满足流量请求参数对应语法标准的表达式设置为语法结构。
步骤S44:对语法结构执行分析操作得到检测结果。
需要说明的是,本实施例的重点是首先基于抽象语法树的节点关系得到初始语法结构,由于考虑到能够作为代码注入流量实现代码注入操作的前提是至少需要符合代码注入流量中流量请求参数对应的语法标准,进而代码注入流量才能够正常的受到服务器的正常响应,进而实现对于服务器中业务代码的代码注入,因此本实施例在基于抽象语法树的节点关系得到初始语法结构之后,进一步对初始语法结构进行进一步的筛选,即将初始语法结构中满足流量请求参数对应语法标准的表达式设置为语法结构,目的是预先验证并排除无法正常实现代码注入操作的流量请求参数,以此相对减少对于流量请求参数的分析量,相对提高了整体检测效率。
在上述实施例的基础上,作为一种优选的实施方式,基于抽象语法树的节点关系得到初始语法结构,包括:
基于抽象语法树的节点关系执行字符串拼接运算得到初始语法结构。
需要说明的是,在本实施方式中,基于抽象语法树的节点关系生成初始语法结构具体为基于抽象语法树的节点关系执行字符串拼接运算得到初始语法结构,也就是说,在本实施方式的场景下代码注入流量的流量请求参数在生成过程中采用了拆分字符串的手段实现隐藏关键字的目的,而在在对关键字进行拆分后得到的字符段之间在抽象语法树中的节点关系为具有相同父节点的平级关系,因此本实施方式在生成初始语法结构的过程中,具体是基于抽象语法树的节点关系执行字符串拼接运算得到初始语法结构,相对确保了初始语法结构的准确性,进而确保对于异常流量的识别准确性。
在上述实施例的基础上,作为一种优选的实施方式,当词素序列中包含变量标识符时,基于抽象语法树的节点关系得到初始语法结构,包括:
基于抽象语法树的节点关系获取变量名与变量值之间的映射关系;
生成记录有映射关系的初始语法结构。
需要说明的是,本实施方式中的变量标识符指的是用于标记变量的特定符号,也就是说,通过该特征符号标记的字符或字符串属于变量名,与变量名存在对应关系的赋值为变量值。如在PHP语言中,‘$a=‘123’;$a()’,$为变量标识符,进而表达式中的变量名即为‘a’,变量值为‘123’。在本实施方式中,当词素序列中包含变量标识符时,则说明流量请求参数中包含有映射关系,因此本实施方式中基于抽象语法树的节点关系得到初始语法结构具体包括,先基于抽象语法树的节点关系获取到变量名与变量值之间的映射关系,进而生成具有该映射关系的初始语法结构。以此确保初始语法结构中能够正常体现变量的映射关系,进而相对确保了初始语法结构的准确性,进而确保对于异常流量的识别准确性。
请参见图5所示,本申请实施例公开了一种检测方法,包括:
步骤S50:获取代码注入流量的流量请求参数。
步骤S51:判断流量请求参数中是否存在不符合流量请求参数对应的语法的标识符,如果是,则依次执行步骤S52以及步骤S53,否则,执行步骤S53。
步骤S52:根据不符合流量请求参数对应的语法的标识符对流量请求参数执行补全上下文操作。
步骤S53:对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树。
步骤S54:基于抽象语法树的节点关系得到流量请求参数中包含的语法结构。
步骤S55:对语法结构执行分析操作得到检测结果。
需要说明的是,本实施例的重点在于在对流量请求参数中的词素进行划分得到词素序列之前,先判断流量请求参数中是否存在不符合流量请求参数对应的语法的标识符,也就是判断是否存在不符合流量请求参数对应的语法的标识符,此处所指的不符合流量请求参数对应的语法的标识符指的是未与其它标识符产生匹配关系的标识符,例如在流量参数中存在‘()’为存在相匹配的标识符,如果在流量参数中仅存在单独的‘(’标识符或‘)’标识符时,则认为流量参数中存在不符合流量请求参数对应的语法的标识符,本实施例在此情况下需要先根据不符合流量请求参数对应的语法的标识符对流量请求参数执行补全上下文操作,进而再对流量请求参数中的词素进行划分得到词素序列,以此相对确保词素序列的正确性,进而进一步确保检测结果的准确性。
在上述实施例的基础上,作为一种优选的实施方式,在获取代码注入流量的流量请求参数之前,方法还包括:
接收网络流量,并在网络流量中获取请求参数中包含有预设特征字符的代码注入流量,预设特征字符为代码注入操作对应的请求参数中具有的特征字符。
需要说明的是,本实施方式的重点在于在获取代码注入流量的流量请求参数之前,先接收网络流量,并对网络流量中请求参数具有预设特征字符的目标网络流量设置为代码注入流量,预设特征字符即为实现代码注入操作的请求参数所具有的特征字符。本实施例通过对整体的网络流量进行了相应的筛选,仅保留网络流量中满足特定条件的代码注入流量进行后续的检测,相对确保了检测的整体效率。
为了加深对于上述实施例的理解,下面提供一种实际应用场景下的PHP代码注入检测系统的具体实施例。
本申请的场景实施例提出的PHP代码注入检测系统,下文简称为“系统”,主要包括前置过滤、请求参数执行上下文识别、词法分析、语法分析及语义分析五个模块。
前置过滤模块:
PHP代码注入检测系统采用基于特征字符的前置过滤方法。根据流量中请求参数的统计规律,正常的请求参数通常只包含字母、数字等字符,而包含注入代码的请求参数则通常出现如括号、分号、引号等特征字符。由此,系统将不包含特征字符的请求参数丢弃,从而减少需要进一步分析的输入,大幅提高了系统的响应速度。
请求参数执行上下文识别模块:
攻击者为了实现其目的,需要精心构造请求参数,既要提交恶意代码,又要闭合注入点上下文以保证注入后PHP程序符合语法。在检测系统的视角,请求参数中的闭合符号有碍于攻击意图的检测,因此需要设法排除闭合符号的干扰。尽管PHP程序漏洞千奇百怪,但通过对大量的PHP程序漏洞原理的研究分析可以发现,PHP代码注入点无外乎为字符串、标识名、注释内容及子表达式等。
执行上下文识别模块将对请求参数进行扫描,当发现请求参数中不匹配的内容时,基于内容推断出可能的执行上下文。例如*/eval($_RE QUEST[1]);/*,模块将推断请求输入的执行上下文为多行注释。
词法分析模块:
词法分析过程将结合推断的执行上下文信息,将请求参数正确切分为词素序列。例如对于被标注为注释上下文的请求参数,词法分析过程将补全上下文,得到输入,进一步产生词素序列:注释,EVAL关键字,‘(’,变量,‘[’,数字,‘]’,‘;’,注释。若无执行上下文信息,词法分析器将把闭合符号解析为两个词法单元(‘*’和‘/’)。这是错误的解析方式,因为没有合法的语句以符号‘*’开始,这样的解析方式最终导致后续的语法分析过程失败。
语法分析模块:
语法分析过程以词法分析过程生成的词素序列作为输入,并根据PHP语法标准生成抽象语法树作为输出。在语法分析过程后,抽象语法树保留了所有注入代码相关的信息,一些不影响代码指令的干扰内容(如注释等)被消除。
语义分析模块:
语义分析过程基于抽象语法树进行,包括常量表达式计算、表达式树属性递推、语义验证及变量追踪等技术。请求参数的恶意置信度将在语义分析过程中评估,系统最终依赖于语义分析输出的置信度做出PHP代码注入攻击的判定。
其中,常量表达式计算:
为了绕过传统的基于规则的检测方法,攻击者经常利用复杂运算来隐藏关键词内容。例如要注入执行phpinfo函数,攻击者利用拼接运算便可使请求参数中不包含phpinfo字符串:('php'.'info')();传统方法对此几乎没有检测能力。应用常量表达式计算技术,表达式('php'.'info')被求值为'phpinfo',系统从而可以识别出对phpinfo函数的调用意图。
其中,表达式树属性递推:
表达式树属性递推技术用于提高系统的准确性。例如对于phpinfo();和('php'.'info')();两个请求参数,虽然两者最终效果都是调用phpinfo函数,但后者应该具有更高的恶意判定置信度,因为其以不符合编程惯例的方式出现,更有可能是攻击者的有意绕过。在语义分析过程中,字表达式'php'.'info'对应的抽象语法树节点将被打上标记,该标记沿着表达式树自底向上递推,最后在评估函数调用时,该标记表明请求参数具有更高的恶意置信度。
其中,语义验证:
语义验证机制用于防止可能的误报。例如系统不会将请求参数system();判定为PHP代码注入,因为在PHP中,system需要一个参数表示要执行的命令。系统采用语义验证机制,只对符合PHP语义的表达式进行记录。
其中,变量追踪:
变量追踪技术使得系统具有更强的对抗绕过的能力。系统通过维护变量符号表实现变量追踪技术,变量符号表是变量名到表达式值及属性的映射。例如对请求参数$a='phpinfo';$a();,语义分析过程在处理第一条赋值语句时将变量$a到表达式值'phpinfo'的映射记录到变量符号表,在处理第二条语句是访问变量符号表获取变量当前值,从而识别到对phpinfo函数的调用。
另外,上述的词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。
语法分析是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“语句”、“表达式”等等,语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述。
语义分析是在语法分析的基础上,对结构上正确的源程序进行上下文有关性质的检查和类型检查等。
请参见图6所示,本申请实施例公开了一种检测装置,包括:
参数获取模块10,用于获取代码注入流量的流量请求参数;
语法树生成模块11,用于对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树;
表达式获取模块12,用于基于抽象语法树的节点关系得到流量请求参数中包含的语法结构;
表达式分析模块13,用于对语法结构执行分析操作得到检测结果。
本申请所提供的检测装置,首先获取代码注入流量的流量请求参数,进而对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树,进而根据抽象语法树的节点关系得到流量请求参数中包含的语法结构,进而对语法结构执行分析操作得到检测结果。由于本装置基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。
在前述实施例的基础上,本申请实施例对检测装置进行进一步的说明和优化。具体的:
在一种具体实施方式中,表达式分析模块13,包括:
置信度生成模块,用于根据语法结构识别流量请求参数的行为意图特征,并根据行为意图特征生成相应的恶意置信度;
结果生成模块,用于基于恶意置信度生成检测结果。
在一种具体实施方式中,装置还包括:
过程获取模块,用于获取语法结构基于节点关系的生成过程;
过程判断模块,用于判断生成过程是否满足异常生成标准,若是,则依次调用提高模块以及结果生成模块,否则,调用结果生成模块。
提高模块,用于提高恶意置信度。
在一种具体实施方式中,表达式获取模块12,包括:
初始表达式模块,用于基于抽象语法树的节点关系得到初始语法结构;
表达式筛选模块,用于将初始语法结构中满足流量请求参数对应语法标准的表达式设置为语法结构。
在一种具体实施方式中,初始表达式模块,包括:
拼接生成模块,用于基于抽象语法树的节点关系执行字符串拼接运算得到初始语法结构。
在一种具体实施方式中,当词素序列中包含变量标识符时,初始表达式模块,包括:
映射获取模块,用于基于抽象语法树的节点关系获取变量名与变量值之间的映射关系;
映射生成模块,用于生成记录有映射关系的初始语法结构。
在一种具体实施方式中,装置还包括:
标识符判断模块,用于判断流量请求参数中是否存在不符合流量请求参数对应的语法的标识符,如果是,则依次调用补全模块以及语法树生成模块11,否则,调用语法树生成模块11。
在一种具体实施方式中,装置还包括:
流量筛选模块,用于接收网络流量,并在网络流量中获取请求参数中包含有预设特征字符的代码注入流量,预设特征字符为代码注入操作对应的请求参数中具有的特征字符。
此外,本申请实施例还公开了一种检测设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上述的检测方法的步骤。
本申请所提供的检测设备,首先获取代码注入流量的流量请求参数,进而对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树,进而根据抽象语法树的节点关系得到流量请求参数中包含的语法结构,进而对语法结构执行分析操作得到检测结果。由于本设备基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。
此外,本申请实施例还公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的检测方法的步骤。
本申请所提供的计算机可读存储介质,首先获取代码注入流量的流量请求参数,进而对流量请求参数中的词素进行划分得到词素序列,并基于词素序列生成抽象语法树,进而根据抽象语法树的节点关系得到流量请求参数中包含的语法结构,进而对语法结构执行分析操作得到检测结果。由于本计算机可读存储介质基于流量请求参数中的词素生成抽象语法树,并基于抽象语法树中包含的语法结构进行分析以发现流量请求参数中存在的代码注入特征,因此能够相对避免因代码注入流量的流量请求参数隐藏关键字而难以确保识别异常流量的准确性的情况产生,进而相对提高了对于异常流量的识别准确性。
以上对本申请所提供的一种检测方法、装置、设备及存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (11)

1.一种检测方法,其特征在于,包括:
获取代码注入流量的流量请求参数;
对所述流量请求参数中的词素进行划分得到词素序列,并基于所述词素序列生成抽象语法树;
基于所述抽象语法树的节点关系得到所述流量请求参数中包含的语法结构;
对所述语法结构执行分析操作得到检测结果。
2.根据权利要求1所述的检测方法,其特征在于,所述对所述语法结构执行分析操作得到检测结果,包括:
根据所述语法结构识别所述流量请求参数的行为意图特征,并根据所述行为意图特征生成相应的恶意置信度;
基于所述恶意置信度生成所述检测结果。
3.根据权利要求2所述的检测方法,其特征在于,在所述基于所述恶意置信度生成所述检测结果之前,所述方法还包括:
获取所述语法结构基于所述节点关系的生成过程;
判断所述生成过程是否满足异常生成标准;
若所述生成过程满足所述异常生成标准,则提高所述恶意置信度,并执行所述基于所述恶意置信度生成所述检测结果的步骤;
若所述生成过程不满足所述异常生成标准,则执行所述基于所述恶意置信度生成所述检测结果的步骤。
4.根据权利要求1所述的检测方法,其特征在于,所述基于所述抽象语法树的节点关系得到所述流量请求参数中包含的语法结构,包括:
基于所述抽象语法树的节点关系得到初始语法结构;
将所述初始语法结构中满足所述流量请求参数对应语法标准的表达式设置为所述语法结构。
5.根据权利要求4所述的检测方法,其特征在于,所述基于所述抽象语法树的节点关系得到初始语法结构,包括:
基于所述抽象语法树的节点关系执行字符串拼接运算得到所述初始语法结构。
6.根据权利要求4所述的检测方法,其特征在于,当所述词素序列中包含变量标识符时,所述基于所述抽象语法树的节点关系得到初始语法结构,包括:
基于所述抽象语法树的节点关系获取变量名与变量值之间的映射关系;
生成记录有所述映射关系的所述初始语法结构。
7.根据权利要求1所述的检测方法,其特征在于,在所述对所述流量请求参数中的词素进行划分得到词素序列之前,所述方法还包括:
判断所述流量请求参数中是否存在不符合所述流量请求参数对应的语法的标识符;
若存在不符合所述流量请求参数对应的语法的标识符,则根据所述不符合流量请求参数对应的语法的标识符对所述流量请求参数执行补全上下文操作,并执行所述对所述流量请求参数中的词素进行划分得到词素序列的步骤;
若不存在不符合所述流量请求参数对应的语法的标识符,则执行所述对所述流量请求参数中的词素进行划分得到词素序列的步骤。
8.根据权利要求1至7任意一项所述的检测方法,其特征在于,在所述获取代码注入流量的流量请求参数之前,所述方法还包括:
接收网络流量,并在所述网络流量中获取请求参数中包含有预设特征字符的所述代码注入流量,所述预设特征字符为代码注入操作对应的请求参数中具有的特征字符。
9.一种检测装置,其特征在于,包括:
参数获取模块,用于获取代码注入流量的流量请求参数;
语法树生成模块,用于对所述流量请求参数中的词素进行划分得到词素序列,并基于所述词素序列生成抽象语法树;
表达式获取模块,用于基于所述抽象语法树的节点关系得到所述流量请求参数中包含的语法结构;
表达式分析模块,用于对所述语法结构执行分析操作得到检测结果。
10.一种检测设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至8任一项所述的检测方法的步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的检测方法的步骤。
CN202010055397.XA 2020-01-17 2020-01-17 一种检测方法、装置、设备及存储介质 Active CN113139183B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010055397.XA CN113139183B (zh) 2020-01-17 2020-01-17 一种检测方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010055397.XA CN113139183B (zh) 2020-01-17 2020-01-17 一种检测方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN113139183A true CN113139183A (zh) 2021-07-20
CN113139183B CN113139183B (zh) 2023-12-29

Family

ID=76808628

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010055397.XA Active CN113139183B (zh) 2020-01-17 2020-01-17 一种检测方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN113139183B (zh)

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100515641B1 (ko) * 2003-04-24 2005-09-22 우순조 모빌적 형상 개념을 기초로 한 구문 분석방법 및 이를이용한 자연어 검색 방법
JP2008129662A (ja) * 2006-11-16 2008-06-05 Nec Corp 情報抽出装置、情報抽出方法、情報抽出プログラム
CN102185930A (zh) * 2011-06-09 2011-09-14 北京理工大学 一种sql注入漏洞检测方法
CN102833270A (zh) * 2012-09-18 2012-12-19 山石网科通信技术(北京)有限公司 Sql注入攻击的检测方法、装置和具有该装置的防火墙
US20140279747A1 (en) * 2013-03-14 2014-09-18 Futurewei Technologies, Inc. System and Method for Model-based Inventory Management of a Communications System
WO2016137674A1 (en) * 2015-02-26 2016-09-01 Mcafee, Inc. System and method to mitigate malware
US9582294B1 (en) * 2015-08-26 2017-02-28 Mckesson Financial Holdings Apparatuses, methods, and computer program products for automatic internationalization of grammatical output
CN107292167A (zh) * 2017-06-27 2017-10-24 北京计算机技术及应用研究所 基于精简语法树的sql语句安全检测方法
US9825976B1 (en) * 2015-09-30 2017-11-21 Fireeye, Inc. Detection and classification of exploit kits
CN107451473A (zh) * 2017-07-27 2017-12-08 杭州美创科技有限公司 基于特征模式识别的sql注入检测方法
CN107526968A (zh) * 2017-08-18 2017-12-29 郑州云海信息技术有限公司 一种基于语法分析的sql防注入方法和装置
CN108875366A (zh) * 2018-05-23 2018-11-23 四川大学 一种面向php程序的sql注入行为检测系统
CN109582528A (zh) * 2018-09-11 2019-04-05 阿里巴巴集团控股有限公司 状态监测方法、装置、电子设备及计算机可读存储介质
EP3506141A1 (en) * 2017-12-29 2019-07-03 Cyphort Inc. System for query injection detection using abstract syntax trees

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100515641B1 (ko) * 2003-04-24 2005-09-22 우순조 모빌적 형상 개념을 기초로 한 구문 분석방법 및 이를이용한 자연어 검색 방법
JP2008129662A (ja) * 2006-11-16 2008-06-05 Nec Corp 情報抽出装置、情報抽出方法、情報抽出プログラム
CN102185930A (zh) * 2011-06-09 2011-09-14 北京理工大学 一种sql注入漏洞检测方法
CN102833270A (zh) * 2012-09-18 2012-12-19 山石网科通信技术(北京)有限公司 Sql注入攻击的检测方法、装置和具有该装置的防火墙
US20140279747A1 (en) * 2013-03-14 2014-09-18 Futurewei Technologies, Inc. System and Method for Model-based Inventory Management of a Communications System
WO2016137674A1 (en) * 2015-02-26 2016-09-01 Mcafee, Inc. System and method to mitigate malware
US9582294B1 (en) * 2015-08-26 2017-02-28 Mckesson Financial Holdings Apparatuses, methods, and computer program products for automatic internationalization of grammatical output
US9825976B1 (en) * 2015-09-30 2017-11-21 Fireeye, Inc. Detection and classification of exploit kits
CN107292167A (zh) * 2017-06-27 2017-10-24 北京计算机技术及应用研究所 基于精简语法树的sql语句安全检测方法
CN107451473A (zh) * 2017-07-27 2017-12-08 杭州美创科技有限公司 基于特征模式识别的sql注入检测方法
CN107526968A (zh) * 2017-08-18 2017-12-29 郑州云海信息技术有限公司 一种基于语法分析的sql防注入方法和装置
EP3506141A1 (en) * 2017-12-29 2019-07-03 Cyphort Inc. System for query injection detection using abstract syntax trees
CN109992989A (zh) * 2017-12-29 2019-07-09 西普霍特公司 使用抽象语法树的用于查询注入检测的系统
CN108875366A (zh) * 2018-05-23 2018-11-23 四川大学 一种面向php程序的sql注入行为检测系统
CN109582528A (zh) * 2018-09-11 2019-04-05 阿里巴巴集团控股有限公司 状态监测方法、装置、电子设备及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
梁娟娟;刘久富;朱丹丹;陈柯;: "基于符号执行的软件静态测试研究", 计算机技术与发展, no. 06 *

Also Published As

Publication number Publication date
CN113139183B (zh) 2023-12-29

Similar Documents

Publication Publication Date Title
CN101661543B (zh) 软件源代码安全漏洞的检测方法及检测装置
US9032516B2 (en) System and method for detecting malicious script
CN112131882A (zh) 一种多源异构网络安全知识图谱构建方法及装置
Sadeghian et al. A taxonomy of SQL injection detection and prevention techniques
CN110225029B (zh) 注入攻击检测方法、装置、服务器及存储介质
US20040205411A1 (en) Method of detecting malicious scripts using code insertion technique
US20010037492A1 (en) Method and apparatus for automatically extracting verification models
US8635602B2 (en) Verification of information-flow downgraders
US20070083933A1 (en) Detection of security vulnerabilities in computer programs
CN112699665B (zh) 一种安全报告文本的三元组抽取方法、装置及电子设备
CN111737150B (zh) 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN113961768B (zh) 敏感词检测方法、装置、计算机设备和存储介质
US9600644B2 (en) Method, a computer program and apparatus for analyzing symbols in a computer
CN111368303A (zh) 一种PowerShell恶意脚本的检测方法及装置
CN103914374A (zh) 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN114253860A (zh) 接口误用缺陷检测方法、装置、可读介质及电子设备
CN115913655A (zh) 一种基于流量分析和语义分析的Shell命令注入检测方法
CN115269427A (zh) 针对web注入漏洞的中间语言表示方法及系统
CN113139183B (zh) 一种检测方法、装置、设备及存储介质
CN115270139A (zh) 一种IoT设备网络服务自动化漏洞分析方法及系统
CN113051876B (zh) 恶意网址识别方法及装置、存储介质、电子设备
CN114936369A (zh) 基于标记的sql注入攻击主动防御方法、系统及存储介质
CN112084499A (zh) 一种基于语法分析的0day攻击检测方法、装置、设备及介质
CN115587364B (zh) 基于前后端关联性分析的固件漏洞输入点定位方法及装置

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
GR01 Patent grant
GR01 Patent grant