WO2015044993A1 - プロセッサ、処理装置、プログラム作成方法 - Google Patents

プロセッサ、処理装置、プログラム作成方法 Download PDF

Info

Publication number
WO2015044993A1
WO2015044993A1 PCT/JP2013/075601 JP2013075601W WO2015044993A1 WO 2015044993 A1 WO2015044993 A1 WO 2015044993A1 JP 2013075601 W JP2013075601 W JP 2013075601W WO 2015044993 A1 WO2015044993 A1 WO 2015044993A1
Authority
WO
WIPO (PCT)
Prior art keywords
area
return
address
program
processor
Prior art date
Application number
PCT/JP2013/075601
Other languages
English (en)
French (fr)
Inventor
芳樹 田代
池田 成宏
Original Assignee
株式会社 エーティーティーコンサルティング
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社 エーティーティーコンサルティング filed Critical 株式会社 エーティーティーコンサルティング
Priority to US14/892,568 priority Critical patent/US20160300056A1/en
Priority to JP2015517519A priority patent/JP5777843B1/ja
Priority to PCT/JP2013/075601 priority patent/WO2015044993A1/ja
Publication of WO2015044993A1 publication Critical patent/WO2015044993A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2123Dummy operation

Definitions

  • the present invention relates to a technique for preventing execution of an illegal program due to a buffer overflow.
  • a startup routine operates to allocate a stack area on the memory.
  • the stack area is a memory area for storing temporarily used variables such as return values of functions.
  • data other than the buffer area can be written.
  • Data in the stack area may be overwritten. This is called buffer overflow.
  • a buffer overflow attack is a process in which an illegal program indicated by the rewritten return address is executed by rewriting the return address stored in the stack area by intentionally causing a buffer overflow. The following techniques are disclosed as techniques for dealing with buffer overflows and buffer overflow attacks.
  • Patent Document 1 describes an analysis method for collecting analysis information necessary for correcting a program that overflows a buffer and providing it to a program developer.
  • Patent Document 2 describes a method of detecting a buffer overflow by assigning dummy memory areas to addresses before and after adjacent to the buffer memory area.
  • the method of detecting buffer overflow by assigning dummy memory areas to the addresses before and after the buffer memory area described in Patent Document 2 is effective for attacks that continuously modify the memory area. There is a problem in certainty because it cannot cope with a sophisticated attack that rewrites the return address.
  • the source program is analyzed before compilation, and processing is added to the program. Since this method depends on the high-level language used to create the program, it is necessary to deal with each high-level language individually. At the same time, there is a problem that it is necessary to follow the modification of high-level languages.
  • the present invention has been made in view of such circumstances, and does not depend on a high-level language used in a program without performing a program correction work by a program developer for coping with it.
  • An object of the present invention is to provide a technique for reliably preventing the execution of a complicated program.
  • the present invention has a function of allocating a process space to a memory before executing a main process, and a process including a return instruction that can return a return destination to an arbitrary area of the process space.
  • the processor to be executed means for acquiring first specification information for specifying the first area in the process space, first storage means for storing the first specification information, and return for detecting a return instruction in advance from the processing Whether the location specified by the address information is within the first area based on the first specification information, the command detection means, the means for acquiring the address information specifying the location returned by the return command And means for interrupting the processing when the determining means determines that the specified location is in the first area. And wherein the door.
  • the present invention is characterized in that the first storage means includes a register.
  • the present invention is characterized in that the first area is in a process space and is an area other than a text area or a shared library.
  • the present invention is characterized in that the first area is in a process space and is a stack area.
  • the present invention is a processing device including a processor having the above characteristics, the memory, and a communication unit that enables communication between the processor and the memory.
  • the present invention has a function of allocating a process space to a memory before executing a main process, and a process including a return instruction that can return a return destination to an arbitrary area of the process space.
  • a method for creating, using a computer a program executable by a method to be performed by a processor, a step of obtaining first specific information for specifying a first area in the process space; and the first specific information
  • a method of creating a program comprising: a step of causing the processor to suspend the processing when it is determined that it is within an area; and a step of rewriting the return instruction so that the computer performs the processing.
  • the step of converting the executable program into an assembly language by the computer and the step of rewriting the return instruction in the rewriting step are performed in an assembly language
  • the step of converting the converted executable program into an executable format is included.
  • the present invention it is possible to reliably prevent an illegal program from being executed due to a buffer overflow without performing a program correction work by a program developer for coping and without depending on a high-level language used in the program. it can.
  • FIG. 1 is a logical schematic diagram of a process space when a program written in the C language runs on a computer.
  • FIG. 2 is a schematic diagram of a stack area showing an example in which a return address is rewritten to an illegal program code address due to a buffer overflow.
  • FIG. 3 is an example of a memory map using Linux (registered trademark) as an example.
  • FIG. 4 is a block diagram showing the configuration of the processing apparatus. (Example 1, Example 2)
  • FIG. 5 is a conceptual diagram of a kernel that links hardware and an application program in a general computer.
  • FIG. 6 is a flowchart showing a procedure for acquiring the text area and the start address and end address of the shared library in the startup routine. (Example 1)
  • FIG. 1 is a logical schematic diagram of a process space when a program written in the C language runs on a computer.
  • FIG. 2 is a schematic diagram of a stack area showing an example in which a return address is rewritten to an illegal
  • FIG. 7 is a flowchart illustrating a procedure of processing performed by the arithmetic unit.
  • Example 1 is a flowchart showing a procedure for acquiring the start address and end address of the stack area in the startup routine.
  • Example 2 is a flowchart showing a procedure for acquiring the start address and end address of the stack area in the startup routine.
  • Example 2 is a flowchart showing a procedure of processing performed by the arithmetic unit.
  • FIG. 10 is a block diagram illustrating the configuration of the processing apparatus.
  • Example 3 Example 4
  • FIG. 11 is a flowchart illustrating a procedure in which the memory map acquisition unit acquires the start address and end address of the text area and the shared library.
  • Example 3 FIG.
  • FIG. 12 is a flowchart illustrating a procedure of processing performed by the disassembler, the instruction insertion unit, and the assembler.
  • FIG. 13 is a flowchart illustrating a procedure of processing performed by the disassembler, the instruction insertion unit, and the assembler.
  • FIG. 14 is a flowchart showing a procedure by which the memory map acquisition unit acquires the start address and end address of the stack area.
  • FIG. 15 is a flowchart illustrating a procedure of processing performed by the disassembler, the instruction insertion unit, and the assembler.
  • FIG. 1 is a logical schematic diagram of a process space when a program written in the C language runs on a computer.
  • the process space refers to a virtual address space allocated to a process by the operation system processing in the processor.
  • the address space is a memory space that can be accessed by a series of memory addresses.
  • a text area, a static area, a heap area, a shared library, and a stack area are secured from a low address to a high address.
  • a program translated in machine language is stored in the text area.
  • Static variables such as global variables are stored in the static area.
  • the heap area is used for dynamic management of memory.
  • the shared library stores a library that is used in common by a plurality of programs.
  • the stack area stores data temporarily used in the function such as a return value of the function or a local variable.
  • FIG. 2 is a schematic diagram of a stack area showing an example in which a return address is rewritten to an illegal program code address due to a buffer overflow.
  • a buffer area is reserved to store data temporarily used by functions such as local variables. However, if data is written exceeding the upper limit of the buffer area by the program operation, the buffer area is not the buffer area. The data in the stack area is overwritten. This is called buffer overflow.
  • buffer overflow attack Many data stored in the buffer area are read from outside the program, such as input from a file, input via a network, and input from a keyboard. As shown in Fig. 2, the return address stored in the stack area is rewritten by intentionally causing a buffer overflow by reading data including an illegal program from the outside into the buffer area exceeding the upper limit of the buffer area. This is called buffer overflow attack.
  • the return address Since the destination indicated by the return address is an executable program or library, the return address must be a text area or a shared library range as described in FIG. On the other hand, the return address rewritten by the buffer overflow attack indicates an area where the program should not exist.
  • FIG. 2 shows an example in which an illegal program is overwritten in a stack area where a program should not exist.
  • the start address and end address of each area in the process space are acquired from the information shown in the memory map.
  • the memory map indicates a file in which data structure information indicating a process state is mapped in the kernel of the operating system. For example, in Linux (registered trademark), the memory map exists for each process ID under the / proc directory.
  • FIG. 3 is an example of a memory map in Linux (registered trademark).
  • a start address is indicated by symbol a
  • an end address is indicated by symbol b.
  • the stack area is set as a continuous area from a certain address to the highest address (symbol f).
  • the text area (symbol d) and the shared library (symbol e) can be distinguished from each other because the access authority (symbol c) is rx (readable, writable, executable). Since the accurate start address and end address of each area of the process space can be obtained by the memory map, the certainty of processing is improved.
  • Linux registered trademark
  • the operation system may be based on another operation system capable of acquiring a memory map.
  • the present embodiment is a processing apparatus in which an area other than a text area or a shared library is a first area.
  • a memory map is acquired by executing a startup routine, and a text area acquired from the information indicated in the memory map and a plurality of dedicated register sets for storing the start address and end address of the shared library are provided, and processing means are implemented.
  • a processor having an internal instruction.
  • the internal instruction is a machine language instruction that implements the processing flow shown in FIG. 7 corresponding to a mnemonic for a return instruction (RET instruction) in assembly language.
  • RET instruction return instruction in assembly language
  • FIG. 4 is a block diagram illustrating a configuration of the processing apparatus 1.
  • the processor 100 includes a dedicated register set 122 including a plurality of sets of a start register 123 that stores a start address of a text area and a shared library and an end register 124 that stores an end address.
  • the processing device 1 can include an external input / output device, a storage device, a display device, and the like.
  • FIG. 5 is a conceptual diagram of a kernel that links hardware and an application program in a general computer.
  • the startup routine is a kind of kernel, and is linked to the execution file of the application program before the main processing of the application program is executed to set the stack and initialize the library.
  • the present embodiment is characterized in that the text area on the memory and the start address and end address of the shared library are acquired from the information shown in the memory map by the startup routine before execution of the main process of the application program.
  • FIG. 6 is a flowchart showing a procedure by which the processing apparatus 1 shown in FIG. 4 acquires the text region and the start address and end address of the shared library by the startup routine.
  • the text information and the start address and end address of the shared library are the first specific information.
  • the processing device 1 acquires a memory map of the execution file of the application program by executing a startup routine linked to the execution file of the application program before executing the main process of the application program (step S100).
  • the memory map is sorted in ascending order from the lowest starting address to the highest address (step S110).
  • the memory map includes the information shown in FIG.
  • the determination is performed in order from the top of the memory map (step S120).
  • the access authority is rx (readable, not writable, executable)
  • it is determined as a text area or a shared library (step S130)
  • a start register 123 in the same dedicated register set 122 has a start address and an end address.
  • end register 124 respectively (step S140).
  • the register set is the first storage means.
  • FIG. 7 is a flowchart showing a procedure of processing performed by the arithmetic unit 120 in the processor 100 shown in FIG. Compared with the processing of the RET instruction that allows the return destination to return to an arbitrary area in the process space, the processing of the portion indicated by a in FIG. 7 is added to the processing of the RET instruction in this embodiment.
  • an application program loaded from an external input / output device or storage device is stored in a text area of the memory 150 as an execution instruction translated into a machine language.
  • an execution instruction is acquired by the fetch 111, and control information is sent to the arithmetic unit 120 via the decoder 112.
  • the arithmetic unit 120 detects a RET instruction, it acquires a return address indicated as an operand of the RET instruction.
  • step S200 After the arithmetic unit 120 of the processing device 1 shown in FIG. 4 obtains the return address indicated as the operand of the RET instruction (step S200), the start register 123 and the end register 124 in the same dedicated register set 122 are obtained. It is determined whether or not it is within the range of the start address and end address stored in (step S220).
  • step S250 If the return address is specified as a text area or shared library, the program jumps to the return address (step S250). If the return address is specified as an area other than the text area or shared library (first area), the program Execution is forcibly terminated (step S240). When the return address is pointed to by a text area or an area other than the shared library (first area), the return address is in the range from the start address of the text area to the end address, but from the start address of the shared library to the end address. It is a case that is not a range.
  • the program when the return address is illegally rewritten, the program is executed if the return address is pointed to by an area other than the text area or the shared library (first area).
  • the program By forcibly terminating the program, it is possible to prevent an illegal program from being executed due to a buffer overflow. Further, since it is performed by the internal processing of the processor, high-speed processing is possible, correction work for each application program is unnecessary, and it does not depend on a high-level language used for creating the program.
  • the present embodiment is a processing apparatus in which the stack area is the first area.
  • An internal instruction for executing the processing means having a set of dedicated registers for storing the start address and end address of the stack area acquired from the information shown in the memory map by acquiring a memory map by executing a startup routine It is characterized by including the processor which has.
  • the internal instruction is a machine language instruction that implements the processing flow shown in FIG. 9 corresponding to a mnemonic for the RET instruction.
  • FIG. 4 is a block diagram illustrating a configuration of the processing apparatus 1.
  • the processor 100 includes a dedicated register set 122 including a set of a start register 123 that stores a start address of a stack area and an end register 124 that stores an end address. Since the stack area is one continuous area, a single dedicated register set 122 is sufficient.
  • the processing device 1 can include an external input / output device, a storage device, a display device, and the like.
  • This embodiment is characterized in that the start address and the end address of the stack area on the memory are acquired from the information shown in the memory map by the start-up routine before executing the main process of the application program.
  • FIG. 8 is a flowchart showing a procedure by which the processing apparatus 1 shown in FIG. 4 acquires the start address and end address of the stack area by the startup routine.
  • the processing device 1 acquires a memory map of the execution file of the application program by executing a startup routine linked to the execution file of the application program before executing the main process of the application program (step S300).
  • the memory map is sorted in ascending order from the low start address to the high start address (step S310).
  • the memory map includes the information shown in FIG. The determination is made in order from the top of the memory map (step S320).
  • step S330 Since the stack area is set as a continuous area up to the highest address, the last line of the memory map is referred to (step S330).
  • the end address is stored in the end register 124 (step S330).
  • the register set is the first storage means.
  • the processing device 1 acquires the stack size upper limit value of the process (step S350). In the case of Linux (registered trademark), it can be confirmed by an instruction such as limit-a (when the shell script is “bash”).
  • a difference value (stack area lower limit value) of the stack size upper limit value from the end address of the stack area obtained by the hexadecimal arithmetic operation is stored in the start register 123 as the stack area start address (step S360).
  • the stack area lower limit value and the end address of the stack area are the first specifying information.
  • FIG. 9 is a flowchart showing a procedure of processing performed by the arithmetic unit 120 in the processor 100 shown in FIG. Compared with the processing of the RET instruction that can return to an arbitrary area in the process space, the processing of the portion indicated by a in FIG. 9 is added to the processing of the RET instruction in this embodiment.
  • an application program loaded from an external input / output device or storage device is stored in a text area of the memory 150 as an execution instruction translated into a machine language.
  • an execution instruction is acquired by the fetch 111, and control information is sent to the arithmetic unit 120 via the decoder 112.
  • the arithmetic unit 120 detects a RET instruction, it acquires a return address indicated as an operand of the RET instruction.
  • Step S400 After the arithmetic unit 120 of the processing device 1 obtains the return address indicated as the operand of the RET instruction (step S400), it determines whether the values of the start address and the return address stored in the start register 123 are large or small ( Step S410) is performed. If the return address is greater than or equal to the lower limit value of the stack area, it is determined that the stack area is indicated.
  • step S430 If the return address is smaller than the lower limit value of the stack area, the program jumps to the return address (step S430). If the return address is greater than or equal to the lower limit value of the stack area, the program execution is forcibly terminated (step S420).
  • the return address when the return address is illegally rewritten, if the return address is pointed to the stack area, the program execution is forcibly terminated to cause an illegal operation due to a buffer overflow. Execution of a simple program can be prevented. Further, since it is performed by the internal processing of the processor, high-speed processing is possible, correction work for each application program is unnecessary, and it does not depend on a high-level language used for creating the program. Compared to the first embodiment, it is limited to the case where an illegal program is written in the stack area, but it has a feature that a single dedicated register set is sufficient.
  • This embodiment is a processing apparatus in which an area other than a text area or a shared library is a first area.
  • This embodiment is characterized in that an instruction is added to the assembly code of an application program so as to prevent the execution of an illegal program before the return address is illegally rewritten due to a buffer overflow.
  • FIG. 10 is a block diagram showing the configuration of the processing apparatus 3 according to this embodiment.
  • the processing device 3 includes a processor 300, a memory map acquisition unit 310, a disassembler 320, a return instruction detection unit 330, an instruction insertion unit 340, an assembler 350, and a memory 360.
  • the memory map acquisition unit 310 acquires the start address and end address of the text area and the shared library from the information indicated in the memory map.
  • the text information and the start address and end address of the shared library are the first specific information.
  • the return command detection unit 330 detects a RET command.
  • the instruction insertion unit 340 includes a return address acquisition instruction for acquiring a return address indicated as an operand of the RET instruction, a determination instruction for determining which area on the memory the return address indicates, and a return If the address indicates an illegal area in the memory, a forced termination instruction is inserted to prevent unauthorized program execution.
  • FIG. 11 is a flowchart illustrating a procedure in which the memory map acquisition unit 310 acquires the text region and the start address and end address of the shared library in the processing device 3.
  • the processing device 3 acquires a memory map of the execution file of the application program to be executed (step S500).
  • the memory map is sorted in ascending order from the lowest starting address to the highest address (step S510).
  • the memory map includes the information shown in FIG.
  • the determination is made in order from the top of the memory map (step S520).
  • the access authority is rx (readable, not writable, executable)
  • it is determined as a text area or a shared library (step S720)
  • an area for storing a return address is secured in the memory 360 and started.
  • the address and end address are stored (step S540).
  • the memory is the first storage means.
  • FIG. 12 and FIG. 13 are flowcharts showing a procedure of processes performed by the disassembler 320, the return instruction detection unit 330, the instruction insertion unit 340, and the assembler 350.
  • the processing device 3 disassembles the target application program by the disassembler 320 (step S600). Thereafter, the return command detection unit 330 determines whether the command is a RET command (step S620). If it is a RET instruction, the process is transferred to the instruction insertion unit 340.
  • the processing device 3 inserts the following three instructions before the RET instruction of the assembly code of the application program in the instruction insertion unit 340.
  • a return address acquisition instruction for acquiring a return address indicated as an operand of the RET instruction is inserted (step S630).
  • a determination instruction for determining whether the return address indicates a text area or a shared library is inserted (step S640). Whether the return address indicates a text area or a shared library is determined by whether the return address is in the range of the text area stored in the area for storing the return address and the start address and end address of the shared library by.
  • a forced termination command for forcibly terminating the program is inserted (step S650).
  • the return address When the return address is pointed to by a text area or an area other than the shared library (first area), the return address is in the range from the start address of the text area to the end address, but from the start address of the shared library to the end address. It is a case that is not a range.
  • the text area is expanded by inserting an instruction by the instruction insertion unit 340 according to the procedure shown in FIG. 12 (steps S640 and S650). For this reason, as shown in FIG. 13, after the assembly code into which the instruction is inserted is made into an execution file by assembling (step S700), the assembly code that has been disassembled again (step S740) is obtained from the memory map obtained again. The update is performed with the start address and end address of the text area (step S750). Thereafter, the program is assembled by the assembler 350 to complete an execution file of the target application program (step S760).
  • the program execution is forcibly terminated if the return address is not designated by either the text area or the shared library.
  • the program is converted into a program that can prevent an illegal program from being executed due to a buffer overflow.
  • the processing apparatus automatically adds instructions to the assembly code, the application program does not need to be individually corrected, and does not depend on a high-level language used for creating the program.
  • the present embodiment is a processing apparatus in which the stack area is the first area.
  • FIG. 10 is a block diagram showing the configuration of the processing apparatus 3 according to this embodiment.
  • the processing device 3 includes a processor 300, a memory map acquisition unit 310, a disassembler 320, a return instruction detection unit 330, an instruction insertion unit 340, an assembler 350, and a memory 360.
  • the memory map acquisition unit 310 acquires the start address and end address of the stack area from the information shown in the memory map.
  • the return command detection unit 330 detects a RET command.
  • the instruction insertion unit 340 includes a return address acquisition instruction for acquiring a return address indicated as an operand of the RET instruction, a determination instruction for determining which area on the memory the return address indicates, and a return If the address indicates an illegal area in the memory, a forced termination instruction is inserted to prevent unauthorized program execution.
  • FIG. 14 is a flowchart illustrating a procedure in which the memory map acquisition unit 310 acquires the start address and the end address of the stack area in the processing device 3.
  • the processing device 3 acquires a memory map of the execution file of the application program to be executed (step S800).
  • the memory map is sorted in ascending order from the lowest starting address to the highest address (step S810).
  • the memory map includes the information shown in FIG.
  • the determination is made in order from the top of the memory map (step S820). Since the stack area is set as a continuous area up to the highest address, the last line of the memory map is referred to (step S830).
  • An area for storing the return address is secured in the memory 360, and the end address is stored (step S840).
  • the processing device 3 acquires the stack size upper limit value of the process (step S850).
  • it can be confirmed by an instruction such as limit-a (when the shell script is “bash”).
  • An area for storing the difference value (stack area lower limit value) of the stack size upper limit value from the end address of the stack area obtained by the hexadecimal calculation is secured in the memory 360 and stored (step S860).
  • the memory is the first storage means. The reason why the start address shown in the memory map is not stored in the area for storing the return address as it is is that the size of the stack area is dynamically changed but not changed beyond the upper limit value.
  • the stack area lower limit value and the end address of the stack area are the first specifying information.
  • FIG. 15 is a flowchart showing a procedure of processing performed by the disassembler 420, the instruction insertion unit 430, and the assembler 440.
  • the processing device 3 disassembles the target application program by the disassembler 420 (step S900). Thereafter, the return command detection unit 330 determines whether the command is a RET command (step S920). If it is a RET instruction, the process is transferred to the instruction insertion unit 430. In the processing device 3, the instruction insertion unit 430 inserts the following three instructions before the RET instruction of the assembly code of the application program. First, a return address acquisition instruction for acquiring a return address indicated as an operand of the RET instruction is inserted (step S930).
  • a determination instruction for determining whether the return address indicates the stack area is inserted (step S940). Whether or not the return address indicates the stack area is determined that the return address indicates the stack area if the return address is greater than or equal to the lower limit value of the stack area. Next, if the return address indicates the stack area, a forced termination instruction for forcibly terminating the program is inserted (step S950). As a result, if the return address indicates an illegal area in the memory, execution of an illegal program is prevented in advance.
  • the application program when the return address is illegally rewritten, if the return address is pointed to in the stack area, the application program is forcibly terminated. By adding, illegal program execution due to buffer overflow can be prevented in advance.
  • the processing apparatus automatically adds instructions to the assembly code, the application program does not need to be individually corrected, and does not depend on a high-level language used for creating the program. Compared to the third embodiment, it is limited to the case where an illegal program is written in the stack area, but has a feature that the update process is fast because the execution size of the program is small.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

 本発明は、バッファオーバーフローによる不正なプログラムの実行を確実に防止する技術を提供することを目的とする。 本発明は、メモリ上の各領域の開始アドレスと終了アドレスを取得し、アセンブリ言語によるリターン命令を検出し、その被演算子として指示されるリターンアドレスを取得し、リターンアドレスがメモリ上のいずれの領域 を指示しているか判定し、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に防止する。

