US20130013965A1 - Microprocessor protected against stack overflow - Google Patents

Microprocessor protected against stack overflow Download PDF

Info

Publication number
US20130013965A1
US20130013965A1 US13/543,673 US201213543673A US2013013965A1 US 20130013965 A1 US20130013965 A1 US 20130013965A1 US 201213543673 A US201213543673 A US 201213543673A US 2013013965 A1 US2013013965 A1 US 2013013965A1
Authority
US
United States
Prior art keywords
stack
address
protection
register
protection code
Prior art date
Legal status (The legal status 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 status listed.)
Abandoned
Application number
US13/543,673
Inventor
Pierre Guillemin
William Orlando
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
STMicroelectronics Rousset SAS
Original Assignee
STMicroelectronics Rousset SAS
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 STMicroelectronics Rousset SAS filed Critical STMicroelectronics Rousset SAS
Assigned to STMICROELECTRONICS (ROUSSET) SAS reassignment STMICROELECTRONICS (ROUSSET) SAS ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: GUILLEMIN, PIERRE, ORLANDO, WILLIAM
Publication of US20130013965A1 publication Critical patent/US20130013965A1/en
Priority to US15/847,827 priority Critical patent/US11113384B2/en
Abandoned legal-status Critical Current

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
    • G06F9/00Arrangements for program control, e.g. control units
    • 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
    • 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/2153Using hardware token as a secondary aspect

