Kernel-Mode Security Agent APC Injection for User-Mode Hooking

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Anti-virus software faces challenges in hooking system components due to delays in process loading, especially in 64-bit operating systems, allowing security exploits to evade detection, and existing methods struggle with race conditions and control-flow protection mechanisms.

Innovation Solution

A kernel-mode component of a security agent injects a user-mode component to hook functions of a user-mode process, using asynchronous procedure calls (APCs) to bypass control-flow protection and store instructions in slack space, enabling atomic hooks that modify single machine-word instructions to redirect data to a kernel-mode component.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If anti-virus software operates in user-mode and attempts to hook system components, then it can detect security exploits, but it cannot hook components until processes are loaded, allowing exploits to evade detection

Engineering Contradiction:
Improvedetection capabilityVSAvoidprocess loading delay
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent applies preliminary action by having the kernel-mode component register hooks with the operating system before user-mode processes are loaded. This allows the security agent to intercept function calls immediately when processes start, eliminating the detection gap that exists in traditional user-mode-only approaches. The kernel-mode component prepares the hooking infrastructure in advance, so that as soon as user-mode components are loaded, they are automatically intercepted.

Inventive Principle:
Principle #10Preliminary action

2Reliability

If anti-virus software hooks functions in user-mode processes, then it can monitor system calls, but it encounters race conditions and requires thread suspension techniques

Engineering Contradiction:
Improvemonitoring accuracyVSAvoidhooking mechanism complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent uses an intermediary approach by introducing a kernel-mode component as a mediator between the operating system and user-mode processes. This kernel-mode component handles the complex hooking operations and race condition management, while user-mode components focus on analysis. The kernel-mode intermediary manages the timing and coordination of hooks, eliminating the need for complex thread suspension techniques in user-mode and simplifying the overall hooking mechanism.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Adaptability or versatility

If anti-virus software attempts to hook 64-bit system components in 32-bit application processes, then it can provide comprehensive security, but advances in operating systems hinder the ability to hook such functions

Engineering Contradiction:
Improvemulti-architecture supportVSAvoidhooking implementation difficulty
Core Design Contradiction:
Adaptability or versatilityVSEase of manufacture

Solution Approach 1:

The patent applies segmentation by separating the security agent into distinct kernel-mode and user-mode components, each with specific responsibilities. The kernel-mode component handles the complex task of hooking multi-architecture functions and managing race conditions, while user-mode components handle analysis and detection. This segmentation allows the system to support both 32-bit and 64-bit components without requiring complex cross-architecture hooking logic in a single mode.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The kernel-mode component serves as an intermediary that bridges the gap between different architecture modes. It can hook 64-bit system components even when running 32-bit applications, and vice versa, by managing the mode transitions and function intercepts at the kernel level. This intermediary approach eliminates the need for complex cross-architecture compatibility code in user-mode.

Inventive Principle:
Principle #24Intermediary (Mediator)

4Reliability

If security exploits insert themselves into processes after loading, then they can harden against detection, but this creates an opportunity for exploitation

Engineering Contradiction:
Improvedetection effectivenessVSAvoidexploit evasion capability
Core Design Contradiction:
ReliabilityVSObject-affected harmful factors

Solution Approach 1:

The patent applies preliminary action by establishing kernel-mode hooks before user-mode processes are loaded and before any exploit code can execute. This timing advantage ensures that all function calls, including those injected by exploits, are intercepted and analyzed. The security agent is positioned in the system beforehand to detect malicious activity from the moment it begins, eliminating the window of opportunity for exploits to evade detection.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentEP3223185B1System and method dynamic code patching techniques from user-mode process address space
Publication Date: 2019.10.09 CROWDSTRIKE
  • EP3223185B1 patent drawingFigure 1
  • EP3223185B1 patent drawingFigure 2
  • EP3223185B1 patent drawingFigure 3

AI summary

Techniques are described herein for loading a user-mode component of a security agent based on an asynchronous procedure call (APC) built by a kernel-mode component of the security agent. The APC is executed while a process loads, causing the process to load the user-mode component. The user-mode component then identifies slack space of the process, stores instructions in the slack space, and hooks function(s) of the process, including modifying instruction(s) of the function(s) to call the instructions stored in the slack space. When those modified instruction(s) call the stored instructions, the stored instructions invoke the user-mode component, which receives data from the hooked function(s). Also, the security agent may bypass a control-flow protection mechanism of the operating system by setting a pointer of the control-flow protection mechanism to point to an alternate verification function.