Description

プロセッサ、処理装置、プログラム作成方法
 本発明は、バッファオーバーフローによる不正なプログラムの実行を防止する技術に関するものである。
 コンピュータ上でアプリケーションプログラムの主処理が実行される前に、スタートアップルーチンが動作してメモリ上にスタック領域が割り付けられる。スタック領域は関数の戻り値など一時的に使用される変数を格納するためのメモリ領域であるが、スタック領域に割り当てられたバッファ領域の上限をこえてデータが書き込まれることにより、バッファ領域以外のスタック領域のデータが上書きされることがある。これを、バッファオーバーフローという。
 また意図的にバッファオーバーフローを生じさせることによりスタック領域に記憶されたリターンアドレスを書き換えることで、書き換えられたリターンアドレスで指示される不正なプログラムを実行させることをバッファオーバーフロー攻撃という。
 バッファオーバーフローやバッファオーバーフロー攻撃に対処する技術として次のような技術が開示されている。
 特許文献1には、バッファオーバーフローするプログラムの修正に必要となる分析情報を収集してプログラム開発者に提供するための分析方法が記載されている。
 特許文献2には、バッファメモリ領域に隣接する前後のアドレスにダミーメモリ領域を割り当てることによりバッファオーバーフローを検出する方法が記載されている。