Definitions

  • the present disclosure relates to the protection of a microprocessor against stack overflow.
  • the call stack of a microprocessor is a volatile memory zone directed to the storage of data concerning functions executed by the microprocessor.
  • the stack allows the storage of an address to which the microprocessor should return after having executed a function.
  • the call function places its return address in the stack.
  • the called function has finished the task for which it was designed, it fetches the return address from the stack.
  • return addresses accumulate in the stack and are fetched one after the other after the execution of a function.
  • the stack receives data associated with call or called functions, such as local variables of the called function, parameters of the called function, a frame pointer of the call function, etc.
  • stack overflow When too much information is stored in the stack, a phenomena called stack overflow occurs, which may be an external overflow or an internal overflow. External overflow is an overflow beyond the amount of memory space attributed to the stack, whereas internal overflow is when writing of a data zone overflows into another data zone, in particular into a zone containing a return address. Such an internal overflow may be caused intentionally by an attacker aiming to take control of the microprocessor, and the return address pointing to the call function may be replaced by a return address pointing to a malicious program.
  • the term “stack overflow” designates an internal overflow.
  • a known method of countering stack overflow attacks consists of inserting a protection code, also known as a “canary”, in the stack.
  • a protection code also known as a “canary”
  • Such codes are generally small whole numbers of random value placed at strategic locations in the stack, preferably before each return address.
  • the value of the canary is checked to determine that it has not been changed before the called function uses the return address present in the stack.
  • an attacker may provoke a stack overflow that is undetected by reading the canary and then re-writing the correct value of the canary in the initial space while modifying the return address.
  • Embodiments of the invention relate to a microprocessor having a central processing unit, at least one call stack, a stack pointer, an address bus, a data bus, and a hardware monitor configured to: generate protection codes, insert protection codes in the stack or let the central processing unit insert them, store addresses of protection codes inserted in the stack, and generate an error signal in response to an attempt to modify a protection code present in the stack.
  • the monitor is also configured to generate the error signal in the case of an attempt to read a protection code in the stack.
  • the monitor is configured to generate random or pseudo-random protection codes.
  • the monitor is configured to generate deterministic and reproducible protection codes.
  • the monitor is configured to monitor the address bus, and generate the error signal if an address of a stored protection code appears on the address bus.
  • the monitor includes a first register write-accessible to the central processing unit, and is configured to generate a protection code and apply the value of the protection code on the data bus in response to the write of a data in the register by the central processing unit.
  • the monitor is also configured to insert the protection code in the stack, at an address present in the first register.
  • the monitor in response to a protection code erase request by the central processing unit or by the program executed by the central processing unit, is configured to read the protection code in the stack at an address specified by the erase request, compare the protection code with an expected protection code value, and generate the error signal if the read value is different from the expected value.
  • the monitor itself is configured to erase the protection code in the stack after having verified the protection code.
  • the monitor includes a second register write-accessible to the central processing unit, and is configured to interpret a write of the second register as a request to erase a protection code.
  • the monitor is configured to interpret a write of the second register as an erase request of a protection code at an address present in the second register.
  • FIG. 1 shows a microprocessor comprising a stack monitor according to one embodiment
  • FIG. 2 shows an example of contents of the stack
  • FIG. 3 shows an implementation example of the stack monitor.
  • FIG. 1 shows a microprocessor 100 according to one embodiment.
  • the microprocessor 100 includes a central processing unit CPU, hereinafter “the CPU”, a program memory PMEM, a call stack STCK, and a registry bank RBK. These different elements are linked by an address bus B 1 , a data bus B 2 , and an instruction bus B 3 .
  • Registry bank RBK includes a stack pointer register SP and a frame pointer register FP.
  • the stack pointer contains the address of the top of the stack STCK and the frame pointer contains the start address of a frame of a function being executed.
  • Program memory PMEM contains a program executed by the CPU.
  • instruction bus B 3 is an optional microprocessor element, its provision particular to the architecture used, here the Harvard architecture.
  • a Von Neumann architecture only includes bus B 2 to convey both the data and the instructions.
  • the microprocessor 100 also includes a stack monitor MT according to one embodiment.
  • Monitor MT is configured to place protection codes or “canaries” in the stack STCK as it is being filled by the CPU.
  • the monitor is also configured to detect attempts to write the stack at the canary addresses, e.g., attempts to alter the canaries, and preferably to also detect attempts to read the canaries.
  • the monitor only monitors address bus B 1 and launches an alert when the address of a canary appears on address bus B 1 .
  • the monitor does not try to determine whether it is a read or write attempt, and does not monitor instruction bus B 3 (or bus B 2 in a Von Neumann architecture).
  • the alert is unconditional and is for example emitted in the form of an error signal ER.
  • Signal ER is applied to an interruption decoder that sets the CPU in a secure error processing sub-program (for example a secure interrupt of the platform termed “trust zone”, the processing of which is done in secure mode in protected memories).
  • a secure error processing sub-program for example a secure interrupt of the platform termed “trust zone”, the processing of which is done in secure mode in protected memories.
  • signal ER is used to provoke a CPU reset.
  • monitor MT also operates such that the canary surveillance is lifted before the canary is erased. Before lifting the surveillance, the monitor verifies that the canary value has not been altered. To this end, the monitor reads the canary and compares it with an initial value saved in its internal memory 102 . In one embodiment, the monitor itself performs the erasure of the canary in the stack. In another embodiment, this erasure is assured by the CPU.
  • monitor MT is a hardware means to generate and to monitor the canaries, and cannot be corrupted by a fraudulent alteration of the program executed by the CPU.
  • the monitor is a sort of impartial arbitrator, independent of the program itself, and confers a high level of security to the generation and the surveillance of canaries.
  • FIG. 2 shows an example of inserting canaries in stack STCK and an example of the stack contents.
  • An arrow DIR 1 indicates the increasing address direction and an arrow DIR 2 indicates the stack filling direction.
  • the filling is done from the highest value address to the lowest value address.
  • the stack can have a reversed filling direction, corresponding to the increasing address direction.
  • the stack includes frame FFA of a function FA, frame FFB of a function FB, and frame FFC of a function FC being executed. It is assumed that function FC was called by function FB and that function FB was called by function FA. Each frame contains contextual data of the considered function and return data to the call function.
  • frame FFB of function FB includes a return address RAFA to function FA, a frame pointer value FPFA of function FA, and local variables LVFB of function FB.
  • a canary C 1 was inserted by monitor MT in frame FFB, for example between return address RAFA and frame pointer value FPFA.
  • Frame FFC of function FC includes a return address RAFB of function FB, a frame pointer value FPFB of function FB, and local variables LVFC of function FC.
  • a canary C 2 was inserted by monitor MT in frame FFC, for example between return address RAFB and frame pointer value FPFB.
  • the current value of stack pointer SP designates the top of the stack (the lowest address), and the current value of the frame pointer designates the position of the return address RAFB to function FB.
  • Canaries C 2 and C 1 are monitored in real time by monitor MT.
  • any attempt to overflow the stack in order to smash return address RAFB and/or return address RAFA implies a stack write attempt at the locations of canaries C 2 and C 1 .
  • This attempt is detected by monitor MT and leads it to emit error signal ER.
  • any attempt to read the canaries is preferably detected by the monitor, which also emits the error signal.
  • canary insertion and erasure instructions are provided in the program executed by the CPU (program stored in program memory PMEM).
  • monitor MT supposes instructions in the program executed by the CPU for the insertion and erasure of canaries.
  • canary erasure instruction is meant an instruction that leads monitor MT to lift the surveillance of the canary targeted by the instruction, in preparation for its erasure by the CPU, or which leads the monitor to lift the surveillance and to erase the canary from the stack itself.
  • the value of a canary may be:
  • the value of the canary preferably includes a byte at 0 to offer protection against faults due to character chain manipulations.
  • the canaries are placed between the local variable zones and the return addresses in the embodiment. Indeed, it is preferable that they are situated between the zones sensitive to overflow and the zones to protect from an overflow. In one embodiment, additional canaries are placed at other locations in the stack to obtain the equivalent of a “mine field” offering application perspectives extending beyond the simple protection of return addresses.
  • the insertion of a canary in the stack may be launched by the monitor:
  • the monitor keeps track of where they are.
  • the canary addresses are stored in an internal memory 102 of the monitor or an external memory 104 accessible by the intermediary of the data and address buses.
  • a low-capacity internal memory 106 (memory zone within the CPU) may be provided to store the addresses of the canaries most recently introduced into the stack, and a complementary memory 104 may be provided to store the addresses of other canaries.
  • a distinction is therefore made between “active” canaries, the addresses of which are under surveillance because they are loaded in the internal memory 102 of the monitor, and “inactive” canaries, the addresses of which are not monitored.
  • the addresses of canaries present in the external memory 104 are transferred to the internal memory 102 to be monitored by the monitor. The canaries whose addresses were transferred thus become “active”.
  • the addresses stored in an external memory 104 are preferably protected in confidentiality and integrity, for example by encryption and association with an error correction code.
  • the values of the canaries may be stored in an internal memory 102 of the monitor or in the memory 106 of the CPU, in a form protected by confidentiality and integrity.
  • the monitor should first detect and prevent an attempt to write the stack at the canary addresses.
  • the write attempt may be a modification attempt by the CPU or by a host device that can access the data bus and the address bus.
  • the monitor also detects and prevents attempts to read the stack at a canary address. Indeed, certain attacks take advantage of a prior knowledge of the canary values.
  • the monitor compares the current address present on the address bus to the addresses of “active” canaries.
  • This monitoring may concern the addresses of all the canaries inserted in the stack (exhaustive monitoring) or only the addresses of the canaries associated with the current task, the function being executed.
  • the monitor is informed of a task change so that it can update the canary addresses to monitor.
  • the surveillance of the current address is done for example by comparators, each receiving the current address on one input and an address of a canary to monitor on another input.
  • the detection time is preferably constant and short.
  • the number of canaries simultaneously monitored may be limited to the number of comparators included in the monitor.
  • a multiple-value comparator may also be provided to successively compare the current address with each canary address.
  • the monitor recharges its internal comparators during a context change by applying the canary addresses associated with the new task to the comparators.
  • the new addresses applied to the comparators are imported from an external memory after integrity verification and error correction, or are selected in an internal memory zone associated with the considered task.
  • the erasure of a canary includes a prior step of verifying the value of the canary by comparison with an expected value by the monitor.
  • the monitor reads the canary in the stack and compares it with an expected value. If the value of the canary is not the same as the expected value, the monitor emits error signal ER.
  • the erasure of a canary may be launched upon detection of a “return” type instruction on instruction bus B 3 (or on bus B 2 in a Von Neumann architecture), or by the intermediary of an explicit request, indicating the address of the canary to erase, present in the program, or even by the intermediary of an access to a monitor register.
  • FIG. 3 shows an implementation example of monitor MT according to the guidelines presented above.
  • Monitor MT includes a control circuit CCT linked to address bus B 1 and to data bus B 2 of the CPU, a volatile memory CAM, a volatile memory CVM, address comparators CA 0 , CA 1 , . . . CAi, and a canary comparator CDT.
  • Control circuit CCT is a hard-wired circuit of the state machine type. It is equipped with a random or pseudo-random generator CGEN, and two registers R 1 , R 2 write-accessible to the CPU.
  • Memory CAM is provided to store canary addresses, whereas memory CVM is provided to store canary values.
  • the outputs of comparators CA 0 -CAi, CDTn are sent to an OR type gate G 1 , the output of which supplies error signal ER.
  • Memory CAM has a look up table structure and includes N parallel outputs supplying, in read mode, i+1 canary addresses associated with an index applied at the input of the memory. Each canary address supplied by memory CAM is applied on an input of a comparator CA 0 -CAi, the other input of which is linked to address bus B 1 .
  • Memory CVM also has a look up table structure and includes an output supplying, in read mode, a canary value associated with an address value supplied at the input of the memory. This value is applied to an input of comparator CDT, the other input of which is linked to data bus B 2 .
  • Register R 1 receives an insertion address of a canary supplied by the CPU, and optionally a call function identifier, a called function identifier, or both.
  • Control circuit CCT is configured to detect a write of register R 1 and to interpret this write as a request to write a canary in stack STCK, at the address present in the register.
  • the programmer or the compiler simply inserts a write instruction of register R 1 in the program.
  • This embodiment can be adapted to any type of microprocessor without having to provide a specific canary insertion instruction.
  • control circuit CCT In response to the write of register R 1 , control circuit CCT:
  • the addresses of all the canaries associated with this index are applied to comparators CA 0 -CAi and are under surveillance. If the address of one of the canaries under surveillance appears on address bus B 1 , the output of one of comparators CA 0 -CAi goes to 1 and signal ER at the output of gate G 1 goes to 1, launching the protection process of the system described herein (reset of the microprocessor or secure error processing).
  • the write address of the canary is applied on the address bus by the CPU.
  • Register R 1 is used to communicate the identifier of the current process or any other information other than the address of the canary to control circuit CCT.
  • Control circuit CCT reads this address on the address bus in order to store it in memory CVM, and supplies only the value of the canary on the data bus. The CPU itself then applies a write command to stack STCK.
  • control circuit CCT In response to the write of an address in register R 2 , control circuit CCT:
  • control circuit CCT In absence of the error signal, control circuit CCT itself can perform the erasure of the canary in the stack by accessing it in write mode, then erasing the address of the canary in its internal memory. Alternatively, circuit CCT can let the CPU do this erasure, after having erased the address of the canary from its internal memory in order that it is no longer under surveillance.
  • circuit CCT In the case where circuit CCT is not configured to perform this erasure by itself, the programmer or the compiler should provide a stack erase instruction to the attention of the CPU after a write instruction of register R 2 .
  • control circuit CCT generates deterministic canary values and regenerates them in response to a write of register R 2 .
  • memory CVM is not necessary.
  • the CPU is equipped with a cache memory, which may be formed for example as all or part of memory 106 , arranged between the program memory and the CPU and receives instructions to execute several clock cycles before they are to be executed.
  • the monitor is preferably arranged between the CPU and the cache, and is configured to observe the transactions performed by the CPU.

