T1553.006 CrowdStrike LogScale · LogScale

Detect Code Signing Policy Modification in CrowdStrike LogScale

Adversaries may modify code signing policies to enable execution of unsigned or self-signed code. On Windows, this includes enabling TESTSIGNING boot mode via bcdedit.exe, disabling Driver Signature Enforcement (DSE) by modifying the g_CiOptions kernel variable (typically via a BYOVD exploit), or changing registry keys that control signed DLL enforcement such as RequireSignedAppInit_DLLs. On macOS, adversaries disable System Integrity Protection (SIP) using csrutil disable from Recovery Mode. Threat actors including APT39, BlackEnergy, Hikit, Pandora, and Turla have used these techniques to load unsigned rootkit drivers and persist with kernel-level access.

MITRE ATT&CK

Tactic
Defense Evasion
Technique
T1553 Subvert Trust Controls
Sub-technique
T1553.006 Code Signing Policy Modification
Canonical reference
https://attack.mitre.org/techniques/T1553/006/

LogScale Detection Query

CrowdStrike LogScale (LogScale)
cql
// T1553.006 — Code Signing Policy Modification
// Branch 1: bcdedit enabling test signing or disabling integrity checks
#event_simpleName = "ProcessRollup2"
| ImageFileName = /(?i)\\bcdedit\.exe$/
| CommandLine = /(?i)(testsigning|nointegritychecks|bootdebug|loadoptions\s+safeboot)/
| severity := case(
    CommandLine = /(?i)nointegritychecks.{0,30}\bon\b/ => "critical",
    CommandLine = /(?i)testsigning.{0,30}\bon\b/ => "high",
    CommandLine = /(?i)bootdebug.{0,30}\bon\b/ => "high",
    * => "medium"
  )
| detection_type := "BCD_Policy_Modification"
| signing_context := case(
    CommandLine = /(?i)testsigning.{0,30}\bon\b/ => "TESTSIGNING enabled: unsigned kernel drivers can load",
    CommandLine = /(?i)nointegritychecks.{0,30}\bon\b/ => "nointegritychecks enabled: DSE fully bypassed",
    CommandLine = /(?i)bootdebug.{0,30}\bon\b/ => "Boot debug mode enabled",
    * => "Suspicious BCD policy argument detected"
  )
| table([_time, ComputerName, UserName, ImageFileName, CommandLine, ParentImageFileName, ParentCommandLine, detection_type, signing_context, severity])

// Branch 2: Registry modifications disabling code integrity controls (requires RegValueSet events)
// Run separately or union:
// #event_simpleName = "RegValueSet"
// | RegObjectName = /(?i)(RequireSignedAppInit_DLLs|LoadAppInit_DLLs|HypervisorEnforcedCodeIntegrity|EnableVirtualizationBasedSecurity|RequirePlatformSecurityFeatures|\\Control\\CI\\|\\Control\\CodeIntegrity)/
// | RegValueData in ("0", "0x00000000", "00000000")
// | detection_type := "Registry_CISigning_Modification"
// | severity := case(
//     RegObjectName = /(?i)HypervisorEnforcedCodeIntegrity/ => "critical",
//     RegObjectName = /(?i)RequireSignedAppInit_DLLs/ => "high",
//     RegObjectName = /(?i)EnableVirtualizationBasedSecurity/ => "high",
//     * => "medium"
//   )
// | table([_time, ComputerName, UserName, RegObjectName, RegValueData, detection_type, severity])

// Combined query using groupBy for alert aggregation
#event_simpleName = "ProcessRollup2"
| ImageFileName = /(?i)\\bcdedit\.exe$/
| CommandLine = /(?i)(testsigning|nointegritychecks|bootdebug)/
| groupBy([ComputerName, UserName, CommandLine], function=[count(as=event_count), min(_time, as=first_seen), max(_time, as=last_seen), collect([ImageFileName, ParentImageFileName, ParentCommandLine])])
| sort(last_seen, order=desc)
critical severity high confidence

CrowdStrike LogScale (Falcon) CQL detection for T1553.006 using ProcessRollup2 events to identify bcdedit.exe invocations with arguments that enable TESTSIGNING mode, disable integrity checks (nointegritychecks), or enable boot debug. A commented-out branch covers RegValueSet events targeting DeviceGuard/HVCI/RequireSignedAppInit_DLLs/CI registry paths with zero-value writes. The combined aggregation query groups by host and command line to surface repeated or scripted execution patterns. Severity computed inline using CASE expressions on command-line argument context.

Data Sources

CrowdStrike Falcon Endpoint ProtectionFalcon ProcessRollup2 telemetryFalcon RegValueSet telemetry (requires registry monitoring enabled)CrowdStrike LogScale (Humio)

Required Tables

ProcessRollup2RegValueSet

False Positives & Tuning

  • Windows kernel driver developers on exception-listed developer machines who regularly invoke bcdedit with TESTSIGNING as part of approved local driver test workflows — these hosts should be tagged with a suppression label in Falcon
  • System recovery scenarios where IT support staff run bcdedit to repair a corrupted BCD store or re-enable boot entries on systems that failed to start after a Windows Update
  • Automated build pipeline agents (e.g., Azure DevOps build agents, Jenkins nodes) that run hardware-in-the-loop driver certification tests requiring temporary TESTSIGNING mode on isolated VMs
Download portable Sigma rule (.yml)

Other platforms for T1553.006


Testing Methodology

Validate this detection against 5 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Enable TESTSIGNING Boot Mode via bcdedit

    Expected signal: Sysmon Event ID 1: Process Create with Image=C:\Windows\System32\bcdedit.exe, CommandLine='bcdedit /set testsigning on'. Security Event ID 4688 (with process command line auditing enabled) with same details. Note: no additional event is generated when TESTSIGNING takes effect at next reboot — the bcdedit process event is the only log entry.

  2. Test 2Disable Driver Signature Enforcement via nointegritychecks

    Expected signal: Sysmon Event ID 1: Process Create with Image=bcdedit.exe and CommandLine containing 'nointegritychecks on'. Security Event ID 4688 if process command line auditing is enabled. Microsoft-Windows-Kernel-Boot/Operational Event ID 16 will show the changed boot configuration at next boot cycle.

  3. Test 3Disable RequireSignedAppInit_DLLs via Registry

    Expected signal: Sysmon Event ID 13: Registry Value Set with TargetObject='HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\RequireSignedAppInit_DLLs', Details='DWORD (0x00000000)'. Sysmon Event ID 1: Process Create for reg.exe with full command line. Security Event ID 4657 if object access auditing is configured for registry keys.

  4. Test 4Disable Hypervisor-Protected Code Integrity (HVCI) via Registry

    Expected signal: Sysmon Event ID 13: Registry Value Set with TargetObject containing 'DeviceGuard\HypervisorEnforcedCodeIntegrity', Details='DWORD (0x00000000)'. Sysmon Event ID 1 for reg.exe process. Security Event ID 4657 (if object access auditing enabled). At next reboot: Windows Event Log Microsoft-Windows-DeviceGuard/Operational will show HVCI enforcement status change.

  5. Test 5macOS System Integrity Protection Status Check and Disable Simulation

    Expected signal: macOS Unified Log (ULS): process execution of csrutil with 'disable' argument. EDR telemetry (if macOS endpoint agent deployed): process creation event for /usr/bin/csrutil with arguments 'disable'. The command will fail with 'csrutil: failed to modify system integrity configuration. This tool needs to be executed from Recovery OS.' which itself is a detectable signal.

Unlock Pro Content

Get the full detection package for T1553.006 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections