T1195.002 CrowdStrike LogScale · LogScale

Detect Compromise Software Supply Chain in CrowdStrike LogScale

Adversaries may manipulate application software prior to receipt by a final consumer for the purpose of data or system compromise. Supply chain compromise of software can take place in a number of ways, including manipulation of the application source code, manipulation of the update/distribution mechanism for that software, or replacing compiled releases with a modified version. Real-world examples include SUNSPOT injecting SUNBURST into SolarWinds Orion builds, CCBkdr backdooring CCleaner 5.33, and Sandworm replacing M.E.Doc updates with NotPetya. Detection focuses on post-installation behavioral anomalies: legitimate software exhibiting unexpected child process execution, unusual outbound connectivity, suspicious DLL loading, and credential access patterns that should never originate from trusted update mechanisms.

MITRE ATT&CK

Tactic
Initial Access
Technique
T1195 Supply Chain Compromise
Sub-technique
T1195.002 Compromise Software Supply Chain
Canonical reference
https://attack.mitre.org/techniques/T1195/002/

LogScale Detection Query

CrowdStrike LogScale (LogScale)
cql
// Branch 1: Installer/updater spawning suspicious child processes
#event_simpleName=ProcessRollup2
| ParentBaseFileName = /(?i)^(msiexec|setup|install|installer|update|updater|autoupdate|softwareupdate|uninst|uninstall|patch|patchinstall)\.exe$/
| FileName = /(?i)^(powershell|pwsh|cmd|wscript|cscript|mshta|regsvr32|rundll32|certutil|bitsadmin|wmic|msbuild|installutil|regasm|cmstp|control)\.exe$/
| DetectionType := "Installer_Spawned_Suspicious_Child"
| SuspicionScore := 2
| CommandLineHasEncoding := if(CommandLine = /(?i)(-encodedcommand|-enc\s|-e\s|-ec\s|base64)/, "true", "false")
| SuspicionScore := if(CommandLineHasEncoding = "true", SuspicionScore + 2, SuspicionScore)
| select([timestamp, ComputerName, UserName, DetectionType, SuspicionScore, ParentBaseFileName, FileName, CommandLine, ParentCommandLine, SHA256HashData])
| sort(timestamp, order=desc)

// Branch 2: Build tool spawning suspicious child processes (SUNSPOT-style)
#event_simpleName=ProcessRollup2
| ParentBaseFileName = /(?i)^(msbuild|devenv|cl|link|csc|vbc|dotnet)\.exe$/
| FileName = /(?i)^(powershell|pwsh|cmd|wscript|cscript|mshta|regsvr32|rundll32|certutil|bitsadmin|wmic|installutil|regasm|cmstp)\.exe$/
| CommandLine != /(?i)(--help|-help|\/\?)/
| DetectionType := "BuildTool_Spawned_Suspicious_Process"
| SuspicionScore := 3
| SuspicionScore := if(CommandLine = /(?i)(-encodedcommand|-enc\s|base64)/, SuspicionScore + 2, SuspicionScore)
| select([timestamp, ComputerName, UserName, DetectionType, SuspicionScore, ParentBaseFileName, FileName, CommandLine, SHA256HashData])
| sort(timestamp, order=desc)

// Branch 3: Updater dropping executable in temp directory
#event_simpleName=AsepValueUpdate OR #event_simpleName=PeFileWritten
| ContextBaseFileName = /(?i)^(msiexec|setup|install|installer|update|updater|autoupdate|softwareupdate|uninst|uninstall|patch|patchinstall)\.exe$/
| TargetFileName = /(?i)(\\Temp\\|\\AppData\\Local\\Temp\\|\\Windows\\Temp\\)/
| TargetFileName = /(?i)\.(exe|dll|ps1|bat|vbs|js)$/
| DetectionType := "Updater_Dropped_Executable_In_Temp"
| SuspicionScore := 3
| select([timestamp, ComputerName, DetectionType, SuspicionScore, ContextBaseFileName, TargetFileName, SHA256HashData])
| sort(timestamp, order=desc)

