Fundamentals

Indicators: IoC, IoA, and TTP

A practical guide to IoCs (Indicators of Compromise), IoAs (Indicators of Attack), and TTPs (Tactics, Techniques, Procedures) — the Pyramid of Pain, how each type is used in detection, operationalization priorities, and how to move up the pyramid.

View on Graph

What IoCs, IoAs, and TTPs Are

  • Indicators of Compromise (IoCs) are forensic artifacts that suggest a system has been compromised — file hashes, IP addresses, domain names, registry keys, filenames, mutex names. They are the most common indicator type but also the easiest for attackers to change.
  • Indicators of Attack (IoAs) are behavioral patterns observed during an attack — a process injecting into another process, a beaconing pattern in network traffic, an anomalous privilege escalation. IoAs detect the attack while it is happening rather than after the fact.
  • Tactics, Techniques, and Procedures (TTPs) are the adversary’s operational methods mapped to frameworks like MITRE ATT&CK. Detecting TTPs means recognizing the behavior itself — “someone is performing credential dumping via T1003” — rather than looking for specific artifacts.

The Pyramid of Pain

The Pyramid of Pain, developed by David Bianco, maps indicator types from easiest for the attacker to change (bottom) to hardest (top):

LevelIndicator TypeCost to AttackerExamples
6 — TTPsTactics, Techniques, ProceduresVery painful — must change their entire approachProcess injection (T1055), Credential dumping (T1003)
5 — ToolsAdversary toolingPainful — must develop new toolsCobalt Strike, Mimikatz, BloodHound
4 — Network ArtifactsNetwork-level patternsUncomfortable — must change C2 infrastructure patternsJA3 fingerprints, URI patterns, C2 protocol variations
3 — Host ArtifactsHost-level tracesAnnoying — must change file/registry patternsSpecific registry keys, file paths, mutex names
2 — Domain NamesDNS artifactsSimple — spin up new domainsC2 domain names, phishing URLs
1 — IP AddressesNetwork addressesEasy — change IPC2 server IPs
0 — Hash ValuesFile hashesTrivial — recompile with a single byte changeSHA256 of malware samples

The principle: As you move up the pyramid, the defender gains more leverage. A hash blocklist (level 0) costs the attacker seconds to bypass. A TTP detection rule (level 6) forces the attacker to fundamentally change their approach.


IoCs — Indicators of Compromise

IoCs are the most widely used detection artifacts. They answer the question: “Has this exact artifact been seen in my environment?”

Types of IoCs

IoC TypeExamplePersistenceEvasion Difficulty
File hash (SHA256)e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Hash never changes for the same fileTrivial — add NOP slide, recompile
IP address185.220.101.45May change hourly with C2 rotationEasy — botnet rotates IPs
Domain nameevil-c2.example.comDays to weeksEasy — new domain registration
URL/pathhttp://evil.com/payload.exeMay change per campaignEasy — change filename
Registry keyHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MalwarePersists until cleanedModerate — must install to registry
Mutex nameGlobal\MSCTF.Asm.SystemUnique per variantModerate — obfuscated by some malware
Certificate serial04:DE:AD:BE:EF:CA:FE:00Per signed binaryHard — requires new code signing cert

IoC Limitations

  • Short shelf life: Most IPs and domains have a lifespan of hours to days
  • Reactive: You already had to be compromised to collect the indicator
  • False sense of coverage: Blocking 10,000 hash values gives little protection against polymorphic malware
  • Volume: Good threat intel feeds produce 100K+ indicators — alert fatigue is real

IoAs — Indicators of Attack

IoAs shift from “what is this artifact” to “what is this behavior doing.” They detect attacks in progress rather than artifacts left behind.

IoA Categories

CategoryWhat It DetectsExample
Process injectionOne process injecting code into anotherCreateRemoteThread to explorer.exe
Privilege escalationUnauthorized elevation of privilegesToken manipulation, UAC bypass
Credential dumpingAccessing LSASS process memoryMiniDumpWriteDump on lsass.exe
Persistence establishmentMalware maintaining foothold across rebootsNew service, Run key, scheduled task
Lateral movementRemote service creation or admin share accessPsExec, WMI, WinRM
Data stagingCollection of sensitive files before exfiltrationAccessing finance documents from non-finance user
C2 beaconingRegular network check-insConsistent 60-second intervals to single IP
DiscoveryReconnaissance of the environmentnet user /domain, whoami /all, dsquery