Landscapes

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

Abstract

A microprocessor includes a central processing unit, at least one call stack, a stack pointer, an address bus, and a data bus. The microprocessor further includes a hardware monitor configured to supply protection codes, insert the protection codes in the stack or let the central processing unit insert them, and then generate an error signal in response to an attempt to modify a protection code present in the stack.

Description

    BACKGROUND
  • 1. Technical Field
  • The present disclosure relates to the protection of a microprocessor against stack overflow. The call stack of a microprocessor is a volatile memory zone directed to the storage of data concerning functions executed by the microprocessor. In particular, the stack allows the storage of an address to which the microprocessor should return after having executed a function.
  • 2. Description of the Related Art
  • When a first function or “call function” calls a second function or “called function”, the call function places its return address in the stack. When the called function has finished the task for which it was designed, it fetches the return address from the stack. When the functions call each other, return addresses accumulate in the stack and are fetched one after the other after the execution of a function. Besides return addresses, the stack receives data associated with call or called functions, such as local variables of the called function, parameters of the called function, a frame pointer of the call function, etc.
  • When too much information is stored in the stack, a phenomena called stack overflow occurs, which may be an external overflow or an internal overflow. External overflow is an overflow beyond the amount of memory space attributed to the stack, whereas internal overflow is when writing of a data zone overflows into another data zone, in particular into a zone containing a return address. Such an internal overflow may be caused intentionally by an attacker aiming to take control of the microprocessor, and the return address pointing to the call function may be replaced by a return address pointing to a malicious program. In the present application, the term “stack overflow” designates an internal overflow.
  • A known method of countering stack overflow attacks consists of inserting a protection code, also known as a “canary”, in the stack. Such codes are generally small whole numbers of random value placed at strategic locations in the stack, preferably before each return address. To detect that the stack has not been subjected to a fraudulent overflow, the value of the canary is checked to determine that it has not been changed before the called function uses the return address present in the stack.
  • This technique considerably increases the difficulty of exploiting stack overflow, since it relates to the attacker taking control of the instruction pointer by complex means.
  • Nevertheless, this technique is not infallible because it entirely depends on the provision of canary insertion and verification instructions in the program executed by the microprocessor. An attack on the program itself may therefore allow a subsequent attack on the stack by neutralizing the canary verification instructions.
  • Similarly, an attacker may provoke a stack overflow that is undetected by reading the canary and then re-writing the correct value of the canary in the initial space while modifying the return address.
  • It may therefore be desired to reinforce the security offered by the insertion of canaries in the call stack of a microprocessor.
  • BRIEF SUMMARY
  • Embodiments of the invention relate to a microprocessor having a central processing unit, at least one call stack, a stack pointer, an address bus, a data bus, and a hardware monitor configured to: generate protection codes, insert protection codes in the stack or let the central processing unit insert them, store addresses of protection codes inserted in the stack, and generate an error signal in response to an attempt to modify a protection code present in the stack.
  • According to one embodiment, the monitor is also configured to generate the error signal in the case of an attempt to read a protection code in the stack.
  • According to one embodiment, the monitor is configured to generate random or pseudo-random protection codes.
  • According to one embodiment, the monitor is configured to generate deterministic and reproducible protection codes.
  • According to one embodiment, the monitor is configured to monitor the address bus, and generate the error signal if an address of a stored protection code appears on the address bus.
  • According to one embodiment, the monitor includes a first register write-accessible to the central processing unit, and is configured to generate a protection code and apply the value of the protection code on the data bus in response to the write of a data in the register by the central processing unit.
  • According to one embodiment, the monitor is also configured to insert the protection code in the stack, at an address present in the first register.
  • According to one embodiment, in response to a protection code erase request by the central processing unit or by the program executed by the central processing unit, the monitor is configured to read the protection code in the stack at an address specified by the erase request, compare the protection code with an expected protection code value, and generate the error signal if the read value is different from the expected value.
  • According to one embodiment, the monitor itself is configured to erase the protection code in the stack after having verified the protection code.
  • According to one embodiment, the monitor includes a second register write-accessible to the central processing unit, and is configured to interpret a write of the second register as a request to erase a protection code.
  • According to one embodiment, the monitor is configured to interpret a write of the second register as an erase request of a protection code at an address present in the second register.
  • BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS
  • Non-limiting and non-exhaustive embodiments are described with reference to the following drawings, wherein like labels refer to like parts throughout the various views unless otherwise specified. The sizes and relative positions of elements in the drawings are not necessarily drawn to scale. For example, the shapes of various elements and angles are not drawn to scale, and some of these elements are enlarged and positioned to improve drawing legibility. Further, the particular shapes of the elements as drawn are not intended to convey any information regarding the actual shape of the particular elements and have been solely selected for ease of recognition in the drawings. One or more embodiments are described hereinafter with reference to the accompanying drawings in which:
  • FIG. 1 shows a microprocessor comprising a stack monitor according to one embodiment;
  • FIG. 2 shows an example of contents of the stack; and
  • FIG. 3 shows an implementation example of the stack monitor.
  • DETAILED DESCRIPTION
  • FIG. 1 shows a microprocessor 100 according to one embodiment. The microprocessor 100 includes a central processing unit CPU, hereinafter “the CPU”, a program memory PMEM, a call stack STCK, and a registry bank RBK. These different elements are linked by an address bus B1, a data bus B2, and an instruction bus B3.
  • Registry bank RBK includes a stack pointer register SP and a frame pointer register FP. The stack pointer contains the address of the top of the stack STCK and the frame pointer contains the start address of a frame of a function being executed. Program memory PMEM contains a program executed by the CPU.
  • It will be noted that instruction bus B3 is an optional microprocessor element, its provision particular to the architecture used, here the Harvard architecture. A Von Neumann architecture only includes bus B2 to convey both the data and the instructions.
  • The microprocessor 100 also includes a stack monitor MT according to one embodiment. Monitor MT is configured to place protection codes or “canaries” in the stack STCK as it is being filled by the CPU. The monitor is also configured to detect attempts to write the stack at the canary addresses, e.g., attempts to alter the canaries, and preferably to also detect attempts to read the canaries.
  • In one embodiment, the monitor only monitors address bus B1 and launches an alert when the address of a canary appears on address bus B1. In this case, the monitor does not try to determine whether it is a read or write attempt, and does not monitor instruction bus B3 (or bus B2 in a Von Neumann architecture). The alert is unconditional and is for example emitted in the form of an error signal ER.
  • Signal ER is applied to an interruption decoder that sets the CPU in a secure error processing sub-program (for example a secure interrupt of the platform termed “trust zone”, the processing of which is done in secure mode in protected memories). Alternatively, signal ER is used to provoke a CPU reset.
  • During the return to a call function, monitor MT also operates such that the canary surveillance is lifted before the canary is erased. Before lifting the surveillance, the monitor verifies that the canary value has not been altered. To this end, the monitor reads the canary and compares it with an initial value saved in its internal memory 102. In one embodiment, the monitor itself performs the erasure of the canary in the stack. In another embodiment, this erasure is assured by the CPU.
  • Thus, monitor MT is a hardware means to generate and to monitor the canaries, and cannot be corrupted by a fraudulent alteration of the program executed by the CPU. The monitor is a sort of impartial arbitrator, independent of the program itself, and confers a high level of security to the generation and the surveillance of canaries.
  • FIG. 2 shows an example of inserting canaries in stack STCK and an example of the stack contents. An arrow DIR1 indicates the increasing address direction and an arrow DIR2 indicates the stack filling direction. Here, the filling is done from the highest value address to the lowest value address. The “top” of the stack, corresponding to the current value of stack pointer SP, thus corresponds here to the lowest value of the stack. It will be noted that in other embodiments, the stack can have a reversed filling direction, corresponding to the increasing address direction.
  • In the example shown, the stack includes frame FFA of a function FA, frame FFB of a function FB, and frame FFC of a function FC being executed. It is assumed that function FC was called by function FB and that function FB was called by function FA. Each frame contains contextual data of the considered function and return data to the call function.
  • Thus, frame FFB of function FB includes a return address RAFA to function FA, a frame pointer value FPFA of function FA, and local variables LVFB of function FB. A canary C1 was inserted by monitor MT in frame FFB, for example between return address RAFA and frame pointer value FPFA.
  • Frame FFC of function FC includes a return address RAFB of function FB, a frame pointer value FPFB of function FB, and local variables LVFC of function FC. A canary C2 was inserted by monitor MT in frame FFC, for example between return address RAFB and frame pointer value FPFB.
  • The current value of stack pointer SP designates the top of the stack (the lowest address), and the current value of the frame pointer designates the position of the return address RAFB to function FB.
  • Canaries C2 and C1 are monitored in real time by monitor MT. Thus, any attempt to overflow the stack in order to smash return address RAFB and/or return address RAFA implies a stack write attempt at the locations of canaries C2 and C1. This attempt is detected by monitor MT and leads it to emit error signal ER. Similarly, any attempt to read the canaries is preferably detected by the monitor, which also emits the error signal.
  • To use monitor MT, canary insertion and erasure instructions are provided in the program executed by the CPU (program stored in program memory PMEM).
  • The implementation of embodiments may be the object of diverse variations which will be evoked in the following, before a detailed example implementation of monitor MT is provided in relation with FIG. 3.
  • Modification of the Program to Use the Monitor
  • The use of monitor MT supposes instructions in the program executed by the CPU for the insertion and erasure of canaries.
  • By “canary erasure instruction” is meant an instruction that leads monitor MT to lift the surveillance of the canary targeted by the instruction, in preparation for its erasure by the CPU, or which leads the monitor to lift the surveillance and to erase the canary from the stack itself.
  • To this end, several options may be provided:
      • an explicit modification of the program by the programmer (calling macros or dedicated functions),
      • a modification of the program by the compiler so that this operation is transparent to the programmer,
      • a post-compilation of the generated binary code, also to render the operation transparent to the programmer,
      • the modification of the compiler so that the programmer can indicate, by means of a “preprocessing” command (for example a command of the “pragma” type as specified by the C language standard), how the compiler should operate to compile a program section or a function. This allows the compiler to add the canary insertion and erasure instructions, while leaving to the programmer the choice as to which program sections or functions should be protected.
    Generation of Canaries
  • The value of a canary may be:
      • supplied by a random or pseudo-random generator, or
      • deterministic and reproducible: the value of the canary is for example determined by the monitor as a function of known variables such as the address at which the canary is placed, and of a secret or random value known only to the monitor, or even a call function identifier supplied by the compiler.
  • The value of the canary preferably includes a byte at 0 to offer protection against faults due to character chain manipulations.
  • Insertion of Canaries in the Stack
  • The canaries are placed between the local variable zones and the return addresses in the embodiment. Indeed, it is preferable that they are situated between the zones sensitive to overflow and the zones to protect from an overflow. In one embodiment, additional canaries are placed at other locations in the stack to obtain the equivalent of a “mine field” offering application perspectives extending beyond the simple protection of return addresses.
  • The insertion of a canary in the stack may be launched by the monitor:
      • automatically upon detection of a “call” type instruction causing a change of context in the stack. In this case, the monitor is linked to instruction bus B3, as shown in dotted lines in FIG. 1, and includes means of decoding such an instruction (in the Von Neumann architecture, this monitoring is done on bus B2);
      • upon an explicit request by the program. An explicit request may consist of a specific canary insertion instruction that the monitor decodes, or more simply a write instruction of a monitor register, interpreted by the monitor as an insertion instruction.
    Management of Canary Addresses
  • In order to monitor the different canaries placed in the stack, the monitor keeps track of where they are. To this end, the canary addresses are stored in an internal memory 102 of the monitor or an external memory 104 accessible by the intermediary of the data and address buses. Alternatively, a low-capacity internal memory 106 (memory zone within the CPU) may be provided to store the addresses of the canaries most recently introduced into the stack, and a complementary memory 104 may be provided to store the addresses of other canaries. A distinction is therefore made between “active” canaries, the addresses of which are under surveillance because they are loaded in the internal memory 102 of the monitor, and “inactive” canaries, the addresses of which are not monitored. During a change of context, the addresses of canaries present in the external memory 104 are transferred to the internal memory 102 to be monitored by the monitor. The canaries whose addresses were transferred thus become “active”.
  • The addresses stored in an external memory 104 are preferably protected in confidentiality and integrity, for example by encryption and association with an error correction code.
  • Similarly, the values of the canaries, if they are not deterministic and reproducible, may be stored in an internal memory 102 of the monitor or in the memory 106 of the CPU, in a form protected by confidentiality and integrity.
  • Monitoring of Canary Addresses
  • The monitor should first detect and prevent an attempt to write the stack at the canary addresses. The write attempt may be a modification attempt by the CPU or by a host device that can access the data bus and the address bus.
  • Preferably, the monitor also detects and prevents attempts to read the stack at a canary address. Indeed, certain attacks take advantage of a prior knowledge of the canary values.
  • To this end, the monitor compares the current address present on the address bus to the addresses of “active” canaries.
  • This monitoring may concern the addresses of all the canaries inserted in the stack (exhaustive monitoring) or only the addresses of the canaries associated with the current task, the function being executed. In the second case, the monitor is informed of a task change so that it can update the canary addresses to monitor.
  • The surveillance of the current address is done for example by comparators, each receiving the current address on one input and an address of a canary to monitor on another input. The detection time is preferably constant and short. The number of canaries simultaneously monitored may be limited to the number of comparators included in the monitor. A multiple-value comparator may also be provided to successively compare the current address with each canary address.
  • If the surveillance only concerns the canaries of the current task, the monitor recharges its internal comparators during a context change by applying the canary addresses associated with the new task to the comparators.
  • The new addresses applied to the comparators are imported from an external memory after integrity verification and error correction, or are selected in an internal memory zone associated with the considered task.
  • Erasure of a Canary
  • The erasure of a canary includes a prior step of verifying the value of the canary by comparison with an expected value by the monitor.
  • To this end, the monitor reads the canary in the stack and compares it with an expected value. If the value of the canary is not the same as the expected value, the monitor emits error signal ER.
  • The erasure of a canary may be launched upon detection of a “return” type instruction on instruction bus B3 (or on bus B2 in a Von Neumann architecture), or by the intermediary of an explicit request, indicating the address of the canary to erase, present in the program, or even by the intermediary of an access to a monitor register.
  • FIG. 3 shows an implementation example of monitor MT according to the guidelines presented above.
  • Monitor MT includes a control circuit CCT linked to address bus B1 and to data bus B2 of the CPU, a volatile memory CAM, a volatile memory CVM, address comparators CA0, CA1, . . . CAi, and a canary comparator CDT. Control circuit CCT is a hard-wired circuit of the state machine type. It is equipped with a random or pseudo-random generator CGEN, and two registers R1, R2 write-accessible to the CPU. Memory CAM is provided to store canary addresses, whereas memory CVM is provided to store canary values. The outputs of comparators CA0-CAi, CDTn are sent to an OR type gate G1, the output of which supplies error signal ER.
  • Memory CAM has a look up table structure and includes N parallel outputs supplying, in read mode, i+1 canary addresses associated with an index applied at the input of the memory. Each canary address supplied by memory CAM is applied on an input of a comparator CA0-CAi, the other input of which is linked to address bus B1.
  • Memory CVM also has a look up table structure and includes an output supplying, in read mode, a canary value associated with an address value supplied at the input of the memory. This value is applied to an input of comparator CDT, the other input of which is linked to data bus B2.
  • Register R1 receives an insertion address of a canary supplied by the CPU, and optionally a call function identifier, a called function identifier, or both.
  • Control circuit CCT is configured to detect a write of register R1 and to interpret this write as a request to write a canary in stack STCK, at the address present in the register.
  • Thus, to write a canary, the programmer or the compiler simply inserts a write instruction of register R1 in the program. This embodiment can be adapted to any type of microprocessor without having to provide a specific canary insertion instruction.
  • In response to the write of register R1, control circuit CCT:
      • generates a canary, here by means of generator CGEN,
      • takes control of address bus B1 and of data bus B2 and writes the canary in stack STCK at the specified address,
      • stores the address of the canary in memory CAM in relation with an associated index which can be the identifier of the call or called function,
      • stores the value of the canary in memory CVM in relation with the address of the canary,
      • sets memory CAM in read mode and applies the index associated with the canary address to the memory.
  • Thus, the addresses of all the canaries associated with this index (for example all the canaries associated with the identifier of the call or called function) are applied to comparators CA0-CAi and are under surveillance. If the address of one of the canaries under surveillance appears on address bus B1, the output of one of comparators CA0-CAi goes to 1 and signal ER at the output of gate G1 goes to 1, launching the protection process of the system described herein (reset of the microprocessor or secure error processing).
  • In one variant, the write address of the canary is applied on the address bus by the CPU. Register R1 is used to communicate the identifier of the current process or any other information other than the address of the canary to control circuit CCT. Control circuit CCT reads this address on the address bus in order to store it in memory CVM, and supplies only the value of the canary on the data bus. The CPU itself then applies a write command to stack STCK.
  • In response to the write of an address in register R2, control circuit CCT:
      • applies the address present in register R2 on the bus and reads the value of the canary in the stack. This value is thus found on data bus B2 and on one input of comparator CDT,
      • sets memory CVM in read mode and applies the address present in register R2 as a read index to the memory. The initial value of the canary stored in relation with this address thus finds itself on a second input of comparator CDT.
  • If the two values are different, the output of comparator CDT goes to 1 and signal ER at the output of gate G1 goes to 1, launching the system protection process.
  • In absence of the error signal, control circuit CCT itself can perform the erasure of the canary in the stack by accessing it in write mode, then erasing the address of the canary in its internal memory. Alternatively, circuit CCT can let the CPU do this erasure, after having erased the address of the canary from its internal memory in order that it is no longer under surveillance.
  • In the case where circuit CCT is not configured to perform this erasure by itself, the programmer or the compiler should provide a stack erase instruction to the attention of the CPU after a write instruction of register R2.
  • In a variant evoked herein, control circuit CCT generates deterministic canary values and regenerates them in response to a write of register R2. In this case, memory CVM is not necessary.
  • Many other embodiments may be provided by the skilled person. In particular, in certain embodiments, the CPU is equipped with a cache memory, which may be formed for example as all or part of memory 106, arranged between the program memory and the CPU and receives instructions to execute several clock cycles before they are to be executed. In this case, the monitor is preferably arranged between the CPU and the cache, and is configured to observe the transactions performed by the CPU.
  • The various embodiments described above can be combined to provide further embodiments. Aspects of the embodiments can be modified, if necessary to employ concepts of the various patents, applications and publications to provide yet further embodiments. These and other changes can be made to the embodiments in light of the above-detailed description. In general, in the following claims, the terms used should not be construed to limit the claims to the specific embodiments disclosed in the specification and the claims, but should be construed to include all possible embodiments along with the full scope of equivalents to which such claims are entitled. Accordingly, the claims are not limited by the disclosure.