// Branch 4: Installer process making outbound connection on non-standard port to public IP
#event_simpleName=NetworkConnectIP4
| ImageFileName = /(?i)(msiexec|setup|install|installer|update|updater|autoupdate|softwareupdate|uninst|uninstall|patch|patchinstall)\.exe$/
| RemotePort != 80
| RemotePort != 443
| RemotePort != 8080
| RemotePort != 8443
| RemoteAddressIP4 != /^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)/
| DetectionType := "Updater_Nonstandard_Port_Outbound"
| SuspicionScore := 2
| groupBy([ComputerName, ImageFileName, RemoteAddressIP4, RemotePort, DetectionType], function=count(as=EventCount))
| EventCount >= 1
| sort(ComputerName, order=asc)
critical severity high confidence

Four CrowdStrike Falcon LogScale (CQL) queries detecting T1195.002 supply chain compromise behavioral indicators using Falcon sensor telemetry: (1) installer/updater processes spawning suspicious LOLBin children with encoded command detection, (2) build tool processes spawning unexpected shells (SUNSPOT/SUNBURST-style), (3) update processes writing PE files or scripts to Windows temp directories, and (4) installer processes making outbound connections to public IPs on non-standard ports. Run as separate saved searches or union in a dashboard.

Data Sources

CrowdStrike Falcon EDRCrowdStrike Falcon PlatformFalcon Sensor Telemetry

Required Tables

ProcessRollup2NetworkConnectIP4PeFileWrittenAsepValueUpdate

False Positives & Tuning

  • CrowdStrike Falcon sensor updates or other endpoint security product updates that use updater.exe processes and may make outbound connections on non-standard ports to vendor update infrastructure — add known EDR update process hashes to an exclusion list
  • Package managers and developer tooling (npm, pip, cargo, go modules) invoked during CI pipeline execution on developer or build endpoints where dotnet.exe or msbuild.exe legitimately shells out for dependency resolution
  • Custom LOB application updaters in enterprise environments that write DLLs or EXEs to temp directories as part of a staged update process before moving files to their final install path — validate against software deployment change records
Download portable Sigma rule (.yml)

Other platforms for T1195.002


Testing Methodology

Validate this detection against 4 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 1Simulate Backdoored Installer Spawning PowerShell (Post-Install C2 Simulation)

    Expected signal: Sysmon Event ID 1: Process Create with ParentImage=msiexec.exe, Image=powershell.exe, CommandLine containing '-WindowStyle Hidden' and 'Invoke-WebRequest'. Sysmon Event ID 3: Network Connection attempt from powershell.exe to 127.0.0.1:9999 (connection refused is acceptable). Security Event ID 4688 if command line auditing is enabled.

  2. Test 2Simulate Build Tool Spawning Unexpected Shell (SUNSPOT-Style Build Injection)

    Expected signal: Sysmon Event ID 1: Process Create with ParentImage=msbuild.exe (or cmd.exe spawned from the test fallback), Image=cmd.exe, CommandLine containing 'whoami'. Security Event ID 4688 with NewProcessName=cmd.exe, CreatorProcessName=msbuild.exe. File creation event for the output file in %TEMP%.

  3. Test 3Simulate Supply Chain Malware Dropping Executable in Temp During Install

    Expected signal: Sysmon Event ID 11: File Create with TargetFilename=%TEMP%\payload_stage2.exe, Image=powershell.exe. Sysmon Event ID 1: PowerShell spawning (parent chain visible). The file copy of calc.exe will have a known benign SHA256 but the file path in Temp will be flagged.

  4. Test 4Verify Code Signing Certificate on Installed Binary (Supply Chain Investigation Validation)

    Expected signal: Sysmon Event ID 1: PowerShell process spawned. No file modification events. The command performs read-only certificate inspection. PowerShell ScriptBlock Log Event ID 4104 captures the script content. This is purely a verification/investigation command.

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections