A structured playbook for detecting, containing, and recovering from supply chain attacks — including software dependency compromises, third-party vendor breaches, and CI/CD pipeline attacks.
Supply chain attacks are categorized under MITRE ATT&CK T1195 (Supply Chain Compromise), with sub-techniques for software (T1195.002), hardware (T1195.003), and code repositories (T1195.001)
This playbook covers three common supply chain scenarios: software dependency compromise, third-party vendor/data breach, and CI/CD pipeline backdoor
Supply chain incidents require a different response than direct breaches because the attacker’s initial access point is outside your control — you are detecting the downstream effect
Supply Chain Attack Types
Type
Attack Vector
Detection Challenge
Software dependency
Malicious package in npm, PyPI, Maven, or NuGet
Dependency scanning may not detect compromised packages
Vendor compromise
Attacker gains access through a trusted vendor/VPN/MSP
Traffic from the vendor looks legitimate (trusted IP, valid VPN)
CI/CD pipeline
Attacker backdoors the build pipeline to inject malicious code
The code passes all automated checks because it comes from the build system
Hardware/firmware
Compromised hardware or firmware at manufacturing
Extremely difficult to detect — no software signature
Phase 0: Determine the Supply Chain Attack Type (0-15 minutes)
Software Dependency Compromise Indicators
Indicator
Where to Check
What It Means
Unexpected network connections from build processes
A dependency was swapped or added without a corresponding PR review
Anomalous code in build artifact
SAST, code review — unexpected code in the compiled output
The dependency injected code during the build
CVE for a direct or transitive dependency
Dependency scanning (Snyk, Dependabot, Trivy)
Known-vulnerable dependency — may already be exploited
Unexpected file writes during build
Build system logs — artifacts writing to unexpected paths
Malicious package modifying the build environment
SPL query — detect anomalous network connections from build servers:
index=endpoints EventCode=3| search ComputerName IN ("build-server*", "jenkins*", "gitlab-runner*")| stats values(DestinationIp) as DstIPs, values(DestinationPort) as DstPorts by ComputerName, SourceIp| where mvcount(DstIPs) > 3 AND NOT DstIPs IN (known_build_registry_ips)| eval alert = "HIGH — build server " . ComputerName . " connected to " . mvjoin(DstIPs, ",") . " outside known registries"
Vendor Compromise Indicators
Indicator
Where to Check
What It Means
Suspicious activity from vendor VPN
VPN logs — vendor connects at unusual times, from unusual IPs
Vendor credentials compromised
Anomalous vendor access to sensitive data
File audit, cloud logs — vendor accessing data outside their scope
Lateral movement within the vendor’s network
Vendor support ticket escalation
Ticketing system — vendor requesting privileges outside their scope
Social engineering via support channel
Unexpected vendor software update
Change management — vendor pushing an “emergency” patch
Attacker using vendor update mechanism as delivery vector
Zero-day in vendor product
CVE database, vendor advisory
The vendor’s software itself is compromised
SIEM detection — vendor VPN anomalous access:
index=vpn VendorName="*" AND ConnectionType="VPN"| eval is_off_hours = if(date_wday == 0 OR date_wday == 6 OR (date_hour < 6 OR date_hour > 18), 1, 0)| stats count by VendorName, AccountName, is_off_hours, SourceIP| where is_off_hours == 1 AND SourceIP NOT IN (known_vendor_ips)| eval alert = "MEDIUM — vendor " . VendorName . " account " . AccountName . " connected from new IP " . SourceIP . " during off-hours"| table _time, VendorName, AccountName, SourceIP, alert
CI/CD Pipeline Compromise Indicators
Indicator
Where to Check
What It Means
Build process modification without PR
CI/CD audit logs — pipeline config changed without code review