Claims (20)

1. A microprocessor, comprising:
a central processing unit;
at least one call stack structure;
a stack pointer structure;
an address bus;
a data bus; and
a hardware monitor configured to:
generate protection codes;
insert protection codes in the stack structure or let the central processing unit insert protection codes in the stack structure;
store addresses of protection codes inserted in the stack structure; and
generate an error signal in response to an attempt to modify a protection code present in the stack structure.
2. A microprocessor according to claim 1 wherein the hardware monitor is configured to generate the error signal in response to an attempt to read a protection code in the stack structure.
3. A microprocessor according to claim 1 wherein the hardware monitor is configured to generate random or pseudo-random protection codes.
4. A microprocessor according to claim 1 wherein the hardware monitor is configured to generate deterministic and reproducible protection codes.
5. A microprocessor according to claim 1 wherein the hardware monitor is configured to:
monitor the address bus; and
generate the error signal if an address of a stored protection code appears on the address bus.
6. A microprocessor according to claim 1 wherein the hardware monitor comprises a register, the register being write-accessible to the central processing unit, and the hardware monitor is configured to generate a register protection code and apply the value of the register protection code on the data bus in response to the write of data in the register by the central processing unit.
7. A microprocessor according to claim 6 wherein the hardware monitor is configured to insert the register protection code in the stack structure at an address present in the register.
8. A microprocessor according to claim 1 wherein in response to a protection code erase request by the central processing unit or by a program executed by the central processing unit, the hardware monitor is configured to:
read a first protection code in the stack structure at an address specified by the erase request;
compare the first protection code with an expected protection code value; and
generate the error signal if the first protection code is different from the expected value.
9. A microprocessor according to claim 8 wherein the hardware monitor is configured to erase the first protection code in the stack after having verified the protection code.
10. A microprocessor according to claim 8 wherein the hardware monitor comprises a register, the register being write-accessible to the central processing unit, and the hardware monitor is configured to interpret a write of the register as a request to erase the first protection code.
11. A microprocessor according to claim 10 wherein the hardware monitor is configured to interpret a write of the register as an erase request of the first protection code at an address present in the register.
12. A method executed by a microprocessor, comprising:
initializing a stack pointer;
generating a plurality of protection codes;
inserting protection codes in a stack based on an address stored in the stack pointer;
storing addresses of inserted protection codes in a memory;
monitoring, with a hardware monitor, addresses on an address bus; and
generating an error signal in response to an attempt to modify a protection code present in the stack based on detecting a monitored address on the address bus.
13. The method according to claim 12 wherein the inserting is performed with the hardware monitor or with a central processing unit.
14. The method according to claim 12, comprising:
executing a secure error processing function in response to the error signal.
15. The method according to claim 12, comprising:
erasing protection codes when corresponding return functions are executed, wherein the erasing includes removing stored addresses of the inserted protection codes from the memory.
16. The method according to claim 12 wherein generating the plurality of protection codes includes drawing random or pseudo-random numbers from an associated random or pseudo-random number generator.
17. A stack overflow monitoring circuit, comprising:
a control circuit configured to generate protection codes and further configured to direct operations of the stack overflow monitoring circuit;
a bus interface configured to couple the stack overflow monitoring circuit to a stack structure, the stack structure operable to store protection codes;
at least one internal memory;
a plurality of comparators coupled to the at least one internal memory; and
gating logic coupled to the plurality of comparators and configured to output an error signal upon detection of an address on an address bus read via the bus interface being equal to an address stored in the at least one internal memory.
18. The stack overflow monitoring circuit according to claim 17, comprising:
an address memory configured within the at least one internal memory; and
a value memory configured within the at least one internal memory,
wherein the address memory is operable to store addresses of protection codes stored in the stack structure and the value memory is operable to store protection code values equal to the protection codes stored in the stack,
wherein the gating logic is configured to output an error signal upon detection of a protection code value on a data bus read via the bus interface being equal to a value stored in the value memory.
19. The stack overflow monitoring circuit according to claim 17, comprising:
a first register coupleable to a central processing unit, the first register operable to receive a function address, wherein the function address is usable by the control circuit to generate a protection code; and
a second register coupleable to the central processing unit, the second register operable to receive an address of a protection code.
20. The stack overflow monitoring circuit according to claim 17, comprising:
a random or pseudo-random number generator, the random or pseudo-random number generator operable during generation of the protection codes.
US13/543,673 2011-07-08 2012-07-06 Microprocessor protected against stack overflow Abandoned US20130013965A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US15/847,827 US11113384B2 (en) 2011-07-08 2017-12-19 Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR11/56210 2011-07-08
FR1156210A FR2977694A1 (en) 2011-07-08 2011-07-08 MICROPROCESSOR PROTECTS AGAINST A BATTERY OVERFLOW

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US15/847,827 Continuation US11113384B2 (en) 2011-07-08 2017-12-19 Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes

Publications (1)

Publication Number Publication Date
US20130013965A1 true US20130013965A1 (en) 2013-01-10

Family

ID=45047922

Family Applications (2)

Application Number Title Priority Date Filing Date
US13/543,673 Abandoned US20130013965A1 (en) 2011-07-08 2012-07-06 Microprocessor protected against stack overflow
US15/847,827 Active 2033-11-17 US11113384B2 (en) 2011-07-08 2017-12-19 Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes

Family Applications After (1)

Application Number Title Priority Date Filing Date
US15/847,827 Active 2033-11-17 US11113384B2 (en) 2011-07-08 2017-12-19 Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes

Country Status (2)

Country Link
US (2) US20130013965A1 (en)
FR (1) FR2977694A1 (en)

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140359246A1 (en) * 2013-05-30 2014-12-04 Hyundai Motor Company System and method for monitoring memory stack size
US20150220464A1 (en) * 2014-02-04 2015-08-06 Freescale Semiconductor, Inc. Dynamic interrupt stack protection
US20150220328A1 (en) * 2012-08-06 2015-08-06 Inside Secure System for detecting call stack tampering
US20150220446A1 (en) * 2014-02-04 2015-08-06 Netronome Systems, Inc. Transactional memory that is programmable to output an alert if a predetermined memory write occurs
US20160196428A1 (en) * 2014-07-16 2016-07-07 Leviathan, Inc. System and Method for Detecting Stack Pivot Programming Exploit
US9411747B2 (en) 2014-02-04 2016-08-09 Freescale Semiconductor, Inc. Dynamic subroutine stack protection
US9495237B1 (en) 2016-01-06 2016-11-15 International Business Machines Corporation Detection of corruption of call stacks
US9514301B1 (en) 2016-01-06 2016-12-06 International Business Machines Corporation Interlinking modules with differing protections using stack indicators
US9576128B1 (en) * 2016-01-06 2017-02-21 International Business Machines Corporation Interlinking routines with differing protections using stack indicators
US9582274B1 (en) * 2016-01-06 2017-02-28 International Business Machines Corporation Architected store and verify guard word instructions
US9606855B1 (en) * 2016-01-06 2017-03-28 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
US9904485B2 (en) * 2016-03-31 2018-02-27 Intel Corporation Secure memory controller
WO2018058414A1 (en) * 2016-09-29 2018-04-05 Intel Corporation Overflow detection
CN107895115A (en) * 2017-12-04 2018-04-10 北京元心科技有限公司 Method and device for preventing stack overflow and terminal equipment
US20180173559A1 (en) * 2015-07-01 2018-06-21 Hitachi Automotive Systems, Ltd. Electronic Control Device and Stack Usage Method
US10120745B2 (en) * 2016-01-06 2018-11-06 International Business Machines Corporation Providing instructions to protect stack return addresses in a hardware managed stack architecture
US10228992B2 (en) 2016-01-06 2019-03-12 International Business Machines Corporation Providing instructions to facilitate detection of corrupt stacks
US10586038B2 (en) 2017-09-08 2020-03-10 Qualcomm Incorporated Secure stack overflow protection via a hardware write-once register
WO2020055593A1 (en) * 2018-09-11 2020-03-19 Apple Inc. Pointer authentication and dynamic switching between pointer authentication regimes
CN113392395A (en) * 2020-03-13 2021-09-14 华为技术有限公司 Stack protection method and device
US11138012B2 (en) * 2018-03-16 2021-10-05 Texas Instruments Incorporated Processor with hardware supported memory buffer overflow detection
US11157611B2 (en) * 2018-01-02 2021-10-26 Blackberry Limited Binary image stack cookie protection
US20230306110A1 (en) * 2022-03-08 2023-09-28 Denso Corporation Dynamic adaptation of memory elements to prevent malicious attacks
US20230342289A1 (en) * 2022-04-21 2023-10-26 Arm Limited Apparatus and method for managing capabilities

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
CN112463536B (en) * 2020-11-27 2022-08-05 宁波拓普集团股份有限公司 System and method for monitoring illegal tampering of software stack area

Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035380A (en) * 1995-02-14 2000-03-07 Shelton; Christopher D. Integrated circuit
US6202176B1 (en) * 1997-01-15 2001-03-13 Infineon Technologies Ag Method of monitoring the correct execution of software programs
US20020184434A1 (en) * 1999-11-30 2002-12-05 Atsuyoshi Kawaura IC card and management method of nonvolatile memory in IC card
US20030046614A1 (en) * 2001-08-31 2003-03-06 Brokish Charles W. System and method for using embedded real-time analysis components
US20030182572A1 (en) * 2001-12-06 2003-09-25 Cowan Stanley Crispin Pointguard: method and system for protecting programs against pointer corruption attacks
US20030204745A1 (en) * 2002-04-29 2003-10-30 International Business Machines Corporation Method and system for protecting a processing system from a buffer overflow attack
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20040148457A1 (en) * 2002-09-06 2004-07-29 Norihiko Hakushi Semiconductor memory device
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US20050027958A1 (en) * 2003-07-29 2005-02-03 International Business Machines Corporation Copy engine and a method for data movement
US20060161739A1 (en) * 2004-12-16 2006-07-20 International Business Machines Corporation Write protection of subroutine return addresses
EP1708071A1 (en) * 2005-03-31 2006-10-04 Texas Instruments Incorporated Method and system for detection and neutralization of buffer overflow attacks
US20070089088A1 (en) * 2005-10-14 2007-04-19 Microsoft Corporation Dynamically determining a buffer-stack overrun
US20070174622A1 (en) * 2005-04-11 2007-07-26 Stmicroelectronics S.A. Protection of data of a memory associated with a microprocessor
US7380245B1 (en) * 1998-11-23 2008-05-27 Samsung Electronics Co., Ltd. Technique for detecting corruption associated with a stack in a storage device
US20080133858A1 (en) * 2004-11-04 2008-06-05 Board Of Trustees Of Michigan State University Secure Bit
US20080140884A1 (en) * 2006-10-09 2008-06-12 Board Of Trustees Of Michigan State University Canary bit
US20090144309A1 (en) * 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US20100017660A1 (en) * 2008-07-15 2010-01-21 Caterpillar Inc. System and method for protecting memory stacks using a debug unit
US20100088705A1 (en) * 2008-10-08 2010-04-08 International Business Machines Corporation Call Stack Protection

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3552627B2 (en) * 2000-02-04 2004-08-11 インターナショナル・ビジネス・マシーンズ・コーポレーション Stack protection system, computer system, compiler, stack protection method, and storage medium
US7367042B1 (en) * 2000-02-29 2008-04-29 Goldpocket Interactive, Inc. Method and apparatus for hyperlinking in a television broadcast
US7380106B1 (en) * 2003-02-28 2008-05-27 Xilinx, Inc. Method and system for transferring data between a register in a processor and a point-to-point communication link
US7716495B2 (en) * 2003-12-31 2010-05-11 Microsoft Corporation Protection against runtime function attacks

Patent Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035380A (en) * 1995-02-14 2000-03-07 Shelton; Christopher D. Integrated circuit
US6202176B1 (en) * 1997-01-15 2001-03-13 Infineon Technologies Ag Method of monitoring the correct execution of software programs
US7380245B1 (en) * 1998-11-23 2008-05-27 Samsung Electronics Co., Ltd. Technique for detecting corruption associated with a stack in a storage device
US20020184434A1 (en) * 1999-11-30 2002-12-05 Atsuyoshi Kawaura IC card and management method of nonvolatile memory in IC card
US20030046614A1 (en) * 2001-08-31 2003-03-06 Brokish Charles W. System and method for using embedded real-time analysis components
US20030182572A1 (en) * 2001-12-06 2003-09-25 Cowan Stanley Crispin Pointguard: method and system for protecting programs against pointer corruption attacks
US20030204745A1 (en) * 2002-04-29 2003-10-30 International Business Machines Corporation Method and system for protecting a processing system from a buffer overflow attack
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20040148457A1 (en) * 2002-09-06 2004-07-29 Norihiko Hakushi Semiconductor memory device
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US20050027958A1 (en) * 2003-07-29 2005-02-03 International Business Machines Corporation Copy engine and a method for data movement
US20080133858A1 (en) * 2004-11-04 2008-06-05 Board Of Trustees Of Michigan State University Secure Bit
US20060161739A1 (en) * 2004-12-16 2006-07-20 International Business Machines Corporation Write protection of subroutine return addresses
EP1708071A1 (en) * 2005-03-31 2006-10-04 Texas Instruments Incorporated Method and system for detection and neutralization of buffer overflow attacks
US20070174622A1 (en) * 2005-04-11 2007-07-26 Stmicroelectronics S.A. Protection of data of a memory associated with a microprocessor
US20070089088A1 (en) * 2005-10-14 2007-04-19 Microsoft Corporation Dynamically determining a buffer-stack overrun
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US20080140884A1 (en) * 2006-10-09 2008-06-12 Board Of Trustees Of Michigan State University Canary bit
US20090144309A1 (en) * 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US20100017660A1 (en) * 2008-07-15 2010-01-21 Caterpillar Inc. System and method for protecting memory stacks using a debug unit
US20100088705A1 (en) * 2008-10-08 2010-04-08 International Business Machines Corporation Call Stack Protection

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
Andrew S Tannenbaum, Structured Computer Organization, 1984, Prentice-Hall, 2nd edition, 5 pages *
Andrew S Tannenbaum, Structured Computer Organization, 2000, 4th edition, Prentice-Hall, 7 pages *
Chiamwongpaet and Piromsopa, The Implementation of Secure Canary Word for Buffer-Overflow Protection, 2009, IEEE, 978-1-4244-3355-1/09, Pages 1-6; [retrieved from the internet on 11/25/2014], retrieved from URL *
Dave Tarnoff, The Intel 8088 Architecture, 2003, Pages 1-8, [retrieved from the internet on 11/25/2014], retrieved from URL *
Gerardo Richarte, Four different tricks to bypass StackShield and StackGuard protection, Apr 2002, Core Security Technologies, Pages 1-30, [retrieved from the internet on 11/25/2014], retrieved from URL *
paxdiablo, What is a stack pointer used for in microprocessors?, Sep 23 2009, 4 pages, retrieved from the internet on 11/25/2014]; retrieved from URL *
Perry Wagle and Crispin Cowan, StackGuard: Simple Stack Smash Protection for GCC, 2003, GCC Developers Summit, Pages 1-14; [retrieved from the internet on 11/25/2014], retrieved from URL *

