基于有限状态自动机的攻击脚本生成方法及相关装置

文档序号:26006095发布日期:2021-07-23 21:24阅读:148来源:国知局
基于有限状态自动机的攻击脚本生成方法及相关装置

本申请涉及网络安全领域,尤其涉及基于有限状态自动机的攻击脚本生成方法及相关装置。



背景技术:

随着各类网络服务在世界范围内的普及,各类网络服务零日漏洞层出不穷,近年来利用网络服务漏洞进行的网络攻击案件频发。网络服务,即服务器所承载的网络服务程序,如smb、ssl、dhcp、dns、ftp等,是攻击者对目标网络服务平台进行渗透攻击的主要突破口之一。利用网络服务漏洞进行的网络渗透攻击,可造成对网络服务运营商内部数据的非法存取、网络服务平台拒绝服务和网络资源非法占用、非法控制等威胁,对互联网安全构成重大危害。

目前,各类网络服务运营商及软件厂商在面对零日攻击行为时,多采取人工攻击行为复现、人工漏洞分析定位等传统攻击响应模式,还原攻击者使用的攻击脚本。因此,对攻击者使用的攻击脚本的还原方式,具有响应速度慢、人力资源消耗大、人为因素影响大等诸多局限性。



技术实现要素:

本申请提供了基于有限状态自动机的攻击脚本生成方法及相关装置,目的在于解决对攻击者使用的攻击脚本的还原方式,具有响应速度慢、人力资源消耗大、人为因素影响大等诸多局限性的问题。

为了实现上述目的,本申请提供了以下技术方案:

本申请提供了一种基于有限状态自动机的攻击脚本生成方法,包括:

从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流;

向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击;

接收所述虚拟运行环境中运行的目标程序,每次响应接收到的攻击数据流产生的响应数据流;

在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,所述差异数据不为空且确定出所述差异数据中内存地址变量的各个取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机,所述有限状态自动机的下一个状态继承上一个状态的状态变量;

在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序后,若更新得到的有限状态自动机的状态表征对所述目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,生成攻击脚本。

可选的,在任一次的反馈数据流与相应的响应数据流间的差异数据为空的情况下,生成该次的状态转移函数,包括:

向攻击脚本添加具有接收响应数据流功能的脚本语句;

添加具有提取响应数据流中的内存地址功能的脚本语句。

可选的,在任一次的反馈数据流与相应的响应数据流间的差异数据不为空的情况下,确定所述差异数据中内存地址变量的各个取值分别对应的段基址和偏移量的过程,包括:

检查该次的差异数据中,是否含有内存地址变量的取值;所述内存地址变量的可取值包括:二进制或者文本格式的依赖库、栈、堆和代码段的内存地址;

在检查到内存地址变量的任一种取值的情况下,计算该取值与系统随机分配的内存段基址间的偏移量,得到内存地址变量在该取值下的内存段基址和偏移量;

所述生成该次的状态转移函数,具体为:

依据所述差异数据包含的内存地址变量的各个取值分别对应的内存段基址和偏移量,生成状态转移函数。

可选的,所述从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流,包括:

将所述客户端与目标程序之间历史产生的交互数据流中一个客户端与目标程序的一次会话数据流,作为一组交互数据流,得到多组交互数据流;

分别对每组交互数据流,按照客户端收发两个方向进行区分标记;

分别对每组交互数据流中,收发两个方向的数据流分别进行排序;

分别对排序后的每组交互数据流进行重组和去噪,得到每组整流后的收发方向数据流;

从所述每组整流后的收发方向数据流中,确定收方向数据流中包含预设敏感信息的各组数据流;

将所述各组数据流中收方向的数据流,分别作为反馈数据流,得到各组反馈数据流;

将所述各组数据流中发方向的数据流,分别作为攻击数据流,得到各组攻击数据流。

可选的,所述向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击,包括:

向所述虚拟运行环境中运行的目标程序分别发送所述各组攻击数据流;其中,向所述虚拟运行环境中运行的目标程序发送任意一组攻击数据流的过程包括:按照该组攻击数据流中各攻击交互数据的时间顺序,一次发送一个攻击数据的方式,进行发送。

可选的,在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序之后,还包括:

