← All Threat Hunting ReportsThreat Hunting Exercise

Threat Hunting Exercise: Analyzing Windows LSASS Direct Syscall EDR Evasion Dataset

This hunt uses a simulated EDR/kernel-telemetry dataset (win_lsass_directsyscall_2022-11-22T153000.json) capturing T1055 / T1003.001: OS Credential Dumping: LSASS Memory via Direct/Indirect Syscalls, where an attacker tool (e.g., a custom Nighthawk or Cobalt Strike BOF loader) invokes NtOpenProcess/NtReadVirtualMemory directly rather than through the monitored ntdll.dll API, evading user-mode EDR hooks entirely.

Step 1: Hypothesis Formation

Hypothesis: A non-security process obtains a handle to lsass.exe and reads its memory, but EDR user-mode API-hook telemetry shows no corresponding ntdll!NtOpenProcess/ntdll!NtReadVirtualMemory call logged for that process - while kernel-level (ETW-TI or driver-based) telemetry confirms the syscalls did occur - indicating the process used direct or indirect syscalls to bypass user-mode hooking. Indicators:

Null Hypothesis: The LSASS access originates from a legitimate security or diagnostic tool (e.g., the EDR agent itself, a memory-dump utility used for authorized incident response) whose direct-syscall usage is a known, approved behavior. Invalidate by checking the process hash/signature against the approved-security-tooling inventory.

Rationale: Direct/indirect syscall techniques are specifically engineered to defeat the user-mode API hooking that most EDR products rely on for LSASS-access detection, so identifying this technique requires comparing kernel-level ground-truth telemetry (ETW-TI, minifilter/driver events) against user-mode hook telemetry and flagging the discrepancy itself as the indicator.

Step 2: Data Sources and Scope

Step 3: Key Findings

Parsed events (4 shown) confirm svcupd.exe obtained a memory-read handle to lsass.exe via kernel-level telemetry, with a complete absence of the corresponding user-mode API-hook event, and an IAT containing only 3 imported functions.

Timestamp (UTC)HostEventDetailIOC/Why Suspicious?
2022-11-22 15:30:52WKS-SEC-004EDR Kernel/ETW-TIsvcupd.exe (PID 7740) obtained handle to lsass.exe (PID 692), access mask 0x1410 (`PROCESS_VM_READ \PROCESS_QUERY_INFORMATION`)Kernel-Ground-Truth IOC: kernel-level telemetry, which cannot be bypassed by user-mode syscall tricks, confirms the access genuinely occurred.
2022-11-22 15:30:52WKS-SEC-004EDR User-Mode HooksNo NtOpenProcess/NtReadVirtualMemory hook event recorded for PID 7740 at this timestampDetection-Gap IOC: the absence of the expected user-mode hook event, despite confirmed kernel-level access, is the specific signature of direct/indirect syscall usage bypassing EDR hooks.
2022-11-22 15:30:40WKS-SEC-004(Static/IAT analysis)svcupd.exe Import Address Table contains only LoadLibraryA, GetProcAddress, VirtualAllocSyscall-Stub IOC: an unusually minimal IAT is characteristic of loaders that resolve and invoke syscalls directly (via hand-crafted stubs or the Sysllwhispers/Hell's Gate technique) rather than calling documented Windows APIs.
--(Tool-inventory check)svcupd.exe hash does not match any entry in the approved EDR-agent or IR-tooling inventory; file is unsignedConfirms this is not a sanctioned security or diagnostic tool.

Validation:

Step 4: Recommendations & Next Steps

Hypothesis confirmed - an unsigned loader with a minimal syscall-stub import table accessed LSASS memory using direct syscalls, successfully evading the EDR's user-mode API hooks while still being caught by kernel-level ETW-TI telemetry!