1.一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,所述方法包括:步骤S1、在跨版本的Windows应用程序上执行原始版本的漏洞验证代码,利用动态插桩技术对执行过程进行跟踪;步骤S2、基于跟踪获取的漏洞验证过程中的行为来建立漏洞利用策略模型,以生成漏洞利用策略;步骤S3、提取漏洞验证过程中触发崩溃的阶段,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因;步骤S4、基于失败原因对原始版本的漏洞验证代码进行修改,从而通过自动迁移来生成目标版本的漏洞验证代码。
2.根据权利要求1所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S3中,漏洞利用策略包括:缓冲区溢出、EIP覆盖、跳板指令执行、攻击载荷执行;其中:在缓冲区溢出点输入预先配置的超出缓冲区存储长度的数据,作为漏洞函数的参数,将其引入到局部变量中,使得数据溢出缓冲区;将数据溢出到栈帧中的EIP位置,将该位置处的内容覆盖为程序下一步执行的跳板指令的地址,则程序按照预先设定的控制流执行;截获EIP后,若跳板指令的地址存在且符合程序对调用函数地址的约束,则程序成功执行跳板指令;程序在成功执行一条或多条跳转指令后,跳转到攻击载荷存放的地址,并执行攻击载荷。
3.根据权利要求2所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S3中,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因,具体包括:在缓冲区溢出后,预期的跳板指令的地址没有填入EIP位置处,原因在于:栈内存布局产生变化,栈帧长度改变,填充内容长度与栈帧长度不等。
4.根据权利要求3所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S3中,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因,具体包括:在执行EIP覆盖后,EIP位置处的指令未被成功执行,原因在于:部署了GS缓解机制,程序在函数返回时对栈帧中的Security Cookie值进行检查,在栈溢出的情况下SecurityCookie值被改变。
5.根据权利要求4所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S3中,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因,具体包括:在执行EIP覆盖后,EIP位置处的指令未被成功执行,原因还在于:部署了safeSEH缓解机制,程序对调用的函数地址进行检查,跳板指令的地址被禁用。
6.根据权利要求5所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S3中,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因,具体包括:在跳板指令执行过程中,无法将程序的控制流截获至攻击载荷执行阶段,原因在于:跳板指令的地址发生改变。
7.根据权利要求3所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S4中,对原始版本的漏洞验证代码进行修改,具体包括:对于栈内存布局变化的情况,采用字符串匹配的方式进行填充内容长度修改。
8.根据权利要求4或5所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S4中,对原始版本的漏洞验证代码进行修改,具体包括:对于部署了缓解机制的情况,采用标志位扫描的方式来绕过缓解机制。
9.根据权利要求6所述的一种面向Windows应用程序的漏洞验证代码自动迁移方法,其特征在于,在步骤S4中,对原始版本的漏洞验证代码进行修改,具体包括:对于跳板指令的地址变化的情况,采用内存操作对齐的方式进行指令地址修改。
10.一种面向Windows应用程序的漏洞验证代码自动迁移系统,其特征在于,所述系统包括处理单元,所述处理单元被配置为执行:在跨版本的Windows应用程序上执行原始版本的漏洞验证代码,利用动态插桩技术对执行过程进行跟踪;基于跟踪获取的漏洞验证过程中的行为来建立漏洞利用策略模型,以生成漏洞利用策略;提取漏洞验证过程中触发崩溃的阶段,通过漏洞利用策略识别在跨版本的Windows应用程序上执行漏洞验证的失败原因;基于失败原因对原始版本的漏洞验证代码进行修改,从而通过自动迁移来生成目标版本的漏洞验证代码。