若更新得到的有限状态自动机的状态表征对所述目标程序攻击不成功,则获取已发送的各组攻击数据流中预设数量组攻击数据流分别对应的差异数据,得到预设数量组差异数据;

以预设变量集合为依据,确定所述预设数量组差异数据中属于所述预设变量集合的变量为目标变量;

依据所述目标变量,确定用于生成攻击脚本中的动态参数的目标变量关系表达式;

依据所述目标变量关系表达式,对有限状态自动机进行修正,得到表征对目标程序攻击成功的有限状态自动机;

依据所述表征对目标程序攻击成功的有限状态自动机中的状态转移函数,生成攻击脚本。

可选的,所述依据所述目标变量,确定用于生成攻击脚本中的动态参数的目标变量关系表达式,包括:

依据预设深度,生成二叉树;

在每个二叉树上,对非叶节点按照预设的运算列表包含的运算进行遍历,对叶节点按照目标变量进行遍历,将每个二叉树的非叶节点的一种运算组合和叶节点的一种目标变量组合构成的运算表达式,作为一种解空间树;

依据预设数量组的攻击数据流中的目标变量取值,验证解空间树的变量关系表达式是否成立,并将变量关系表达式成立的一个解空间树指示的变量关系表达式,作为所述目标变量关系表达式。

本申请还提供了一种基于有限状态自动机的攻击脚本生成装置,包括:

提取模块,用于从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流;

发送模块,用于向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击;

接收模块,用于接收所述虚拟运行环境中运行的目标程序,每次响应接收到的攻击数据流产生的响应数据流;

生成更新模块,用于在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,所述差异数据不为空且确定出所述差异数据中内存地址变量的各个取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机,所述有限状态自动机的下一个状态继承上一个状态的状态变量;

生成模块,用于在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序后,若更新得到的有限状态自动机的状态表征对所述目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,生成攻击脚本。

本申请还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序执行上述任一所述的基于有限状态自动机的攻击脚本生成方法。

本申请还提供了一种设备,所述设备包括至少一个处理器、以及与所述处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行上述任一所述的基于有限状态自动机的攻击脚本生成方法。

本申请所述的基于有限状态自动机的攻击脚本生成方法及相关装置,从客户端与目标程序之间历史产生的交互数据流中,提取攻击目标程序的攻击数据流和目标程序响应所述攻击数据流的反馈数据流;向虚拟运行环境中运行的目标程序,逐步发送攻击数据流,接收目标程序对攻击数据流产生的响应数据流;在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,差异数据不为空且确定出差异数据中内存地址变量的各取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将状态转移函数更新至有限状态自动机。在攻击数据流全部被发送给在虚拟运行环境中运行的目标程序后,若最终更新得到的有限状态自动机的状态表征对目标程序攻击成功,则表示最终更新得到的有限状态自动机中的状态转移函数可以成功表示攻击过程,因此,通过最终更新得到的有限状态自动机中的状态转移函数,可以生成攻击脚本。

由于本申请无需人工分析生成攻击脚本,从而,避免了响应速度慢、人力资源消耗大、人为因素影响大等诸多问题。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例公开的一种基于有限状态自动机的攻击脚本生成方法的流程图;

图2为本申请实施例公开的又一种基于有限状态自动机的攻击脚本生成方法的流程图;

图3为本申请实施例公开的一种基于有限状态自动机的攻击脚本生成装置的结构示意图;

图4为本申请实施例公开的一种设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为本申请实施例提供的一种基于有限状态自动机的攻击脚本生成方法,可以包括以下步骤:

s101、接收初始参数。

在本步骤中,初始参数可以包括:用户使用的依赖库文件,预设的脚本输出目录、预设的最大尝试次数和依赖库版本等。

s102、获取客户端与目标程序之间历史产生的交互数据流。

在本实施例中,目标程序是待分析的软件程序,其中,目标程序具体是哪个软件程序,需要根据实际需求进行确定,本实施例不对目标程序的具体内容作限定。

s103、从获取的交互数据流中,提取攻击目标程序的攻击数据流和目标程序响应攻击数据流的反馈数据流。

可选的,本步骤的具体实现过程可以包括以下步骤a1~步骤a5:

