CN116305131B - 脚本静态去混淆方法及系统 - Google Patents

脚本静态去混淆方法及系统 Download PDF

Info

Publication number
CN116305131B
CN116305131B CN202310571157.9A CN202310571157A CN116305131B CN 116305131 B CN116305131 B CN 116305131B CN 202310571157 A CN202310571157 A CN 202310571157A CN 116305131 B CN116305131 B CN 116305131B
Authority
CN
China
Prior art keywords
confusion
node data
node
script
feature
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.)
Active
Application number
CN202310571157.9A
Other languages
English (en)
Other versions
CN116305131A (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.)
Beijing Chaitin Tech Co ltd
Original Assignee
Beijing Chaitin Tech 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 Beijing Chaitin Tech Co ltd filed Critical Beijing Chaitin Tech Co ltd
Priority to CN202310571157.9A priority Critical patent/CN116305131B/zh
Publication of CN116305131A publication Critical patent/CN116305131A/zh
Application granted granted Critical
Publication of CN116305131B publication Critical patent/CN116305131B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请实施例提供了一种脚本静态去混淆方法及系统,包括:从目标脚本的抽象语法树中获取关键节点数据,确定所述关键节点数据对应的混淆特征;基于所述混淆特征匹配对应的去混淆组件,并对所述关键节点数据进行模拟执行得到去混淆节点数据;基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本。基于本发明提供的脚本静态去混淆方法,不需要实际执行脚本,仅仅在抽象语法树上进行操作,因此不会造成实际的影响和风险,同时具有高效性和安全性,可以实现以极高的速度和较低的资源消耗量实现快速准确的去混淆。

Description