Cited By (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150220328A1 (en) * 2012-08-06 2015-08-06 Inside Secure System for detecting call stack tampering
US9268559B2 (en) * 2012-08-06 2016-02-23 Inside Secure System for detecting call stack tampering
US20140359246A1 (en) * 2013-05-30 2014-12-04 Hyundai Motor Company System and method for monitoring memory stack size
US9128630B2 (en) * 2013-05-30 2015-09-08 Hyundai Motor Company System and method for monitoring memory stack size
US20150220464A1 (en) * 2014-02-04 2015-08-06 Freescale Semiconductor, Inc. Dynamic interrupt stack protection
US20150220446A1 (en) * 2014-02-04 2015-08-06 Netronome Systems, Inc. Transactional memory that is programmable to output an alert if a predetermined memory write occurs
US9411747B2 (en) 2014-02-04 2016-08-09 Freescale Semiconductor, Inc. Dynamic subroutine stack protection
US9734326B2 (en) * 2014-02-04 2017-08-15 Nxp Usa, Inc. Dynamic interrupt stack protection
US20160196428A1 (en) * 2014-07-16 2016-07-07 Leviathan, Inc. System and Method for Detecting Stack Pivot Programming Exploit
US9977897B2 (en) * 2014-07-16 2018-05-22 Leviathan Security Group, Inc. System and method for detecting stack pivot programming exploit
US20180173559A1 (en) * 2015-07-01 2018-06-21 Hitachi Automotive Systems, Ltd. Electronic Control Device and Stack Usage Method
US9582274B1 (en) * 2016-01-06 2017-02-28 International Business Machines Corporation Architected store and verify guard word instructions
JP2019506666A (en) * 2016-01-06 2019-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation Stack return address protected by caller in hardware management stack architecture
US20170193224A1 (en) * 2016-01-06 2017-07-06 International Business Machines Corporation Architected store and verify guard word instructions
WO2017118893A1 (en) * 2016-01-06 2017-07-13 International Business Machines Corporation Caller protected stack return address in hardware managed stack architecture
US9576128B1 (en) * 2016-01-06 2017-02-21 International Business Machines Corporation Interlinking routines with differing protections using stack indicators
US9891919B2 (en) 2016-01-06 2018-02-13 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
GB2562666B (en) * 2016-01-06 2021-08-25 Ibm Caller protected stack return address in hardware managed stack architecture
US20180088949A1 (en) * 2016-01-06 2018-03-29 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
US10496462B2 (en) 2016-01-06 2019-12-03 International Business Machines Corporation Providing instructions to facilitate detection of corrupt stacks
US9606855B1 (en) * 2016-01-06 2017-03-28 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
US9940475B2 (en) * 2016-01-06 2018-04-10 Intfrnational Business Machines Corporation Interlinking routines with differing protections using stack indicators
US9514301B1 (en) 2016-01-06 2016-12-06 International Business Machines Corporation Interlinking modules with differing protections using stack indicators
US9495237B1 (en) 2016-01-06 2016-11-15 International Business Machines Corporation Detection of corruption of call stacks
US10114971B2 (en) * 2016-01-06 2018-10-30 International Business Machines Corporation Interlinking routines with differing protections using stack indicators
US10120745B2 (en) * 2016-01-06 2018-11-06 International Business Machines Corporation Providing instructions to protect stack return addresses in a hardware managed stack architecture
GB2562666A (en) * 2016-01-06 2018-11-21 Ibm Caller protected stack return address in hardware managed stack architecture
US10635441B2 (en) 2016-01-06 2020-04-28 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
US10228992B2 (en) 2016-01-06 2019-03-12 International Business Machines Corporation Providing instructions to facilitate detection of corrupt stacks
US10229266B2 (en) * 2016-01-06 2019-03-12 International Business Machines Corporation Architected store and verify guard word instructions
US10248482B2 (en) 2016-01-06 2019-04-02 International Business Machines Corporation Interlinking modules with differing protections using stack indicators
US9904485B2 (en) * 2016-03-31 2018-02-27 Intel Corporation Secure memory controller
WO2018058414A1 (en) * 2016-09-29 2018-04-05 Intel Corporation Overflow detection
US10586038B2 (en) 2017-09-08 2020-03-10 Qualcomm Incorporated Secure stack overflow protection via a hardware write-once register
CN107895115A (en) * 2017-12-04 2018-04-10 北京元心科技有限公司 Method and device for preventing stack overflow and terminal equipment
US11157611B2 (en) * 2018-01-02 2021-10-26 Blackberry Limited Binary image stack cookie protection
US11868465B2 (en) 2018-01-02 2024-01-09 Blackberry Limited Binary image stack cookie protection
US11138012B2 (en) * 2018-03-16 2021-10-05 Texas Instruments Incorporated Processor with hardware supported memory buffer overflow detection
US10891369B2 (en) 2018-09-11 2021-01-12 Apple Inc. Dynamic switching between pointer authentication regimes
US11093601B2 (en) 2018-09-11 2021-08-17 Apple Inc. Dynamic switching between pointer authentication regimes
WO2020055593A1 (en) * 2018-09-11 2020-03-19 Apple Inc. Pointer authentication and dynamic switching between pointer authentication regimes
US11144631B2 (en) 2018-09-11 2021-10-12 Apple Inc. Dynamic switching between pointer authentication regimes
US11748468B2 (en) 2018-09-11 2023-09-05 Apple Inc. Dynamic switching between pointer authentication regimes
CN113392395A (en) * 2020-03-13 2021-09-14 华为技术有限公司 Stack protection method and device
US20230306110A1 (en) * 2022-03-08 2023-09-28 Denso Corporation Dynamic adaptation of memory elements to prevent malicious attacks
US20230342289A1 (en) * 2022-04-21 2023-10-26 Arm Limited Apparatus and method for managing capabilities

Also Published As

Publication number Publication date
FR2977694A1 (en) 2013-01-11
US20180181748A1 (en) 2018-06-28
US11113384B2 (en) 2021-09-07

Similar Documents

Publication Publication Date Title
US11113384B2 (en) Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes
EP3207485B1 (en) Code pointer authentication for hardware flow control
US9805188B2 (en) Control flow integrity system and method
US9092618B2 (en) Method and device for making secure execution of a computer programme
US20070016832A1 (en) System, device and method of verifying that a code is executed by a processor
Liljestrand et al. Protecting the stack with PACed canaries
US11269988B2 (en) Automated software application verification system
US20160171213A1 (en) Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer
US20190370439A1 (en) Secure system on chip for protecting software program from tampering, rehosting and piracy and method for operating the same
US9779242B2 (en) Programmable secure bios mechanism in a trusted computing system
US9798880B2 (en) Fuse-enabled secure bios mechanism with override feature
US9779243B2 (en) Fuse-enabled secure BIOS mechanism in a trusted computing system
CN107209815B (en) Method for code obfuscation using return-oriented programming
EP3316168B1 (en) Fuse-enabled secure bios mechanism in a trusted computing system
US11216561B2 (en) Executing processes in sequence
EP4248340A1 (en) Code flow protection with error propagation
US11144329B2 (en) Processor microcode with embedded jump table
CN114981811A (en) Apparatus and method for software security
US20200174920A1 (en) Method for randomizing address space layout of embedded system based on hardware and apparatus for the same
US9767288B2 (en) JTAG-based secure BIOS mechanism in a trusted computing system
EP3316167B1 (en) Programmable secure bios mechanism in a trusted computing system
KR20100100488A (en) Method for scanning a fabrication or memory and device thereof
US20230418950A1 (en) Methods, Devices, and Systems for Control Flow Integrity
EP3316169B1 (en) Jtag-based secure bios mechanism in a trusted computing system
EP3316170B1 (en) Fuse-enabled secure bios mechanism with override feature

Legal Events

Date Code Title Description
AS Assignment

Owner name: STMICROELECTRONICS (ROUSSET) SAS, FRANCE

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:GUILLEMIN, PIERRE;ORLANDO, WILLIAM;REEL/FRAME:029015/0107

Effective date: 20120827

STCB Information on status: application discontinuation

Free format text: ABANDONED -- AFTER EXAMINER'S ANSWER OR BOARD OF APPEALS DECISION