Skip to content

Investigation Guide

This guide provides opinionated best practices for SOC analysts using LimaCharlie Investigations to document and encode security investigations. By following these conventions, you enable attack chain visualization, cross-investigation analysis, and consistent reporting.

Tag Format Specification

Use colon-separated tags to categorize events, detections, and entities within your timeline. This section defines the format patterns - actual values are either format-based (you define them) or fetched dynamically from authoritative sources.

MITRE ATT&CK Tags (Dynamic)

MITRE ATT&CK tags should be validated against the authoritative MITRE STIX data rather than hardcoded lists.

Authoritative Source: https://github.com/mitre-attack/attack-stix-data

Tag Formats:

Format Description Example
phase:{tactic-name} Attack phase aligned with MITRE tactic phase:initial-access
mitre:{technique-id} Specific MITRE ATT&CK technique mitre:T1566

Fetching Valid Values at Runtime:

URL: https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/enterprise-attack/enterprise-attack.json

Parsing:
1. Tactics: Filter objects where type="x-mitre-tactic"
   - Use x_mitre_shortname for phase tag values

2. Techniques: Filter objects where type="attack-pattern"
   - Extract external_references[] where source_name="mitre-attack"
   - Use external_id for mitre: tag values (e.g., T1566)

Operational Tags (Format-Based)

These tags follow a consistent format pattern. You define the values based on your investigation context.

Category Format Description Examples
Timing timing:{marker} Investigation timing markers timing:first-observed, timing:pivot-point, timing:detection-trigger
Confidence confidence:{level} Analyst confidence in findings confidence:high, confidence:medium, confidence:low
Actor actor:{identifier} Threat actor attribution actor:apt-29, actor:ransomware-lockbit, actor:nation-state
Tool tool:{name} Identified attack tools tool:cobalt-strike, tool:mimikatz, tool:psexec
Impact impact:{type} Observed or potential impact impact:data-exfiltration, impact:ransomware, impact:credential-compromise
Scope scope:{extent} Attack scope scope:single-host, scope:subnet, scope:domain-wide
Root Cause root-cause:{cause} Initial access method root-cause:phishing, root-cause:vuln-exploit, root-cause:credential-reuse
Defense Gap gap:{deficiency} Security control failures gap:no-mfa, gap:missing-detection, gap:no-segmentation
Asset asset:{classification} Business asset classification asset:crown-jewels, asset:pci-scope, asset:external-facing
Customer customer:{name} MSSP customer identifier customer:acme-corp

Attack Chain Visualization

Use phase: tags chronologically to visualize attack progression through MITRE ATT&CK tactics:

[phase:initial-access] → [phase:execution] → [phase:persistence] → [phase:credential-access] → [phase:lateral-movement] → [phase:exfiltration]

Timing Markers

Apply timing tags to key events:

Tag When to Apply
timing:first-observed Earliest confirmed malicious activity
timing:pivot-point Critical decision points in the attack chain
timing:detection-trigger Event/detection that initiated the investigation

Example: Attack Chain Tags

{
  "events": [
    {
      "atom": "evt-001",
      "tags": ["phase:initial-access", "mitre:T1566", "timing:first-observed"],
      "relevance": "User opened phishing attachment"
    },
    {
      "atom": "evt-002",
      "tags": ["phase:execution", "mitre:T1059", "timing:pivot-point"],
      "relevance": "Encoded PowerShell executed from macro"
    },
    {
      "atom": "evt-003",
      "tags": ["phase:credential-access", "mitre:T1003", "tool:mimikatz"],
      "relevance": "LSASS memory access detected"
    }
  ]
}

Entity Enrichment Best Practices

IOC Provenance

Document how entities were discovered and validated in the context field:

Pattern: Provenance: [how discovered]. Validation: [how confirmed]. Attribution: [threat intel correlation].

Example:

{
  "type": "ip",
  "value": "203.0.113.50",
  "context": "Provenance: Extracted from C2 beacon traffic. Validation: Cross-referenced with TI feed (58/72 VirusTotal). Attribution: Matches APT29 infrastructure per CISA AA24-001.",
  "verdict": "malicious"
}

Verdict Assignment

Verdict Criteria
malicious Confirmed IOC match, known-bad behavior, validated threat
suspicious Anomalous but not definitively malicious, requires review
benign Cleared by investigation, legitimate activity
unknown Insufficient context, further analysis needed

Entity Context Templates

For IPs:

Provenance: [discovered in which event type]. Geo: [country/ASN]. TI: [threat intel match]. Historical: [seen before in org?].

For Hashes:

Provenance: [file name and path]. AV: [detection ratio]. Sandbox: [behavior summary]. First seen: [date].

For Domains:

Provenance: [DNS query or URL]. Registration: [age, registrar]. TI: [threat intel match]. Resolution: [IP addresses].


Note-Taking Templates

Use structured note types for consistent documentation:

Observation Notes

Record raw facts without interpretation:

[TIMESTAMP] [HOST] [EVENT_TYPE]
Observed: [description of what was seen]
Key data: [relevant field values]
Related atoms: [list of event atoms]

Hypothesis Notes

Document working theories:

HYPOTHESIS: [statement]

Supporting evidence:
- [evidence 1]
- [evidence 2]

Tests to validate:
1. [query or action to confirm/refute]
2. [additional validation step]

Alternative explanations:
- [alternative 1]

Finding Notes

Document confirmed discoveries:

FINDING: [definitive statement]

Evidence:
- [primary evidence]
- [corroborating evidence]

Impact:
- Affected systems: [list]
- Data at risk: [description]

Confidence: [high/medium/low]

Attack Chain Summary Note

Document the full attack narrative:

ATTACK CHAIN:
[Phase 1] → [Phase 2] → [Phase 3] → ...

