[发明专利]信息设备、程序、防止执行不正当程序代码的方法、及计算机能够读取的记录介质有效
申请号: | 201080018527.7 | 申请日: | 2010-04-12 |
公开(公告)号: | CN102422299A | 公开(公告)日: | 2012-04-18 |
发明(设计)人: | 石山智祥 | 申请(专利权)人: | 株式会社一四四零技术研究所 |
主分类号: | G06F21/22 | 分类号: | G06F21/22;G06F21/24 |
代理公司: | 永新专利商标代理有限公司 72002 | 代理人: | 徐殿军 |
地址: | 日本*** | 国省代码: | 日本;JP |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 信息 设备 程序 防止 执行 不正当 程序代码 方法 计算机 能够 读取 记录 介质 | ||
技术领域
本发明涉及信息设备、程序、防止执行不正当程序代码的方法、及计算机能够读取的记录介质。
背景技术
通常,在PC(Personal Computer:个人计算机)或WS(Work Station:工作站)等信息设备中,CPU(Central Processing Unit:中央处理单元)等控制部依次执行在RAM(Random Access Memory:随机存取存储器)等存储部的工作区域中展开的程序代码,由此执行各种数据处理。近年来,由于由具有恶意的用户制作的程序代码引起的不正当处理,产生对信息设备的不正当访问。
通常,对信息设备所管理的数据设定访问权限。因此,如果没有对数据的访问权限,就不能进行不正当访问。但是,在利用具有对数据的访问权限的通常的程序代码而执行了不正当操作的情况下,将能够进行不正当访问。关于这种方法,已被公知的方法是采用所谓缓冲器溢出(buffer overflow)的方法,即,使执行程序代码时的数据从在RAM等中确保的规定区域中溢出。
在此,关于采用缓冲器溢出的不正当访问,通过对比来详细说明正常执行了程序代码的情况和在执行程序代码时不正当地执行的情况。
首先,参照图9、图10说明正常执行程序代码的情况。
图9表示对程序代码的源代码进行例示的示意图。图9所示的程序代码从main()函数开始,在main()函数中调用strcpy_helloworld()函数。在该程序代码中,在strcpy_helloworld()函数中准备字符串“Hello!”,利用main()函数的printf()函数使该字符串显示于监视器等中。另外,函数是指将规定的功能模块化而形成的子循环(subroutine)、子程序等,能够在为主的程序内随时调用。
在执行图9所示的程序代码时的数据被存储于在RAM等中确保的堆栈区域中。在该堆栈区域中,按照后入先出(LIFO:Last In First Out)构造来存储数据。
图10表示对执行程序代码时的堆栈区域的概况进行例示的示意图。如图10所示,从上到下向依次确保的区域中存储执行程序代码时的数据。
例如,在执行基于图9例示的源代码的程序代码时,在处理了main()函数时,ReturnAddress1、ebp backup、char buf[8]等被存储为一个堆栈帧(stack frame)。然后,当在main()函数中调用了strcpy_helloworld()函数时,ReturnAddress2、ebp backup2、int i等被存储为一个堆栈帧。
ReturnAddress(返回地址)表示在程序结束时应该返回的地址值、及在子程序被函数等调用的情况下该子程序结束时应该返回的地址值。该ReturnAddress在刚刚执行程序后及子程序刚刚被函数等调用后,通过CPU被自动存储在堆栈区域中。
ebp是CPU的寄存器的一种,表示当前使用的临时性存储器区域的地址的紧前面(紧挨着且位于其前面)。在图10的示例中,是char buf[8]、int i的前面的地址,是堆栈帧的ReturnAddress。因此,在堆栈帧中,通过将上述寄存器值备份(backup)为ebp backup,能够容易地将该堆栈帧内的一个区域用作存储临时性数据(变量、数组等)的存储器区域。
char buf[8]存储作为在main()函数中使用的数组的buf。该buf是存储8个char型变量(1字节)的数组,能够存储8字节的数据。int i存储作为在strcpy_helloworld()函数中使用的int型变量的i。
因此,通过执行上述程序代码,在堆栈区域中,确保main()函数的堆栈帧,并确保strcpy_helloworld()函数的堆栈帧。然后,int i的值顺序递增,6字节量的字符串“Hello!”被存储在char buf[8]中。然后,根据strcpy_helloworld()函数的结束,ReturnAddress2被读出,并向main()函数返回,根据main()函数的结束,ReturnAddress1被读出,程序正常结束。
下面,参照图11、图12说明在执行程序代码时不正当执行的情况。
图11表示对程序代码的源代码进行例示的示意图。图11所示的程序代码与图9所示的程序代码的不同之处在于,向数组buf中写入12字节量(11字符+字符串末尾)的数据“Hello World”。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于株式会社一四四零技术研究所,未经株式会社一四四零技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201080018527.7/2.html,转载请声明来源钻瓜专利网。
- 信息记录介质、信息记录方法、信息记录设备、信息再现方法和信息再现设备
- 信息记录装置、信息记录方法、信息记录介质、信息复制装置和信息复制方法
- 信息记录装置、信息再现装置、信息记录方法、信息再现方法、信息记录程序、信息再现程序、以及信息记录介质
- 信息记录装置、信息再现装置、信息记录方法、信息再现方法、信息记录程序、信息再现程序、以及信息记录介质
- 信息记录设备、信息重放设备、信息记录方法、信息重放方法、以及信息记录介质
- 信息存储介质、信息记录方法、信息重放方法、信息记录设备、以及信息重放设备
- 信息存储介质、信息记录方法、信息回放方法、信息记录设备和信息回放设备
- 信息记录介质、信息记录方法、信息记录装置、信息再现方法和信息再现装置
- 信息终端,信息终端的信息呈现方法和信息呈现程序
- 信息创建、信息发送方法及信息创建、信息发送装置