特開2006-053760号公報 特開2009-259078号公報
 しかしながら、特許文献1のようなバッファオーバーフローするプログラムを修正に必要となる分析情報を収集してプログラムの修正を行う対処方法では、既知の攻撃への対処しか行うことができず未知の攻撃には対処できないことから確実性に課題がある。
 加えて、プログラム開発者によるプログラムの修正作業が適宜必要であるとの課題がある。
 また、特許文献2に記載のバッファメモリ領域に隣接する前後のアドレスにダミーメモリ領域を割り当てることによりバッファオーバーフローを検出する方法では、連続的にメモリ領域を改変する攻撃には有効だが、ピンポイントでリターンアドレスを書き換えるような巧妙な攻撃には対処できないことから確実性に課題がある。
 加えて、コンパイルの前にソースプログラムを解析して処理をプログラムに追加するが、このような方法はプログラムの作成に使用される高級言語に依存するために高級言語ごと個別に対応が必要であるとともに高級言語の改変にも追従する必要があるとの課題がある。
 本発明は、このような事情を鑑みてなされたものであり、対処のためのプログラム開発者によるプログラム修正作業を行うことなく、プログラムに使用される高級言語に依存することなく、バッファオーバーフローによる不正なプログラムの実行を確実に防止する技術を提供することを目的とする。
 上記課題を解決するために、本発明は、主処理実行の前にメモリにプロセス空間を割り当てる機能を有し、戻り先が前記プロセス空間の任意の領域に戻ることができるリターン命令を含む処理を行うプロセッサにおいて、前記プロセス空間内の第1の領域を特定する第1特定情報を取得する手段と、前記第1特定情報を記憶する第1記憶手段と、前記処理からリターン命令を予め検出するリターン命令検出手段と、前記リターン命令によって戻される所を特定するアドレス情報を取得する手段と、前記第1特定情報に基づき、前記アドレス情報により特定される所が前記第1の領域内にあるか否かを判定する手段と、前記判定する手段が、前記特定される所が前記第1の領域内にあると判定した場合に、前記処理を中断する手段と、を備えることを特徴とする。
 また、本発明は、前記第1記憶手段は、レジスタを含むことを特徴とする。
 また、本発明は、前記第1の領域は、プロセス空間内であって、テキスト領域又は共有ライブラリ以外の領域であることを特徴とする。
 また、本発明は、前記第1の領域は、プロセス空間内であって、スタック領域であることを特徴とする。
 上記課題を解決するために、本発明は、前記特徴を有するプロセッサと、前記メモリと、前記プロセッサ及び前記メモリの間を通信可能にする通信手段と、を備える処理装置である。
 上記課題を解決するために、本発明は、主処理実行の前にメモリにプロセス空間を割り当てる機能を有し、戻り先が前記プロセス空間の任意の領域に戻ることができるリターン命令を含む処理を行うプロセッサに行わせる方法が実行可能なプログラムを、コンピュータを用いて作成する方法において、前記プロセス空間内の第1の領域を特定する第1特定情報を取得するステップと、前記第1特定情報を記憶するステップと、前記処理からリターン命令を予め検出するステップと、前記リターン命令によって戻される所を特定するアドレス情報を取得するステップと、前記第1特定情報に基づき、前記アドレス情報により特定される所が前記第1の領域内にあるか否かを判定するステップと、前記判定する手段が、前記特定される所が前記第1の領域内にあると判定した場合に、前記プロセッサが前記処理を中断するステップと、を前記プロセッサに行わせるように、前記コンピュータが前記リターン命令を書き換えるステップを含む、プログラム作成方法である。
 また、本発明は、前記書き換えるステップの前に、前記実行可能なプログラムを前記コンピュータがアセンブリ言語に変換するステップと、前記書き換えるステップにおいて、前記リターン命令を書き換えるステップは、アセンブリ言語において行われ、前記書き換えるステップの後に、変換された前記実行可能なプログラムを実行形式に変換するステップと、を含むことを特徴とする。
 本発明によれば、対処のためのプログラム開発者によるプログラム修正作業を行うことなく、プログラムに使用される高級言語に依存することなく、バッファオーバーフローによる不正なプログラムの実行を確実に防止することができる。