Techniques: [T1566] → [T1059] → [T1003] → ...
Dwell time: [hours/days from first access to detection]

Root cause: [initial access method]
Defense gaps: [what failed]


Investigation Workflow

Status Transitions

Status When to Use
new Timeline just created, investigation not started
in_progress Active investigation underway
pending_review Analyst completed, awaiting peer review
escalated Requires senior analyst or management attention
closed_false_positive Confirmed benign, documented rationale
closed_true_positive Confirmed incident, remediation complete

Closure Criteria

For closed_false_positive: - [ ] Benign explanation documented in conclusion - [ ] Finding note with FP rationale - [ ] Consider FP rule if pattern is common

For closed_true_positive: - [ ] All action item notes resolved - [ ] Containment/eradication verified - [ ] Root cause identified - [ ] Summary field completed - [ ] Conclusion field completed - [ ] All entities have verdicts assigned


Summary and Conclusion Fields

Summary Field (Executive Audience)

Write for non-technical stakeholders:

On [date], [attack type] was detected on [target]. The attacker [brief action summary].
Impact: [what was affected]. Status: [current state]. Attribution: [if known].

Example:

On November 15, 2024, a targeted spearphishing attack compromised a Finance department workstation.
The attacker harvested credentials and moved laterally to 15 servers, exfiltrating approximately 50GB
of financial data over 72 hours. Containment was achieved by isolating affected systems.
Attribution: Financially-motivated actor (medium confidence).

Conclusion Field (Technical Closure)

Document technical determination:

CLASSIFICATION: [true positive/false positive] - [incident type]
ROOT CAUSE: [initial access method]
ATTRIBUTION: [threat actor/campaign] ([confidence level])
IMPACT: [data affected], [systems affected]
DWELL TIME: [duration from first access to detection]
CONTAINMENT: [status and date]


Example: Complete Tagged Timeline

Note: MITRE technique IDs shown are illustrative. Validate against the authoritative STIX source.

{
  "name": "APT-Investigation-2024-001",
  "description": "Investigation of targeted attack against Finance department",
  "status": "closed_true_positive",
  "priority": "critical",
  "events": [
    {
      "atom": "evt-001",
      "sid": "sensor-001",
      "tags": ["phase:initial-access", "mitre:T1566", "timing:first-observed", "root-cause:phishing"],
      "relevance": "User opened phishing attachment with malicious macro",
      "verdict": "malicious"
    },
    {
      "atom": "evt-002",
      "sid": "sensor-001",
      "tags": ["phase:execution", "mitre:T1059", "timing:pivot-point"],
      "relevance": "Encoded PowerShell executed by Word macro",
      "verdict": "malicious"
    },
    {
      "atom": "evt-003",
      "sid": "sensor-001",
      "tags": ["phase:credential-access", "mitre:T1003", "tool:mimikatz"],
      "relevance": "LSASS memory access - credential harvesting",
      "verdict": "malicious"
    },
    {
      "atom": "evt-004",
      "sid": "sensor-002",
      "tags": ["phase:lateral-movement", "mitre:T1021", "scope:domain-wide"],
      "relevance": "RDP to domain controller with stolen credentials",
      "verdict": "malicious"
    },
    {
      "atom": "evt-005",
      "sid": "sensor-003",
      "tags": ["phase:exfiltration", "mitre:T1041", "impact:data-exfiltration", "timing:detection-trigger"],
      "relevance": "Large HTTPS upload to external IP",
      "verdict": "malicious"
    }
  ],
  "entities": [
    {
      "type": "ip",
      "value": "203.0.113.50",
      "name": "C2 Server",
      "context": "Provenance: Network connection from compromised host. TI: Matches APT29 infrastructure per CISA AA24-001.",
      "verdict": "malicious",
      "related_events": ["evt-005"]
    },
    {
      "type": "hash",
      "value": "d41d8cd98f00b204e9800998ecf8427e",
      "context": "Provenance: Dropped by macro execution. AV: 52/72 detections. Sandbox: Downloads secondary payload.",
      "verdict": "malicious",
      "related_events": ["evt-002"]
    }
  ],
  "notes": [
    {
      "type": "finding",
      "content": "ATTACK CHAIN:\nInitial Access (T1566) → Execution (T1059) → Credential Access (T1003) → Lateral Movement (T1021) → Exfiltration (T1041)\n\nDwell time: 48 hours from first access to detection."
    },
    {
      "type": "finding",
      "content": "DEFENSE GAPS IDENTIFIED:\n- gap:no-mfa on domain admin accounts\n- gap:missing-detection for PowerShell script block logging\n- gap:no-segmentation between workstations and servers"
    },
    {
      "type": "action_item",
      "content": "Rotate all domain admin credentials",
      "resolved": true
    }
  ],
  "summary": "Targeted spearphishing attack compromised Finance workstation. Attacker harvested domain admin credentials within 4 hours, moved laterally to file server, exfiltrated 50GB over 48 hours. Attributed to financially-motivated actor (medium confidence).",
  "conclusion": "CLASSIFICATION: True positive - data breach\nROOT CAUSE: Spearphishing with compromised vendor sender\nATTRIBUTION: Financially-motivated (medium confidence)\nIMPACT: 50GB data exfiltrated, 15 servers accessed\nDWELL TIME: 48 hours\nCONTAINMENT: Complete as of 2024-11-18"
}

Cross-Timeline Analysis

Consistent tagging enables searching across multiple investigations:

Search Goal Tag Pattern to Query
All ransomware incidents impact:ransomware
APT activity actor:apt-*
Critical asset compromises asset:crown-jewels
Open investigations status:in_progress
Phishing-originated attacks root-cause:phishing
MFA gaps gap:no-mfa
Specific customer (MSSP) customer:acme-corp