CN115168861A - 数据安全验证方法、装置、设备及存储介质 - Google Patents

数据安全验证方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN115168861A
CN115168861A CN202210657323.2A CN202210657323A CN115168861A CN 115168861 A CN115168861 A CN 115168861A CN 202210657323 A CN202210657323 A CN 202210657323A CN 115168861 A CN115168861 A CN 115168861A
Authority
CN
China
Prior art keywords
simulation
execution
syntax tree
program
simulating
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
Application number
CN202210657323.2A
Other languages
English (en)
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.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing 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 Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202210657323.2A priority Critical patent/CN115168861A/zh
Publication of CN115168861A publication Critical patent/CN115168861A/zh
Pending legal-status Critical Current

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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供数据安全验证方法、装置、设备及存储介质。所述方法包括:获取待处理的加密程序;对所述加密程序进行分析生成抽象语法树;根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;根据模拟执行过程对所述加密程序进行安全验证。在无需对加密程序进行解密处理的情况下,基于分析得到的抽象语法树实现对加密程序的安全验证,通过模拟执行方式对加密程序进行安全验证过程中不会占用过多计算资源,能够适用于多种执行环境。并且,基于抽象语法树模拟执行,能够更加充分表示出加密程序执行过程中各种分支、层级关系,获得更好的安全验证准确率。

Description

