CN112817877A - 异常脚本检测方法、装置、计算机设备和存储介质 - Google Patents

异常脚本检测方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN112817877A
CN112817877A CN202110418952.5A CN202110418952A CN112817877A CN 112817877 A CN112817877 A CN 112817877A CN 202110418952 A CN202110418952 A CN 202110418952A CN 112817877 A CN112817877 A CN 112817877A
Authority
CN
China
Prior art keywords
script
detected
current
abnormal
detection result
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
CN202110418952.5A
Other languages
English (en)
Other versions
CN112817877B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110418952.5A priority Critical patent/CN112817877B/zh
Publication of CN112817877A publication Critical patent/CN112817877A/zh
Application granted granted Critical
Publication of CN112817877B publication Critical patent/CN112817877B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本申请涉及一种异常脚本检测方法、装置、计算机设备和存储介质。所述方法包括:获取待检测脚本,对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当上述检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。采用本方法能够提高异常脚本的检测准确性。

Description

异常脚本检测方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种异常脚本检测方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,信息安全越来越受到重视。脚本检测就是用来主动防御发生数据泄漏、数据篡改等安全事件安全的重要方式,对开发人员编写的脚本进行检测,以期望在被黑客攻击之前最大程度的发现异常脚本,从而减少损失。
传统技术中,主要是基于静态检测,即对脚本中的代码进行整体分析,将待检测脚本与已知的恶意脚本做比对,判断待检测脚本是否为异常脚本,这种检测方式单一,存在检测不全面,检测准确性低的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高异常脚本检测准确性的异常脚本检测方法、装置、计算机设备和存储介质。
一种异常脚本检测方法,所述方法包括:
获取待检测脚本;
对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果;
根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果;
基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本;
对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
一种异常脚本检测装置,所述装置包括:
脚本获取模块,用于获取待检测脚本;
初阶静态检测模块,用于对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果;
初阶污点检测模块,用于根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果;
脚本执行模块,用于基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本;
进阶检测模块,用于对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
异常脚本确定模块,用于当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待检测脚本;
对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果;
根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果;
基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本;
对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待检测脚本;
对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果;
根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果;
基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本;
对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
上述异常脚本检测方法、装置、计算机设备和存储介质,通过获取待检测脚本,对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。这样,先对待检测脚本进行资源消耗较少的初阶静态检测处理和初阶污点检测处理,可以快速得到初步检测结果,基于初步检测结果可以快速直观确定待检测脚本是否为异常脚本,再进一步基于虚拟执行场景下执行待检测脚本,对待检测脚本进行解密,得到解密脚本,最后再对解密脚本进行进阶静态检测处理和进阶污点检测处理,得到目标检测结果,基于目标检测结果可以确定经过加密的待检测脚本是否为异常脚本,通过静态检测、污点检测、脚本执行的有序协作,可以扩大检测范围,从而提高异常脚本的检测准确性。
附图说明
图1为一个实施例中异常脚本检测方法的应用环境图;
图2为一个实施例中异常脚本检测方法的流程示意图;
图3为一个实施例中对当前脚本进行当前阶静态检测处理的流程示意图;
图4为一个实施例中对当前脚本进行当前阶污点检测处理的流程示意图;
图5为一个实施例中抽象语法树的结构示意图;
图6为一个实施例中污点泄漏路径的结构示意图;
图7为一个实施例中执行待检测脚本的流程示意图;
图8A为另一个实施例中异常脚本检测方法的流程示意图;
图8B为一个实施例中污点检测方法的流程示意图;
图9为一个实施例中异常脚本检测装置的结构框图;
图10为另一个实施例中异常脚本检测装置的结构框图;
图11为一个实施例中计算机设备的内部结构图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的异常脚本检测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
终端102和服务器104均可单独用于执行本申请实施例中提供的异常脚本检测方法。
服务器在本地获取待检测脚本,服务器对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
终端在本地获取待检测脚本,终端对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。当确定待检测脚本有异常时,终端可以生成携带待检测脚本对应的脚本标识的警告信息,并展示。
终端102和服务器104也可协同用于执行本申请实施例中提供的异常脚本检测方法。
服务器从终端获取待检测脚本,服务器对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。当确定待检测脚本有异常时,服务器可以生成携带待检测脚本对应的脚本标识的警告信息发送至终端,终端将警告信息进行展示。
在一个实施例中,如图2所示,提供了一种异常脚本检测方法,以该方法应用于图1中的计算机设备为例进行说明,计算机设备可以是上述图1中的终端102或服务器104。参考图2,异常脚本检测方法包括以下步骤:
步骤S202,获取待检测脚本。
其中,脚本是指使用一种特定的描述性语言,依据一定的格式编写的可执行文件。待检测脚本是指待检测是否为异常脚本的脚本。
具体地,终端和服务器上存储有大量的脚本,其中可能存在异常脚本、恶意脚本,异常脚本和恶意脚本容易引起终端和服务器上数据被破坏、更改和泄漏等安全问题。因此,计算机设备可以对脚本进行异常检测,从大量的脚本中识别出异常脚本,以防御黑客攻击。
在一个实施例中,计算机设备可以自动触发获取待检测脚本,对待检测脚本进行异常检测。例如,计算机设备可以每隔预设时长自动触发对本地脚本的异常检测。或者,计算机设备每获取到新的脚本时,自动触发对该脚本的异常检测。
在一个实施例中,计算机设备可以是响应于脚本检测请求触发对脚本的异常检测。例如,用户在计算机设备上杀毒应用程序的杀毒界面中触发生成脚本检测请求,计算机设备根据该脚本检测请求对本地脚本进行异常检测,识别出本地的异常脚本。计算机设备也可以接收其他设备发送过来的脚本检测请求,根据该脚本检测请求对本地脚本进行异常检测。
步骤S204,对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果。
其中,静态检测处理是指在不运行脚本的前提下,通过分析脚本中程序代码的组成部分,来寻找代码中潜在的安全问题。初阶静态检测处理是指针对待检测脚本的首次静态检测处理。
具体地,由于静态检测处理的检测速度快且适用于所有格式的脚本,所以计算机设备在获取到待检测脚本后,可以优先对待检测脚本进行初阶静态检测处理,对待检测脚本的源码进行静态分析,判断待检测脚本中是否存在异常源码,从而得到待检测脚本对应的初阶静态检测结果。
在一个实施例中,可以通过特征匹配的方式进行静态检测。具体可以是从待检测脚本中提取特征信息,将提取到的特征信息和病毒库中的特征信息进行匹配,一旦匹配成功,则表明待检测脚本有异常。其中,在进行特征匹配时,可以直接将待检测脚本对应的特征信息和病毒库中的特征信息匹配,也可以对待检测脚本对应的特征信息进行统计,将统计结果和病毒库中的特征信息匹配。例如,从待检测脚本中提取字符串,可以将提取到的字符串和病毒库中的异常脚本字符串进行匹配,也可以对提取到的字符串进行信息熵计算,将计算结果和病毒库中的异常脚本信息熵进行匹配。
在一个实施例中,可以通过机器学习模型进行静态检测。可以是将已知无异常的脚本作为正脚本和已知有异常的脚本作为负脚本,将正脚本和负脚本作为训练脚本,将训练脚本输入待训练的脚本检测模型,将训练脚本对应的标签作为脚本检测模型的预期输出,对脚本检测模型进行有监督训练,得到已训练的脚本检测模型。计算机设备可以将待检测脚本输入已训练的脚本检测模型,脚本检测模型输出待检测脚本对应的初阶静态检测结果。可以理解,可以针对不同的编程语言训练不同的脚本检测模型,提高不同编程语言对应的脚本的检测准确性。
步骤S206,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。
其中,污点检测处理是指在不运行脚本的前提下,通过词法分析,语法分析,控制流、数据流分析等技术对脚本中的程序代码进行扫描和分析,来寻找脚本中的污点泄漏路径。初阶污点检测处理是指针对待检测脚本的首次污点检测处理。
具体地,在得到初阶静态检测结果后,计算机设备可以根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。计算机设备可以是当初阶静态检测结果为脚本无异常时,才对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。当初阶静态检测结果为脚本异常时,计算机设备可以迅速确定待检测脚本为异常脚本,不再执行后续操作。计算机设备也可以是当初阶静态检测结果为脚本异常时,继续对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。可以理解,初阶静态检测处理和初阶污点检测处理是不同的检测处理,可以检测出脚本中不同的异常问题,因此,在已知待检测脚本为异常脚本时,继续对待检测脚本进行后续检测处理可以最大限度地查找出待检测脚本中所有异常信息,全方位挖掘待检测脚本的异常信息,进而有助于相关人员进行数据分析和加强防护。
在一个实施例中,在进行初阶污点检测处理时,计算机设备可以对待检测脚本的源码进行词法分析和语法分析,生成待检测脚本对应的抽象语法树,抽象语法树上的每个节点都表示源码中的一种结构。计算机设备根据抽象语法树上节点的属性和污染源、泄漏点的特性,可以从中确定污染源节点和泄漏节点,对节点与节点之间的操作关系进行分析,判断是否存在从污染源到泄漏点的泄漏路径,当存在污点泄漏路径并且污点泄漏路径满足预设条件时,计算机设备可以确定初阶污点检测结果为待检测脚本有异常。进一步的,初阶污点检测结果还可以包括待检测脚本对应的初始抽象语法树,从而后续在基于虚拟执行场景下执行待检测脚本时,可以直接基于虚拟执行场景下执行初始抽象语法树,从而简化检测步骤,提高检测效率。
步骤S208,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本。
其中,虚拟执行场景是用于对待检测脚本进行动态分析,从而对经过加密、变形、混淆的脚本进行解密还原。虚拟执行场景中集成了虚拟执行算法,通过虚拟执行算法可以对待检测脚本进行动态分析,检测脚本中是否使用了字符串拼接、字符串替换、base64加密等加密混淆方法,从而识别出加密、变形、混淆型脚本,并且,当待检测脚本为经过加密、变形、混淆的脚本时,还可以对待检测脚本进行解密,输出解密后的待检测脚本,还原出最原始的脚本。解密脚本为解密后的待检测脚本。
具体地,若脚本是加密、变形、混淆型异常脚本时,能被外界控制的污点变量和泄漏函数会隐藏在加壳代码中,通过初阶静态检测处理和初阶污点检测处理是无法轻易识别出加密、变形、混淆型异常脚本。因此,当初阶静态检测处理和初阶污点检测处理均未检测出异常时,计算机设备可以进一步在虚拟执行场景下执行待检测脚本,来判断待检测脚本是否经过加密、变形、混淆,并对加密过的待检测脚本进行解密还原,得到待检测脚本对应的解密脚本。计算机设备再对解密脚本进行进阶静态检测处理和进阶污点检测处理,从而最终判断待检测脚本是否为异常脚本。当然,当基于初阶静态检测处理和初阶污点检测处理检测出待检测脚本有异常时,计算机设备也可以在虚拟执行场景下执行待检测脚本,得到待检测脚本对应的解密脚本,再进一步对解密脚本进行进阶静态检测处理和进阶污点检测处理,查找出待检测脚本中更多的异常信息。
在一个实施例中,虚拟执行场景还可以集成有抽象语法树生成算法,因此基于虚拟执行算法执行待检测脚本输出待检测脚本对应的解密脚本后,还可以进一步输出解密脚本对应的目标抽象语法树,从而后续在对解密脚本进行进阶污点检测处理时,计算机设备可以直接对解密脚本对应的目标抽象语法树进行分析得到进阶污点检测结果,从而可以提高检测效率。
步骤S210,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果。
其中,进阶静态检测处理是指针对待检测脚本的二次静态检测处理,具体是对待检测脚本对应的解密脚本的静态检测处理。进阶污点检测处理是指针对待检测脚本的二次污点检测处理,具体是对待检测脚本对应的解密脚本的污点检测处理。
具体地,在得到解密脚本后,计算机设备可以对解密脚本进行进阶静态检测处理得到解密脚本对应的进阶静态检测结果,对解密脚本进行进阶污点检测处理得到进阶污点检测结果。可以理解,若待检测脚本经过加密、变形、混淆,直接对待检测脚本进行静态检测处理和污点检测处理是无法轻易识别出被隐藏起来的异常特征信息和污点泄漏路径。因此,在得到待检测脚本对应的解密脚本后,计算机设备可以进一步对待检测脚本对应的解密脚本进行进阶静态检测处理以及进阶污点检测处理,基于解密脚本对应的进阶静态检测结果以及进阶污点检测结果最终确定待检测脚本是否为异常脚本。
步骤S212,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
具体地,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,计算机设备可以确定待检测脚本为异常脚本。若待检测脚本有异常,计算机设备可以及时生成警告信息来提醒相关人员该脚本有异常,及时进行防护。
在一个实施例中,计算机设备可以按照初阶静态检测处理、初阶污点检测处理、执行脚本、进阶静态检测处理、进阶污点检测处理的顺序对待检测脚本进行异常检测。一旦首次出现检测结果为脚本异常时,计算机设备可以停止后续处理,直接确定待检测脚本为异常脚本,从而节约计算机资源。并且,初阶静态检测处理和初阶污点检测处理都是对源码进行静态分析,而在虚拟执行场景下执行脚本是对脚本的源码进行动态分析,动态分析的资源消耗会大于静态分析。因此,优先对待检测脚本进行初阶静态检测处理、初阶污点检测处理,当初阶静态检测结果和初阶污点检测结果为脚本无异常时,再基于虚拟执行算法执行待检测脚本并进行进阶静态检测处理、进阶污点检测处理,这样不仅可以减少计算机资源消耗,还可以提高异常脚本的检测效率。
在一个实施例中,计算机设备可以按照初阶静态检测处理、初阶污点检测处理、执行脚本、进阶静态检测处理、进阶污点检测处理的顺序对待检测脚本进行全套的异常检测。由于静态检测处理和污点检测处理是不同的检测处理,可以检测出脚本中不同的异常问题,初阶静态检测处理和初阶污点检测处理是针对待检测脚本,进阶静态检测处理和进阶污点检测处理是针对待检测脚本对应的解密脚本,因此进行全套的异常检测可以全方位检测出待检测脚本中多种异常信息,例如,不仅检测出加密脚本中的异常特征信息和异常污点泄漏路径,还检测出解密脚本中的异常特征信息和异常污点泄漏路径。计算机设备可以将待检测脚本对应的所有异常信息发送至相关人员对应的终端或在本地展示待检测脚本对应的所有异常信息,异常信息可以辅助开发人员进行数据防护,抵御黑客攻击。计算机设备也可以根据待检测脚本对应的异常信息的数量生成待检测脚本对应的异常等级,基于待检测脚本的异常等级对待检测脚本进行展示。例如,当待检测脚本对应的异常等级越高,待检测脚本的展示位置越靠前,并同时展示待检测脚本对应的异常等级。可以理解,待检测脚本对应的异常信息的数量越多,待检测脚本对应的异常等级越高。
上述异常脚本检测方法中,通过获取待检测脚本,对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。这样,先对待检测脚本进行资源消耗较少的初阶静态检测处理和初阶污点检测处理,可以快速得到初步检测结果,基于初步检测结果可以快速直观确定待检测脚本是否为异常脚本,再进一步基于虚拟执行场景下执行待检测脚本,对待检测脚本进行解密,得到解密脚本,最后再对解密脚本进行进阶静态检测处理和进阶污点检测处理,得到目标检测结果,基于目标检测结果可以确定经过加密的待检测脚本是否为异常脚本,通过静态检测、污点检测、脚本执行的有序协作,可以扩大检测范围,从而提高异常脚本的检测准确性。
在一个实施例中,如图3所示,当前脚本为待检测脚本或解密脚本,对当前脚本进行当前阶静态检测,得到当前脚本对应的当前阶静态检测结果,包括:
步骤S302,从当前脚本中提取特征信息,得到至少一个待匹配特征信息。
具体地,以当前脚本为例说明静态检测处理过程,当前脚本可以是待检测脚本,也可以是解密脚本,静态检测处理主要是针对脚本在源码层级上的匹配检测。若当前脚本为待检测脚本,则是对当前脚本进行初阶静态检测,得到当前脚本对应的初阶静态检测结果。若当前脚本为解密脚本,则是对当前脚本进行进阶静态检测,得到当前脚本对应的进阶静态检测结果。计算机设备可以对当前脚本进行特征提取,从当前脚本中提取特征信息,基于提取到的特征信息得到至少一个待匹配特征信息。计算机设备可以将脚本中的一行代码作为一个待匹配特征信息,也可以基于脚本中的各个符号元素和位置信息生成一个待匹配特征信息。计算机设备也可以基于分割标识符对脚本进行切分,将切分得到的脚本片段作为待匹配特征信息。例如,在PHP代码中,可以将“=”和“;”作为分割标识符,其中,“=”用于赋值,例如“$b=$a”表示将变量a赋值给变量b,“;”通常作为一行代码的结束符。
举例说明,当前脚本的源码如下所示:
<
Figure 376067DEST_PATH_IMAGE001
PHP
$a=$_GET[‘cmd’];
$b=$a;
eval($b);
Figure 200804DEST_PATH_IMAGE001
>
计算机设备基于分割标识符对脚本进行切分,可以得到“$a”、“$_GET[‘cmd’]”、“$b”、“eval($b)”这样的待匹配特征信息。其中,“$a”、“$_GET[‘cmd’]”、“$b”、“eval($b)”分别作为一个待匹配特征信息。其中, “<
Figure 647966DEST_PATH_IMAGE001
PHP
Figure 165535DEST_PATH_IMAGE001
>”是PHP编程语言编写的脚本的固定格式,无需作为待匹配特征信息。
步骤S304,将各个待匹配特征信息和异常脚本特征信息进行匹配;异常脚本特征信息包括异常脚本字符串信息、异常脚本正则串信息和异常脚本熵信息中的至少一种。
其中,异常脚本特征信息是指异常脚本的特征信息。异常脚本特征信息是对大量的异常脚本进行数据分析得到的。异常脚本字符串信息是指异常脚本对应的字符串类型的特征信息,即用字符串描述的特征信息。异常脚本正则串信息是指异常脚本对应的正则串类型的特征信息,即用正则表达式描述的特征信息。异常脚本熵信息是指异常脚本对应的熵值类型的特征信息,是基于异常脚本的代码框架生成的熵值信息。
具体地,计算机设备上设置有病毒库,病毒库中存储有异常脚本特征信息,异常脚本特征信息包括字符串、正则串、熵值等多种类型的异常特征信息,异常脚本特征信息用于与当前脚本进行相应的匹配查询来鉴定当前脚本是否为异常脚本。异常脚本特征信息是对大量的异常脚本进行数据分析得到的,可以表征异常脚本的普遍性特征。在进行静态检测处理时,计算机设备可以将各个待匹配特征信息分别和异常脚本特征信息进行匹配,一旦匹配成功,就可以确定当前脚本有异常。
步骤S306,当至少一个待匹配特征信息匹配成功时,确定当前脚本对应的当前阶静态检测结果为脚本有异常。
具体地,当至少一个待匹配特征信息匹配成功时,计算机设备可以确定当前脚本包括异常的数据,当前脚本有异常。
举例说明,当前脚本的源码如下所示:
<
Figure 330937DEST_PATH_IMAGE001
PHP
eval($_REQUEST[‘cmd’])
Figure 100310DEST_PATH_IMAGE001
>
当病毒库中包括“eval($_REQUEST[‘cmd’])”这样的异常脚本字符串信息时,当前脚本的第二行代码与该异常脚本字符串信息完全匹配,因此,计算机设备可以确定当前脚本有异常,输出当前脚本对应的当前阶静态检测结果。
在一个实施例中,计算机设备可以针对不同的编程语言建立不同的异常脚本特征信息,即为不同脚本格式的脚本建立对应的异常脚本特征信息。因此,计算机设备在进行特征匹配时,可以先判断当前脚本的脚本格式,即当前脚本中使用的目标编程语言,再获取该目标编程语言对应的目标异常脚本特征信息,将当前脚本对应的待匹配特征信息和目标异常脚本特征信息进行匹配,从而快速确定当前阶静态检测结果。
本实施例中,通过将当前脚本的各个待匹配特征信息和异常脚本特征信息进行匹配能够快速得到当前阶静态检测结果,并且在匹配的时候,支持字符串匹配、正则匹配等多种匹配规则,检测方式灵活高效。
在一个实施例中,异常脚本熵信息的生成方法包括以下步骤:
获取多个异常脚本;分别从各个异常脚本中提取符号元素,得到各个异常脚本对应的符号元素集合,符号元素集合包括多个符号元素和各个符号元素对应的位置信息;基于同一异常脚本对应的符号元素集合生成对应的候选熵信息,得到各个异常脚本分别对应的候选熵信息;基于各个候选熵信息生成异常脚本熵信息。
其中,符号元素是指脚本源码中的特殊符号,例如,数学符号、标点符号、单位符号。候选熵信息是指基于一个异常脚本对应的符号元素生成的熵值。异常脚本熵信息是基于多个异常脚本对应的熵值得到,用于代表异常脚本熵值的普遍性、共性。
具体地,同一黑客或同一黑客群体编写的脚本通常具有特定的风格,例如采用相同或相似的代码框架。此外,代码通常是由数字、字母和特殊符号组成,其中,数字和字母可以根据实际需要进行灵活变换,而特殊符号则是代码框架的重要组成部分,相对来说是比较固定的。因此,计算机设备可以对大量异常脚本的符号元素进行分析,提取出大量异常脚本之间的共性信息,得到异常脚本熵信息。计算机设备具体可以获取多个已知异常的异常脚本,分别从各个异常脚本中提取符号元素,得到各个异常脚本对应的符号元素集合。符号元素集合中不仅包括多个符号元素,还包括各个符号元素分别对应的位置信息,基于符号元素和对应的位置信息可以确定代码的整体框架。计算机设备可以对一个异常脚本对应的符号元素集合进行信息熵计算,生成该异常脚本对应的候选熵信息,从而各个异常脚本可以得到各自对应的候选熵信息。最后,计算机设备可以基于各个候选熵信息生成异常脚本熵信息,例如,对各个候选熵信息进行统计分析,可以将重复次数较多的若干个候选熵信息作为异常脚本熵信息,也可以将每个候选熵信息都作为异常脚本熵信息。也可以对各个候选熵信息进行聚类分析,从而对各个候选熵信息进行分组,得到至少一个中间熵信息,一个中间熵信息可以表征同一黑客或同一黑客群体对应的异常脚本的候选熵信息,将各个中间熵信息分别作为异常脚本熵信息。聚类分析是用于对候选熵信息进行分组,使得不同的中间熵信息之间具有一定区分度。进一步的,计算机设备可以为不同的异常脚本熵信息分配不同的黑客标识,从而若当前脚本对应的当前熵信息和某一异常脚本熵信息匹配成功,则当前阶静态检测结果还可以包括该异常脚本熵信息对应的黑客标识。其中,聚类分析可以采用基于密度的聚类算法(例如DBSCAN聚类算法)、基于划分的聚类方法(例如k-means聚类算法)。
本实施例中,基于异常脚本对应的符号元素集合生成异常脚本对应的候选熵信息,基于多个异常脚本对应的候选熵信息生成异常脚本熵信息,能够提高异常脚本熵信息的可靠性。
在一个实施例中,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,包括:
当初阶静态检测结果为脚本无异常时,对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。
具体地,为了减少计算机资源消耗,在对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果后,若初阶静态检测结果为脚本无异常,计算机设备才会对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,若初阶静态检测结果为脚本异常,计算机设备就无需执行后续操作。
在一个实施例中,如图4所示,当前脚本为待检测脚本或解密脚本,对当前脚本进行污点检测,得到当前脚本对应的污点检测结果,包括:
步骤S402,对当前脚本进行词法分析和语法分析,得到当前脚本对应的当前抽象语法树。
其中,抽象语法树是以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,是脚本源码语法结构的一种抽象表示。
具体地,以当前脚本为例说明污点检测过程,当前脚本可以是待检测脚本,也可以是解密脚本,污点检测主要是针对脚本在源码层级上的路径检测。若当前脚本是待检测脚本,则是对当前脚本进行初阶污点检测处理。得到当前脚本对应的初阶污点检测结果。若当前脚本是解密脚本,则是对当前脚本进行进阶污点检测处理。得到当前脚本对应的进阶污点检测处理。在进行当前阶污点检测处理时,计算机设备先对当前脚本进行词法分析和语法分析,得到当前脚本对应的当前抽象语法树。计算机设备具体可以对当前脚本进行词法分析,把源码拆成多个单词(即token),将各个单词传入分词器,经过一系列的识别器(例如关键字识别器、标识符识别器、常量识别器、操作符识别器等),确定各个单词的词性,从而得到当前脚本对应的token序列。token序列包括多个token和各个token对应的属性。然后,计算机设备可以基于语法分析器对当前脚本对应的token序列进行语法分析,从而得到当前脚本对应的当前抽象语法树。
步骤S404,将当前抽象语法树中的节点类型为变量类型的变量节点、函数类型的函数节点分别和参考污染源进行匹配,将匹配成功的变量节点和函数节点作为第一污染源节点,将当前抽象语法树中节点初始赋值参数为字符串且字符串长度大于预设阈值的变量节点作为第二污染源节点,基于第一污染源节点和第二污染源节点得到目标污染源节点。
其中,污染源是指能被外界控制的变量或读取外界数据的函数,是最初始的污点。异常脚本的关键作用是让攻击者可以在计算机设备的外部让计算机设备执行自己的命令,因此能被外界控制的变量或能读取外界数据的函数都被视为污染源。参考污染源是指已知能接收外部参数的一些常用变量和函数,例如,PHP编程语言中的$_POST、$_REQUEST、$_GET变量等。进一步的,在实际生产场景中,异常脚本为了防止被杀毒软件检测出来,攻击者通常会对脚本的代码做一定的加密混淆处理,部分加密混淆处理后的代码通常包括长度较长的字符串变量。因此,污染源还可以是长度大于预设阈值的字符串变量。字符串变量是指存放字符串常量的变量,其取值是字符串常量。节点初始赋值参数是指变量节点的首次赋值参数。当变量节点的首次赋值参数为字符串,则该变量节点为字符串变量。当变量节点的首次赋值参数为字符串,且字符串长度大于预设阈值,则该变量节点为长度大于预设阈值的字符串变量。
具体地,抽象语法树包括变量、操作、函数等多种类型的节点。基于污染源的特性,计算机设备可以将当前抽象语法树中节点类型为变量类型的变量节点、函数类型的函数节点和参考污染源进行匹配,将匹配成功的变量节点和函数节点作为第一污染源节点。计算机设备还可以将当前抽象语法树中节点初始赋值参数为字符串且字符串长度大于预设阈值的变量节点作为第二污染源节点,也就是将长度大于预设阈值的字符串变量也作为污染源。计算机设备将第一污染源节点和第二污染源节点分别作为目标污染源节点。
举例说明,当前脚本A的源码如下所示:
<
Figure 401978DEST_PATH_IMAGE001
PHP
eval($_REQUEST[‘cmd’])
Figure 28132DEST_PATH_IMAGE001
>
其中,参考污染源包括$_REQUEST ,$_REQUEST变量可以接收计算机设备外部传入的参数,攻击者可以利用$_REQUEST变量在计算机设备上执行恶意指令。当前脚本中的$_REQUEST变量节点与参考污染源匹配成功,因此,当前脚本中的$_REQUEST为污染源,也称为污点变量。在当前脚本A中,$_REQUEST变量可以接收计算机设备外部传入的参数,并使用eval函数执行,因此若攻击者传入‘cmd’的参数值为恶意值,则实现了在计算机设备上执行恶意指令的功能。
当前脚本B的源码如下所示:
<
Figure 734358DEST_PATH_IMAGE001
PHP
$a=“JF9SRVFVRVNUWydjbWQnXQ==”;
$b=base64_decode($a);
eval($b);
Figure 369738DEST_PATH_IMAGE001
>
在当前脚本B中,对代码进行了base64的加密处理,单纯基于参考污染源无法检测到当前脚本中$a的异常。因此,若因为没有检测到与参考污染源匹配的变量节点和函数节点,就直接将当前脚本B对应的污点检测结果确定为脚本无异常,容易忽略潜在的安全问题。因此,虽然没有检测到与参考污染源匹配的变量节点和函数节点,但是变量$a的初始赋值参数 “JF9SRVFVRVNUWydjbWQnXQ==”为字符串,且字符串长度超过了预设阈值,计算机设备可以将字符串变量$a也标记为污染源,持续跟踪该污染源,执行污点检测处理的后续步骤。这样,无需执行当前脚本,也可以在一定程度上检测出部分经过加密处理的异常脚本,从而能够有效减少计算机设备的资源消耗。
步骤S406,将当前抽象语法树中节点类型为函数类型的函数节点和参考泄漏点进行匹配,将匹配成功的函数节点作为泄漏节点。
其中,泄漏点是指最终执行恶意行为的函数。参考泄漏点是指已知具有执行功能的函数,例如PHP编程语言中的eval函数、exec函数、system函数等。
具体地,基于泄漏点的特性,计算机设备可以将当前抽象语法树中节点类型为函数类型的函数节点和参考泄漏点进行匹配,将匹配成功的函数节点作为泄漏节点。
在一个实施例中,计算机设备可以针对不同的编程语言建立不同的参考污染源集合和参考泄漏点集合,即为不同脚本格式的脚本建立对应的参考污染源集合和参考泄漏点集合。因此,计算机设备在确定污染源节点和泄漏节点时,可以先判断当前脚本的脚本格式,即当前脚本中使用的目标编程语言,再获取该目标编程语言对应的目标参考污染源集合和目标参考泄漏点集合,将当前脚本对应的当前抽象语法树中的节点和目标参考污染源集合中的参考污染源、目标参考泄漏点集合中的参考泄漏点进行匹配,从而快速确定污染源节点和泄漏节点。
步骤S408,在当前抽象语法树中,基于目标污染源节点和泄漏节点的位置关系得到当前脚本对应的当前阶污点检测结果。
具体地,污点泄漏路径由三类节点组成:污染源,污染传播点和泄漏点。污染传播点是用于处理污点变量,生成新的污点变量。攻击者为了防止异常脚本被简单地检测出来,会将污染源进行一系列处理、传递后再使用,这一系列的过程中生成的变量均为污染传播点。当污染源经过一系列污染传播点进入泄漏点,则可以确定存在污点泄漏路径。若存在污点泄漏路径,计算机设备可以确定当前脚本对应的当前阶污点检测结果为脚本有异常。进一步的,为了提高检测准确性,减少误报,计算机设备还可以进一步对该污点泄漏路径进行审计,当污点泄漏路径满足预设条件时,计算机设备才确定当前脚本对应的当前阶污点检测结果为脚本有异常。
举例说明,当前脚本的源码如下所示:
<
Figure 463596DEST_PATH_IMAGE001
PHP
$a=$_GET[‘cmd’];
$b=$a;
eval($b);
Figure 526230DEST_PATH_IMAGE001
>
其中,$_GET可获取外部输入的cmd参数,$_GET为污染源,eval函数是执行功能的函数,eval函数为泄漏点。在当前脚本中,首先将污染源赋值给变量a,变量a再赋值传递给变量b,并使用eval函数执行变量b,因此这里$a、$b均为污染传播点,并且形成了有效的污点泄漏路径。
本实施例中,通过对当前脚本进行词法分析和语法分析,得到当前脚本对应的当前抽象语法树,将当前抽象语法树中的节点类型为变量类型的变量节点、函数类型的函数节点分别和参考污染源进行匹配,将匹配成功的变量节点和函数节点作为第一污染源节点,将当前抽象语法树中节点初始赋值参数为字符串且字符串长度大于预设阈值的变量节点作为第二污染源节点,基于第一污染源节点和第二污染源节点得到目标污染源节点,将当前抽象语法树中节点类型为函数类型的函数节点和参考泄漏点进行匹配,将匹配成功的函数节点作为泄漏节点,在当前抽象语法树中,基于目标污染源节点和泄漏节点的位置关系得到当前脚本对应的当前阶污点检测结果。这样,目标污染源不仅包括普通污染源,还包括特殊污染源,扩大了污染源的搜索范围,进而不仅能够搜索到普通脚本中的污点泄漏路径,还能够搜索到部分加密脚本中的污点泄漏路径,从而无需执行加密脚本也可以查找出一部分异常脚本,有效节约了计算机设备的资源消耗。
在一个实施例中,在当前抽象语法树中,基于目标污染源节点和泄漏节点的位置关系得到当前脚本对应的当前阶污点检测结果,包括:
对当前抽象语法树进行深度优先遍历,查询目标污染源节点和泄漏节点之间的连接路径;基于查询结果确定当前脚本对应的当前阶污点检测结果。
具体地,计算机设备对当前抽象语法树进行深度优先遍历,查询目标污染源节点和泄漏节点之间是否存在连接路径。计算机设备可以根据查询结果确定当前脚本对应的当前阶污点检测结果。若目标污染源节点和泄漏节点之间存在连接路径、且连接路径为污点泄漏路径,计算机设备可以确定当前脚本对应的污点检测结果为当前脚本有异常。进一步的,为了提高检测准确性,减少误报,计算机设备还可以进一步对该污点泄漏路径进行审计,当污点泄漏路径满足预设条件时,计算机设备才确定当前脚本对应的污点检测结果为脚本有异常。
举例说明,当前脚本的源码如下所示:
<
Figure 462962DEST_PATH_IMAGE001
PHP
function test($a){
eval($a);
}
$a=$_GET[1];
test($a);
Figure 902034DEST_PATH_IMAGE001
>
计算机设备基于开源的抽象语法树提取工具可以提取得到当前脚本对应的当前抽象语法树,参考图5。其中,“ZVAL(X)”表示X为变量。“VAR”表示其指向的节点为变量类型的节点。DIM表示其指向的两个分支之间的操作类型是DIM类型的变量赋值,根据枝干501可以确定$_GET的参数值为外部参数1,即$_GET[1]。“ASSIGN” 表示其指向的两个分支之间的操作类型是ASSIGN类型的变量赋值,根据枝干502可以确定是将$_GET[1]赋值给$a,即$a=$_GET[1]。“STMT_LIST”表示当前抽象语法树的根节点。“CALL:test” 表示其指向的两个分支之间的操作类型为调用test函数。“EVAL” 表示eval函数。计算机设备基于污染源和泄漏点的特性,可以确定“ZVAL($_GET)”为污染源节点,即$_GET为污染源,“EVAL”为泄漏节点,即“EVAL”为泄漏源。计算机设备对当前抽象语法树进行深度优先遍历,查询到污染源节点和泄漏节点之间的连接路径,上述源码对应的污点泄漏路径可以参考图6。污染源节点和泄漏节点之间的连接路径中存在污染传播点,因此当前脚本存在污点泄漏路径。
本实施例中,通过对当前抽象语法树进行深度优先遍历,能够准确查找到目标污染源节点和泄漏节点之间的连接路径。
在一个实施例中,基于查询结果确定当前脚本对应的当前阶污点检测结果,包括:
当目标污染源节点和泄漏节点之间存在连接路径、且连接路径覆盖有除目标污染源节点和泄漏节点之外的其他变量节点时,确定当前脚本中存在污点泄漏路径;当当前脚本中存在污点泄漏路径时,基于污点泄漏路径确定当前脚本对应的当前阶污点检测结果;当当前脚本中不存在污点泄漏路径时,确定当前脚本对应的当前阶污点检测结果为脚本无异常。
具体地,如果当前脚本中只包括污染源或泄漏点,没有形成有效的污点泄漏路径,则当前脚本对应的当前阶污点检测结果为脚本无异常。只有当污染源经过一系列污染传播点进入泄漏点,即存在污点泄漏路径时,才需要对污点泄漏路径进行更细致的判断来确定当前脚本是否为异常脚本。因此,当目标污染源节点和泄漏节点之间存在连接路径、且连接路径覆盖有除目标污染源节点和泄漏节点之外的其他变量节点时,计算机设备可以确定当前脚本中存在污点泄漏路径。
在一个实施例中,当存在污点泄漏路径时,计算机设备可以直接确定当前脚本对应的当前阶污点检测结果为脚本有异常。当然,计算机设备也可以进一步对污点泄漏路径进行更细致的审计,来确定当前脚本对应的当前阶污点检测结果,从而减少误报,提高污点检测准确性。
本实施例中,当当前脚本中不存在污点泄漏路径时,直接确定当前脚本对应的当前阶污点检测结果为脚本无异常,当当前脚本中存在污点泄漏路径时,不是直接确定当前脚本对应的当前阶污点检测结果为脚本有异常,而是进一步基于污点泄漏路径确定当前脚本对应的当前阶污点检测结果,能够提高污点检测的准确性。
在一个实施例中,当当前脚本中存在污点泄漏路径时,基于污点泄漏路径确定当前脚本对应的当前阶污点检测结果,包括:
当目标污染源节点通过污点泄漏路径以赋值方式将数据传输至泄漏节点、且目标污染源节点为第二污染源节点时,确定当前脚本对应的当前阶污点检测结果为脚本无异常。
具体地,若存在污点泄漏路径,就直接判断待检测脚本为异常脚本,会存在一些误报情况。在实际生产环境中会有开发者由于编码习惯而把大段固定的文字或字符串写在代码变量中,即在开发者正常开发过程中可能也会存在长度过长的字符串变量,这种是开发者正常使用,而非恶意使用,但是开发人员通常不会对代码变量使用字符串拼接、字符串替换、base64加密等技术进行处理。因此,为了减少污点检测的误报,在确定存在污点泄漏路径后,计算机设备可以进行更细致的审计,对污点泄漏路径进行进一步分析来确定当前阶污点检测结果。当目标污染源节点通过污点泄漏路径以赋值方式将数据传输至泄漏节点、且目标污染源节点为第二污染源节点时,计算机设备可以确定当前脚本对应的当前阶污点检测结果为脚本无异常,而其他情况下则确定当前脚本对应的当前阶污点检测结果为脚本异常。可以理解,若参数是污染源未经过任何处理,只是通过赋值这样的简单方式经过污点泄漏路径传递到泄漏点,则当前脚本为安全脚本,不会引发安全问题。若泄漏点的参数是污染源未经过任何处理,只是通过赋值的方式传递到泄漏点的,则极大可能是开发人员在开发过程中正常使用泄漏点函数,而非恶意使用。而攻击者为了避免被杀毒软件查杀,一般不会直接使用参数,而是会使用一系列的拼接、替换、加密函数等方法对参数进行处理。
举例说明,当前脚本的源码如下所示:
<
Figure 115977DEST_PATH_IMAGE001
PHP
$a=“echo \“hello world!\””;
$b=$a;
eval($b);
Figure 349513DEST_PATH_IMAGE001
>
其中,$a被标记为长度过长的字符串变量污染源,泄漏点eval执行的参数为$b,而$b是由$a赋值得到的,未进行其他任何操作。因此,计算机设备可以确定当前脚本对应的当前阶污点检测结果为脚本无异常。
当前脚本的源码如下所示:
<
Figure 445645DEST_PATH_IMAGE001
PHP
$a=“JF9SRVFVRVNUWydjbWQnXQ==”;
$b=base64_decode($a);
eval($b);
Figure 485145DEST_PATH_IMAGE001
>
$a被标记为长度过长的字符串变量污染源,泄漏点eval执行的参数为$b,而$b是由base64_decode($a)得到的,是对$a进行了base64解码操作,即$a在传播过程中进行了赋值以外的操作。因此,计算机设备可以确定当前脚本对应的当前阶污点检测结果为脚本有异常。
本实施例中,当目标污染源节点通过污点泄漏路径以赋值方式将数据传输至泄漏节点、且目标污染源节点为第二污染源节点时,确定当前脚本对应的当前阶污点检测结果为脚本无异常,这样能够有效减少污点检测的误报,提高污点检测的准确性。
在一个实施例中,如图7所示,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,包括:
步骤S702,从待检测脚本对应的初阶污点检测结果中获取待检测脚本对应的初始抽象语法树,将初始抽象语法树转换为待检测操作指令集合。
其中,初始抽象语法树是指待检测脚本对应的抽象语法树。操作指令是指能够被计算机设备识别并直接执行的机器指令。待检测操作指令是指待检测脚本对应的操作指令。待检测操作指令集合包括多个待检测操作指令。
具体地,为了防止被杀毒软件检测出来,攻击者通常会对脚本的代码做一定的加密混淆处理。初阶静态检测处理和初阶污点检测处理通常难以发现经过加密混淆处理的异常脚本。此时,计算机设备可以基于虚拟执行场景下执行待检测脚本,得到解密后的脚本,从而基于解密脚本最终确定待检测脚本是否有异常。计算机设备可以从待检测脚本对应的初阶污点检测结果中获取待检测脚本对应的初始抽象语法树,对初始抽象语法树进行编译,从而将初始抽象语法树转换为待检测操作指令集合。
步骤S704,在虚拟执行场景中获取待检测操作指令集合中各个待检测操作指令对应的内核处理函数,基于内核处理函数执行待检测操作指令集合,得到目标脚本。
具体地,在执行待检测脚本时,计算机设备先将初始抽象语法树转换为待检测操作指令集合,确定要执行的待检测操作指令集合,然后调用各个待检测操作指令分别对应的内核处理函数并执行,从而来完成脚本执行操作,得到目标脚本。如果待检测脚本的代码中使用了字符串拼接、字符串替换、base64加密等方法,在执行待检测操作指令集合时,计算机设备会调用这些方法所对应的内核处理函数,执行内核处理函数中所实现的处理方法,从而对待检测脚本进行解密,得到解密后的脚本。
步骤S706,当待检测脚本和目标脚本不一致时,将目标脚本作为解密脚本,并输出。
具体地,如果待检测脚本的代码中没有使用字符串拼接、字符串替换、base64加密等混淆方法,计算机设备基于内核处理函数执行待检测操作指令集合得到的目标脚本仍然是待检测脚本。如果待检测脚本的代码中使用了字符串拼接、字符串替换、base64加密等混淆方法,计算机设备基于内核处理函数执行待检测操作指令集合得到的目标脚本是待检测脚本对应的解密脚本。因此,当待检测脚本和目标脚本不一致时,计算机设备可以将目标脚本作为解密脚本并输出,对解密脚本进行进阶静态检测处理和进阶污点检测处理,从而最终确定待检测脚本是否为异常脚本。当待检测脚本和目标脚本一致时,计算机设备可以不进行脚本输出。
在一个实施例中,可以针对不同的编程语言建立不同的虚拟执行算法。针对不同的编程语言设计相适应的操作码指令和内核处理函数,从而有助于提高虚拟执行算法的准确性和适应性。
本实施例中,基于内核处理函数可以对加密脚本进行解密,得到解密脚本,后续进一步对解密脚本进行进阶静态检测处理和进阶污点检测处理,这样能够检测出经过加密的异常脚本,提高脚本检测的准确性。
在一个实施例中,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本之后,所述方法还包括:基于虚拟执行场景下生成解密脚本对应的目标抽象语法树。对解密脚本进行进阶污点检测处理,得到解密脚本对应的进阶污点检测结果,包括:基于目标抽象语法树对解密脚本进行进阶污点检测处理,得到解密脚本对应的进阶污点检测结果。
具体地,计算机设备还可以在虚拟执行场景中集成虚拟执行算法和抽象语法树生成算法。这样,计算机设备基于虚拟执行算法执行待检测脚本,输出待检测脚本对应的解密脚本后,还可以进一步基于抽象语法树生成算法生成解密脚本对应的目标抽象语法树,并输出。进而,计算机设备在对解密脚本进行进阶污点检测处理时,无需重新生成解密脚本对应的目标抽象语法树,可以直接获取虚拟执行场景输出的解密脚本对应的目标抽象语法树,对目标抽象语法树进行进阶污点检测处理,得到解密脚本对应的进阶污点检测结果。
本实施例中,在对解密脚本进行进阶污点检测处理时,可以获取虚拟执行场景输出的解密脚本对应的目标抽象语法树,直接对目标抽象语法树进行分析得到解密脚本对应的进阶污点检测结果,从而能够提高解密脚本的进阶污点检测效率。
在一个实施例中,获取待检测脚本,包括:获取脚本检测请求;根据脚本检测请求从本地文件中获取网页脚本作为待检测脚本;所述方法还包括:当确定待检测脚本有异常时,生成携带待检测脚本对应的脚本标识的警告信息;展示警告信息。
其中,脚本检测请求是用于请求对本地的网页脚本进行异常检测。网页脚本是指用于访问网页的脚本,网页脚本主要为php、asp、jsp等脚本形式。脚本标识是一种标识,用于唯一标识脚本,具体可以包括字母、数字和符号中至少一种字符的字符串。例如,脚本的名称、脚本的存储路径。警告信息可为视频、图像、语音、文字中的至少一种。
具体地,攻击者会基于恶意的网页脚本入侵网页服务器,基于恶意的网页脚本获取对网页服务器的部分控制操作权限,进而执行恶意操作。为了预防恶意攻击行为,计算机设备需要及时对本地的网页脚本进行查杀,查找出异常的网页脚本,及时采取相应措施。计算机设备上可以安装有杀毒软件,计算机设备可以运行杀毒软件并展示杀毒界面,杀毒界面中展示有用于触发脚本检测请求的控件。当检测到作用于该控件的触发操作时,计算机设备可以生成脚本检测请求,根据脚本检测请求从本地文件中获取网页脚本作为待检测脚本。然后,计算机设备对待检测脚本进行有序的初阶静态检测处理、初阶污点检测处理、脚本执行、进阶静态检测处理、进阶污点检测处理来确定待检测脚本是否为异常脚本。当基于各种检测结果确定待检测脚本有异常时,计算机设备可以生成携带待检测脚本对应的脚本标识的警告信息,向用户展示该警告信息。其中,触发操作具体可以是单击操作、双击操作、长按操作或语音操作等。警告信息还可以进一步包括待检测脚本对应的各种异常信息。
可以理解,计算机设备也可以接收其他设备发送过来的脚本检测请求,根据该脚本检测请求对本地的网页脚本进行异常检测,当异常检测结果表明本地的网页脚本有异常时,计算机设备可以生成携带异常网页脚本对应的脚本标识的警告信息,向脚本检测请求的发送方返回该警告信息,在脚本检测请求的发送方进行警告信息的展示,以及时通过警告消息通知相关人员。
本实施例中,根据脚本检测请求触发脚本的异常检测,能够根据实际需要触发脚本检测,而不是盲目检测。当待检测脚本有异常时,生成携带待检测脚本对应的脚本标识的警告信息并展示,能够及时提醒相关人员提高警惕。
本申请还提供一种应用场景,该应用场景应用上述的异常脚本检测方法。具体地,该异常脚本检测方法在该应用场景的应用如下:
webshell是一种可以在Web服务器上运行的恶意脚本,主要为php、asp、jsp等脚本形式。入侵者将恶意webshell上传至Web服务器,通过web方式利用这些webshell获取对Web服务器的某些控制操作权限,进而执行恶意操作,例如执行系统命令、窃取用户数据、查看或删除数据库等,对企业造成极大的危害。Webshell可以存储在终端,也可以存储在服务器上。
计算机设备上包括静态检测模块、污点检测模块和虚拟执行模块。静态检测模块用于对脚本进行静态检测,污点检测模块用于对脚本进行污点检测,虚拟执行模块用于执行脚本,输出解密后的代码和解密后的代码对应的抽象语法树。
参考图8A,计算机设备首先通过静态检测模块对待检测脚本进行静态检测,若静态检测模块没有报毒,再通过污点检测模块对待检测脚本进行污点检测,若污点检测模块也未报毒,则将待检测脚本输入虚拟执行模块进行执行,若虚拟执行模块没有输出新的抽象语法树(Abstract Syntax Tree,AST)和代码,则将待检测脚本最终确定为非webshell,结束本次检测;否则,则将虚拟执行模块输出的新的抽象语法树和代码(解密脚本和解密脚本对应的目标抽象语法树),分别输入污点检测模块和静态检测模块进行二次检测,若判定为webshell则输出报毒结果并结束本次检测,若这两个检测模块均未报毒也结束本次检测。
1、初阶静态检测处理
计算机设备对待检测脚本进行初阶静态检测处理,判断待检测脚本是否有异常。静态检测处理主要是对待检测脚本在源码层级上的匹配检测,服务器中包括病毒库,病毒库中内置了一些恶意特征信息,包括字符串、正则串、熵值等多种类型的特征信息,用于与待检测脚本进行相应的匹配查询来判断待检测脚本是否为webshell。
计算机设备读取待检测脚本后,将待检测脚本的源码内容与病毒库中的特征信息进行匹配。若符合匹配规则(例如字符串完全匹配、正则匹配等多种匹配规则),则为匹配到病毒库,则将待检测脚本确定为webshell,输出报毒结果并结束本次检测,若未匹配到病毒库,则执行步骤2。
2、初阶污点检测处理
参考图8B,计算机设备基于开源的抽象语法树提取工具,提取生成出待检测脚本的初始抽象语法树,并将初始抽象语法树作为污点检测模块的输入,使得污点检测模块可以方便地遍历待检测脚本的代码结构。计算机设备获取到待检测脚本的初始抽象语法树后,通过污点检测模块对初始抽象语法树进行分析,判断待检测脚本是否为webshell。首先对待检测脚本的初始抽象语法树进行深度优先遍历,查找其是否存在污染源、污染传播点和泄漏点,若存在,则记录从污染源到泄漏点的路径,判断是否为污点泄漏路径,若存在污点泄漏路径,则进一步判断该污点泄漏路径是否需要进行审计,若不需要进行审计,则确定待检测脚本为webshell,若根据审计结果确定待检测脚本为webshell,污点检测模块输出报毒结果并结束本次检测,否则执行步骤3。
污点泄漏路径由三类节点组成:污染源,污染传播点和泄漏点。
污染源:能被外界控制的变量或读取外界数据的函数,也是最初始的污点。webshell的目的是攻击者从服务器外部让服务器执行自己的命令,因此能被外界控制的变量或能读取外界数据的函数都被视为污染源。此外,为了提高检测效率,应对经过加密处理的加密类型脚本,可以进一步将长度过长的字符串变量作为特殊的污染源。若一个字符串变量的长度超过了预设阈值,则将此字符串变量标记为污染源,持续跟踪该污染源,执行污点检测的后续步骤。
计算机设备在污点检测模块中内置了参考污染源集合,参考污染源集合包含了代码中能接收外部参数的一些常用变量和函数,例如PHP编程语言中的$_POST、$_REQUEST、$_GET等,并且这个参考污染源集合所包含的数据可以随时进行更新,以不断地扩充污点检测模块的能力。在遍历初始抽象语法树的过程中,若初始抽象语法树的节点匹配到参考污染源集合中的参考污染源,则将该节点判定为污染源节点。
污染传播点:处理污点变量,并生成新的污点变量。攻击者为了防止webshell被杀毒软件简单地检测出来,会将污染源进行一系列处理、传递后再使用,这一系列的过程中生成的变量均为污染传播点。
泄漏点:最终执行恶意行为的函数。
计算机设备在污点检测模块中内置了参考泄漏点集合,参考泄漏点集合包含了代码中具有执行功能的一些函数,例如PHP编程语言中的eval函数、exec函数、system函数等,并且这个参考泄漏点集合所包含的可执行函数可以随时进行更新,不断扩充,以不断地扩充污点检测模块的能力。
如果待检测脚本代码中只包含污染源或泄漏点,没有形成污点泄漏路径,则不存在安全隐患,不是webshell,只有当污染源经过一系列污染传播点,进入泄漏点,即存在污点泄漏路径,才需要进一步判断是否为webshell。污点检测模块通过对待检测脚本的初始抽象语法树进行深度优先遍历,获取污染源和泄漏点,并判断是否存在从污染源经过污染传播点到泄漏点的路径,即是否存在污点泄漏路径。若存在污点泄漏路径,并且污染源不是长度过长的字符串变量,则将待检测脚本鉴定为webshell,输出报毒结果并结束本次检测;若存在污点泄漏路径,并且污染源是长度过长的字符串变量,则需要对污点泄漏路径进行审计,若根据审计结果将待检测脚本确定为webshell,则输出报毒结果并结束本次检测;若不存在污点泄漏路径,则执行步骤3。
在实际生产环境中会有开发者由于编码习惯而把大段固定的文字或字符串写在代码变量中,即在开发者正常开发过程中可能也会存在长度过长的字符串变量,这种是开发者正常使用,而非恶意使用。因此,为了避免对这种开发者代码的误报,若存在污点泄漏路径,并且污染源是长度过长的字符串变量,则会对污点泄漏路径进行审计。审计方法具体为分析污点泄漏路径中污染源的传播方式,若整个传播过程中污染源只是通过赋值方式传递到泄漏点,未进行其他任何操作,则认为是开发者在开发过程中正常使用这些泄漏点函数,而非恶意使用,则将待检测脚本鉴定为非webshell,输出报毒结果并结束本次检测,否则执行步骤3。而攻击者为了避免被杀毒软件查杀,一般不会直接使用参数,一般不会将污染源只是通过赋值方式传递到泄漏点,而是首先将参数加密或者混淆为较长的字符串,然后在泄漏点使用时再将参数进行字符串替换、解密等操作,还原出真正的参数再进行使用。
3、脚本执行
计算机设备通过虚拟执行模块执行待检测脚本,执行完毕后判断是否有新的数据流输出,若有新的数据流输出,即输出解密脚本和解密脚本对应的目标抽象语法树,则执行步骤4,否则判为非webshell,输出报毒结果并结束本次检测。
以php格式的脚本为例,虚拟执行模块从污点检测模块获取待检测脚本对应的初始抽象语法树,并将初始抽象语法树转化为操作指令集合(Opcodes),然后逐行执行Opcode。Opcode是php语言所定义的一组操作指令标识,对应着相应的内核处理函数,Opcodes即为多个Opcode的集合,php代码经过编译生成Opcodes,进入执行阶段,执行每一条Opcode,实质上是调用执行每一条Opcode所对应的内核函数。虚拟执行模块根据php代码的执行逻辑实现了虚拟执行算法,在虚拟执行算法中实现了php语言所定义的所有内核处理函数。当基于虚拟执行算法逐行执行Opcode时,会找到各个Opcode所对应的内核处理函数,执行真正的处理。因此,如果待检测脚本的代码中使用了字符串拼接、字符串替换、base64加密等方法,在虚拟执行模块中生成Opcodes进行虚拟技术执行时,会调用这些方法所对应的内核处理函数,执行内核处理函数中所实现的处理方法,得到执行结果。若执行结果和待检测脚本不一致,则执行结果为解密脚本,将解密脚本进行输出。若执行结果和待检测脚本一致,则待检测脚本未加密,不输出数据。虚拟执行模块还可以进一步生成解密脚本对应的目标抽象语法树,并输出。若虚拟执行模块执行完毕后输出了解密后的数据流,包括解密脚本和解密脚本对应的抽象语法树,则将解密后的数据流输出给步骤4、步骤5进行进一步的检测;若未输出新的数据流,则将待检测脚本判为非webshell,输出报毒结果并结束本次检测。
4、进阶污点检测处理
计算机设备获取到步骤3所生成的目标抽象语法树,将其重新输入污点检测模块进行检测,具体检测步骤与步骤2一样。若污点检测模块基于目标抽象语法树确定解密脚本为webshell,则将待检测脚本确定为webshell,输出报毒结果并结束本次检测;若未判为webshell,则执行步骤5。
5、进阶静态检测处理
计算机设备获取到步骤3所生成的解密脚本,将其重新输入静态检测模块进行检测,具体检测步骤与步骤1一样。此时,计算机设备获取静态检测模块对解密脚本的进阶静态检测结果,将其作为最终的报毒结果,输出对待检测脚本的报毒结果并结束本次检测。
本实施例中,通过静态检测、污点检测和脚本执行的有机有序结合,实现了对脚本的快速准确查杀。此外,通过技术创新改进了污点检测技术,并实现了虚拟执行技术,对于加密类webshell脚本具有快速、高效的查杀特点。其中,引入了虚拟执行技术,实现了对字符串替换、字符串拼接、base64加密等加密方法的解密,输出真正执行的webshell代码,因此提高了对于加密类webshell脚本的识别率。并且改进了污点检测方法,增加了对泄漏路径的审计,提高了检测准确性,极大地降低了误报率。
本申请的异常脚本检测方法可以应用于杀毒引擎中,例如应用于腾讯自研反病毒引擎TAV的webshell脚本类脚本检测逻辑中,具有查杀速度快、通杀性强、误报率低等特点。
应该理解的是,虽然图2-4、7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-4、7中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图9所示,提供了一种异常脚本检测装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:脚本获取模块902、初阶静态检测模块904、初阶污点检测模块906、脚本执行模块908、进阶检测模块910和异常脚本确定模块912,其中:
脚本获取模块902,用于获取待检测脚本;
初阶静态检测模块904,用于对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果;
初阶污点检测模块906,用于根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果;
脚本执行模块908,用于基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本;
进阶检测模块910,用于对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
异常脚本确定模块912,用于当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。
在一个实施例中,当前脚本为待检测脚本或解密脚本,初阶静态检测模块和进阶检测模块还用于从当前脚本中提取特征信息,得到至少一个待匹配特征信息,将各个待匹配特征信息和异常脚本特征信息进行匹配,异常脚本特征信息包括异常脚本字符串信息、异常脚本正则串信息和异常脚本熵信息中的至少一种,当至少一个待匹配特征信息匹配成功时,确定当前脚本对应的当前阶静态检测结果为脚本有异常。
在一个实施例中,如图10所示,所述装置还包括:
异常脚本特征信息生成模块901,用于获取多个异常脚本,分别从各个异常脚本中提取符号元素,得到各个异常脚本对应的符号元素集合,符号元素集合包括多个符号元素和各个符号元素对应的位置信息,基于同一异常脚本对应的符号元素集合生成对应的候选熵信息,得到各个异常脚本分别对应的候选熵信息,基于各个候选熵信息生成异常脚本熵信息。
在一个实施例中,初阶污点检测模块还用于当初阶静态检测结果为脚本无异常时,对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果。
在一个实施例中,当前脚本为待检测脚本或解密脚本,初阶污点检测模块和进阶检测模块还用于对当前脚本进行词法分析和语法分析,得到当前脚本对应的当前抽象语法树,将当前抽象语法树中的节点类型为变量类型的变量节点、函数类型的函数节点分别和参考污染源进行匹配,将匹配成功的变量节点和函数节点作为第一污染源节点,将当前抽象语法树中节点初始赋值参数为字符串且字符串长度大于预设阈值的变量节点作为第二污染源节点,基于第一污染源节点和第二污染源节点得到目标污染源节点,将当前抽象语法树中节点类型为函数类型的函数节点和参考泄漏点进行匹配,将匹配成功的函数节点作为泄漏节点,在当前抽象语法树中,基于目标污染源节点和泄漏节点的位置关系得到当前脚本对应的当前阶污点检测结果。
在一个实施例中,初阶污点检测模块和进阶检测模块还用于对当前抽象语法树进行深度优先遍历,查询目标污染源节点和泄漏节点之间的连接路径,基于查询结果确定当前脚本对应的当前阶污点检测结果。
在一个实施例中,初阶污点检测模块和进阶检测模块还用于当目标污染源节点和泄漏节点之间存在连接路径、且连接路径覆盖有除目标污染源节点和泄漏节点之外的其他变量节点时,确定当前脚本中存在污点泄漏路径,当当前脚本中存在污点泄漏路径时,基于污点泄漏路径确定当前脚本对应的当前阶污点检测结果,当当前脚本中不存在污点泄漏路径时,确定当前脚本对应的当前阶污点检测结果为脚本无异常。
在一个实施例中,初阶污点检测模块和进阶检测模块还用于当目标污染源节点通过污点泄漏路径以赋值方式将数据传输至泄漏节点、且目标污染源节点为第二污染源节点时,确定当前脚本对应的当前阶污点检测结果为脚本无异常。
在一个实施例中,脚本执行模块还用于从待检测脚本对应的初阶污点检测结果中获取待检测脚本对应的初始抽象语法树,将初始抽象语法树转换为待检测操作指令集合,在虚拟执行场景中获取待检测操作指令集合中各个待检测操作指令对应的内核处理函数,基于内核处理函数执行待检测操作指令集合,得到目标脚本,当待检测脚本和目标脚本不一致时,将目标脚本作为解密脚本,并输出。
在一个实施例中,脚本执行模块还用于基于虚拟执行场景下生成解密脚本对应的目标抽象语法树。进阶检测模块还用于基于目标抽象语法树对解密脚本进行进阶污点检测处理,得到解密脚本对应的进阶污点检测结果。
在一个实施例中,脚本获取模块还用于获取脚本检测请求,根据脚本检测请求从本地文件中获取网页脚本作为待检测脚本。异常脚本确定模块还用于当确定待检测脚本有异常时,生成携带待检测脚本对应的脚本标识的警告信息;展示警告信息。
上述异常脚本检测装置,通过获取待检测脚本,对待检测脚本进行初阶静态检测处理,得到待检测脚本对应的初阶静态检测结果,根据待检测脚本对应的初阶静态检测结果对待检测脚本进行初阶污点检测处理,得到待检测脚本对应的初阶污点检测结果,基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出待检测脚本在虚拟执行场景执行后对应的解密脚本,对解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到解密脚本对应的进阶静态检测结果以及进阶污点检测结果,当待检测脚本对应的初阶静态检测结果、初阶污点检测结果、解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定待检测脚本为异常脚本。这样,先对待检测脚本进行资源消耗较少的初阶静态检测处理和初阶污点检测处理,可以快速得到初步检测结果,基于初步检测结果可以快速直观确定待检测脚本是否为异常脚本,再进一步基于虚拟执行场景下执行待检测脚本,对待检测脚本进行解密,得到解密脚本,最后再对解密脚本进行进阶静态检测处理和进阶污点检测处理,得到目标检测结果,基于目标检测结果可以确定经过加密的待检测脚本是否为异常脚本,通过静态检测、污点检测、脚本执行的有序协作,可以扩大检测范围,从而提高异常脚本的检测准确性。
关于异常脚本检测装置的具体限定可以参见上文中对于异常脚本检测方法的限定,在此不再赘述。上述异常脚本检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储异常脚本特征信息、参考污染源、参考泄漏源等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种异常脚本检测方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种异常脚本检测方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11、12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (15)