脚本静态去混淆方法及系统
技术领域
本申请各实施例属于计算机技术领域,尤其涉及脚本静态去混淆方法及系统。
背景技术
在现代软件开发中,Bash脚本是一种广泛使用的编程语言,用于自动化和批量处理任务。然而,由于Bash脚本语言的灵活性,经常会被人们用来进行恶意攻击和病毒传播等不良行为。当前业界采用的Bash脚本去混淆方法主要工作原理是动态执行或以调试模式在沙箱中执行疑似恶意样本,并捕获每步的调试输出和行为,针对以上输出或行为模式设计安全检测规则。这样做主要的缺陷:
1. 难以判断调试输出中片段的上下文关系,使得原本显而易见的特征难以编写检测规则。对于多层编码嵌套和逻辑复杂的情况,这个问题更加严重。根据选择的检测灵敏度的不同,要么容易产生大量的误报,要么容易产生大量漏报。
2. 所有命令都被实际执行了,这会导致一些特定的命令在检测环境中无法执行或消耗大量资源,例如依赖外部网络资源或本地特定可执行程序。这会导致大量的漏报,且可通过恶意消耗检测系统资源来绕过。
3. 构造安全的隔离环境批量检测Bash脚本的成本较高,速度相对较慢。若限定可消耗的资源量则检测效果会大打折扣,产生大量漏报。
而且,实际网络攻击检测场景中Bash恶意脚本的检测量是极大的,不可能总是可以投入大型计算集群去提供这样的恶意脚本检测服务,但传统检测方法却强烈依赖于这种消耗资源较大的模拟执行方法。因此传统的检测方法对实际攻击场景的检测是具有局限性的。
发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供脚本静态去混淆方法、系统、电子设备及介质,能够解决如何使用较小限定资源快速、安全、有效的检测带有恶意混淆内容的脚本,以及如何去混淆的问题。
为了达到上述目的,本发明采取了以下技术方案:
一方面,本发明提供一种脚本静态去混淆方法,包括:
从目标脚本的抽象语法树中获取关键节点数据,确定所述关键节点数据对应的混淆特征;
基于所述混淆特征匹配对应的去混淆组件,并对所述关键节点数据进行模拟执行得到去混淆节点数据;
基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本。
进一步的,所述确定所述关键节点数据对应的混淆特征具体包括:
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征;所述特征识别子组件由一个或多个特征识别函数构成。
进一步的,所述特征识别子组件包括单节点子组件和复合节点子组件;
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征,具体包括:
获取所述关键节点数据的节点特征,所述节点特征包括单节点特征和复合节点特征;
针对所述单节点特征对应的关键节点数据使用所述单节点子组件进行识别得到所述混淆特征,针对所述复合节点特征对应的关键节点数据使用所述复合节点子组件进行识别得到所述混淆特征。
进一步的,所述混淆特征识别库包括多个特征的识别子组件,所述脚本静态去混淆方法还包括对所述混淆特征识别库的识别组件管理操作;
所述识别组件管理操作包括:
基于混淆特征的新增或特征识别算法的升级,对所述特征识别子组件进行增加或更新操作。
进一步的,所述去混淆组件包括解混淆算法;
并对所述关键节点数据进行模拟执行得到去混淆节点数据,具体包括:
构建虚拟环境;
将所述关键节点数据以及对应的所述去混淆组件输入到所述虚拟环境中;
基于所述去混淆组件中的解混淆算法处理所述关键节点数据,得到所述去混淆节点数据。
进一步的,基于所述混淆特征匹配对应的去混淆组件,具体包括:
基于所述混淆特征在组件库中匹配得到对应的所述去混淆组件,所述组件库中具有多个带有不同特征标签且独立的去混淆组件。
进一步的,还包括组件库管理操作;所述组件库管理操作包括:
基于混淆特征的新增或解混淆算法的升级,对去混淆组件进行增加或更新操作。
进一步的,所述关键节点数据包括节点子树、单节点数据;
所述去混淆节点数据包括简化子树、单节点、空节点;
其中,若向所述虚拟环境输入所述节点子树得到固定值,则基于所述固定值创建对应的单节点作为所述去混淆节点数据;
若向所述虚拟环境输入所述节点子树得到的结果为空或不产生操作,则输入空节点作为所述去混淆节点数据。
进一步的,所述基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本,具体包括:
将所述抽象语法树中对应的关键节点数据替换为所述去混淆节点数据得到去混淆语法树;
基于所述去混淆语法树得到所述去混淆脚本。
进一步的,还包括:
针对所述去混淆脚本重复执行所述脚本静态去混淆方法,直到得到的去混淆脚本中无任何混淆特征存在。
另一方面,本发明提供一种脚本静态去混淆系统,包括:
获取模块,用于从目标脚本的抽象语法树中获取关键节点数据,判断所述关键节点数据对应的混淆特征;
模拟执行模块,用于基于所述混淆特征匹配对应的去混淆组件对所述关键节点数据进行模拟执行得到去混淆节点数据;
去混淆模块,用于基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本。
另一方面,本发明提供一种电子设备,包括:
存储器,存储有计算机程序;
处理器,执行所述计算机程序时实现所述的脚本静态去混淆方法。
另一方面,本发明提供一种计算机可读介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述的脚本静态去混淆方法。
相较于现有技术,本发明提供的脚本静态去混淆方法、系统、电子设备及介质,具有以下有益效果:
基于本发明提供的脚本静态去混淆方法,不需要实际执行脚本,仅仅在抽象语法树上进行操作,因此不会造成实际的影响和风险,同时具有高效性和安全性,可以实现以极高的速度和较低的资源消耗量实现快速准确的去混淆。
进一步,可基于去混淆脚本写出更具泛化性的规则,最终实现大量减少检测设备部署和安全规则维护的成本。
另外,本方法基于模拟执行的方式进行去混淆,可以适用于各种不同的混淆手段和算法,具有较强的鲁棒性。
同时,本方法基于抽象语法树,具有较强的可扩展性和可维护性,可以方便地进行优化和升级,适用于各种规模和复杂度的脚本。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分,本领域技术人员应该理解的是,这些附图未必是按比例绘制的,在附图中:
图1是本发明提供的脚本静态去混淆方法的流程图;
图2是本发明提供的去混淆处理的流程图;
图3是本发明提供的脚本静态去混淆方法的一种实施例的流程图;
图4是本发明提供的脚本静态去混淆系统的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
本文中术语“包括”,“包含”或其任何其他变体旨在覆盖非排他性包括,使得包括步骤列表的过程或方法不仅包括那些步骤,而且可以包括未明确列出或此类过程或方法固有的其他步骤。同样,在没有更多限制的情况下,以“包含...一个”开头的一个或多个设备或子系统,元素或结构或组件也不会没有更多限制,排除存在其他设备或其他子系统或其他元素或其他结构或其他组件或其他设备或其他子系统或其他元素或其他结构或其他组件。在整个说明书中,短语“在一个实施例中”,“在另一个实施例中”的出现和类似的语言可以但不一定都指相同的实施例。
请参阅图1,本发明提供一种脚本静态去混淆方法,包括:
S1、从目标脚本的抽象语法树中获取关键节点数据,确定所述关键节点数据对应的混淆特征;具体的,所述抽象语法树中包括一个或多个关键节点,针对每个所述关键节点均进行模拟执行以及去混淆处理即可得到去混淆后的脚本。
进一步的,所述关键节点的获取过程包括:
遍历所述抽象语法树上所有节点;
基于预定规则选定所述关键节点。具体的,所述预定规则可以是根据编写该脚本的计算机语言中的关键字或控制语句决定(例如bash命令处理器中的脚本代码中的var、cat),这样还可以快速的初步确定该关键节点的特征。当然,若是不考虑计算量的问题,可以将除开叶节点外的所有节点作为关键节点,这样处理结果比较全面。
S2、基于所述混淆特征匹配对应的去混淆组件,并对所述关键节点数据进行模拟执行得到去混淆节点数据;具体的,所述去混淆节点数据为所述关键节点数据被真实执行后所能得到的内容数据,在本实施例中不需要实际执行,通过模拟执行的方式得到该内容数据。
S3、基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本。
基于本发明提供的脚本静态去混淆方法,不需要实际执行脚本,仅仅在抽象语法树上进行操作,进而根据虚拟执行操作和去混淆处理得到去混淆后的脚本,因此不会造成实际的影响和风险,同时具有高效性和安全性,可以实现以极高的速度和较低的资源消耗量实现快速准确的去混淆。
另外,本方法基于模拟执行的方式进行去混淆,可以适用于各种不同的混淆手段和算法,具有较强的鲁棒性。
同时,本方法基于抽象语法树,具有较强的可扩展性和可维护性,可以方便地进行优化和升级,适用于各种规模和复杂度的脚本。
进一步的,作为优选方案,本实施例中,所述确定所述关键节点数据对应的混淆特征具体包括:
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征;所述特征识别子组件由一个或多个特征识别函数构成。具体的,所述特征识别子组件为根据不同的混淆特征对应得到,可以由开发人员预先编写得到,当使用该特征识别子组件去处理所述关键节点数据后得到对应识别结果,若是识别结果为阳性(得到识别结果大于或等于某一概率值),则判定该关键节点数据具有该特征识别子组件对应的混淆特征;若识别结果为阴性(得到识别结果小于某一概率值),则判定该关键节点数据不具有该特征识别子组件对应的混淆特征。所述特征识别函数是在开发阶段通过对混淆特征的理解,对应编码得到的识别函数。
进一步的,在运行所述特征识别子组件时,需要提前构建对应的虚拟环境。
进一步的,作为优选方案,本实施例中,所述特征识别子组件包括单节点子组件和复合节点子组件;
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征,具体包括:
获取所述关键节点数据的节点特征,所述节点特征包括单节点特征和复合节点特征;
针对所述单节点特征对应的关键节点数据使用所述单节点子组件进行识别得到所述混淆特征,针对所述复合节点特征对应的关键节点数据使用所述复合节点子组件进行识别得到所述混淆特征。
具体的,针对单节点特征,一般可以通过节点类型和/或节点内容即可得到对应的混淆特征,一般可以基于节点类型以及节点内容生成对应的单节点子组件。其中,单独针对节点类型的单节点子组件,不需要根据具体内容判断即可进入正确的处理流程,例如针对启动子 shell 和展开变量两种情况,可以快速确定混淆类型;单独针对节点内容的单节点子组件只需要节点内容即可得到对应的准确混淆特征,例如必定不执行的步骤等;另外,还存在节点类型和节点内容需要同时识别,即需要先对节点内容进行识别,在针对后续的执行步骤进行识别,进而得到具体的混淆特征,例如一个base64编码字符串被“base64 -d”命令解码,那么要看到后续的节点才能确定对前面被编码的字符串为何种混淆特征,进而选择合适的去混淆组件。
针对具有复合节点特征的关键节点数据,将该关键节点对应的语法子树输入到对应的识别函数中,基于其子树拓扑特征或兄弟节点特征来识别混淆特征。针对子树拓扑特征的节点数据,具体的特征识别子组件基于节点子树中的节点结构模式来判断对应的混淆特征。针对兄弟节点特征的节点数据,对应的特征识别子组件基于同一层级中的节点有什么样的特征判定混淆特征,例如用“&&”、“;”、“|”等符号连接的主要就是看前后节点,这些节点就是在树的同一层中,属于兄弟节点。
当然,在构建函数的过程中,可以通过对各种具有某些混淆特征的脚本进行代码观察或运行后总结,或通过对某一类具有相似混淆特征的脚本内容进行总结,得到更具泛化性的规则,基于该规则即可得到对应的混淆特征的特征识别子组件,基于该特征识别子组件对关键节点数据进行识别,可以有效的提升检测效率和准确率,最终实现减少检测设备部署和安全规则维护的成本。
进一步的,作为优选方案,本实施例中,所述混淆特征识别库包括多个针对各个所述混淆特征的识别子组件,所述脚本静态去混淆方法还包括对所述混淆特征识别库的识别组件管理操作;
所述识别组件管理操作包括:
基于混淆特征的新增和/或特征识别算法的升级,对所述识别子组件进行增加和/或更新操作。即当需要进行升级的时候,仅需要对混淆特征识别库进行升级即可快速添加新的混淆特征对应的识别算法,方便快捷。
进一步的,作为优选方案,本实施例中,所述去混淆组件包括解混淆算法;其中,解混淆算法是具体的执行逻辑,不是某一特定的算法,例如当针对某一加密字符串时,对应的解码算法通过对应的语法子树提取得到,而对应的解码算法可能是从代码中提取得到。
所述并对所述关键节点数据进行模拟执行得到去混淆节点数据,具体包括:
构建虚拟环境;所述虚拟环境的基础参数包括环境变量、函数定义、输入输出等,其中,输入输出指的是包括标准输入、标准输出、标准错误在内的所有文件描述符相关操作。即在运行具体的算法时,需要创建一个虚拟环境,该虚拟环境模拟了脚本的运行初始环境,具体创建虚拟环境的方法,本发明不作限定,本领域的技术人员可以根据实际需求构建对应的虚拟环境以用于模拟执行对应的关键节点数据。
将所述关键节点数据以及对应的所述去混淆组件输入到所述虚拟环境中,基于所述去混淆组件中的解混淆算法处理所述关键节点数据,得到所述去混淆节点数据。
对于每个需要处理的关键节点,均进行一次模拟执行操作,并根据执行结果修改节点信息。当然,在实际操作中,根据执行情况修改的不只是节点信息,还包括虚拟环境信息。例如某节点内部可能创建或修改或删除环境变量、文件等,而在去混淆操处理时,需要跟踪并维护改变后的状态。该模拟执行的过程的重点不在于完整进行模拟执行,而是对符合特征的节点进行去混淆,以达到简化目标脚本的目的,以便于后续的进一步分析和处理。
进一步的,作为优选方案,本实施例中,基于所述混淆特征匹配对应的去混淆组件,具体包括:
基于所述混淆特征在组件库中匹配得到对应的所述去混淆组件,所述组件库中具有多个带有不同特征标签且独立的去混淆组件。在本发明中,每种具体的混淆特征和对应的解混淆算法会打包组织为一个独立的插件形式的组件,此时可以轻松地增加和更新组件,以提高算法的能力和避免错误,具有很强的可扩展性和可维护性。
进一步的,作为优选方案,本实施例中,还包括组件库管理操作;所述组件库管理操作包括:
基于混淆特征的新增和/或解混淆算法的升级,对去混淆组件进行增加和/或更新操作。即当有新的混淆特征出现时,就增加对应的去混淆组件即可;当针对某混淆特征的解混淆算法需要升级时,直接更新对应的去混淆组件即可。可以动态管理组件库,方便快捷。
由于混淆特征较多,对应的解混淆算法也不尽相同,具体的模拟执行方法无法完整枚举,以下列出几种常见情况的处理步骤作为示例:
1、混淆特征:字符串加密。
解混淆算法:
1)解密函数提取。首先查找包含字符串加密的函数,然后提取出解密函数,它负责将加密的字符串转换回原始的字符串。
2)字符串替换。用解密得到的明文结果替换原始字符串的位置,这样就可以在后续的处理中使用明文字符串了。
2、混淆特征:无用代码插入。
解混淆算法:
1)控制流程图简化。首先分析抽象语法树中的控制流程图,然后剔除其中的无用代码和错误分支。这样可以简化控制流程图,使得后续的处理更容易实现。
2)代码段删除。接下来查找bash脚本中包含的无用代码段,并将其删除。这样可以减少代码量,使得后续的处理更快速和准确。
3、混淆特征:变量重命名。
解混淆算法:
1)变量解析和还原。首先在抽象语法树中分析变量的使用和赋值情况,然后还原变量名,并将其替换回抽象语法树中的节点。
2)赋值语句简化。接下来简化赋值语句,将其中的无用代码和重复代码删除。
4、混淆特征:代码逆序。这里通常包含 rev 命令和 eval 命令,也可能存在Bash自带的字符串处理,需要准确识别调用的模式并使用恰当的反向算法得到正常顺序的代码。
解混淆算法:
1)逆序代码恢复。首先查找包含逆序代码的函数,然后将其还原为正常顺序的代码。
2)控制流程图简化。接下来简化控制流程图,将逆序函数和其参数的调用替换为执行结果。
5、混淆特征:数学运算。在抽象语法树中出现ARITH_CMD节点,表示该节点包含数学运算表达式。对应的解混淆算法是对数学运算表达式进行求值操作,并将求值结果替换掉原先的节点。具体步骤为:
1)获取该节点的所有子节点,即运算符、操作数等。
2)将运算表达式转换为可求值的形式。
3)对表达式进行求值,并将结果保存。
4)将结果转换为AST节点并替换原节点。
6、混淆特征:存在传递环境变量的subshell。在抽象语法树中出现SUBSHELL和PARAM_EXPANSION节点,表示该节点包含subshell和环境变量。
解混淆算法:
1)获取该节点的所有子节点,即subshell和环境变量部分。
2)根据当前环境模拟执行subshell和环境变量,并将执行结果保存。
3)将执行结果转换为AST节点并替换原节点。
7、混淆特征:base64编码。在抽象语法树中出现CMD_SUBSTITUTION节点,且存在base64命令调用,表示该节点包含base64命令的编解码操作。
解混淆算法:
1)获取该节点的子节点,即base64命令的编解码操作部分。
2)对编解码进行反操作,并将反操作结果保存。
3)将反操作结果转换为AST节点并替换原节点。
进一步的,作为优选方案,本实施例中,所述关键数据包括节点子树、单节点数据;
所述去混淆节点数据包括简化子树、单节点、空节点;
其中,若向所述虚拟环境输入所述节点子树得到简化后的简化子树,则所述简化子树作为所述去混淆节点数据;此时直接使用简化子树替换原本的节点子树即可。
若向所述虚拟环境输入所述节点子树得到固定值,则基于所述固定值创建对应的单节点作为所述去混淆节点数据;即输入的节点子树的到的结果为单一个数据值,此时无法直接替换,需要将固定值转换成节点形式,然后即可替换抽象语法树中对应的节点子树。
若向所述虚拟环境输入所述节点子树得到的结果为空或不产生操作,则输入空节点作为所述去混淆节点数据;当后续对目标脚本去混淆时,当所述去混淆节点数据为空节点时,可以直接将该节点子树删除。
若向所述虚拟环境输入所述单节点数据得到对应的单节点数据,则将得到的单节点数据作为所述去混淆节点数据。即该处理不需要涉及任何结构信息,主要对应加密字符串或编码字符串的处理情况。
进一步的,请参阅图2,作为优选方案,本实施例中,所述基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本,具体包括:
将所述抽象语法树中对应的关键节点数据替换为所述去混淆节点数据得到去混淆语法树;
基于所述去混淆语法树得到所述去混淆脚本。具体的,所述去混淆节点数据为关键节点数据的执行结果数据,因此重新生成的去混淆脚本为简化后的脚本,该简化后的脚本同时实现了格式化和去混淆的效果,大大简化了后续的分析步骤,降低了后续分析的难度。
进一步的,请参阅图3,作为优选方案,本实施例中,还包括:
针对所述去混淆脚本重复执行所述脚本静态去混淆方法,直到得到的去混淆脚本中无任何混淆特征存在。即,针对去混淆脚本进行多次去混淆操作,然后得到的就是最简的去混淆脚本,使后续的检测操作更快、更准确。
以下,以Bash脚本的去混淆过程为例进行详细说明。假设要对以下示例进行去混淆:
var=bash&&cat <<< $(echo 'c2JiCg==' | `echo ba`se$[1+5]$((2*2)) -d |tr 'n-za-mN-ZA-M' 'a-zA-Z') | $var
期望得到的结果是:
echo foo | bash
示例完整的抽象语法树(AST)篇幅过长,此处不列出,以下详细描述对示例代码去混淆的处理过程:
顶层分为三个节点(即三个关键节点),分别为 var=bash, cat, $var。其中第一个节点和第二个节点用And布尔运算符连接起来,需要考虑运算符的短路特性。第二个和第三个是管道符连接,说明前面的执行结果需要传递给第三个节点执行。
分析第一个节点可知,这里是一个赋值语句,必然成功,所以标记为真,记录变量var的值为字符串bash。将第一个节点的值替换为真,然后运行控制流简化逻辑,发现等价表达形式,可以去掉第一个节点和And表达式。处理完成后该命令显示为以下形式:
cat <<< $(echo 'c2JiCg==' | `echo ba`se$[1+5]$((2*2)) -d | tr 'n-za-mN-ZA-M' 'a-zA-Z') | $var
同时隐含记录了变量var的值。但因为第二个节点还没有进行分析,无法确定在第三个节点变量是否被修改,所以暂时保持第三个节点的形式不变。
分析第二个节点可知,这里是一个here document的表达形式,第二个节点下有两个子节点。第一个子节点是cat命令,第二个子节点是一个subshell,使用Op节点<<<连接。这里触发一个特征规则,cat <<< XXX 等价于 echo XXX。处理后显示为以下形式:
echo $(echo 'c2JiCg==' | `echo ba`se$[1+5]$((2*2)) -d | tr 'n-za-mN-ZA-M' 'a-zA-Z') | $var
处理后再次探测特征,又触发一个特征规则,echo $(XXX)|YYY等价于$(XXX)|YYY,所以处理后显示形式如下:
$(echo 'c2JiCg==' | `echo ba`se$[1+5]$((2*2)) -d | tr 'n-za-mN-ZA-M''a-zA-Z') | $var
接下来深入subshell节点进行进一步分析。发现第一个节点将一个字符串传递给第二个节点,而第二个节点中再次引入了subshell节点和数学运算节点,然后又传递给了第三个节点。首先对数学运算节点进行模拟执行,将执行结果替换回原位置,得到以下形式:
$(echo 'c2JiCg==' | `echo ba`se64 -d | tr 'n-za-mN-ZA-M' 'a-zA-Z') |$var
进一步对subshell节点`echo ba`处理,得到ba,替换回原位置得到:
$(echo 'c2JiCg==' | base64 -d | tr 'n-za-mN-ZA-M' 'a-zA-Z') | $var
处理完成后再次探测特征,触发base64解码规则,形式为 echo XXX | base64 -d,模拟执行base64解码运算后替换掉涉及的节点,重新渲染得到:
$(echo sbb | tr 'n-za-mN-ZA-M' 'a-zA-Z') | $var
处理完成后再次探测特征,触发tr替换规则,形式为 echo XXX | tr YYY ZZZ,模拟执行tr命令的替换操作,运算后替换掉涉及的节点,重新渲染得到:
$(echo foo) | $var
处理完成后再次探测特征,触发subshell替换规则,形式为$(echo XXX)等价于echo XXX。替换后得到:
echo foo | $var
此时回溯到上一层,发现第二个节点已经处理完毕,var变量的值未被修改,所以赋值给第三个节点,得到:
echo foo | bash
此时所有内容处理完毕,得到最终期望的结果。
相应的,请参阅图4,本发明提供一种脚本静态去混淆系统,包括:
获取模块,用于从目标脚本的抽象语法树中获取关键节点数据,确定所述关键节点数据对应的混淆特征;
模拟执行模块,用于基于所述混淆特征匹配对应的去混淆组件,并对所述关键节点数据进行模拟得到去混淆节点数据;
去混淆模块,用于基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本。
进一步的,所述获取模块还用于执行:
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征;所述特征识别子组件由一个或多个特征识别函数构成。
进一步的,所述特征识别子组件包括单节点子组件和复合节点子组件;
所述获取模块还用于执行:
获取所述关键节点数据的节点特征,所述节点特征包括单节点特征和复合节点特征;
针对所述单节点特征对应的关键节点数据使用所述单节点子组件进行识别得到所述混淆特征,针对所述复合节点特征对应的关键节点数据使用所述复合节点子组件进行识别得到所述混淆特征。
进一步的,所述混淆特征识别库包括多个特征识别子组件;所述脚本静态去混淆方法还包括对所述混淆特征识别库的识别组件管理操作;
所述识别组件管理操作包括:
基于混淆特征的新增和/或特征识别算法的升级,对所述特征识别子组件进行增加和/或更新操作。
进一步的,所述去混淆组件包括解混淆算法;所述模拟执行模块还用于执行:
构建虚拟环境;
将所述关键节点数据以及对应的所述去混淆组件输入到所述虚拟环境中;
基于所述去混淆组件中的解混淆算法处理所述关键节点数据,得到所述去混淆节点数据。
进一步的,所述模拟执行模块还用于执行:
基于所述混淆特征在组件库中匹配得到对应的所述去混淆组件,所述组件库中具有多个带有不同特征标签且独立的去混淆组件。
进一步的,还包括组件库管理模块;所述组件库管理模块用于执行:
基于混淆特征的新增和/或解混淆算法的升级,对去混淆组件进行增加和/或更新操作。
进一步的,所述关键节点数据包括节点子树和单节点数据;
所述去混淆节点数据包括简化子树、单节点、空节点;
其中,若向所述虚拟环境输入所述节点子树得到简化后的简化子树,则所述简化子树作为所述去混淆节点数据;
若向所述虚拟环境输入所述节点子树得到固定值,则基于所述固定值创建对应的单节点作为所述去混淆节点数据;
若向所述虚拟环境输入所述节点子树得到的结果为空或不产生操作,则输入空节点作为所述去混淆节点数据;
若向所述虚拟环境输入所述单节点数据得到对应的单节点数据,则将得到的单节点数据作为所述去混淆节点数据。
进一步的,所述去混淆模块还用于执行:
将所述抽象语法树中对应的关键节点数据替换为所述去混淆节点数据得到去混淆语法树;
基于所述去混淆语法树得到所述去混淆脚本。
进一步的,所述脚本静态去混淆系统还用于:
针对所述去混淆脚本重复执行所述脚本静态去混淆方法,直到得到的去混淆脚本中无任何混淆特征存在。
相应的,本发明提供一种电子设备,包括:
存储器,存储有计算机程序;
处理器,执行所述计算机程序时实现所述的脚本静态去混淆方法。
相应的,本发明提供一种计算机可读介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述的脚本静态去混淆方法。
计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (8)