数据安全验证方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及数据安全验证方法、装置、设备及存储介质。
背景技术
随着网络技术的发展,非法攻击网站的攻击手段也在逐渐升级,为了保证网络安全稳定运行,相应的防御技术应运而生。
在现有技术中,黑客可能会通过webshell来实现对网站的入侵。黑客在进行非法入侵时,通常会将webshell网页文件与正常网页文件混在一起,然后通过使用网站的浏览器来访问网站的服务器,进而达到控制网站的服务器的目的。为了确保网站服务器不被攻击,采用基于深度学习,自然语言处理等技术手段对非法webshell进行静态检测方法,但是对于经过加壳等技术手段处理使得明文不可见的webshell则无法进行有效检测。虽然现有技术中有利用沙箱技术对加壳的webshell进行动态检测,但是存在诸多弊端,比如,需要检测环境具有充足的计算资源允许部署沙箱等。即便检测环境能够利用沙箱技术进行动态检测,但是,还存在检测效率低、准确率低等问题。
发明内容
为解决或改善现有技术中存在的问题,本申请各实施例提供了数据安全验证方法、装置、设备及存储介质。
第一方面,在本申请的一个实施例中,提供了一种数据安全验证方法。该方法包括:
获取待处理的加密程序;
对所述加密程序进行分析生成抽象语法树;
根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;
根据模拟执行过程对所述加密程序进行安全验证。
第二方面,在本申请的一个实施例中,提供了一种数据安全验证装置。该装置包括:
获取模块,用于获取待处理的加密程序;
生成模块,用于对所述加密程序进行分析生成抽象语法树;
执行模块,用于根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;
验证模块,用于根据模拟执行过程对所述加密程序进行安全验证。
第三方面,在本申请的一个实施例中,提供了一种电子设备,包括存储器及处理器;其中,
所述存储器,用于存储程序;
所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于实现第一方面所述的一种数据安全验证方法。
第四方面,在本申请的一个实施例中,提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如第一方面所述的一种数据安全验证方法。
本申请实施例提供的技术方案中,为了确保程序安全,会对程序进行加密处理。与此同时,一些非法程序会伪装成合法程序,也采用加密的方式得到加密程序。由于非法程序和合法程序都进行了加密,在无法得知解密密码的情况下难以对加密程序是否非法进行判断。但是,当加密程序执行的时候,加密程序的执行逻辑就会通过抽象语法树中的代码体现出来。因此,可以进一步基于抽象语法树模拟加密程序的执行过程,进而,根据模拟执行过程对加密程序进行安全验证。通过上述方案,在无需对加密程序进行解密处理的情况下,基于分析得到的抽象语法树实现对加密程序的安全验证,通过模拟执行方式对加密程序进行安全验证过程中不会占用过多计算资源,能够适用于多种执行环境。并且,基于抽象语法树模拟执行,能够更加充分表示出加密程序执行过程中各种分支、层级关系,获得更好的安全验证准确率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据安全验证方法的流程示意图;
图2为本申请实施例举例说明的基于模拟变量模拟执行的方法流程示意图;
图3为本申请实施例举例说明的基于模拟代码块模拟执行的方法流程示意图;
图4为本申请实施例举例说明的分支层识别的方法流程示意图;
图5为本申请实施例提供的抽象语法树生成方法的流程示意图;
图6为本申请实施例提供的一种数据安全验证装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在本申请的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。此外,下文描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
随着网络技术的发展,网站攻击与防御技术在博弈过程中都在进行不断升级。在现有技术中,黑客利用webshell技术对网站进行入侵、控制是一种常用手段。将非法的webshell网页文件伪装成为正常的网页文件,为了规避网站中各种防御技术,会采用加壳处理方式、将易被检测的代码隐藏到分支层当中。利用沙箱技术对非法webshell进行检测是比较常用的防御手段。但是,利用沙箱技术可以在能够提供较高计算资源的环境中实现对非法webshell的检测,但是对于一些计算资源有限或者不方便部署的专有云环境中则难以利用沙箱技术进行安全检测。此外,即便可以利用沙箱技术对被加壳的webshell进行安全检测,但是检测效率和准确率并不理想。因此,本申请方案提出利用抽象语法树模拟执行的方式实现对各种不同应用环境加密程序安全验证方案。
在本申请技术方案中,具体工作过程,将在下述实施例中说明。
如图1为本申请实施例提供的数据安全验证方法的流程示意图。该数据安全验证方法的执行主体可以是本地计算机、云服务设备等。如图1所示,该数据安全验证方法包括如下步骤:
101:获取待处理的加密程序。
102:对所述加密程序进行分析生成抽象语法树。
103:根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程。
104:根据模拟执行过程对所述加密程序进行安全验证。
为了便于理解,在下述实施例中的加密程序将以加壳webshell为例进行举例说明。
容易理解的是,若非法的webshell未经加壳处理,以明文方式进行展示,此时是比较容易分析以及进行安全验证的。在常规安全验证方式中,当需要对加壳后的webshell进行安全验证的时候,在不知道解密密码的情况下,通常会通过各种方式尝试对其进行解密以得到明文,解密效率低,尤其是需要对大量加密程序进行安全验证的情况下,严重影响安全验证效率。
需要说明的是,加密程序当中进行加密的方式有很多种,比如,无扩展加密、有序扩展加密、混淆加密等等。例如,混淆加密方式中,1.移除代码内的变量,将其替换为乱码。对代码本身的明文字符串,比如变量名、函数名这些进行替换。尤其是当一些加密动作是针对隐藏较深的分值层中的代码,在进行安全验证的时候更是难以发现。
在对加密程序有安全验证需求的时候,可以不直接对其进行解密,而是通过编译器进行分析得到抽象语法树。抽象语法树(Abstract Syntax Tree,AST)作为代码编译的结构化中间数据,通过对树的遍历、增、删可以实现还原过程。抽象语法树能够更加清晰、全面的展示加密程序当中所包含的执行逻辑和关键代码。
这里所说的外部可控代码可以是外部可控参数或者外部可控函数。比如可以是IO操作(输入输出操作)、数据库操作、网络操作、进线程创建等可能隐式传递信息或变相获取外部资源的代码,还可以说循环、分支、递归等语句,或者正常的代码被打断时等代码。由于这些外部可控代码可以为非法用户提供实现非法控制的可能,因此,重点针对加密程序中与外部可控代码相关执行过程进行全面验证。比如,当在抽象语法树中发现存在外部可控函数,可以将其标记为污点,进而进行模拟执行的过程中,记录与污点相关的执行日志信息。
这里所说的模拟执行可以理解为基于抽象语法树所体现出的各个节点代码之间的信息传递关系进行模拟人脑推理过程推理执行。下面将结合具体实施例进行解释说明,这里就不再重复赘述。
通过基于抽象语法树模拟执行后,可以得到模拟执行结果并记录模拟执行过程(比如,生成各个模拟执行日志的方式进行记录,还可以根据需要生成分析抽象语法树日志、性能监测日志等等)。若所述模拟变量为外部可控变量或者所述模拟代码块包含外部可控函数,且,所述模拟执行过程与所述加密程序中的风险函数具有关联关系(可以理解为风险函数参与到模拟变量或模拟代码块的模拟执行过程当中,比如,模拟变量执行到某个节点的时候被输入到风险函数中,或者,模拟代码块在模拟执行过中调用了风险函数),则确定验证结果为所述加密程序属于风险程序。这里所说的风险函数是根据经验总结出的一下非法用户经常使用以及可能会使用的实现非法操作(比如,对网站服务器进行控制)的函数。如前文所述可知,若非法用户想要实现非法操作的目的,需要借助加密程序中的外部可控代码将非法参数传入到目标服务器中,进而执行风险函数达到非法控制的目的。因此,一般来说,当与外部可控代码相关的模拟执行过程涉及到了风险函数,才认为该加密程序属于风险程序,因为在正常程序当中,可能也需要用到外部可控代码或者使用风险函数来执行正常操作。
举例来说,
Figure BDA0003688663510000051
其中,$_GET['filename']为外部可控函数,file_put_contents()为风险函数。通过上述示例中的模拟和推理执行,1.txt与外部可控函数和风险函数相关,可知,上述示例为的加密程序为风险程序。
通过上述方式,在面对加密程序进行安全验证的时候,无需对其进行解密,可以利用虚拟机对基于加密程序得到的抽象语法树进行模拟执行,由于抽象语法树相对于opcode具有更加详细、清晰的代码节点信息,能够实现针对各种细节(比如,分值层)的安全验证,验证结果更加准确。此外,由于采用通过虚拟机模拟执行的方式,不需要像沙箱安全验证那样耗费很大计算资源,能够更好的部署在各种环境当中(包括计算资源有限的专有云等环境),适用范围更广。
在本申请的一个或者多个实施例中,所述根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程,包括:根据所述外部可控代码的上下文关系,确定运行时的模拟变量和模拟代码块;基于所述模拟变量和所述模拟代码块分别对应的模拟执行方式模拟执行。
在抽象语法树中能够体现一个完整的上下文环境。上下文中需要存储各类信息,包括:模拟变量名称和当前值、模拟代码块以及相关函数、参数等。模拟执行过程中,对各类信息可以通过不同的方式管理,可以形成一种合理的层次关系,比如,上下文管理:全局变量管理、全局符号管理、全局常量管理、栈管理。栈管理:当前函数栈、局部变量管理、静态变量管理、分支/层管理、上个函数栈、上上个函数栈等等。在实际应用中,不同语言(比如,PHP、JSP等)的运行时绝大部分都是一样的。所以在设计时除了考虑语言差异以外,尽量实现与语言无关的运行时。基于上述存储的各类信息及其层次关系,可以知道抽象语法树中体现出的各个节点(变量、函数)之间的关联关系,还为抽象语法树中未能体现的节点关系提供推理依据,以便实现基于模拟变量、模拟代码的更加全面的模拟执行。
如图2为本申请实施例举例说明的基于模拟变量模拟执行的方法流程示意图。从图2中可以看到,基于所述模拟变量对应的模拟执行方式模拟执行,具体包括如下步骤:
201:判断所述模拟变量是否有特定作用域。
202:若有,则针对所述特定作用域模拟执行。
203:若没有,则根据所述模拟变量的变量类型对应的作用顺序在多个作用域顺序模拟执行。
举例来说,例如在抽象语法树中有模拟变量a,需要确定这个模拟变量a可能属于几个作用域、按照哪种顺序查找等。大多数情况下,模拟变量a可能属于的作用域:局部作用域、静态作用域(函数内静态变量)、this作用域(实例成员变量)、类作用域(类成员变量)、闭包作用域、全局作用域。如果模拟变量a是引用类型,可能属于任意作用域。
在实际应用中,模拟变量模拟执行的时候,模拟变量查找顺序要与语言(PHP、JSP等)特性保持一致,如果作用域明确,则直接找特定作用域。否则按顺序查找;比如按照局部作用域、静态作用域、this作用域、类作用域、闭包作用域、全局作用域的顺序查找,并记录各个作用域模拟变量的执行结果(变量值)。
通过上述方式,可以更加全面的对模拟变量可能的作用域进行模拟执行,能够发现模拟变量各种可能执行结果和调动关系,能够有效提升对加密程序安全验证的准确率。
如图3为本申请实施例举例说明的基于模拟代码块模拟执行的方法流程示意图。从图3中可以看到,基于所述模拟代码块对应的模拟执行方式模拟执行,具体包括如下步骤:
301:根据代码块符号确定所述模拟代码块。
302:判断所述模拟代码块是否包含有分支层。
303:若未包含所述分支层,则根据语言类型对应的模拟执行方式模拟执行。
304:若包含有所述分支层,则根据分支层级关系模拟执行。
如前文所述,一些具有风险的非法的加密程序为了躲避安全检查,会将风险代码放入分支层当中,常规安全检查手段都无法对分支层中的风险代码进行安全有效检查。此外,需要说明的是,在常规检查方式中基于得到的抽象语法树生成opcode,进而执行动态检测。然而,在opcode中无法体现出分支层以及层级关系,这也就意味着基于opcode执行动态检测时无法对分支层进行全面检测。因此,本方案基于抽象语法树针对分支层进行模拟执行,从而可以实现对分支层的全面检测。
不同的语言的代码块符号可能不同。大多数语言中一般代码块以大括号开始并以大括号结束。而分支层是一种特殊的层。比如:
Figure BDA0003688663510000071
需要说明的是,上述实例中普通层在退出层时根据语言特点处理方式不一样。比如Java,普通层内变量退出层时需要销毁,而PHP则需要保留。因此,针对不同的语言需要采用相应的方式记录代码块中分支层执行过程以及执行结果。
在实际应用中,普通层只需要考虑退出层时层内变量是否销毁,并采用针对性措施记录执行过程相关日志数据。而分支层要考虑哪个分支层才是正确的分支层,以及退出分支层时模拟变量状态以及对模拟变量进行合并处理等。
如步骤302所述判断所述模拟代码块是否包含有分支层,具体实现过程如图4为本申请实施例举例说明的分支层识别的方法流程示意图。具体包括如下步骤:
302a:判断所述模拟代码块中是否包含有表示分支层的状态变化标识和值变化量。
302b:若包含,则确定所述模拟代码块中包含所述分支层。
302c:记录所述状态变化标识和所述值变化量。
在模拟执行中,具备分支层的识别能力,可以识别模拟变量的两种变化,进而可知在代码块中是否具有分支层:
分支层中模拟变量状态变化,并为其标记状态变化。比如,状态变化标识包括:UNKNOWN未知、ASSIGNED被赋值、DANGER混合态(TAINTED状态标识与ASSIGNED状态标识混合后)、TAINTED被污染。举例来说:
Figure BDA0003688663510000081
代码块中模拟变量的值变化量识别。模拟执行过程中,进入分支层后,模拟变量可能会重新赋值,重新赋值后,在分支层内的模拟变量的值就是确定性的。当出了分支层后,模拟变量就变的不确定了。因为分支层的代码在实际执行中可能进入执行也可能不进入执行。为了能够枚举出各种可能性情况,需要记录值变化量。
比如,值变化量包括:当前值,可以是取一个最确定性的值;可能值(包括基于推理策略执行得到的值),有可能有多个,尽量记下来。通过对各种值变化量的记录,可以发现各种分支层(包括多层嵌套的分支层)并根据各分支层模拟执行记录,进而可以实现对分支层的安全验证。
Figure BDA0003688663510000091
在本申请的一个或者多个实施例中,所述若包含有所述分支层,则根据分支层级关系模拟执行,包括:根据所述状态变化标识和所述值变化量,确定所述分支层级关系;根据所述分支层级关系模拟执行。所述根据模拟执行结果对所述加密程序进行安全验证,包括:将退出分支层时的所述状态变化标识和所述值变化量作为所述模拟执行结果;根据所述状态变化标识和所述值变化量进行安全验证。
在基于所述状态变化标识和所述值变化量模拟执行的过程中,要根据分支层级关系执行。在生成抽象语法树的时候,具有明确层级关系的分支层可以在树形结构中体现出来,可以记录各分支层中。此外,还可以根据推理逻辑对可能具有的分值层级关系进行模拟执行。当分支层模拟执行结束,退出层的时候,对层内执行的状态变化标识和值变化量进行记录,以便安全验证模拟执行结果、模拟执行过程中状态变化标识和值变化量是否与风险函数有关,实现对代码块的安全验证。
在本申请的一个或者多个实施例中,还包括:判断所述模拟执行结果是否为不可信结果。若为不可信结果,则根据所述状态变化标识和所述值变化量,确定推理策略。基于所述推理策略对所述模拟变量模拟执行。
在实际应用中,则对各种情况制定了各种推理策略。当模拟执行结果不可信(比如,认为结果不准确,或者这一种结果不全面,可能会有未得到的其他情况下的结果),则需要采用推理策略模拟执行。这里所说的推理策略是启发式推理策略,比如,模拟变量在不同作用域模拟执行的状态变化标识或者值变化量、模拟变量中表示循环次数的值变化量调整等。因为在一些非法的加密程序当中,会植入循环1分钟,或者等待1分钟的代码,循环1分钟或者等待1分钟的节点在抽象语法树中通过模拟变量表示,为了搞清楚这个循环1分钟或者等待1分钟是否与其他恶意行为,可以根据推理策略,将循环次数减少从而使得循环时间减少,或者,对等待时间进行调整,减少等待时间,从而实现基于推理策略的模拟执行,判断执行过程或者模拟执行结果是否与风险函数关联,以便实现对加密程序的安全验证。
举例来说,如下面所示,通过启发式策略计算出正确的e值。
Figure BDA0003688663510000101
在实际应用中,可以为每个模拟执行结果都添加推理策略用于校正;也可以针对判别为不可信结果添加推理策略用于校正。
在本申请的一个或者多个实施例中,所述基于所述推理策略对所述模拟变量模拟执行,包括:根据所述状态变化标识和所述上下文关系,生成推测状态标识;根据所述值变化量和所述上下文关系,生成推测值。
在基于推理策略模拟执行的过程中,根据状态变化标识此前某个作用域中的记录,推测在其他可能的作用域当中的推测状态标识。以及,根据某个变量在某个作用域中的值,推测出还可能在其他作用域中相关推测值。
比如下面这些例子都是通过推理校正来实现检测的:
Figure BDA0003688663510000102
Figure BDA0003688663510000111
如图5为本申请实施例提供的抽象语法树生成方法的流程示意图。如图5所示,所述对所述加密程序进行分析生成抽象语法树,包括:501:对所述加密程序进行词法分析和语法分析,生成基础语法树。502:若所述基础语法树中任意一个节点的执行结果为常量,则将所述基础语法树中的任意一个节点替换为常量。503:生成所述抽象语法树。
在编译原理中,编译器转换代码通常要经过三个步骤:词法分析(LexicalAnalysis)、语法分析(Syntax Analysis),进而生成抽象语法树(AST)。
加壳程序(前文所说的加密程序)是一种在编译好可执行文件之后,为了一些特定的需求,而做的一些事情,可以用于对一些版权信息需要保护起来,防止别人改动。还可以给木马等软件加壳以避免安全检查软件等进行安全验证时候被发现。
语法树是计算机描述一个事物的树状结构,代码对应的语法树是描述该代码的树状结构,其表征了该段代码的语法结构。本申请实施例中,若无特殊说明,“语法树”意指抽象语法树。抽象语法树简称AST(Abstract Syntax Tree),其是源代码语法结构的一种抽象表示,以树状的形式表现编程语言的语法结构。在获得了某段代码后,可以根据该段代码所使用的编程语言的语法规则对其进行解析,从而实现AST的构建。
下面将通过具体实施例对抽象语法树的生成过程进行举例说明。
词法分析:文本->token列表,包括:去除空格,对token分类,去除空格,然后对token分类,那些属于语法关键字,那些属于操作符,那些属于语句的截止位置,那些属于数据。
语法分析:token列表->语法二叉树,包括:扫描token流,然后分析它的语法,这一步应该是分析一条以;结尾的语句具体的执行规则,然后使用逆波兰表达式组合,最后形成一个二叉树,二叉树从底部往上一步步合并。
具体来说:
第一步:词法分析,也叫扫描scanner。读取加密程序的代码,然后把读取到的代码按照预定的规则合并成一个个的标识tokens。同时,会移除空白符、注释等。最后,整个代码将被分割进一个tokens列表(或者说一维数组)。
const a=5;
//转换成
[{value:'const',type:'keyword'},{value:'a',type:'identifier'},...]
复制代码
当词法分析源代码的时候,会逐个字母地读取代码。当遇到空格、操作符,或者特殊符号的时候,它会认为一个话已经完成了。
第二步:语法分析,也称解析器。会将词法分析出来的数组转换成树形的形式,同时,验证语法。语法如果有错的话,抛出语法错误。
Figure BDA0003688663510000121
在实际应用中,当生成树的时候,解析器会删除一些没必要的标识tokens(比如:不完整的括号)。
通过上述方式所得到的基础语法树为最初的语法树,为了便于后续分析,以及方便用户直观分析,可以对其中一些节点进行优化。比如,可以利用常量替换节点的方式。若所述基础语法树中任意一个节点的执行结果为常量,则将所述基础语法树中的任意一个节点替换为常量。经过上述优化处理方式,得到比较简化的抽象语法树。
在本申请的一个或者多个实施例中,还包括:确定所述执行代码内容中各节点的运算式和函数;记录在生成所述模拟执行结果过程中经过所述运算式和所述函数的处理记录;根据所述处理记录对所述模拟执行结果进行风险评估。
在实际应用中,可能会出现漏报、误报的情况。因此,需要采取查漏补缺的措施。可以针对容易漏报、误报的数据、函数进行安全检测。比如,针对每个节点的运算式进行记录,比如赋值记录、计算记录等。每个函数调用中,比如普通函数、类函数、闭包函数等调用记录。
例如,基于时间机制的对抗手法常被应用到非法程序中。
如下示例,如果不对函数time();的返回值标记为TAINTED被污染,这个样本就会被漏报。
<?php
$a=time();
sleep(60*5);//休眠5分钟,一种时间对抗手法
$b=time();
$index=$b-$a-(5*60)+2;
$c=array('11','22','eval($_GET[1])','44');
system($c[$index]);
如下示例,如果对time();的返回值直接标记为TAINTED被污染,这个样本就会被误报。
Figure BDA0003688663510000131
因此,可以根据上下文语义来纠正,在尽可能多的运算式和函数中进行纠正,可以有效降低误报、漏报的情况出现。
基于同样的思路,本申请实施例还提供一种数据安全验证装置。如图6为本申请实施例提供的一种数据安全验证装置的结构示意图。该数据安全验证装置包括:
获取模块61,用于获取待处理的加密程序。
生成模块62,用于对所述加密程序进行分析生成抽象语法树。
执行模块63,用于根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程。
验证模块64,用于根据模拟执行过程对所述加密程序进行安全验证。
可选地,执行模块63,用于根据所述外部可控代码的上下文关系,确定运行时的模拟变量和模拟代码块;基于所述模拟变量和所述模拟代码块分别对应的模拟执行方式模拟执行。
可选地,执行模块63,用于判断所述模拟变量是否有特定作用域;
若有,则针对所述特定作用域模拟执行;
若没有,则根据所述模拟变量的变量类型对应的作用顺序在多个作用域顺序模拟执行。
可选地,执行模块63,用于根据代码块符号确定所述模拟代码块;
判断所述模拟代码块是否包含有分支层;
若未包含所述分支层,则根据语言类型对应的模拟执行方式模拟执行;
若包含有所述分支层,则根据分支层级关系模拟执行。
可选地,还包括判断模块65,用于判断所述模拟代码块中是否包含有表示分支层的状态变化标识和值变化量;
若包含,则确定所述模拟代码块中包含所述分支层;
记录所述状态变化标识和所述值变化量。
可选地,执行模块63,用于根据所述状态变化标识和所述值变化量,确定所述分支层级关系;
根据所述分支层级关系模拟执行;
所述根据模拟执行结果对所述加密程序进行安全验证,包括:
将退出分支层时的所述状态变化标识和所述值变化量作为所述模拟执行结果;
根据所述状态变化标识和所述值变化量进行安全验证。
可选地,还包括判断模块65,用于判断所述模拟执行结果是否为不可信结果;
若为不可信结果,则根据所述状态变化标识和所述值变化量,确定推理策略;
基于所述推理策略对所述模拟变量模拟执行。
可选地,执行模块63,用于根据所述状态变化标识和所述上下文关系,生成推测状态标识;
根据所述值变化量和所述上下文关系,生成推测值。
可选地,生成模块62,用于对所述加密程序进行词法分析和语法分析,生成基础语法树;
若所述基础语法树中任意一个节点的执行结果为常量,则将所述基础语法树中的任意一个节点替换为常量;
生成所述抽象语法树。
可选地,还包括确定模块66,用于确定所述执行代码内容中各节点的运算式和函数;
记录在生成所述模拟执行结果过程中经过所述运算式和所述函数的处理记录;
根据所述处理记录对所述模拟执行结果进行风险评估。
可选地,验证模块64用于若所述模拟变量为外部可控变量或者所述模拟代码块包含外部可控函数,且,所述模拟执行过程与所述加密程序中的风险函数具有关联关系,则确定安全验证结果为所述加密程序属于风险程序。
本申请一个实施例还提供一种电子设备。如图7为本申请实施例提供的一种电子设备的结构示意图。该电子设备包括存储器701、处理器702及通信组件703;其中,
所述存储器701,用于存储程序;
所述处理器702,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于:
获取待处理的加密程序;
对所述加密程序进行分析生成抽象语法树;
根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;
根据模拟执行过程对所述加密程序进行安全验证。
可选地,处理器702,用于根据所述外部可控代码的上下文关系,确定运行时的模拟变量和模拟代码块;
基于所述模拟变量和所述模拟代码块分别对应的模拟执行方式模拟执行。
可选地,处理器702,用于判断所述模拟变量是否有特定作用域;
若有,则针对所述特定作用域模拟执行;
若没有,则根据所述模拟变量的变量类型对应的作用顺序在多个作用域顺序模拟执行。
可选地,处理器702,用于根据代码块符号确定所述模拟代码块;
判断所述模拟代码块是否包含有分支层;
若未包含所述分支层,则根据语言类型对应的模拟执行方式模拟执行;
若包含有所述分支层,则根据分支层级关系模拟执行。
可选地,处理器702,用于判断所述模拟代码块中是否包含有表示分支层的状态变化标识和值变化量;
若包含,则确定所述模拟代码块中包含所述分支层;
记录所述状态变化标识和所述值变化量。
可选地,处理器702,用于根据所述状态变化标识和所述值变化量,确定所述分支层级关系;
根据所述分支层级关系模拟执行;
所述根据模拟执行结果对所述加密程序进行安全验证,包括:
将退出分支层时的所述状态变化标识和所述值变化量作为所述模拟执行结果;
根据所述状态变化标识和所述值变化量进行安全验证。
可选地,处理器702,用于判断所述模拟执行结果是否为不可信结果;
若为不可信结果,则根据所述状态变化标识和所述值变化量,确定推理策略;
基于所述推理策略对所述模拟变量模拟执行。
可选地,处理器702,用于根据所述状态变化标识和所述上下文关系,生成推测状态标识;
根据所述值变化量和所述上下文关系,生成推测值。
可选地,处理器702,用于对所述加密程序进行词法分析和语法分析,生成基础语法树;
若所述基础语法树中任意一个节点的执行结果为常量,则将所述基础语法树中的任意一个节点替换为常量;
生成所述抽象语法树。
可选地,处理器702,用于确定所述执行代码内容中各节点的运算式和函数;
记录在生成所述模拟执行结果过程中经过所述运算式和所述函数的处理记录;
根据所述处理记录对所述模拟执行结果进行风险评估。
可选地,处理器702,用于若所述模拟变量为外部可控变量或者所述模拟代码块包含外部可控函数,且,所述模拟执行过程与所述加密程序中的风险函数具有关联关系,则确定安全验证结果为所述加密程序属于风险程序。
上述存储器701可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
进一步地,本实施例中的所述处理器702可以具体是:可编程交换处理芯片,该可编程交换处理芯片中配置有数据复制引擎,能对接收到的数据进行复制。
上述处理器702在执行存储器中的程序时,除了上面的功能之外,还可实现其它功能,具体可参见前面各实施例的描述。进一步,如图7所示,电子设备还包括:电源组件704等其它组件。
本申请实施例还提供一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行图1对应实施例所述的方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序/指令,当所述计算机程序/指令被处理器执行时,致使所述处理器能够实现图1对应实施例所述的方法。
基于上述实施例,为了确保程序安全,会对程序进行加密处理。与此同时,一些非法程序会伪装成合法程序,也采用加密的方式得到加密程序。由于非法程序和合法程序都进行了加密,在无法得知解密密码的情况下难以对加密程序是否非法进行判断。但是,当加密程序执行的时候,加密程序的执行逻辑就会通过抽象语法树中的代码体现出来。因此,可以进一步基于抽象语法树模拟加密程序的执行过程,进而,根据模拟执行过程对加密程序进行安全验证。通过上述方案,在无需对加密程序进行解密处理的情况下,基于分析得到的抽象语法树实现对加密程序的安全验证,通过模拟执行方式对加密程序进行安全验证过程中不会占用过多计算资源,能够适用于多种执行环境。并且,基于抽象语法树模拟执行,能够更加充分表示出加密程序执行过程中各种分支、层级关系,获得更好的安全验证准确率。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (14)