図1は、C言語により記述されたプログラムがコンピュータ上で動作する場合のプロセス空間の論理的な模式図である。 図2は、バッファオーバーフローによってリターンアドレスが不正なプログラムのコードのアドレスに書き換えられる例を示したスタック領域の模式図である。 図3は、Linux(登録商標)を例としたメモリマップの例である。 図4は、処理装置の構成を示すブロック図である。(実施例1、実施例2) 図5は、一般的なコンピュータにおいてハードウェアとアプリケーションプログラムを結び付けるカーネルの概念図である。 図6は、スタートアップルーチンでのテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する手順を示すフローチャートである。(実施例1) 図7は、演算ユニットが行う処理の手順を示すフローチャートである。(実施例1) 図8は、スタートアップルーチンでのスタック領域の開始アドレスと終了アドレスを取得する手順を示すフローチャートである。(実施例2) 図9は、演算ユニットが行う処理の手順を示すフローチャートである。(実施例2) 図10は、処理装置の構成を示すブロック図である。(実施例3、実施例4) 図11は、メモリマップ取得部がテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する手順を示すフローチャートである。(実施例3) 図12は、逆アセンブラ、命令挿入部、アセンブラが行う処理の手順を示すフローチャートである。(実施例3) 図13は、逆アセンブラ、命令挿入部、アセンブラが行う処理の手順を示すフローチャートである。(実施例3) 図14は、メモリマップ取得部がスタック領域の開始アドレスと終了アドレスを取得する手順を示すフローチャートである。(実施例4) 図15は、逆アセンブラ、命令挿入部、アセンブラが行う処理の手順を示すフローチャートである。(実施例4)
 本発明の実施形態について、図面を参照して説明する。
 まず、バッファオーバーフローとバッファオーバーフロー攻撃について説明する。
 図1は、C言語により記述されたプログラムがコンピュータ上で動作する場合のプロセス空間の論理的な模式図である。プロセス空間とは、アドレス空間のうちプロセッサ内でのオペレーションシステムの処理によってプロセスに割り当てられた仮想的なアドレス空間をいう。また、アドレス空間とは、一連のメモリアドレスによってアクセス可能なメモリ空間をいう。図1に示すように、プロセス空間は低位アドレスから高位アドレスへ、テキスト領域、静的領域、ヒープ領域、共有ライブラリ、スタック領域が確保される。テキスト領域には、機械語で翻訳されたプログラムが格納される。静的領域には、グローバル変数などの静的変数が格納される。ヒープ領域は、メモリの動的管理で用いられる。共有ライブラリには、複数のプログラムが共通して利用するライブラリが格納される。スタック領域には、関数の戻り値やローカル変数などの関数で一時的に使用されるデータが格納される。
 なお、ここではC言語によりプログラムが記述された例を示したが、C言語と同様のメモリ操作を行う他の言語によって記述された場合も同じである。
 図2は、バッファオーバーフローによってリターンアドレスが不正なプログラムのコードのアドレスに書き換えられる例を示したスタック領域の模式図である。スタック領域には、ローカル変数などの関数で一時的に使用されるデータを格納するためにバッファ領域が確保されるが、プログラムの動作によってバッファ領域の上限をこえてデータが書き込まれるとバッファ領域以外のスタック領域のデータが上書きされる。これを、バッファオーバーフローという。
 バッファ領域に格納されるデータは、ファイルからの入力、ネットワークを経由しての入力、キーボードからの入力など、多くはプログラムの外部から読み込まれる。図2に示すように、不正なプログラムを含むデータを外部からバッファ領域の上限をこえてバッファ領域に読み込ませることで意図的にバッファオーバーフローを生じさせることによりスタック領域に記憶されたリターンアドレスを書き換えて不正なプログラムを実行させることをバッファオーバーフロー攻撃という。
 リターンアドレスで指示される先は実行形式のプログラム又はライブラリであるので、図1に説明したように、リターンアドレスはテキスト領域又は共有ライブラリの範囲でなければならない。
 一方、バッファオーバーフロー攻撃によって書き換えられたリターンアドレスは本来プログラムが存在すべきではない領域を指示している。本来プログラムが存在すべきではないスタック領域に不正なプログラムが上書きされて実行される例を図2に示す。
 本実施形態では、プロセス空間の各領域の開始アドレスと終了アドレスをメモリマップに示される情報から取得する。メモリマップとは、オペレーティングシステムのカーネルにおいてプロセスの状態を示すデータ構造の情報をマッピングしたファイルを指し、例えば、Linux(登録商標)では、/procディレクトリ配下にプロセスIDごとに存在する。
 図3は、Linux(登録商標)でのメモリマップの例である。符号aに開始アドレスが示され、符号bに終了アドレスが示される。図1に示すように、スタック領域は、あるアドレスから最高位アドレスまでの連続した領域として設定される(符号f)。また、テキスト領域(符号d)と共有ライブラリ(符号e)は、いずれもアクセス権限(符号c)がr-x(読込可、書込不可、実行可)であることから識別ができる。
 メモリマップによってプロセス空間の各領域の正確な開始アドレスと終了アドレスを得ることができるために処理の確実性が向上する。
 以下、実施例では、オペレーションシステムとしてLinux(登録商標)を例として説明するが、メモリマップが取得できる他のオペレーションシステムによるものであってもよい。
 本実施例は、テキスト領域又は共有ライブラリ以外の領域を第1の領域とした処理装置である。スタートアップルーチンを実行することでメモリマップを取得し、メモリマップに示される情報から取得したテキスト領域と共有ライブラリの開始アドレスと終了アドレスを格納する複数組の専用レジスタセットを有し、処理手段を実施する内部命令を有するプロセッサを備えることを特徴とする。
 内部命令は、アセンブリ言語のよるリターン命令(RET命令)にニーモニックに対応する図7に示す処理フローを実施する機械語命令である。なお、以下、実施例の記述においては、アセンブリ言語のよるリターン命令をRET命令と記述する。
 図4は、処理装置1の構成を示すブロック図である。本実施例に係るプロセッサ100は、汎用レジスタ121の他にテキスト領域と共有ライブラリの開始アドレスを格納する開始レジスタ123と終了アドレスを格納する終了レジスタ124の複数組からなる専用レジスタセット122を有する。
 処理装置1は、図示しないが外部との入出力装置や記憶装置や表示装置などを含むことができる。
 次に、スタートアップルーチンについて説明する。
 図5は、一般的なコンピュータにおいてハードウェアとアプリケーションプログラムを結び付けるカーネルの概念図である。例えば、アプリケーションプログラムがプロセッサにプログラムの実行を指示する際には、システムコールによってカーネルに処理が渡り、処理が終了すると処理を戻す(exit)。スタートアップルーチンはカーネルの一種で、アプリケーションプログラムの主処理の実行前にアプリケーションプログラムの実行ファイルにリンクされてスタックの設定やライブラリの初期化などを行う。
 本実施例は、スタートアップルーチンによって、アプリケーションプログラムの主処理の実行前にメモリマップに示される情報からメモリ上のテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得されることを特徴とする。
 メモリマップに示される情報からテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する処理ステップについて説明する。
 図6は、図4で示される処理装置1がスタートアップルーチンによりテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する手順を示すフローチャートである。本実施例では、テキスト領域と共有ライブラリの開始アドレスと終了アドレスが第1特定情報である。
 処理装置1は、アプリケーションプログラムの主処理の実行前にアプリケーションプログラムの実行ファイルにリンクされたスタートアップルーチンを実行することで、アプリケーションプログラムの実行ファイルのメモリマップを取得する(ステップS100)。メモリマップは開始アドレスの低位から高位へ昇順にソートする(ステップS110)。
 メモリマップには図3で示された情報が含まれている。メモリマップの先頭から順に判定を行う(ステップS120)。アクセス権限がr-x(読込可、書込不可、実行可)の場合にテキスト領域又は共有ライブラリと判定し(ステップS130)、開始アドレスと終了アドレスを同一の専用レジスタセット122にある開始レジスタ123と終了レジスタ124にそれぞれ格納する(ステップS140)。本実施例では、レジスタセットが第1記憶手段である。
 次に、図7は、図4に示されるプロセッサ100において、演算ユニット120が行う処理の手順を示すフローチャートである。戻り先がプロセス空間の任意の領域に戻ることができるRET命令の処理と比較すると、本実施例でのRET命令の処理には図7のaで示される部分の処理が追加されている。
 次に、RET命令を検出し、その被演算子として指示されるリターンアドレスを取得する処理ステップについて説明する。
 図4で示される処理装置1において、外部との入出力装置や記憶装置からロードされたアプリケーションプログラムは機械語に翻訳された実行命令としてメモリ150のテキスト領域に格納される。プロセッサ100の制御ユニット110では、フェッチ111により実行命令が取得されデコーダ112を経て演算ユニット120へ制御情報が送られる。この際、演算ユニット120がRET命令を検出した場合、RET命令の被演算子として指示されるリターンアドレスを取得する。
 次に、リターンアドレスがメモリ上のいずれの領域を指示しているか判定する処理ステップについて説明する。
 図4で示される処理装置1の演算ユニット120が、RET命令の被演算子として指示されるリターンアドレスを取得(ステップS200)した後、同一の専用レジスタセット122にある開始レジスタ123と終了レジスタ124に格納されている開始アドレスと終了アドレスの範囲かどうかの判定(ステップS220)を行う。
 次に、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に阻止する処理ステップについて説明する。
 リターンアドレスの指示先がテキスト領域又は共有ライブラリである場合はリターンアドレスにジャンプ(ステップS250)し、リターンアドレスの指示先がテキスト領域又は共有ライブラリ以外の領域(第1の領域)の場合はプログラムの実行を強制的に終了する(ステップS240)。リターンアドレスの指示先がテキスト領域又は共有ライブラリ以外の領域(第1の領域)の場合とは、リターンアドレスがテキスト領域の開始アドレス以上終了アドレス以下の範囲でも共有ライブラリの開始アドレス以上終了アドレス以下の範囲でもない場合である。
 以上の説明のとおり、本実施例によれば不正にリターンアドレスが書き換えられた場合に、リターンアドレスの指示先がテキスト領域又は共有ライブラリ以外の領域(第1の領域)の場合はプログラムの実行を強制的に終了することでバッファオーバーフローによる不正なプログラムの実行を防止することができる。
 また、プロセッサの内部処理で行うために高速な処理が可能であるとともに、アプリケーションプログラム個別の修正作業が不要であり、プログラムの作成に使用される高級言語に依存しない。
 本実施例は、スタック領域を第1の領域とした処理装置である。スタートアップルーチンを実行することでメモリマップを取得し、メモリマップに示される情報から取得したスタック領域の開始アドレスと終了アドレスを格納する一組の専用レジスタセットを有し、処理手段を実施する内部命令を有するプロセッサを備えることを特徴とする。
 内部命令は、RET命令にニーモニックに対応する図9に示す処理フローを実施する機械語命令である。
 図4は、処理装置1の構成を示すブロック図である。本実施例に係るプロセッサ100は、汎用レジスタ121の他にスタック領域の開始アドレスを格納する開始レジスタ123と終了アドレスを格納する終了レジスタ124の一組からなる専用レジスタセット122を有する。スタック領域はひとつの連続した領域なので専用レジスタセット122は一組で足りる。
 処理装置1は、図示しないが外部との入出力装置や記憶装置や表示装置などを含むことができる。
 本実施例は、スタートアップルーチンによって、アプリケーションプログラムの主処理の実行前にメモリマップに示される情報からメモリ上のスタック領域の開始アドレスと終了アドレスを取得されることを特徴とする。
 メモリマップに示される情報からスタック領域の開始アドレスと終了アドレスを取得する処理ステップについて説明する。
 図8は、図4で示される処理装置1がスタートアップルーチンによりスタック領域の開始アドレスと終了アドレスを取得する手順を示すフローチャートである。
 処理装置1は、アプリケーションプログラムの主処理の実行前にアプリケーションプログラムの実行ファイルにリンクされたスタートアップルーチンを実行することで、アプリケーションプログラムの実行ファイルのメモリマップを取得する(ステップS300)。メモリマップは開始アドレスの低位から高位へ昇順にソートする(ステップS310)。
 メモリマップには図3で示された情報が含まれている。メモリマップの先頭から順に判定を行う(ステップS320)。スタック領域は最高位アドレスまでの連続した領域として設定されるためにメモリマップの最終行を参照する(ステップS330)。終了アドレスを終了レジスタ124に格納する(ステップS330)。本実施例では、レジスタセットが第1記憶手段である。
 処理装置1は、当該プロセスのスタックサイズ上限値を取得する(ステップS350)。Linux(登録商標)の場合はulimit-a(シェルスクリプトがbashの場合)などの命令で確認することができる。16進数の演算により得たスタック領域の終了アドレスからスタックサイズ上限値の差分値(スタック領域下限値)を開始レジスタ123にスタック領域の開始アドレスとして格納する(ステップS360)。
 メモリマップに示された開始アドレスをそのまま開始レジスタ123に格納しないのはスタック領域のサイズは動的に変更されるが上限値をこえて変更されることはないためである。本実施例では、スタック領域のスタック領域下限値と終了アドレスが第1特定情報である。
 次に、図9は、図4に示されるプロセッサ100において、演算ユニット120が行う処理の手順を示すフローチャートである。戻り先がプロセス空間の任意の領域に戻ることができるRET命令の処理と比較すると、本実施例でのRET命令の処理には図9のaで示される部分の処理が追加されている。
 次に、RET命令を検出し、その被演算子として指示されるリターンアドレスを取得する処理ステップについて説明する。
 図4で示される処理装置1において、外部との入出力装置や記憶装置からロードされたアプリケーションプログラムは機械語に翻訳された実行命令としてメモリ150のテキスト領域に格納される。プロセッサ100の制御ユニット110では、フェッチ111により実行命令が取得されデコーダ112を経て演算ユニット120へ制御情報が送られる。この際、演算ユニット120がRET命令を検出した場合、RET命令の被演算子として指示されるリターンアドレスを取得する。
 次に、リターンアドレスがメモリ上のいずれの領域を指示しているか判定する処理ステップについて説明する。
 処理装置1の演算ユニット120が、RET命令の被演算子として指示されるリターンアドレスを取得(ステップS400)した後、開始レジスタ123に格納されている開始アドレスとリターンアドレスの値の大小について判定(ステップS410)を行う。リターンアドレスがスタック領域下限値よりも大きい又は等しいならばスタック領域を指示していると判定する。
 次に、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に阻止する処理ステップについて説明する。
 リターンアドレスがスタック領域下限値よりも小さければリターンアドレスにジャンプ(ステップS430)し、リターンアドレスがスタック領域下限値よりも大きい又は等しいならばプログラムの実行を強制的に終了する(ステップS420)。
 以上の説明のとおり、本実施例によれば不正にリターンアドレスが書き換えられた場合に、リターンアドレスの指示先がスタック領域である場合はプログラムの実行を強制的に終了することでバッファオーバーフローによる不正なプログラムの実行を防止することができる。
 また、プロセッサの内部処理で行うために高速な処理が可能であるとともに、アプリケーションプログラム個別の修正作業が不要であり、プログラムの作成に使用される高級言語に依存しない。
 実施例1と比べると、不正なプログラムがスタック領域に書き込まれている場合に限定されるが、専用レジスタセットが一組で足りるとの特徴を有する。
 本実施例は、テキスト領域又は共有ライブラリ以外の領域を第1の領域とした処理装置である。本実施例は、バッファオーバーフローにより不正にリターンアドレスが書き換えられた場合には不正なプログラムの実行を未然に阻止するようにアプリケーションプログラムのアセンブリコードに命令を追加することを特徴とする。
 図10は、本実施例による処理装置3の構成を示すブロック図である。処理装置3は、プロセッサ300、メモリマップ取得部310、逆アセンブラ320、リターン命令検出部330、命令挿入部340、アセンブラ350、メモリ360を備えた装置である。
 本実施例はアプリケーションプログラムの実行ファイルが実行される前に動作する。
 メモリマップ取得部310は、メモリマップに示される情報からテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する。本実施例では、テキスト領域と共有ライブラリの開始アドレスと終了アドレスが第1特定情報である。
 リターン命令検出部330は、RET命令を検出する。
 命令挿入部340は、RET命令の被演算子として指示されるリターンアドレスを取得するためのリターンアドレス取得命令、リターンアドレスがメモリ上のいずれの領域を指示しているか判定するための判定命令、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に阻止する強制終了命令を挿入する。
 図11は、処理装置3においてメモリマップ取得部310がテキスト領域と共有ライブラリの開始アドレスと終了アドレスを取得する手順を示すフローチャートである。
 処理装置3は、実行しようとするアプリケーションプログラムの実行ファイルのメモリマップを取得する(ステップS500)。メモリマップは開始アドレスの低位から高位へ昇順にソートする(ステップS510)。メモリマップには図3で示された情報が含まれている。メモリマップの先頭から順に判定を行う(ステップS520)。アクセス権限がr-x(読込可、書込不可、実行可)の場合にテキスト領域又は共有ライブラリと判定し(ステップS720)、リターンアドレスを保存するための領域をメモリ360に確保したうえで開始アドレスと終了アドレスを格納する(ステップS540)。本実施例では、メモリが第1記憶手段である。
 図12及び図13は、逆アセンブラ320、リターン命令検出部330、命令挿入部340、アセンブラ350が行う処理の手順を示すフローチャートである。
 処理装置3は、逆アセンブラ320によって対象となるアプリケーションプログラムを逆アセンブルする(ステップS600)。
 その後、リターン命令検出部330ではRET命令かを判定する(ステップS620)。RET命令ならば命令挿入部340へ処理を渡す。
 処理装置3は、命令挿入部340ではアプリケーションプログラムのアセンブリコードのRET命令の前に次の3つの命令を挿入する。
 まず、RET命令の被演算子として指示されるリターンアドレスを取得するリターンアドレス取得命令を挿入(ステップS630)する。
 次に、リターンアドレスがテキスト領域又は共有ライブラリを指示しているかを判定する判定命令を挿入(ステップS640)する。
 リターンアドレスがテキスト領域又は共有ライブラリを指示しているかの判定は、リターンアドレスがリターンアドレスを保存するための領域に格納されているテキスト領域及び共有ライブラリの開始アドレスと終了アドレスの範囲かどうかの判定による。
 次に、リターンアドレスがテキスト領域又は共有ライブラリを指示していなければプログラムを強制的に終了する強制終了命令を挿入(ステップS650)する。リターンアドレスの指示先がテキスト領域又は共有ライブラリ以外の領域(第1の領域)の場合とは、リターンアドレスがテキスト領域の開始アドレス以上終了アドレス以下の範囲でも共有ライブラリの開始アドレス以上終了アドレス以下の範囲でもない場合である。
 図12に示す手順により命令挿入部340により命令が挿入される(ステップS640及びステップS650)ことで、テキスト領域が拡張されている。このため、図13に示すように命令が挿入されたアセンブリコードをアセンブルにより実行ファイルとした後(ステップS700)、再度、逆アセンブルを行ったアセンブルコード(ステップS740)について再度取得したメモリマップから得たテキスト領域の開始アドレスと終了アドレスで更新を行う(ステップS750)。その後、アセンブラ350によってアセンブルして対象となるアプリケーションプログラムの実行ファイルを完成する(ステップS760)。
 以上の説明のとおり、本実施例によれば不正にリターンアドレスが書き換えられた場合に、リターンアドレスの指示先がテキスト領域と共有ライブラリのいずれでもない場合はプログラムの実行を強制的に終了するようにアプリケーションプログラムに命令を追加することでバッファオーバーフローによる不正なプログラムの実行を未然に防止することができるプログラムに変換する。
 また、処理装置が、自動的にアセンブリコードへの命令追加を行うために、アプリケーションプログラム個別の修正作業が不要であり、プログラムの作成に使用される高級言語に依存しない。
 本実施例は、スタック領域を第1の領域とした処理装置である。バッファオーバーフローにより不正にリターンアドレスが書き換えられた場合には不正なプログラムの実行を未然に阻止するようにアプリケーションプログラムのアセンブリコードに命令を追加することを特徴とする。
 図10は、本実施例による処理装置3の構成を示すブロック図である。処理装置3は、プロセッサ300、メモリマップ取得部310、逆アセンブラ320、リターン命令検出部330、命令挿入部340、アセンブラ350、メモリ360を備えた装置である。
 本実施例はアプリケーションプログラムの実行ファイルが実行される前に動作する。
 メモリマップ取得部310は、メモリマップに示される情報からスタック領域の開始アドレスと終了アドレスを取得する。
 リターン命令検出部330は、RET命令を検出する。
 命令挿入部340は、RET命令の被演算子として指示されるリターンアドレスを取得するためのリターンアドレス取得命令、リターンアドレスがメモリ上のいずれの領域を指示しているか判定するための判定命令、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に阻止する強制終了命令を挿入する。
 図14は、処理装置3においてメモリマップ取得部310がスタック領域の開始アドレスと終了アドレスを取得する手順を示すフローチャートである。
 処理装置3は、実行しようとするアプリケーションプログラムの実行ファイルのメモリマップを取得する(ステップS800)。メモリマップは開始アドレスの低位から高位へ昇順にソートする(ステップS810)。メモリマップには図3で示された情報が含まれている。メモリマップの先頭から順に判定を行う(ステップS820)。スタック領域は最高位アドレスまでの連続した領域として設定されるためにメモリマップの最終行を参照する(ステップS830)。リターンアドレスを保存するための領域をメモリ360に確保したうえで終了アドレスを格納する(ステップS840)。
 次に、処理装置3は、当該プロセスのスタックサイズ上限値を取得する(ステップS850)。Linux(登録商標)の場合はulimit-a(シェルスクリプトがbashの場合)などの命令で確認することができる。16進数の演算により得たスタック領域の終了アドレスからスタックサイズ上限値の差分値(スタック領域下限値)を保存するための領域をメモリ360に確保したうえで格納する(ステップS860)。本実施例では、メモリが第1記憶手段である。
 メモリマップに示された開始アドレスをそのままリターンアドレスを保存するための領域に格納しないのはスタック領域のサイズは動的に変更されるが上限値をこえて変更されることはないためである。本実施例では、スタック領域のスタック領域下限値と終了アドレスが第1特定情報である。
 図15は、逆アセンブラ420、命令挿入部430、アセンブラ440が行う処理の手順を示すフローチャートである。
 処理装置3は、逆アセンブラ420によって対象となるアプリケーションプログラムを逆アセンブルする(ステップS900)。
 その後、リターン命令検出部330ではRET命令かを判定する(ステップS920)。RET命令ならば命令挿入部430へ処理を渡す。
 処理装置3は、命令挿入部430ではアプリケーションプログラムのアセンブリコードのRET命令の前に次の3つの命令を挿入する。
 まず、RET命令の被演算子として指示されるリターンアドレスを取得するリターンアドレス取得命令を挿入(ステップS930)する。
 次に、リターンアドレスがスタック領域を指示しているかを判定する判定命令を挿入(ステップS940)する。
 リターンアドレスがスタック領域を指示しているかの判定は、リターンアドレスがスタック領域下限値よりも大きい又は等しいならばリターンアドレスがスタック領域を指示していると判定する。
 次に、リターンアドレスがスタック領域を指示していればプログラムを強制的に終了する強制終了命令を挿入(ステップS950)する。これにより、リターンアドレスがメモリ上の不正な領域を指示している場合には不正なプログラムの実行を未然に阻止する。
 以上の説明のとおり、本実施例によれば不正にリターンアドレスが書き換えられた場合に、リターンアドレスの指示先がスタック領域である場合はプログラムの実行を強制的に終了するようにアプリケーションプログラムに命令を追加することでバッファオーバーフローによる不正なプログラムの実行を未然に防止することができる。
 また、処理装置が、自動的にアセンブリコードへの命令追加を行うために、アプリケーションプログラム個別の修正作業が不要であり、プログラムの作成に使用される高級言語に依存しない。
 実施例3と比べると、不正なプログラムがスタック領域に書き込まれている場合に限定されるが、プログラムの実行サイズが小さいので更新処理が速いとの特徴を有する。
 バッファオーバーフローによる不正なプログラムの実行を未然に防止できる。
 1   処理装置
 100 プロセッサ
 110 制御ユニット
 111 フェッチ
 112 デコード
 120 演算ユニット
 121 汎用レジスタ
 122 専用レジスタセット
 123 開始レジスタ
 124 修了レジスタ
 125 演算器
 150 メモリ
 3   処理装置
 300 プロセッサ
 310 メモリマップ取得部
 320 逆アセンブラ
 330 リターン命令検出部
 340 命令挿入部
 350 アセンブラ