1.一种异常脚本检测方法,其特征在于,所述方法包括:
获取待检测脚本;
对所述待检测脚本进行初阶静态检测处理,得到所述待检测脚本对应的初阶静态检测结果;
根据所述待检测脚本对应的初阶静态检测结果对所述待检测脚本进行初阶污点检测处理,得到所述待检测脚本对应的初阶污点检测结果;
基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出所述待检测脚本在所述虚拟执行场景执行后对应的解密脚本;
对所述解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到所述解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
当所述待检测脚本对应的初阶静态检测结果、初阶污点检测结果、所述解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定所述待检测脚本为异常脚本。
2.根据权利要求1所述的方法,其特征在于,当前脚本为所述待检测脚本或所述解密脚本,对所述当前脚本进行当前阶静态检测,得到所述当前脚本对应的当前阶静态检测结果,包括:
从所述当前脚本中提取特征信息,得到至少一个待匹配特征信息;
将各个待匹配特征信息和异常脚本特征信息进行匹配;所述异常脚本特征信息包括异常脚本字符串信息、异常脚本正则串信息和异常脚本熵信息中的至少一种;
当至少一个待匹配特征信息匹配成功时,确定所述当前脚本对应的当前阶静态检测结果为脚本有异常。
3.根据权利要求2所述的方法,其特征在于,所述异常脚本熵信息的生成方法包括以下步骤:
获取多个异常脚本;
分别从各个异常脚本中提取符号元素,得到各个异常脚本对应的符号元素集合,所述符号元素集合包括多个符号元素和各个符号元素对应的位置信息;
基于同一异常脚本对应的符号元素集合生成对应的候选熵信息,得到各个异常脚本分别对应的候选熵信息;
基于各个候选熵信息生成所述异常脚本熵信息。
4.根据权利要求1所述的方法,其特征在于,所述根据所述待检测脚本对应的初阶静态检测结果对所述待检测脚本进行初阶污点检测处理,得到所述待检测脚本对应的初阶污点检测结果,包括:
当所述初阶静态检测结果为脚本无异常时,对所述待检测脚本进行初阶污点检测处理,得到所述待检测脚本对应的初阶污点检测结果。
5.根据权利要求1至4任意一项所述的方法,其特征在于,当前脚本为所述待检测脚本或所述解密脚本,对所述当前脚本进行当前阶污点检测处理,得到所述当前脚本对应的当前阶污点检测结果,包括:
对所述当前脚本进行词法分析和语法分析,得到所述当前脚本对应的当前抽象语法树;
将所述当前抽象语法树中的节点类型为变量类型的变量节点、函数类型的函数节点分别和参考污染源进行匹配,将匹配成功的变量节点和函数节点作为第一污染源节点,将所述当前抽象语法树中节点初始赋值参数为字符串且字符串长度大于预设阈值的变量节点作为第二污染源节点,基于所述第一污染源节点和所述第二污染源节点得到目标污染源节点;
将所述当前抽象语法树中节点类型为函数类型的函数节点和参考泄漏点进行匹配,将匹配成功的函数节点作为泄漏节点;
在所述当前抽象语法树中,基于所述目标污染源节点和所述泄漏节点的位置关系得到所述当前脚本对应的当前阶污点检测结果。
6.根据权利要求5所述的方法,其特征在于,所述在所述当前抽象语法树中,基于所述目标污染源节点和所述泄漏节点的位置关系得到所述当前脚本对应的当前阶污点检测结果,包括:
对所述当前抽象语法树进行深度优先遍历,查询所述目标污染源节点和所述泄漏节点之间的连接路径;
基于查询结果确定所述当前脚本对应的当前阶污点检测结果。
7.根据权利要求6所述的方法,其特征在于,所述基于查询结果确定所述当前脚本对应的当前阶污点检测结果,包括:
当所述目标污染源节点和所述泄漏节点之间存在连接路径、且所述连接路径覆盖有除所述目标污染源节点和所述泄漏节点之外的其他变量节点时,确定当前脚本中存在污点泄漏路径;
当当前脚本中存在污点泄漏路径时,基于污点泄漏路径确定所述当前脚本对应的当前阶污点检测结果;
当当前脚本中不存在污点泄漏路径时,确定所述当前脚本对应的当前阶污点检测结果为脚本无异常。
8.根据权利要求7所述的方法,其特征在于,所述当当前脚本中存在污点泄漏路径时,基于污点泄漏路径确定所述当前脚本对应的当前阶污点检测结果,包括:
当所述目标污染源节点通过污点泄漏路径以赋值方式将数据传输至所述泄漏节点、且所述目标污染源节点为第二污染源节点时,确定所述当前脚本对应的当前阶污点检测结果为脚本无异常。
9.根据权利要求1所述的方法,其特征在于,所述基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出所述待检测脚本在所述虚拟执行场景执行后对应的解密脚本,包括:
从所述待检测脚本对应的初阶污点检测结果中获取所述待检测脚本对应的初始抽象语法树,将所述初始抽象语法树转换为待检测操作指令集合;
在所述虚拟执行场景中获取所述待检测操作指令集合中各个待检测操作指令对应的内核处理函数,基于所述内核处理函数执行所述待检测操作指令集合,得到目标脚本;
当所述待检测脚本和所述目标脚本不一致时,将所述目标脚本作为所述解密脚本,并输出。
10.根据权利要求1所述的方法,其特征在于,所述基于虚拟执行场景下执行所述经过初阶污点检测处理的待检测脚本,输出所述待检测脚本在所述虚拟执行场景执行后对应的解密脚本之后,所述方法还包括:
基于所述虚拟执行场景下生成所述解密脚本对应的目标抽象语法树;
所述对所述解密脚本进行进阶污点检测处理,得到所述解密脚本对应的进阶污点检测结果,包括:
基于所述目标抽象语法树对所述解密脚本进行进阶污点检测处理,得到所述解密脚本对应的进阶污点检测结果。
11.根据权利要求1所述的方法,其特征在于,所述获取待检测脚本,包括:
获取脚本检测请求;
根据所述脚本检测请求从本地文件中获取网页脚本作为所述待检测脚本;
所述方法还包括:
当确定所述待检测脚本有异常时,生成携带所述待检测脚本对应的脚本标识的警告信息;
展示所述警告信息。
12.一种异常脚本检测装置,其特征在于,所述装置包括:
脚本获取模块,用于获取待检测脚本;
初阶静态检测模块,用于对所述待检测脚本进行初阶静态检测处理,得到所述待检测脚本对应的初阶静态检测结果;
初阶污点检测模块,用于根据所述待检测脚本对应的初阶静态检测结果对所述待检测脚本进行初阶污点检测处理,得到所述待检测脚本对应的初阶污点检测结果;
脚本执行模块,用于基于虚拟执行场景下执行经过初阶污点检测处理的待检测脚本,输出所述待检测脚本在所述虚拟执行场景执行后对应的解密脚本;
进阶检测模块,用于对所述解密脚本分别进行进阶静态检测处理以及进阶污点检测处理,得到所述解密脚本对应的进阶静态检测结果以及进阶污点检测结果;
异常脚本确定模块,用于当所述待检测脚本对应的初阶静态检测结果、初阶污点检测结果、所述解密脚本对应的进阶静态检测结果和进阶污点检测结果中至少一个检测结果为脚本异常时,确定所述待检测脚本为异常脚本。
13.根据权利要求12所述的装置,其特征在于,当前脚本为所述待检测脚本或所述解密脚本,所述初阶静态检测模块还用于从所述当前脚本中提取特征信息,得到至少一个待匹配特征信息;将各个待匹配特征信息和异常脚本特征信息进行匹配;所述异常脚本特征信息包括异常脚本字符串信息、异常脚本正则串信息和异常脚本熵信息中的至少一种;当至少一个待匹配特征信息匹配成功时,确定所述当前脚本对应的当前阶静态检测结果为脚本有异常。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
CN202110418952.5A 2021-04-19 2021-04-19 异常脚本检测方法、装置、计算机设备和存储介质 Active CN112817877B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110418952.5A CN112817877B (zh) 2021-04-19 2021-04-19 异常脚本检测方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110418952.5A CN112817877B (zh) 2021-04-19 2021-04-19 异常脚本检测方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN112817877A true CN112817877A (zh) 2021-05-18
CN112817877B CN112817877B (zh) 2021-07-13

Family

ID=75863698

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110418952.5A Active CN112817877B (zh) 2021-04-19 2021-04-19 异常脚本检测方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN112817877B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113271237A (zh) * 2021-06-16 2021-08-17 山石网科通信技术股份有限公司 工控协议的解析方法、装置、存储介质及处理器
CN113761533A (zh) * 2021-09-08 2021-12-07 广东电网有限责任公司江门供电局 Webshell检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160156646A1 (en) * 2013-07-31 2016-06-02 Hewlett-Packard Development Company, L.P. Signal tokens indicative of malware
CN106572117A (zh) * 2016-11-11 2017-04-19 北京安普诺信息技术有限公司 一种WebShell文件的检测方法和装置
CN112199292A (zh) * 2020-10-19 2021-01-08 湖南泛联新安信息科技有限公司 一种基于规则定义的Java污点分析方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160156646A1 (en) * 2013-07-31 2016-06-02 Hewlett-Packard Development Company, L.P. Signal tokens indicative of malware
CN106572117A (zh) * 2016-11-11 2017-04-19 北京安普诺信息技术有限公司 一种WebShell文件的检测方法和装置
CN112199292A (zh) * 2020-10-19 2021-01-08 湖南泛联新安信息科技有限公司 一种基于规则定义的Java污点分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
麻荣宽等: "PHP 程序污点型漏洞静态检测方法", 《计算机工程与应用》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113271237A (zh) * 2021-06-16 2021-08-17 山石网科通信技术股份有限公司 工控协议的解析方法、装置、存储介质及处理器
CN113271237B (zh) * 2021-06-16 2022-12-13 山石网科通信技术股份有限公司 工控协议的解析方法、装置、存储介质及处理器
CN113761533A (zh) * 2021-09-08 2021-12-07 广东电网有限责任公司江门供电局 Webshell检测方法及系统