IoA vs IoC — The Key Difference

DimensionIoCIoA
Detection timingPost-compromise (artifact left behind)During-compromise (behavior in progress)
Attacker evasionTrivial (change hash)Difficult (must change technique)
False positive rateLow (exact match)Moderate (behavioral matching)
Investigation depthSimple — block the indicatorComplex — requires understanding the technique
ExamplesC:\Windows\Temp\svchost.exe existsProcess named svchost.exe is making outbound HTTP connections

SPL — IoA detection for LSASS access (credential dumping):

index=windows sourcetype=WinEventLog:Sysmon EventCode=10
| search TargetImage="*lsass.exe" GrantedAccess="0x1010" OR GrantedAccess="0x1410"
| stats count, values(SourceImage) as SourceProcesses by TargetImage, Computer
| where count > 0
| eval alert = "CREDENTIAL THEFT IoA — " . SourceProcesses . " accessed lsass.exe with suspicious access mask on " . Computer
| table _time, Computer, SourceProcesses, count, alert

TTPs — Tactics, Techniques, and Procedures

TTPs describe how an adversary operates. Detecting at the TTP level means recognizing the attacker’s playbook, not just their tools or artifacts.

MITRE ATT&CK Framework

Tactic (Why)Technique (How)Procedure (Specific Implementation)
TA0006 Credential AccessT1003.001 LSASS MemoryMimikatz sekurlsa::logonpasswords
TA0005 Defense EvasionT1055.012 Process HollowingReplace svchost.exe process memory with shellcode
TA0008 Lateral MovementT1021.002 SMB/Admin Sharesnet use \\target\ADMIN$ /user:Domain\Admin Pass123 and drop payload
TA0011 Command and ControlT1071.001 Web ProtocolsHTTP beacon every 60s with cookies containing encrypted data

How to Detect at the TTP Level

ATT&CK TechniqueBehavioral DetectionTool
T1003.001 LSASS MemoryProcess opening a handle to LSASS with PROCESS_VM_READSysmon Event ID 10
T1055.001 DLL InjectionProcess calls CreateRemoteThread to inject a DLLSysmon Event ID 8
T1059.001 PowerShellPowerShell creating a runspace with -EncodedCommandPowerShell logging (ScriptBlock logging)
T1071.001 Web ProtocolsBeacon timing pattern in netflow dataRITA, Zeek, SIEM correlation
T1021.002 SMB Lateral MovementEvent ID 5140 (file share access) from non-file server to ADMIN$Windows Security log
T1562.001 Disable AVStopping or disabling Windows DefenderEvent ID 5000, 5001 (Defender state change)

Operationalizing — Moving Up the Pyramid

Current State Assessment

Detection LevelTypical MaturityEffort to Implement
Hash blocklistsEvery SOC has themLow
IP/domain blocklistsMost SOCs have themLow
Host artifact rulesMature SOCsMedium
Network artifact rulesMature SOCsMedium
Tool-behavioral detectionAdvanced SOCsHigh
TTP-level detectionAdvanced SOCs + Purple TeamHigh

Practical Steps to Move Up

From (Level)To (Level)How
Hash blocklist → Host artifactCreate YARA rules that detect malware characteristics (sections, strings, structure) rather than exact hashes
IP blocklist → Network artifactWrite Snort/Suricata rules based on C2 protocol behavior (packet size, timing, TCP flags)
Single IoC → Contextual IoACorrelate multiple data sources — file creation + network connection + registry change in the same process tree
IoA → TTPMap behavioral detections to MITRE ATT&CK techniques. Write rules that say “if this technique pattern fires, it’s likely APT group X”
Tool-specific → Generic TTPInstead of “detect Mimikatz” write “detect any process reading LSASS memory”

SPL — TTP Detection for Credential Dumping (Generic)

index=windows sourcetype=WinEventLog:Sysmon
| search EventCode=10 TargetImage="*lsass.exe"
| lookup suspicious_access_masks.csv GrantedAccess OUTPUT label
| search label != ""
| eval alert = "TTP DETECTION (T1003.001): " . SourceImage . " accessed lsass.exe — possible credential dumping"
| table _time, Computer, SourceImage, TargetImage, GrantedAccess, label, alert
| sort 0 _time

Sources