Claims (7)

  1.  主処理実行の前にメモリにプロセス空間を割り当てる機能を有し、戻り先が前記プロセス空間の任意の領域に戻ることができるリターン命令を含む処理を行うプロセッサにおいて、
      前記プロセス空間内の第1の領域を特定する第1特定情報を取得する手段と、
      前記第1特定情報を記憶する第1記憶手段と、
      前記処理からリターン命令を予め検出するリターン命令検出手段と、
      前記リターン命令によって戻される所を特定するアドレス情報を取得する手段と、
      前記第1特定情報に基づき、前記アドレス情報により特定される所が前記第1の領域内にあるか否かを判定する手段と、
      前記判定する手段が、前記特定される所が前記第1の領域内にあると判定した場合に、前記処理を中断する手段と、
     を備えるプロセッサ。
  2.   前記第1記憶手段は、レジスタを含むこと
     を特徴とする請求項1に記載のプロセッサ。
  3.   前記第1の領域は、プロセス空間内であって、テキスト領域又は共有ライブラリ以外の領域であること
     を特徴とする請求項1又は請求項2に記載のプロセッサ。
  4.   前記第1の領域は、プロセス空間内であって、スタック領域であること
     を特徴とする請求項1又は請求項2に記載のプロセッサ。
  5.   請求項1から請求項4のいずれか1項に記載のプロセッサと、
      前記メモリと、
      前記プロセッサ及び前記メモリの間を通信可能にする通信手段と、
     を備える処理装置。
  6.  主処理実行の前にメモリにプロセス空間を割り当てる機能を有し、戻り先が前記プロセス空間の任意の領域に戻ることができるリターン命令を含む処理を行うプロセッサに行わせる方法が実行可能なプログラムを、コンピュータを用いて作成する方法において、
      前記プロセス空間内の第1の領域を特定する第1特定情報を取得するステップと、
      前記第1特定情報を記憶するステップと、
      前記処理からリターン命令を予め検出するステップと、
      前記リターン命令によって戻される所を特定するアドレス情報を取得するステップと、
      前記第1特定情報に基づき、前記アドレス情報により特定される所が前記第1域内にあるか否かを判定するステップと、
      前記判定する手段が、前記特定される所が前記第1の領域内にあると判定した場合に、前記プロセッサが前記処理を中断するステップと、
     を前記プロセッサに行わせるように、前記コンピュータが前記リターン命令を書き換えるステップを含む、
     プログラム作成方法。
  7.   前記書き換えるステップの前に、前記実行可能なプログラムを前記コンピュータがアセンブリ言語に変換するステップと、
      前記書き換えるステップにおいて、前記リターン命令を書き換えるステップは、アセンブリ言語において行われ、
      前記書き換えるステップの後に、変換された前記実行可能なプログラムを実行形式に変換するステップと、
     を含むことを特徴とする請求項6に記載のプログラム作成方法。
