非法代码执行的防止方法、非法代码执行的防止用程序以及非法代码执行的防止用程序的记技术

技术编号:2846768 阅读:221 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供防止程序执行时的由缓冲区溢出产生的返回地址的篡改和事前检测缓冲区溢出的方法,当改写程序执行时的返回地址时,利用中央运算处理装置的故障清除功能,进行出错输出,根据出错输出,检测返回地址篡改,重新用保存的值改写被篡改了的返回地址进行恢复,另外,当检测出返回地址篡改时,强制结束正在执行的程序。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及保护在计算机上动作的程序不受到非法代码引起的动作不完备或者外部攻击的非法代码执行的防止方法、非法代码执行的防止用程序以及非法代码执行的防止用程序的记录媒体。更详细地讲,涉及检测缓冲区溢出,改善程序的动作不完备的非法代码执行的防止方法,非法代码执行的防止用程序以及非法代码执行的防止用程序的记录媒体。
技术介绍
电子计算机的操作系统被复杂地设计出来。从而,在操作系统中,存在称为安全漏洞的弱点。所谓安全漏洞,是由软件设计的缺陷或者错误产生的脆弱性的构造。存在恶意的使用者有时利用操作系统的该安全漏洞,非法地侵入操作系统,进行侵犯、攻击等恶意的行为。作为其方法,有利用存储器的缓冲区溢出的方法。这里,说明缓冲区溢出。在电子计算机中动作的程序由程序代码和程序数据的两个部分构成。程序代码是用机器语言编写的只用于读出的代码。程序数据是根据操作系统的执行命令执行的程序代码在存储器上的位置等的信息部分。程序通常保存在计算机的硬盘中。当由操作系统调出并执行程序时,程序整体或者其一部分保存在作为电子计算机的主存储器的RAM(随机访问存储器)中动作。主存储器是能够从计算机的CPU(中央处理装置)直接进行数据读写的存储器,针对每一个保存数据的单位容量建立地址号码进行管理。把主存储器的地址号码小的一方作为高位地址(高位存储器)区,如果地址号码增大,则作为低位地址(低位存储器)区。以下,仅把主存储器作为存储器进行说明。如果由操作系统读出程序,则存储器的一部分分配给该程序,在该所分配的存储器的高位地址(高位存储器)区中保存程序数据,在低位地址(低位存储器)区中保存程序代码。程序数据分为栈数据(栈数据)、堆数据(堆数据)、状态数据(状态数据)的三个数据区。这三个数据区相互独立配置在存储器中。如果由操作系统从硬盘调用所执行的程序,则首先读出程序代码保存在存储器中。接着,读出程序数据保存在存储器中。图5是表示电子计算机的存储器的构造的概念图。存储器的高位地址一侧成为栈存储区。在每次执行程序时,栈存储区在这里确保其程序和程序内的子程序用的栈存储器,顺序保存到存储器的低位地址。栈存储器由变元区、返回地址区、栈数据区等构成。存储器的低位地址一侧由堆数据区、栈数据区、程序代码区等区域构成。栈数据区与程序代码区相比较位于高位地址区一侧,是预约全部变量和staticC++等级号码的存储区。堆数据区位于比栈数据区高位的地址一侧。堆数据区是分配给C语言的malloc( )、alloc( )函数、C++语言的new操作器的区域。栈存储区用FIFO(后入先出)方式访问。栈存储器保存执行命令结束了以后执行下一个命令的返回地址等函数参数或者局部变量等。该返回地址是非常重要的值。图6中例示出用C语言编写的程序。当执行程序后,首先执行main( )函数(行1~3),调用第4行的子程序的sub(Date1),使程序的处理移动到第10行。在sub( )子程序中,在第16行的return命令下,把处理移动到调用了sub( )的原来的位置。说明这时在存储器中怎样保存数据。当调用子程序后,如图7所示,在栈存储区中写入数据。从栈存储区的高位地址一侧保存「向main( )的返回地址」,预约保存子程序内的局部变量的区域。在该例子中,有变量i(第11行)和buf(第12行)。在第14行的strcpy命令下把子程序的变元Data的值复制到buf中。这时,在变元Data的值大于buf的尺寸时,局部变量i根据情况,覆盖到向main( )程序的返回地址上。这样,所确保的存储器的区域中容不下进入的数据,而将其写入到用于其它变量的区域中。这就是缓冲区溢出。由于返回地址被改写为其它的值,因此程序不能够进行正常的动作。通常结束执行这些程序、程序的子程序和函数后,返回到返回地址表示的位置,继续执行程序。但是,如果在程序的编写方法中有错误,则如在上面说明过的那样,当写入数据时,有可能超过局部变量的确保区域而覆盖返回地址。由于返回地址的改写而引起的缓冲区溢出的程序通常为不稳定的执行状态。根据情况,程序几乎都是失控或者停止。如果返回地址返回到有意准备的存储器地址,则操作系统不知其为非法代码而继续执行保存在该存储器地址中的命令。利用了缓冲区溢出的脆弱性的攻击就在于如此执行有意准备的代码。在进行程序的执行管理的操作系统中不能够完全把握这种由缓冲区溢出引起的非法代码的执行。为了防止该非法代码的执行,重要的是如何防止或者能够检测返回地址的篡改和改写。作为解决该问题的方法,提出了在操作系统中加入修正的方法或者在编译程序中建立防止缓冲区溢出的结构的方法等。作为在操作系统中加入修正的方法,有非专利文献1(Openwall Linux kernel patchproject,UPLhttp//www.openwall.com/linux/)的设计。在该设计中,为了防止开放源的操作系统的缓冲区溢出,用把栈的返回地址区移动到没有执行函数的其它存储区中的方法应对。作为在编译程序中建立防止存储缓冲区溢出的结构的方法,有非专利文献2(StackGuardSimple Stack Smash Protection go GCC,URLhttp//www.immunix.com/~wagle)。该方法在GCC编译程序中,在栈存储器的低位地址设置保护段,来检测数据的溢出写入。另外,在专利文献1(美国公开专利号码US2001013094?Al?-?2001-08-09,“Memory device,stack protection system,computer system,compiler,stack protection method,storage mediumand program transmission apparatus”)的情况下,在存储装置中定义保护数值的区域,把栈存储器的数据保存在保护数值的区域中进行保护,执行处理命令。由于在保护数值的区域中保护返回地址等,因此即使执行子程序等处理指令也能够保护程序计数器。
技术实现思路
在上述任一种方法中,都需要程序代码的变更以及重建。由此,在执行这些方法时花费时间。另外,利用该非法代码执行的代表性的是计算机病毒。当前防止计算机病毒的方法是署名方式,在未知的攻击模型的情况下没有任何效果。从而,在每次发生错误时,都需要变更操作系统,提供批处理文件。本专利技术是根据上述那样的技术背景而完成的,达到下述的目的。本专利技术的目的在于提供防止保存在电子计算机的存储器的地址中的数据篡改,检测数据篡改的方法,及其程序和程序的记录媒体。本专利技术的目的在于提供防止对于程序执行时的栈存储器内的返回地址的篡改和进行检测的方法。本专利技术的其它目的在于提供能够不变更硬件、操作系统、核心模式软件、应用软件而是加以利用的非法代码执行的防止功能。本专利技术的又一个目的在于提供即使在应用软件以及核心模式软件有缓冲区溢出的脆弱性时也能够有效地防止非法代码执行的功能。本专利技术的又一个目的在于在执行非法代码之前进行检测,抑制非法代码的执行。本专利技术为了达到上述目的,采用以下的方法。本专利技术方案1的非法代码执行的防止方法当由中央运算处理装置执行保存在电子计算机的存储媒体中的程序时,检测保存在存储器的栈存储区的返回地址由于非法代本文档来自技高网
...

【技术保护点】
一种非法代码执行的防止方法,该方法在由中央运算处理装置执行保存在电子计算机的存储媒体中的程序时,检测保存在存储器的栈存储区中的返回地址由于执行非法代码而被改写的上述存储器的缓冲区溢出,防止发生上述缓冲区溢出,其特征在于:    备份上述返回地址,    在由于执行上述非法代码篡改了上述返回地址时,通过上述中央运算处理装置的故障排除功能检测上述篡改。

【技术特征摘要】
【国外来华专利技术】JP 2003-9-4 312517/20031.一种非法代码执行的防止方法,该方法在由中央运算处理装置执行保存在电子计算机的存储媒体中的程序时,检测保存在存储器的栈存储区中的返回地址由于执行非法代码而被改写的上述存储器的缓冲区溢出,防止发生上述缓冲区溢出,其特征在于备份上述返回地址,在由于执行上述非法代码篡改了上述返回地址时,通过上述中央运算处理装置的故障排除功能检测上述篡改。2.根据权利要求1所述的非法代码执行的防止方法,其特征在于在上述故障排除功能中所利用的故障排除寄存器内,记录保存上述返回地址的存储器的地址,当篡改了记录在上述故障排除寄存器中的上述存储器地址的值时,上述中央运算处理装置输出出错的信号进行上述检测。3.根据权利要求1或2所述的非法代码执行的防止方法,其特征在于把上述返回地址保存在没有保存执行程序的数据的存储区中,进行上述备份。4.根据权利要求3所述的非法代码执行的防止方法,其特征在于具有把保存在上述栈存储区中的上述返回地址与上述备份的地址进行比较,检测上述缓冲区溢出的单元。5.根据权利要求3或4所述的非法代码执行的防止方法,其特征在于具有当篡改了上述返回地址时,把上述存储器地址用所保存的上述返回地址改写的控制单元。6.根据权利要求1或2所述的非法代码执行的防止方法,其特征在于使保存上述返回地址的上述栈存储区成为只读的属性,保护上述返回地址,当在设定为只读属性的上述栈存储区中进行写入时,上述中央运算处理装置输出出错信号进行上述检测,具有当接收到上述出错的信号后,用于停止上述程序或者控制上述程序的流程的控制单元。7.根据权利要求1~6中选择出的任一项所述的非法代码执行的防止方法,其特征在于上述返回地址是当执行上述程序时调用的过程以及从上述过程调用的线程内的大于等于一个的返回地址。8.一种非法代码执行的防止用程序,该非法代码执行的防止用程序当由中央运算处理装置执行保存在电子计算机的存储媒体内的程序时,使上述计算机动...

【专利技术属性】
技术研发人员:小路幸市郎武藤佳恭野崎隆
申请(专利权)人:科学园株式会社
类型:发明
国别省市:JP[日本]

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

1
相关领域技术
  • 暂无相关专利