一种生成随机布局程序的方法及装置制造方法及图纸

技术编号:14677036 阅读:33 留言:0更新日期:2017-02-19 03:14
本发明专利技术公开了一种生成随机布局程序的方法及装置,涉及计算机软件系统安全领域,所述方法包括:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;构建所述程序的函数信息块和/或变量信息块;利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。本发明专利技术能够使程序拥有不同的内存布局,以较小的时空性能代价,大大增强软件系统的抗攻击能力。

【技术实现步骤摘要】

本专利技术涉及计算机软件系统安全领域,特别涉及一种生成随机布局程序的方法及装置
技术介绍
当前,计算机系统中越来越多的使用开源软件,这在降低计算机系统软件成本的同时,也引入了很多安全隐患。软件系统都有缺陷,但开源软件的缺陷更容易成为安全漏洞,其原因在于,攻击者可以通过开放的源代码了解到程序的关键逻辑和内存布局,从程序逻辑上,攻击者可以获得缓冲区溢出等漏洞的攻击点,再根据已知的内存布局,攻击者就能够通过伪造数据来控制被攻击的系统。图1是现有技术提供的未进行布局随机化的编译过程示意图,如图1所示,代码中的变量和函数相对分布被原样体现在了生成的程序中,容易受到攻击。修复所有漏洞是不现实的,但是通过将程序的内存布局进行随机化,可以阻断许多危险的攻击,并大大增加其余攻击的难度。目前常见的内存布局随机化方法是通过加载器来实现的基地址随机化,这种方法虽然实现简单,但是由于程序内部的相对内存布局固定,难以对缓冲区溢出等危险攻击进行有效的阻断。另外,对应用程序加密或进行代码混淆也可以提供一定的安全防护,但是这类技术通常具有较大的性能开销,并且在程序故障时存在难以调试和定位的问题。
技术实现思路
本专利技术的目的在于提供一种生成随机布局程序的方法及装置,能更好地解决当前随机化布局程序抗攻击能力差和性能开销大的问题。根据本专利技术的一个方面,提供了一种生成随机布局程序的方法,包括:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;构建所述程序的函数信息块和/或变量信息块;利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。优选地,通过以下步骤构建所述程序的函数信息块:按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存。优选地,通过以下步骤对所述函数信息块的位置进行调整:为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。优选地,通过以下步骤构建所述程序的变量信息块:按照所述程序的输入顺序,从所述程序中依次获取全局变量,并将所获取的每个全局变量作为一个全局变量信息块进行缓存。优选地,通过以下步骤对所述变量信息块的位置进行调整:为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。根据本专利技术的另一方面,提供了一种生成随机布局程序的装置,包括:随机数生成模块,用于对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;输入模块,用于构建所述程序的函数信息块和/或变量信息块;排序模块,用于利用所生成的随机数,对所述函数信息块和/或变量信息块的位置进行调整。优选地,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存。优选地,所述排序模块为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。优选地,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取变量,并将所获取的每个变量作为一个变量信息块进行缓存。优选地,所述排序模块为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。与现有技术相比较,本专利技术的有益效果在于:本专利技术通过将程序中的函数和/或变量按照随机数进行排序输出,使程序拥有不同的内存布局,以较小的时空性能代价,大大增强软件系统的抗攻击能力。附图说明图1是现有技术提供的未进行布局随机化的编译过程示意图;图2是本专利技术实施例提供的生成随机布局程序的方法流程图;图3是本专利技术实施例提供的进行布局随机化的编译过程示意图;图4是本专利技术实施例提供的生成随机布局程序的装置的内部模块示意图;图5是将图4所示装置嵌入到编译器中实现时的工作示意图;图6是可实施本专利技术的其他位点示意图(源代码级,汇编前,汇编中)。具体实施方式以下结合附图对本专利技术的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本专利技术,并不用于限定本专利技术。图2是本专利技术实施例提供的生成随机布局程序的方法流程图,如图2所示,步骤包括:步骤S101:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数。步骤S102:构建所述程序的函数信息块和/或变量信息块。具体地说,按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存;和/或按照所述程序的输入顺序,从所述程序中依次获取全局变量,并将所获取的每个全局变量作为一个全局变量信息块进行缓存。步骤S103:利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。具体地说,为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序;和/或为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。在程序编译期间,可以在编译器中采用本专利技术所述的方法,图3是本专利技术实施例提供的进行布局随机化的编译过程示意图,如图3所示,在编译器输出汇编文件之前,利用布局随机化装置(即生成随机布局程序的装置)进行布局随机化处理后,变量和函数的相对位置关系发生了变化,根据源代码无法猜测出程序运行时的变量和函数布局,从而提高了软件系统的抗攻击能力。所述变量可以是全局变量。图4是本专利技术实施例提供的生成随机布局程序的装置的内部模块示意图,如图4所示,包括随机数生成模块10、输入模块20、排序模块30、输出模块40。随机数生成模块10用于对需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数。也就是说,随机数生成模块10负责生成无规律的随机数,实现方式包括但不限于使用纯软件方法生成随机数,根据随机事件(例如中断数、网络通信信息)软件生成随机数,直接读取特定硬件提供的随机数等。输入模块20用于构建所述程序的函数信息块和/或变量信息块。具体地说,输入模块20接收外部顺序输入的函数和/或变量,对于需要随机化布局的函数,输入模块20按照输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存;对于需要随机化布局的变量,例如全局变量,输入模块20按照外部输入所述程序的顺序,从所述程序中依次获取变量,并将所获取的每个变量作为一个变量信息块进行缓存。排序模块30用于利用所生成的随机数,对所述函数信息块和/或变量信息块的位置进行调整,形成随机布局程序。所述随机布局程序包含排序后的函数信息块和/或变量信息块。具体地说,对于需要随机化布局的函数,排序模块30读取输入模块20缓存的函数信息块(即关于函数的顺序分块数据),并为所缓存的每个函数信息块获取一个随机数,然后按照随机数的大小,对每个函数信息块的位置进行排序,并输出排序后的函数信息块;对于需要随机化布局的变量,例如全局变量,排序模块30读取输入模块20缓存的变量信息块(即关于变量的顺序分块数据),并为所缓存的每个变量信息块获取一个随机数,然后按照随机数的大小,对每个变量信息块的位置进行排序,并输出排序后的变量信息块。输出模块40用于输出所述随机布局程序,即按照随机顺序输出函数本文档来自技高网...
一种生成随机布局程序的方法及装置

【技术保护点】
一种生成随机布局程序的方法,其特征在于,包括:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;构建所述程序的函数信息块和/或变量信息块;利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。

【技术特征摘要】
1.一种生成随机布局程序的方法,其特征在于,包括:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;构建所述程序的函数信息块和/或变量信息块;利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。2.根据权利要求1所述的方法,其特征在于,通过以下步骤构建所述程序的函数信息块:按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存。3.根据权利要求2所述的方法,其特征在于,通过以下步骤对所述函数信息块的位置进行调整:为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。4.根据权利要求1所述的方法,其特征在于,通过以下步骤构建所述程序的变量信息块:按照所述程序的输入顺序,从所述程序中依次获取全局变量,并将所获取的每个全局变量作为一个全局变量信息块进行缓存。5.根据权利要求4所述的方法,其特征在于,通过以下步骤对所述变量信息块的位置进行调整:为所缓存的每个变量信息块获取一个随机数,并...

【专利技术属性】
技术研发人员:谢宝友马江
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1