PCT/JP2013/075601 2013-09-24 2013-09-24 プロセッサ、処理装置、プログラム作成方法 WO2015044993A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US14/892,568 US20160300056A1 (en) 2013-09-24 2013-09-24 Processor, Processing Device, and Method for Creating Program
JP2015517519A JP5777843B1 (ja) 2013-09-24 2013-09-24 プロセッサ、処理装置、プログラム作成方法
PCT/JP2013/075601 WO2015044993A1 (ja) 2013-09-24 2013-09-24 プロセッサ、処理装置、プログラム作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/075601 WO2015044993A1 (ja) 2013-09-24 2013-09-24 プロセッサ、処理装置、プログラム作成方法

Publications (1)

Publication Number Publication Date
WO2015044993A1 true WO2015044993A1 (ja) 2015-04-02

Family

ID=52742207

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2013/075601 WO2015044993A1 (ja) 2013-09-24 2013-09-24 プロセッサ、処理装置、プログラム作成方法

Country Status (3)

Country Link
US (1) US20160300056A1 (ja)
JP (1) JP5777843B1 (ja)
WO (1) WO2015044993A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107667372A (zh) * 2015-06-26 2018-02-06 英特尔公司 用于保护影子栈的处理器、方法、系统和指令
US11029952B2 (en) 2015-12-20 2021-06-08 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US11176243B2 (en) 2016-02-04 2021-11-16 Intel Corporation Processor extensions to protect stacks during ring transitions
CN112988624B (zh) * 2015-06-26 2024-10-29 英特尔公司 用于保护影子栈的处理器、方法、系统和指令

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10904291B1 (en) * 2017-05-03 2021-01-26 Hrl Laboratories, Llc Low-overhead software transformation to enforce information security policies

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11161548A (ja) * 1997-11-28 1999-06-18 Nec Corp 暴走検知機能付きコンピュータ
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JP2013131157A (ja) * 2011-12-22 2013-07-04 Fourteenforty Research Institute Inc プログラム、情報機器、及び不正アクセス検出方法
JP2013196512A (ja) * 2012-03-21 2013-09-30 Ntt Data Corp 変換装置、変換方法、変換プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7155741B2 (en) * 2002-05-06 2006-12-26 Symantec Corporation Alteration of module load locations
US7716495B2 (en) * 2003-12-31 2010-05-11 Microsoft Corporation Protection against runtime function attacks
US20080120604A1 (en) * 2006-11-20 2008-05-22 Morris Robert P Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation
US9176754B2 (en) * 2008-07-16 2015-11-03 Google Inc. Method and system for executing applications using native code modules
US8561198B2 (en) * 2010-05-07 2013-10-15 Mcafee, Inc. Detection of malicious system calls

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11161548A (ja) * 1997-11-28 1999-06-18 Nec Corp 暴走検知機能付きコンピュータ
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JP2013131157A (ja) * 2011-12-22 2013-07-04 Fourteenforty Research Institute Inc プログラム、情報機器、及び不正アクセス検出方法
JP2013196512A (ja) * 2012-03-21 2013-09-30 Ntt Data Corp 変換装置、変換方法、変換プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HIROAKI ETO ET AL.: "propolice: Improved Stack-smashing Attack Detection", TRANSACTIONS OF INFORMATION PROCESSING SOCIETY OF JAPAN, vol. 43, no. 12, 15 December 2002 (2002-12-15), pages 4034 - 4041 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107667372A (zh) * 2015-06-26 2018-02-06 英特尔公司 用于保护影子栈的处理器、方法、系统和指令
CN112988624A (zh) * 2015-06-26 2021-06-18 英特尔公司 用于保护影子栈的处理器、方法、系统和指令
US11656805B2 (en) 2015-06-26 2023-05-23 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
CN112988624B (zh) * 2015-06-26 2024-10-29 英特尔公司 用于保护影子栈的处理器、方法、系统和指令
US11029952B2 (en) 2015-12-20 2021-06-08 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US11663006B2 (en) 2015-12-20 2023-05-30 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US12001842B2 (en) 2015-12-20 2024-06-04 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US11176243B2 (en) 2016-02-04 2021-11-16 Intel Corporation Processor extensions to protect stacks during ring transitions
US11762982B2 (en) 2016-02-04 2023-09-19 Intel Corporation Processor extensions to protect stacks during ring transitions