a1、将交互数据流中一个客户端与目标程序的一次会话数据流,作为一组交互数据流,得到多组交互数据流。

在本步骤中,可以基于tcp/ip协议通信原理,根据交互数据流中的源ip、源端口以及目的ip,目的端口字段值,对不同会话的数据流进行分类。为了描述方便,将一个会话的交互数据流称为一组交互数据流。

a2、分别对每组交互数据流,按照客户端收发两个方向进行区分标记。

a3、分别对每组交互数据流中,收发两个方向的数据流分别进行排序。

在本步骤中,可以基于tcp/ip协议通信原理,根据数据流中ack与seq字段,分别对每组交互数据流中的数据进行正确排序,同时按照收发两个方向,分别对每组交互数据流进行区分标记。

a4、分别对排序后的每组交互数据流进行重组和去噪,得到每组整流后的收发方向数据流。

本步骤的具体实现方式为现有技术,这里不再赘述。

a5、从每组整流后的收发方向数据流中,确定收方向数据流中包含预设敏感信息的各组数据流。

在本步骤中,假设整流后的收发方向数据流为5组,其中,3组整流后的收发方向数据流中收方向数据流中包含预设敏感信息,则该三组整流后的收发方向数据流,就是本步骤确定出的3组数据流。

a6、将各组数据流中收方向的数据流,分别作为反馈数据流,得到各组反馈数据流。

还以a5中的例子为例,在本步骤中,分别将确定出的3组数据流中的收方向的数据流,分别作为反馈数据流,得到3组反馈数据流。

a7、将各组数据流中发方向的数据流,分别作为攻击数据流,得到各组攻击数据流。

还以a5中的例子为例,在本步骤中,分别将确定出的3组数据流中的发方向的数据流,分别作为攻击数据流,得到3组攻击数据流。

需要说明的是,在实际中,从获取的交互数据流中,提取攻击数据流和反馈数据流的方式,除了采用步骤a1~步骤a7通过分组的方式进行提取外,还可以采用非分组的方式进行提取。具体的,可以直接从获取的交互数据流中,提取攻击数据流和反馈数据流。

上述s101~s103的目的是:从客户端与目标程序之间历史产生的交互数据流中,提取攻击目标程序的攻击数据流和目标程序响应攻击数据流的反馈数据流。

s104、从提取的攻击数据流中,确定待发送的当前攻击数据流。

在本步骤中,可以从a7得到的各组攻击数据流中,确定待发送的当前攻击数据流。可选的,可以将各组攻击数据流中,时间最早的那组未发送攻击数据流,作为当前攻击数据流。当然,在实际中,还可以采用其他确定方式,本实施例不对具体的确定方式作限定。

s105、向虚拟运行环境中运行的目标程序,发送当前攻击数据流。

在本实施例中,目标程序是运行在虚拟运行环境中,在实际中,虚拟运行环境与之前与客户端交互的目标程序的实际运行环境之间,会存在不同,可能是配置上的不同,还可能是内存的随机地址不同等等。

由于当前攻击数据流由多个单次攻击交互数据中的攻击数据构成,因此,在本步骤中,向虚拟运行环境中运行的目标程序发送当前攻击数据流的方式可以包括:按照该组攻击数据流中各攻击交互数据的时间顺序,一次发送一个攻击数据,直至将当前攻击数据流发送完毕。

s106、接收虚拟运行环境中运行的目标程序,响应当前攻击数据流产生的响应数据流。

在本实施例中,向虚拟运行环境中运行的目标程序发送当前攻击数据流后,目标程序会对本次发送的攻击数据流进行响应,为了描述方便,本实施例将目标程序响应攻击数据流所得到的数据流,称为响应数据流。

在实际中,由于虚拟运行环境与目标程序历史的真实运行环境之间存在不同,所以,在本步骤中,响应当前攻击数据流产生的响应数据流,与当前攻击数据流对应的反馈数据流之间,可能会存在差异。

s107、确定响应数据流与当前攻击数据流对应的反馈数据流之间的差异数据。

s108、判断差异数据是否为空,如果是,则执行s109,如果否,则执行s110。

s109、生成当前攻击数据流对应的状态转移函数,并将状态转移函数添加到有限状态自动机。