1.一种数据安全验证方法,其特征在于,所述方法包括:
获取待处理的加密程序;
对所述加密程序进行分析生成抽象语法树;
根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;
根据模拟执行过程对所述加密程序进行安全验证。
2.根据权利要求1所述的方法,其特征在于,所述根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程,包括:
根据所述外部可控代码的上下文关系,确定运行时的模拟变量和模拟代码块;
基于所述模拟变量和所述模拟代码块分别对应的模拟执行方式模拟执行。
3.根据权利要求2所述的方法,其特征在于,基于所述模拟变量对应的模拟执行方式模拟执行,包括:
判断所述模拟变量是否有特定作用域;
若有,则针对所述特定作用域模拟执行;
若没有,则根据所述模拟变量的变量类型对应的作用顺序在多个作用域顺序模拟执行。
4.根据权利要求2所述的方法,其特征在于,基于所述模拟代码块对应的模拟执行方式模拟执行,包括:
根据代码块符号确定所述模拟代码块;
判断所述模拟代码块是否包含有分支层;
若未包含所述分支层,则根据语言类型对应的模拟执行方式模拟执行;
若包含有所述分支层,则根据分支层级关系模拟执行。
5.根据权利要求4所述的方法,其特征在于,所述判断所述模拟代码块是否包含有分支层,包括:
判断所述模拟代码块中是否包含有表示分支层的状态变化标识和值变化量;
若包含,则确定所述模拟代码块中包含所述分支层;
记录所述状态变化标识和所述值变化量。
6.根据权利要求5所述的方法,其特征在于,所述若包含有所述分支层,则根据分支层级关系模拟执行,包括:
根据所述状态变化标识和所述值变化量,确定所述分支层级关系;
根据所述分支层级关系模拟执行;
所述根据模拟执行结果对所述加密程序进行安全验证,包括:
将退出分支层时的所述状态变化标识和所述值变化量作为所述模拟执行结果;
根据所述状态变化标识和所述值变化量进行安全验证。
7.根据权利要求4或5中任一项所述的方法,其特征在于,还包括:
判断所述模拟执行结果是否为不可信结果;
若为不可信结果,则根据所述状态变化标识和所述值变化量,确定推理策略;
基于所述推理策略对所述模拟变量模拟执行。
8.根据权利要求7所述的方法,其特征在于,所述基于所述推理策略对所述模拟变量模拟执行,包括:
根据所述状态变化标识和所述上下文关系,生成推测状态标识;
根据所述值变化量和所述上下文关系,生成推测值。
9.根据权利要求1所述的方法,其特征在于,所述对所述加密程序进行分析生成抽象语法树,包括:
对所述加密程序进行词法分析和语法分析,生成基础语法树;
若所述基础语法树中任意一个节点的执行结果为常量,则将所述基础语法树中的任意一个节点替换为常量;
生成所述抽象语法树。
10.根据权利要求1所述的方法,其特征在于,还包括:
确定所述执行代码内容中各节点的运算式和函数;
记录在生成所述模拟执行结果过程中经过所述运算式和所述函数的处理记录;
根据所述处理记录对所述模拟执行结果进行风险评估。
11.根据权利要求1所述的方法,其特征在于,所述根据模拟执行过程对所述加密程序进行安全验证,包括:
若所述模拟变量为外部可控变量或者所述模拟代码块包含外部可控函数,且,所述模拟执行过程与所述加密程序中的风险函数具有关联关系,则确定验证结果为所述加密程序属于风险程序。
12.一种数据安全验证装置,其特征在于,所述装置包括:
获取模块,用于获取待处理的加密程序;
生成模块,用于对所述加密程序进行分析生成抽象语法树;
执行模块,用于根据所述抽象语法树中包含的外部可控代码,模拟执行所述加密程序的执行过程;
验证模块,用于根据模拟执行过程对所述加密程序进行安全验证。
13.一种电子设备,其特征在于,包括存储器及处理器;其中,
所述存储器,用于存储程序;
所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于实现上述权利要求1至11中任一项所述的方法。
14.一种非暂时性机器可读存储介质,其特征在于,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至11中任一项所述的方法。
CN202210657323.2A 2022-06-10 2022-06-10 数据安全验证方法、装置、设备及存储介质 Pending CN115168861A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210657323.2A CN115168861A (zh) 2022-06-10 2022-06-10 数据安全验证方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210657323.2A CN115168861A (zh) 2022-06-10 2022-06-10 数据安全验证方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN115168861A true CN115168861A (zh) 2022-10-11