Also Published As

Publication number Publication date
JP5777843B1 (ja) 2015-09-09
JPWO2015044993A1 (ja) 2017-03-02
US20160300056A1 (en) 2016-10-13

Similar Documents

Publication Publication Date Title
US10353687B2 (en) Application virtualization
CN107563201B (zh) 基于机器学习的关联样本查找方法、装置及服务器
JP6469028B2 (ja) オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法
JP5777843B1 (ja) プロセッサ、処理装置、プログラム作成方法
US20140359773A1 (en) Intra stack frame randomization for protecting applications against code injection attack
US20160274878A1 (en) Methods and systems for removing plt stubs from dynamically linked binaries
US20080222622A1 (en) Isolating, managing and communicating with user interface elements
EP2985716B1 (en) Information processing device and identifying method
KR101837337B1 (ko) 네이티브코드에서 기본 블록들 간의 모든 상대주소 점프를 간접 점프로 변환하여 분석도구의 cfg 생성을 방해하는 방법 및 장치
US20180052667A1 (en) Emulation device, emulation method, and recording medium storing emulation program
US9367686B1 (en) System and method for antivirus checking of native images of software assemblies
US8769498B2 (en) Warning of register and storage area assignment errors
KR20220113724A (ko) 서브필드 최소 및 최대 클램핑을 갖는 콘텐트 주소 지정 가능한 메모리
CN112182516A (zh) 基于relro安全保护的检测方法、终端及存储介质
JP6827244B1 (ja) 監査装置、監査方法、監査プログラムおよび監査システム
JP6541912B2 (ja) 情報処理装置およびアクセス管理プログラム
JP2006048186A (ja) 動的コンパイラの生成コードを保護する言語処理系
JP5820754B2 (ja) 変換装置、変換方法、変換プログラム
KR101225577B1 (ko) 어셈블리 언어 코드의 분석 장치 및 방법
CN112541188B (zh) 阻止应用程序代码被静态分析的方法及装置
US20130318509A1 (en) Generating object code from a conjoined assembler directive
CN113760345A (zh) 一种应用程序生成方法、装置、设备和存储介质
US20170139828A1 (en) Out-of-range reference detection device, method, and recording medium
WO2017125711A1 (en) A method for allocating memory
JP2001273150A (ja) プログラム変換装置

Legal Events

Date Code Title Description
ENP Entry into the national phase

Ref document number: 2015517519

Country of ref document: JP

Kind code of ref document: A

121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 13894063

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 14892568

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 13894063

Country of ref document: EP

Kind code of ref document: A1