在差异数据为空的情况下,执行本步骤的操作。

在本步骤中,生成当前攻击数据流对应的状态转移函数的过程可以包括:向攻击脚本添加具有接收响应数据流功能的脚本语句,并添加具有提取响应数据流中的内存地址功能的脚本语句。

在本实施例中,有限状态自动机用于表示:用于产生攻击数据流并处理响应数据流的攻击脚本。

执行完本步骤后,接着执行s113。

s110、检查差异数据中,是否含有内存地址变量的取值。

在本实施例中,内存地址变量的可取值可以包括:二进制或者文本格式的依赖库、栈、堆和代码段的内存地址。

需要说明的是,差异数据实际包含的内存地址变量的取值,可能是可取值中的一种或几种。

可选的,在本步骤中,可以逐字节遍历差异数据,并检查每8字节差异数据中是否含有二进制或者文本格式的依赖库、栈、堆和代码段的内存地址数据。

需要说明的是,在本步骤中,只检查差异数据中,是否含有内存地址变量,只是一种具体的实现方式。在实际中,还可以针对差异数据中属于预设变量集合的每个变量,分别进行判断。以任意一个变量为例,判断该变量是否为随机化内存地址的泄露数据,如果该变量是随机化内存地址的泄露数据,则计算并记录该变量的取值(内存段地址)相对于内存段基址的偏移量以及内存段地址与内存段基址构成的内存地址范围。如果该变量不是随机化内存地址的泄露数据,则直接记录该变量。

s111、在检查到内存地址变量的任一种取值的情况下,计算该取值与系统随机分配的内存段基址间的偏移量,得到内存地址变量在该取值下的内存段基址和偏移量。

在本实施例中,可以从预设文件中获取到模拟攻击中系统随机分配的内存段基址。

在本步骤中,计算该取值表示的内存地址与内存段基址间的差值,就是该取值对应的偏移量。因此,本步骤可以得到内存地址变量在该取值下的内存段基址和偏移量。

s112、依据差异数据包含的内存地址变量的各个取值分别对应的内存段基址和偏移量,生成状态转移函数,并将状态转移函数添加到有限状态自动机。

在本实施例中,事先生成了用于产生攻击数据流的脚本语句。

本步骤的具体实现方式可以包括:将攻击脚本中用于发送攻击数据流的脚本语句中的内存地址,替换为响应数据流中的内存地址+偏移量的变量形式的动态参数。其中,偏移量指:第一偏移量与第二偏移量的差值,其中,第一偏移量指:攻击数据流与内存段基址间的偏移量。第二偏移量指:提取的响应数据流中的内存地址与内存段基址间的偏移量。

可选的,在本实施例中,由于栈地址存在栈内地址随机化,在差异数据包含多个栈内存地址的情况下,本步骤中可以只将其中一个栈内存地址的内存基址和偏移量,参与状态转移函数的生成。即内存地址变量的全部取值中,存在多个栈内存地址的内存基址和偏移量的情况下,依据一个栈内存地址和其他非栈内存地址分别对应的内存基址和偏移量,生成状态转移函数。

通过上述s110~s112,可以看出有限状态自动机记录0、1或多组重放过程中由差异值解出的基址-偏移关系对,以状态转移函数的形式对基址-偏移关系进行表示,并以此为基础生成攻击脚本,进而可通过服务器返回的随机化基址,使用状态转移函数计算出正确的地址信息,模拟攻击者使用脚本向服务器发送攻击数据,及处理服务器返回的响应数据。

s113、判断各组攻击数据流是否全部被发送,如果否,则执行s104,如果是,则执行s114。

上述s104~s113的目的是:向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对目标程序的模拟攻击,接收虚拟运行环境中运行的目标程序,逐次响应攻击数据流产生的响应数据流;在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,差异数据不为空且确定出差异数据中内存地址变量的各个取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机。

s114、判断更新得到的有限状态自动机的状态是否表征对目标程序攻击成功,如果否,则执行s115,如果是,则执行s121。

在本实施例中,可能更新得到的有限状态自动机的状态不表征对目标程序攻击成功,为了得到能够对目标程序攻击成功的攻击脚本。其中,用于生成攻击脚本中的动态参数在每次攻击中都不相同,在攻击数据流中体现为不同组攻击数据流间的差异部分。因此,接着,本实施例执行以下s115~s120的步骤。

s115、获取各组攻击数据流中预设数量组的攻击数据流分别对应的差异数据,得到预设数量组差异数据。

s116、获取预设数量组差异数据中属于预设变量集合的变量为目标变量。

在本实施例中,预设的变量集合包括内存地址变量,但是,也包含其他变量。其中,预设的变量集合具体包括哪些变量,需要根据实际情况进行确定,本实施例不对预设的变量集合具体包含哪些变量作限定。

需要说明的是,如果上述s110中已经对每组交互数据流,分别判断了属于预设变量集合的变量,则本步骤直接获取已经得到的预设数量组差异数据包含的每个变量即可,就得到了目标变量。否则,本步骤需要从预设数量组差异数据中,确定属于预设的变量集合的变量为目标变量。

s117、依据预设深度,生成二叉树。

在本实施例中,预设深度决定生成的二叉树的层数,例如,预设深度为2,生成的二叉树的层数最多为3层。

在本实施例中,生成的二叉树包括:叶节点和非叶节点,其中,叶节点为二叉树最底层的节点,非叶节点为除叶节点之外的节点。其中,非叶节点为某种运算关系(例如,“+”、“-”和“*”等)。叶节点为之前缓存的变量或未知的常数。当某个叶节点有兄弟节点时,则其父节点表示双目运算符,无兄弟节点时,则该节点为右孩子,且其父节点为单目运算符(如非运算)。

s118、在每个二叉树上,对非叶节点按照预设的运算列表包含的运算进行遍历,对叶节点按照目标变量进行遍历,将每个二叉树的非叶节点的一种运算组合和叶节点的一种目标变量组合构成的运算表达式,作为一种解空间树。

在每个二叉树上,按照预设运算列表包含的运算对非叶节点进行遍历。具体的,以任意一个二叉树为例,对该二叉树的每个非叶节点都按照预设运算列表包含的运算进行遍历,得到该二叉树对应的非叶节点的各种运算组合。在本实施例中,得到每个二叉树分别对应的非叶节点的各种运算组合。

在每个二叉树的非叶节点的每种运算组合的基础上,对每个叶节点都按照目标变量进行遍历。以任意一个二叉树的非叶节点的任意一种运算组合为例,对该运算组合下的叶节点按照目标变量进行遍历,得到该运算组合下的各种变量组合。

在本实施例中,一个二叉树的非叶节点的一种运算组合下叶节点的一种变量组合表示一个解空间树,得到多个解空间树。其中,每种解空间树表示一种变量关系表达式。

s119、依据预设数量组的攻击数据流中的目标变量取值,验证解空间树的变量关系表达式是否成立,并将变量关系表达式成立的一个解空间树指示的变量关系表达式,作为目标变量关系表达式。

在本步骤中,将各组攻击流量数据中对应目标变量的取值代入,解空间树指示的变量关系表达式,若变量关系表达式成立,则破解完毕。若变量关系表达式不成立,则继续验证下一个解空间树表示的变量关系表达式是否成立,直到破解到某个解空间树指示的变量关系表达式成立为止。

上述s117~s119的目的是:依据预设变量集合中的变量,确定用于生成攻击脚本中的动态参数的目标变量关系表达式。

s120、依据目标变量关系表达式,对有限状态自动机进行修正,得到表征对目标程序攻击成功的有限状态自动机。

在本步骤中,依据目标变量关系表达式,对有限状态自动机进行修正的具体过程可以包括:将含有该变量的攻击脚本语句中该变量所处位置的值由原本的定值,更改为目标值。其中,目标值由参数生成语句动态生成得到,其中,参数生成语句通过目标变量关系表达式编写得到。

执行完本步骤后,执行s121。

s121、依据有限状态自动机中的状态转移函数,生成攻击脚本。

可选的,在本步骤中,可以根据有限状态自动机中的状态转移函数生成脚本语句,并将生成的脚本语句填入预先设置的攻击脚本模板,即可得到攻击脚本,在本实施例中,可以将生成的攻击脚本,称为概念验证脚本文件,或者,称为漏洞利用脚本文件。

图2为本申请实施例提供的又一种基于有限状态自动机的攻击脚本生成方法,可以包括以下步骤:

s201、从客户端与目标程序之间历史产生的交互数据流中,提取攻击目标程序的攻击数据流和目标程序响应所述攻击数据流的反馈数据流。

在本实施例中,反馈数据流可以为交互数据流中收方向数据流中包含预设敏感信息的数据流。攻击数据流可以为交互数据流中与反馈数据流对应的发方向的数据流。

s202、向虚拟运行环境中运行的目标程序,逐步发送攻击数据流,实现对目标程序的模拟攻击。

在本实施例中,通过向虚拟运行环境中运行的目标程序,逐步发送攻击数据流,来实现对目标程序的模拟攻击。

s203、接收所述虚拟运行环境中运行的目标程序,逐次响应接收到的攻击数据流产生的响应数据流。

在本实施例中,目标程序是运行在虚拟运行环境中,在实际中,虚拟运行环境与之前与客户端交互的目标程序的实际运行环境之间,会存在不同,可能是配置上的不同,还可能是内存的随机地址不同等等。所以,在本步骤中,响应当前攻击数据流产生的响应数据流,与当前攻击数据流对应的反馈数据流之间,可能会存在差异。

s204、在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,所述差异数据不为空且确定出所述差异数据中内存地址变量的各取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机。

s205、在攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序后,若更新得到的有限状态自动机的状态表征对目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,生成攻击脚本。

在本实施例中,如果更新得到的有限状态自动机的状态表征对目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,就可以生成攻击脚本。

可选的,在本步骤中,可以根据有限状态自动机中的状态转移函数生成脚本语句,并将生成的脚本语句填入预先设置的攻击脚本模板,即可得到攻击脚本,在本实施例中,可以将生成的攻击脚本,称为概念验证脚本文件,或者,称为漏洞利用脚本文件。

图3为本申请实施例提供的一种基于有限状态自动机的攻击脚本生成装置,可以包括:提取模块301、发送模块302、接收模块303、生成更新模块304和生成模块305,其中,

提取模块301,用于从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流;

发送模块302,用于向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击;

接收模块303,用于接收所述虚拟运行环境中运行的目标程序,每次响应接收到的攻击数据流产生的响应数据流;

生成更新模块304,用于在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,所述差异数据不为空且确定出所述差异数据中内存地址变量的各个取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机,所述有限状态自动机的下一个状态继承上一个状态的状态变量;

生成模块305,用于在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序后,若更新得到的有限状态自动机的状态表征对所述目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,生成攻击脚本。

可选的,生成更新模块304,用于在任一次的反馈数据流与相应的响应数据流间的差异数据为空的情况下,生成该次的状态转移函数,包括:

生成更新模块304,具体用于向攻击脚本添加具有接收响应数据流功能的脚本语句;添加具有提取响应数据流中的内存地址功能的脚本语句。

可选的,生成更新模块304,用于在任一次的反馈数据流与相应的响应数据流间的差异数据不为空的情况下,确定所述差异数据中内存地址变量的各个取值分别对应的段基址和偏移量的过程,包括:

生成更新模块304,具体用于检查该次的差异数据中,是否含有内存地址变量的取值;所述内存地址变量的可取值包括:二进制或者文本格式的依赖库、栈、堆和代码段的内存地址;在检查到内存地址变量的任一种取值的情况下,计算该取值与系统随机分配的内存段基址间的偏移量,得到内存地址变量在该取值下的内存段基址和偏移量;

所述生成该次的状态转移函数,具体为:依据所述差异数据包含的内存地址变量的各个取值分别对应的内存段基址和偏移量,生成状态转移函数。

可选的,所述提取模块301,用于从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流,包括:

所述提取模块301,具体用于将所述客户端与目标程序之间历史产生的交互数据流中一个客户端与目标程序的一次会话数据流,作为一组交互数据流,得到多组交互数据流;分别对每组交互数据流,按照客户端收发两个方向进行区分标记;分别对每组交互数据流中,收发两个方向的数据流分别进行排序;分别对排序后的每组交互数据流进行重组和去噪,得到每组整流后的收发方向数据流;从所述每组整流后的收发方向数据流中,确定收方向数据流中包含预设敏感信息的各组数据流;将所述各组数据流中收方向的数据流,分别作为反馈数据流,得到各组反馈数据流;将所述各组数据流中发方向的数据流,分别作为攻击数据流,得到各组攻击数据流。