Family

ID=83485916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210657323.2A Pending CN115168861A (zh) 2022-06-10 2022-06-10 数据安全验证方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN115168861A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116167048A (zh) * 2023-01-20 2023-05-26 北京长亭未来科技有限公司 用于EL表达式的Webshell检测方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116167048A (zh) * 2023-01-20 2023-05-26 北京长亭未来科技有限公司 用于EL表达式的Webshell检测方法及装置
CN116167048B (zh) * 2023-01-20 2023-08-11 北京长亭未来科技有限公司 用于EL表达式的Webshell检测方法及装置

Similar Documents

Publication Publication Date Title
Chen et al. Mystique: Uncovering information leakage from browser extensions
US9715593B2 (en) Software vulnerabilities detection system and methods
Doupe et al. deDacota: toward preventing server-side XSS via automatic code and data separation
Durai et al. A novel method to detect and prevent SQLIA using ontology to cloud web security
Fass et al. Doublex: Statically detecting vulnerable data flows in browser extensions at scale
US20120023486A1 (en) Verification of Information-Flow Downgraders
Van Overveldt et al. FlashDetect: ActionScript 3 malware detection
CN114996126B (zh) 一种针对eosio智能合约的漏洞检测方法及系统
Avancini et al. Comparison and integration of genetic algorithms and dynamic symbolic execution for security testing of cross-site scripting vulnerabilities
Burket et al. {GuardRails}: A {Data-Centric} Web Application Security Framework
Zhang et al. Efficiency and effectiveness of web application vulnerability detection approaches: A review
Li et al. Detecting standard violation errors in smart contracts
Chaumette et al. Automated extraction of polymorphic virus signatures using abstract interpretation
Smith et al. Sugarcoat: Programmatically generating privacy-preserving, web-compatible resource replacements for content blocking
Gupta et al. A client‐server JavaScript code rewriting‐based framework to detect the XSS worms from online social network
Leithner et al. Hydra: Feedback-driven black-box exploitation of injection vulnerabilities
Gupta et al. Evaluation and monitoring of XSS defensive solutions: a survey, open research issues and future directions
Li et al. Lchecker: Detecting loose comparison bugs in php
CN115168861A (zh) 数据安全验证方法、装置、设备及存储介质
Klein et al. Hand sanitizers in the wild: A large-scale study of custom javascript sanitizer functions
Wang et al. Tunter: assessing exploitability of vulnerabilities with taint-guided exploitable states exploration
Hong et al. Circuit: A javascript memory heap-based approach for precisely detecting cryptojacking websites
Simic et al. Eliminating SQL injection and cross site scripting using aspect oriented programming
Muralee et al. {ARGUS}: A Framework for Staged Static Taint Analysis of {GitHub} Workflows and Actions
Kanchhal et al. Android malware a oversight on malware detection using machine learning

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