T1195.002 Splunk · SPL

Detect Compromise Software Supply Chain in Splunk

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/

SPL Detection Query

Splunk (SPL)
spl
index=wineventlog (sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" OR sourcetype="WinEventLog:Security")
(EventCode=1 OR EventCode=3 OR EventCode=11 OR EventCode=4688)
| eval ParentProcess=lower(coalesce(ParentImage, InitiatingProcessFileName, ""))
| eval ChildProcess=lower(coalesce(Image, NewProcessName, ""))
| eval CmdLine=lower(coalesce(CommandLine, ProcessCommandLine, ""))
| eval ParentCmdLine=lower(coalesce(ParentCommandLine, ""))
```
// Normalize process name from full path
| eval ParentProcessName=mvindex(split(ParentProcess, "\\"), -1)
| eval ChildProcessName=mvindex(split(ChildProcess, "\\"), -1)
```
| eval IsInstallerParent=if(match(ParentProcessName, "^(msiexec|setup|install|installer|update|updater|autoupdate|softwareupdate|uninst|uninstall|patch|patchinstall)\.exe$"), 1, 0)
| eval IsSuspiciousChild=if(match(ChildProcessName, "^(powershell|pwsh|cmd|wscript|cscript|mshta|regsvr32|rundll32|certutil|bitsadmin|wmic|msbuild|installutil|regasm|cmstp|control)\.exe$"), 1, 0)
| eval IsBuildToolParent=if(match(ParentProcessName, "^(msbuild|devenv|cl|link|csc|vbc|dotnet)\.exe$"), 1, 0)
| eval DroppedInTemp=if(EventCode=11 AND match(TargetFilename, "(?i)(\\temp\\|\\appdata\\local\\temp\\|\\windows\\temp\\)") AND match(TargetFilename, "(?i)\.(exe|dll|ps1|bat|vbs|js)$") AND IsInstallerParent=1, 1, 0)
| eval EncodedInCmd=if(match(CmdLine, "(-encodedcommand|-enc\s|-e\s|-ec\s|base64)"), 1, 0)
| eval NetworkOnNonstandardPort=if(EventCode=3 AND IsInstallerParent=1 AND NOT match(DestinationPort, "^(80|443|8080|8443)$") AND NOT match(DestinationIp, "^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)"), 1, 0)
| eval DetectionType=case(
    IsInstallerParent=1 AND IsSuspiciousChild=1, "Installer_Spawned_Suspicious_Child",
    IsBuildToolParent=1 AND IsSuspiciousChild=1, "BuildTool_Spawned_Suspicious_Process",
    DroppedInTemp=1, "Updater_Dropped_Executable_In_Temp",
    NetworkOnNonstandardPort=1, "Updater_Nonstandard_Port_Outbound",
    true(), null()
  )
| where isnotnull(DetectionType)
| eval SuspicionScore=IsInstallerParent + IsSuspiciousChild + IsBuildToolParent + DroppedInTemp + EncodedInCmd + NetworkOnNonstandardPort
| table _time, host, User, DetectionType, SuspicionScore, ParentProcessName, ChildProcessName, CmdLine, ParentCmdLine, DestinationIp, DestinationPort, TargetFilename
| sort - _time
high severity medium confidence

Detects supply chain compromise behavioral indicators using Sysmon Event IDs 1 (Process Create), 3 (Network Connection), and 11 (File Create), plus Security Event 4688. Evaluates four detection pillars: installer processes spawning suspicious children, build tools spawning unexpected processes (SUNSPOT-style), installers dropping executables in temp directories, and update processes making non-standard port outbound connections. Assigns a suspicion score to help analysts prioritize alerts with multiple concurrent indicators.

Data Sources

Process: Process CreationNetwork Traffic: Network Connection CreationFile: File CreationSysmon Event ID 1Sysmon Event ID 3Sysmon Event ID 11

Required Sourcetypes

XmlWinEventLog:Microsoft-Windows-Sysmon/OperationalWinEventLog:Security

False Positives & Tuning

  • Legitimate post-install scripts: enterprise software (Oracle, SAP, Adobe) frequently launches PowerShell or cmd.exe from msiexec.exe for environment configuration after installation
  • CI/CD pipelines: MSBuild, devenv, and dotnet regularly invoke PowerShell scripts for post-build steps on developer workstations and build servers
  • Patch management platforms (SCCM, PDQ Deploy, Chocolatey) that orchestrate installs via msiexec and follow up with configuration scripts
  • Software distributed via enterprise tools that stage payloads in %TEMP% before final installation — this is a common pattern for self-extracting archives
  • Legitimate update servers for enterprise software (Symantec, CrowdStrike, Splunk forwarders) that use non-443 ports for update delivery
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