可选的,所述发送模块302,用于向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击,包括:

所述发送模块302,具体用于向所述虚拟运行环境中运行的目标程序分别发送所述各组攻击数据流;其中,向所述虚拟运行环境中运行的目标程序发送任意一组攻击数据流的过程包括:按照该组攻击数据流中各攻击交互数据的时间顺序,一次发送一个攻击数据的方式,进行发送。

可选的,该装置还可以包括:

执行模块,用于在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序之后,若更新得到的有限状态自动机的状态表征对所述目标程序攻击不成功,则获取已发送的各组攻击数据流中预设数量组攻击数据流分别对应的差异数据,得到预设数量组差异数据;以预设变量集合为依据,确定所述预设数量组差异数据中属于所述预设变量集合的变量为目标变量;依据所述目标变量,确定用于生成攻击脚本中的动态参数的目标变量关系表达式;依据所述目标变量关系表达式,对有限状态自动机进行修正,得到表征对目标程序攻击成功的有限状态自动机;依据所述表征对目标程序攻击成功的有限状态自动机中的状态转移函数,生成攻击脚本。

可选的,所述执行模块,用于依据所述目标变量,确定用于生成攻击脚本中的动态参数的目标变量关系表达式,包括:

所述执行模块,具体用于依据预设深度,生成二叉树;在每个二叉树上,对非叶节点按照预设的运算列表包含的运算进行遍历,对叶节点按照目标变量进行遍历,将每个二叉树的非叶节点的一种运算组合和叶节点的一种目标变量组合构成的运算表达式,作为一种解空间树;依据预设数量组的攻击数据流中的目标变量取值,验证解空间树的变量关系表达式是否成立,并将变量关系表达式成立的一个解空间树指示的变量关系表达式,作为所述目标变量关系表达式。

基于有限状态自动机的攻击脚本生成装置包括处理器和存储器,上述提取模块301、发送模块302、接收模块303、生成更新模块304和生成模块305等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来解决对攻击者使用的攻击脚本的还原方式,具有响应速度慢、人力资源消耗大、人为因素影响大等诸多局限性的问题。

本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述基于有限状态自动机的攻击脚本生成方法。

本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述基于有限状态自动机的攻击脚本生成方法。

本发明实施例提供了一种设备,如图4所示,设备包括至少一个处理器、以及与处理器连接的至少一个存储器、总线;其中,处理器、存储器通过总线完成相互间的通信;处理器用于调用存储器中的程序指令,以执行上述的基于有限状态自动机的攻击脚本生成方法。本文中的设备可以是服务器、pc、pad、手机等。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:

从客户端与目标程序之间历史产生的交互数据流中,提取攻击所述目标程序的攻击数据流和所述目标程序响应所述攻击数据流的反馈数据流;

向虚拟运行环境中运行的目标程序,逐步发送所述攻击数据流,实现对所述目标程序的模拟攻击;

接收所述虚拟运行环境中运行的目标程序,每次响应接收到的攻击数据流产生的响应数据流;

在任一次的响应数据流与相应的反馈数据流间的差异数据为空,或者,所述差异数据不为空且确定出所述差异数据中内存地址变量的各个取值分别对应的内存段基址和偏移量的情况下,生成该次的状态转移函数;并将所述状态转移函数更新至有限状态自动机,所述有限状态自动机的下一个状态继承上一个状态的状态变量;

在所述攻击数据流全部被发送给在所述虚拟运行环境中运行的目标程序后,若更新得到的有限状态自动机的状态表征对所述目标程序攻击成功,则依据更新得到的有限状态自动机中的状态转移函数,生成攻击脚本。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

在一个典型的配置中,设备包括一个或多个处理器(cpu)、存储器和总线。设备还可以包括输入/输出接口、网络接口等。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书的各个实施例中记载的特征可以相互替换或者组合,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1