CPU Opcode Randomization for Remote Code Execution Protection

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current technologies are ineffective in preventing remote code execution attacks, which allow malicious actors to gain full control over computing devices, especially in IoT and autonomous systems, due to vulnerabilities that exploit buffer overflows and lack of separation between data and instructions in modern processors, leading to delayed software updates and incomplete protection mechanisms.

Innovation Solution

Enhancing the CPU with protected memory and cryptographic key storage, and implementing a method where each process has a unique randomized set of CPU opcodes, making it difficult for attackers to execute malicious code by requiring reconstruction of opcode sets, and using a secure co-processor for encrypted code execution.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If software updates are used to fix vulnerabilities, then security is improved, but response time deteriorates due to the lengthy process of identifying, analyzing, programming, testing, and releasing updates

Engineering Contradiction:
ImprovesecurityVSAvoidresponse time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent implements a preliminary action by pre-compiling vulnerable code sequences into safe alternative sequences before the vulnerability is exploited. The system proactively identifies vulnerable patterns in code and prepares compensating code sequences in advance, so when a vulnerability is detected during execution, the pre-prepared safe sequence can be immediately applied without requiring time-consuming software updates.

Inventive Principle:
Principle #10Preliminary action

2Reliability

If memory pages are randomized to increase entropy, then security against code location is improved, but attackers can still exploit vulnerabilities by leaking data and code locations

Engineering Contradiction:
ImprovesecurityVSAvoidexploitability
Core Design Contradiction:
ReliabilityVSObject-affected harmful factors

Solution Approach 1:

The patent applies parameter changes by dynamically modifying the operational parameters of code sequences through runtime code compilation. Instead of relying solely on static memory randomization, the system changes the execution parameters by compiling vulnerable code sequences into safe alternatives with different operational characteristics, making it harder for attackers to exploit even if they obtain code location information through leaking.

Inventive Principle:
Principle #35Parameter changes

3Reliability

If executable attributes for memory pages are turned off, then security is improved, but device complexity increases due to additional protection mechanisms

Engineering Contradiction:
ImprovesecurityVSAvoidprotection mechanism complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent replaces mechanical protection systems (such as executable memory attributes and address space randomization) with a software-based compensation mechanism. Instead of relying on hardware-enforced memory protections that increase device complexity, the system uses runtime code compilation to transform vulnerable sequences into safe sequences, achieving security through software logic rather than complex hardware mechanisms.

Inventive Principle:
Principle #28Mechanics substitution (Replace mechanical system)

Data Source

PatentUS11361070B1Protecting devices from remote code execution attacks
Publication Date: 2022.06.14 RABINOVICH ILYA
  • US11361070B1 patent drawing
  • US11361070B1 patent drawing
  • US11361070B1 patent drawing

AI summary

Method for secure execution of code, including (a) on a CPU, where opcodes for the same executable instructions differ from one memory page to another, depending on memory tag, loading original static instructions from executable module <0> into non-tagged executable memory pages; (b) beginning execution of original static instructions of process <0>; (c) invoking a CPU instruction to start process , where i=1 initially, in process <0>, to create a new memory tag , its set of randomized opcodes and to return memory tag and new randomized set of opcodes to process <0>; (d) loading executable module for process in process <0>, and transforming executable code using new randomized opcodes from step (c); (e) in process <0>, allocating tagged memory with tag to process , loading memory with compiled executable code from step (d) into process , and running compiled code from step (d).