1.一种脚本静态去混淆方法,其特征在于,包括:
从目标脚本的抽象语法树中获取关键节点数据,确定所述关键节点数据对应的混淆特征;
基于所述混淆特征匹配对应的去混淆组件,并对所述关键节点数据进行模拟执行得到去混淆节点数据;所述关键节点数据包括节点子树和单节点数据;所述去混淆节点数据包括简化子树、单节点、空节点;基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本;
所述并对所述关键节点数据进行模拟执行得到去混淆节点数据,具体包括:
构建虚拟环境;
基于所述去混淆组件中的解混淆算法处理所述关键节点数据,将所述关键节点数据以及对应的所述去混淆组件输入到所述虚拟环境中;其中,若向所述虚拟环境输入所述节点子树得到固定值,则基于所述固定值创建对应的单节点作为所述去混淆节点数据;
若向所述虚拟环境输入所述节点子树得到的结果为空或不产生操作,则输入空节点作为所述去混淆节点数据。
2.根据权利要求1所述的脚本静态去混淆方法,其特征在于,所述确定所述关键节点数据对应的混淆特征,具体包括:
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征;所述特征识别子组件由一个或多个特征识别函数构成。
3.根据权利要求2所述的脚本静态去混淆方法,其特征在于,所述特征识别子组件包括单节点子组件和复合节点子组件;
通过调用混淆特征识别库中的特征识别子组件对所述关键节点数据进行识别,得到所述混淆特征,具体包括:
获取所述关键节点数据的节点特征,所述节点特征包括单节点特征和复合节点特征;
针对所述单节点特征对应的关键节点数据使用所述单节点子组件进行识别得到所述混淆特征,针对所述复合节点特征对应的关键节点数据使用所述复合节点子组件进行识别得到所述混淆特征。
4.根据权利要求2所述的脚本静态去混淆方法,其特征在于,所述混淆特征识别库包括多个特征识别子组件,所述脚本静态去混淆方法还包括对所述混淆特征识别库的识别组件管理操作;
所述识别组件管理操作包括:
基于混淆特征的新增或特征识别算法的升级,对所述特征识别子组件进行增加或更新操作。
5.根据权利要求1所述的脚本静态去混淆方法,其特征在于,基于所述混淆特征匹配对应的去混淆组件,具体包括:
基于所述混淆特征在组件库中进行匹配得到与所述混淆特征对应的所述去混淆组件,所述组件库中具有多个带有不同特征标签且独立的去混淆组件。
6.根据权利要求5所述的脚本静态去混淆方法,其特征在于,还包括组件库管理操作;所述组件库管理操作包括:
基于混淆特征的新增或解混淆算法的升级,对去混淆组件进行增加或更新操作。
7.根据权利要求1所述的脚本静态去混淆方法,其特征在于,所述基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本,具体包括:
将所述抽象语法树中对应的关键节点数据替换为所述去混淆节点数据得到去混淆语法树;
基于所述去混淆语法树得到所述去混淆脚本。
8.一种脚本静态去混淆系统,其特征在于,包括:
获取模块,用于从目标脚本的抽象语法树中获取关键节点数据,判断所述关键节点数据对应的混淆特征;
模拟执行模块,用于基于所述混淆特征匹配对应的去混淆组件对所述关键节点数据进行模拟执行得到去混淆节点数据;所述关键节点数据包括节点子树和单节点数据;所述去混淆节点数据包括简化子树、单节点、空节点;
去混淆模块,用于基于所述去混淆节点数据对所述目标脚本进行去混淆处理得到去混淆脚本;
所述对所述关键节点数据进行模拟执行得到去混淆节点数据,具体包括:
构建虚拟环境;
基于所述去混淆组件中的解混淆算法处理所述关键节点数据,将所述关键节点数据以及对应的所述去混淆组件输入到所述虚拟环境中;其中,若向所述虚拟环境输入所述节点子树得到固定值,则基于所述固定值创建对应的单节点作为所述去混淆节点数据;
若向所述虚拟环境输入所述节点子树得到的结果为空或不产生操作,则输入空节点作为所述去混淆节点数据。
CN202310571157.9A 2023-05-20 2023-05-20 脚本静态去混淆方法及系统 Active CN116305131B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310571157.9A CN116305131B (zh) 2023-05-20 2023-05-20 脚本静态去混淆方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310571157.9A CN116305131B (zh) 2023-05-20 2023-05-20 脚本静态去混淆方法及系统

Publications (2)

Publication Number Publication Date
CN116305131A CN116305131A (zh) 2023-06-23
CN116305131B true CN116305131B (zh) 2023-08-11

Family

ID=86826125

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310571157.9A Active CN116305131B (zh) 2023-05-20 2023-05-20 脚本静态去混淆方法及系统

Country Status (1)

Country Link
CN (1) CN116305131B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101874373B1 (ko) * 2016-12-27 2018-07-04 한국인터넷진흥원 난독화 스크립트에 대한 악성 스크립트 탐지 방법 및 그 장치
EP3379443A1 (en) * 2017-03-24 2018-09-26 CSPi GmbH Method and computer device to deobfuscate a source code
CN108804921A (zh) * 2018-05-29 2018-11-13 中国科学院信息工程研究所 一种PowerShell代码的去混淆方法及装置
CN109033764A (zh) * 2017-06-09 2018-12-18 腾讯科技(深圳)有限公司 反混淆处理方法及终端、计算机设备
CN110750789A (zh) * 2019-10-18 2020-02-04 杭州奇盾信息技术有限公司 解混淆方法、装置、计算机设备和存储介质
CN111475809A (zh) * 2020-04-09 2020-07-31 杭州奇盾信息技术有限公司 脚本混淆检测方法、装置、计算机设备和存储介质
CN112464224A (zh) * 2020-12-24 2021-03-09 中科信息安全共性技术国家工程研究中心有限公司 一种基于Powershell脚本的去混淆方法
CN113111346A (zh) * 2020-01-13 2021-07-13 深信服科技股份有限公司 一种多引擎WebShell脚本文件检测方法及系统
CN114186233A (zh) * 2021-12-13 2022-03-15 奇安信科技集团股份有限公司 代码的反混淆方法、装置、电子设备及存储介质
CN114661290A (zh) * 2022-02-25 2022-06-24 深圳前海微众银行股份有限公司 一种脚本错误的处理方法、装置、设备及存储介质
CN114880667A (zh) * 2022-05-20 2022-08-09 阿里云计算有限公司 一种脚本检测方法及装置
CN114912112A (zh) * 2022-04-26 2022-08-16 阿里云计算有限公司 脚本检测方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104166822B (zh) * 2013-05-20 2017-10-13 阿里巴巴集团控股有限公司 一种数据保护的方法和装置

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101874373B1 (ko) * 2016-12-27 2018-07-04 한국인터넷진흥원 난독화 스크립트에 대한 악성 스크립트 탐지 방법 및 그 장치
EP3379443A1 (en) * 2017-03-24 2018-09-26 CSPi GmbH Method and computer device to deobfuscate a source code
CN109033764A (zh) * 2017-06-09 2018-12-18 腾讯科技(深圳)有限公司 反混淆处理方法及终端、计算机设备
CN108804921A (zh) * 2018-05-29 2018-11-13 中国科学院信息工程研究所 一种PowerShell代码的去混淆方法及装置
CN110750789A (zh) * 2019-10-18 2020-02-04 杭州奇盾信息技术有限公司 解混淆方法、装置、计算机设备和存储介质
CN113111346A (zh) * 2020-01-13 2021-07-13 深信服科技股份有限公司 一种多引擎WebShell脚本文件检测方法及系统
CN111475809A (zh) * 2020-04-09 2020-07-31 杭州奇盾信息技术有限公司 脚本混淆检测方法、装置、计算机设备和存储介质
CN112464224A (zh) * 2020-12-24 2021-03-09 中科信息安全共性技术国家工程研究中心有限公司 一种基于Powershell脚本的去混淆方法
CN114186233A (zh) * 2021-12-13 2022-03-15 奇安信科技集团股份有限公司 代码的反混淆方法、装置、电子设备及存储介质
CN114661290A (zh) * 2022-02-25 2022-06-24 深圳前海微众银行股份有限公司 一种脚本错误的处理方法、装置、设备及存储介质
CN114912112A (zh) * 2022-04-26 2022-08-16 阿里云计算有限公司 脚本检测方法及装置
CN114880667A (zh) * 2022-05-20 2022-08-09 阿里云计算有限公司 一种脚本检测方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
混淆恶意JavaScript代码的检测与反混淆方法研究;马洪亮 等;计算机学报;第40 卷(第7期);第1699-1713页 *

Also Published As

Publication number Publication date
CN116305131A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
Manès et al. The art, science, and engineering of fuzzing: A survey
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
Carmony et al. Extract Me If You Can: Abusing PDF Parsers in Malware Detectors.
CN108614707A (zh) 静态代码检查方法、装置、存储介质和计算机设备
CN109033764B (zh) 反混淆处理方法及终端、计算机设备
RU91213U1 (ru) Система автоматического составления описания и кластеризации различных, в том числе и вредоносных, объектов
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN112131120B (zh) 一种源代码缺陷检测方法及装置
CN112948828A (zh) 一种二进制程序恶意代码检测方法、终端设备及存储介质
CN110162474B (zh) 一种基于抽象语法树的智能合约重入漏洞检测方法
CN114969760A (zh) 漏洞检测方法及装置、计算机可读介质和电子设备
US9405652B2 (en) Regular expression support in instrumentation languages using kernel-mode executable code
CN115062309A (zh) 一种新型电力系统下基于设备固件仿真的漏洞挖掘方法及存储介质
CN114036526A (zh) 漏洞测试方法、装置、计算机设备和存储介质
CN115022026A (zh) 一种区块链智能合约威胁检测装置及方法
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN113935041A (zh) 面向实时操作系统设备的漏洞检测系统及方法
CN115688108B (zh) 一种webshell静态检测方法及系统
CN116305131B (zh) 脚本静态去混淆方法及系统
CN113626823B (zh) 一种基于可达性分析的组件间交互威胁检测方法及装置
CN113419960B (zh) 用于可信操作系统内核模糊测试的种子生成方法及系统
CN115310087A (zh) 一种基于抽象语法树的网站后门检测方法和系统
Xu et al. Expediting binary fuzzing with symbolic analysis
CN113392016A (zh) 对程序异常情况处理的规约生成方法、装置、设备及介质
Jiang et al. An exploitability analysis technique for binary vulnerability based on automatic exception suppression

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