Also Published As

Publication number Publication date
CN112817877B (zh) 2021-07-13

Similar Documents

Publication Publication Date Title
CN110233849B (zh) 网络安全态势分析的方法及系统
CN110737899B (zh) 一种基于机器学习的智能合约安全漏洞检测方法
Uwagbole et al. Applied machine learning predictive analytics to SQL injection attack detection and prevention
CN110225029B (zh) 注入攻击检测方法、装置、服务器及存储介质
CN112800427B (zh) webshell检测方法、装置、电子设备和存储介质
CN104520871A (zh) 漏洞矢量信息分析
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN111488590A (zh) 一种基于用户行为可信分析的sql注入检测方法
EP3566166A1 (en) Management of security vulnerabilities
Liu et al. Vfdetect: A vulnerable code clone detection system based on vulnerability fingerprint
CN101751530A (zh) 检测漏洞攻击行为的方法及设备
US11783034B2 (en) Apparatus and method for detecting malicious script
CN113190839A (zh) 一种基于SQL注入的web攻击防护方法及系统
US9600644B2 (en) Method, a computer program and apparatus for analyzing symbols in a computer
CN116015703A (zh) 模型训练方法、攻击检测方法及相关装置
CN113067792A (zh) 一种xss攻击识别方法、装置、设备及介质
US20240054210A1 (en) Cyber threat information processing apparatus, cyber threat information processing method, and storage medium storing cyber threat information processing program
CN116932381A (zh) 小程序安全风险自动化评估方法及相关设备
CN113918936A (zh) Sql注入攻击检测的方法以及装置
CN113971284A (zh) 基于JavaScript的恶意网页检测方法、设备及计算机可读存储介质
CN115906086A (zh) 基于代码属性图的网页后门检测方法、系统及存储介质
KR102411383B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
CN109299610A (zh) 安卓系统中不安全敏感输入验证识别方法
KR102362516B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
CN111475812B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40044560

Country of ref document: HK