Security Operations: SIEM, SOC & Threat Intelligence

Understand how Security Operations Centers work — SIEM log aggregation, alert triage, threat intelligence integration, and the daily reality of defending an organization.

Hard 75m 3 tasks

Learning Objectives

  • → Describe the SOC team structure and analyst tiers
  • → Explain how SIEMs ingest, correlate, and alert on log data
  • → Write SIEM correlation rules to detect common attack patterns
  • → Integrate threat intelligence feeds (IOCs) into security operations
  • → Apply the MITRE ATT&CK framework to map and hunt for threats

The Security Operations Center (SOC)

A SOC is the team and facility responsible for monitoring, detecting, and responding to security incidents 24/7.

SOC Analyst Tiers

Tier 1 – Alert Analyst
  Monitor dashboard, triage alerts, escalate
  Tools: SIEM, EDR, ticketing system
  Goal: decide real vs false positive in <15 min

Tier 2 – Incident Responder
  Investigate escalated incidents, contain threats
  Tools: forensic tools, sandbox, SIEM deep dive
  Goal: root cause analysis, containment

Tier 3 – Threat Hunter / Expert
  Proactively hunt for undetected threats
  Tools: threat intel, MITRE ATT&CK, custom scripts
  Goal: find what automated detection missed

Supporting Roles:
  Security Engineer – builds/maintains tools
  Threat Intel Analyst – tracks actors and TTPs
  SOC Manager – metrics, escalation, reporting

SIEM (Security Information and Event Management)

SIEM aggregates logs from all sources and correlates events to detect attacks:

Sources:
  Firewalls      → connection logs
  IDS/IPS        → alert logs
  Web servers    → access logs
  Auth systems   → login events
  Endpoints      → process/file/network events (EDR)
  DNS            → query logs
  DHCP           → IP assignment logs

SIEM Pipeline:
  Log collection → Normalization → Indexing → Correlation → Alert → Ticket

SIEM Log Normalization

Different log formats must be normalized to a common schema:

Firewall log:
  Jan 15 10:23:01 fw1 kernel: DROPPED IN=eth0 SRC=185.x.x.x DST=10.0.0.5 DPORT=22

Auth log:
  Jan 15 10:23:02 server sshd[1234]: Failed password for root from 185.x.x.x port 54321

Normalized (CEF or ECS format):
  timestamp: 2025-01-15T10:23:01Z
  source.ip: 185.x.x.x
  destination.ip: 10.0.0.5
  destination.port: 22
  event.action: blocked / failed-auth
  event.category: network / authentication

Splunk SPL (Search Processing Language)

-- Find all failed SSH logins
index=linux sourcetype=syslog "Failed password"
| rex "from (?<src_ip>\d+\.\d+\.\d+\.\d+)"
| stats count as failures by src_ip
| where failures > 10
| sort -failures

-- Detect brute force followed by success
index=linux sourcetype=syslog ("Failed password" OR "Accepted password")
| rex "(?<status>Failed|Accepted) password for (?<user>\w+) from (?<src_ip>[\d.]+)"
| stats values(status) as statuses, count by src_ip, user
| where array_contains(statuses, "Failed") AND array_contains(statuses, "Accepted")
| rename src_ip as "Attacker IP"

-- Detect large data transfer
index=network
| stats sum(bytes_out) as total_out by src_ip, dst_ip
| where total_out > 100000000
| sort -total_out

Elastic / ECS Queries

// Failed logins from external IPs
{
  "query": {
    "bool": {
      "must": [
        {"match": {"event.action": "authentication_failure"}},
        {"range": {"@timestamp": {"gte": "now-1h"}}}
      ],
      "must_not": [
        {"term": {"source.ip": "10.0.0.0/8"}}
      ]
    }
  },
  "aggs": {
    "by_ip": {
      "terms": {"field": "source.ip", "size": 10}
    }
  }
}

Correlation Rules

Correlation rules fire alerts when specific patterns occur across multiple events:

# Pseudo-code for common correlation rules

# Rule 1: Brute Force Detection
rule BruteForce:
    if count(event.type == "auth_failure", src_ip, 5 minutes) > 10:
        alert("Brute Force", severity="HIGH", src_ip=src_ip)

# Rule 2: Impossible Travel
rule ImpossibleTravel:
    if user logs in from country_A, then from country_B within 2 hours
    and distance(country_A, country_B) / 2 hours > 1000 km/h:
        alert("Impossible Travel", severity="HIGH", user=user)

# Rule 3: Lateral Movement (SMB from workstation to workstation)
rule LateralMovement:
    if SMB connection from workstation to workstation (not server):
        alert("Possible Lateral Movement", severity="MEDIUM")

# Rule 4: Data Exfiltration
rule DataExfil:
    if bytes_out > 100MB from internal host to external IP in 1 hour:
        alert("Possible Data Exfiltration", severity="HIGH")

# Rule 5: PowerShell encoded command (evasion technique)
rule PowerShellEncoded:
    if process.name == "powershell.exe"
    and process.args contains "-EncodedCommand":
        alert("PowerShell Encoded Command", severity="MEDIUM")

Alert Triage Process

1. Receive alert in ticketing system (Jira, ServiceNow, TheHive)
2. Initial context: what triggered it? What asset? What user?
3. Enrich: lookup source IP in threat intel (VirusTotal, MISP, AbuseIPDB)
4. Pivot: look for related events (same IP, same user, same host)
5. Classify:
   - True Positive → escalate or respond
   - False Positive → close with tuning note
   - True Negative → close
6. Document findings in ticket
7. Update SIEM rule if false positive is chronic (tune threshold)

Threat Intelligence

Types of Threat Intel:
  Strategic   – high-level trends for executives
  Operational – campaigns, actor TTPs, playbooks
  Tactical    – IOCs: IPs, hashes, domains, URLs

Sources:
  Commercial: Recorded Future, CrowdStrike Falcon X
  Open Source: MISP, AlienVault OTX, Shodan, VirusTotal
  Feeds: AbuseIPDB, Emerging Threats, URLhaus

IOC Integration:
  IP blocklist → firewall/proxy
  Domain blocklist → DNS sinkhole
  File hash → EDR blocking rules
  YARA rules → SIEM / AV

MITRE ATT&CK Framework

ATT&CK maps adversary techniques to tactics — used for detection, hunting, and gap analysis:

Tactics (columns) → Techniques (rows)
┌─────────────┬──────────────────────────────────┐
│ Tactic      │ Example Techniques               │
├─────────────┼──────────────────────────────────┤
│ Initial     │ Phishing (T1566), Exploit (T1190) │
│ Access      │                                  │
│ Execution   │ PowerShell (T1059.001), Cron     │
│ Persistence │ Registry Run Key, Cron Job       │
│ Priv Escal  │ SUID/SGID (T1548.001)            │
│ Defense Eva │ Obfuscation, Process Injection   │
│ Credential  │ Keylogging, /etc/shadow dump     │
│ Discovery   │ Network Scan, Account Discovery  │
│ Lateral Mov │ SSH, SMB/PsExec, Pass-the-Hash   │
│ Collection  │ Screen Capture, Clipboard        │
│ Exfiltration│ Over HTTP/DNS, Compressed        │
│ Impact      │ Ransomware, Data Destruction     │
└─────────────┴──────────────────────────────────┘

ATT&CK Navigator for Gap Analysis

1. Map your current detection coverage to ATT&CK cells
2. Identify uncovered techniques (gaps)
3. Prioritize new detection rules for most-used techniques
4. Track improvement over time

Example: if Lateral Movement via SMB is uncovered →
  Write Splunk rule for SMB connections between workstations
  Test against attack simulation (Atomic Red Team)

Threat Hunting

Proactive search for threats that evaded automated detection:

Hunt Process:
1. Hypothesis: "Attacker may have used WMI for persistence"
2. Data: query SIEM for wmiprvse.exe spawning child processes
3. Investigate: is this normal in our environment?
4. Find/Clear: confirm or rule out the threat

Hunting Queries:
-- Processes spawned by Office apps (macro execution)
process.parent.name in ("WINWORD.exe", "EXCEL.exe")
AND process.name not in ("splwow64.exe")

-- DNS queries to newly registered domains (< 30 days old)
dns.question.name in [new_domains_feed]

-- Large PowerShell scripts (> 1000 chars in command line)
process.name == "powershell.exe"
AND length(process.args) > 1000

Metrics and KPIs

Mean Time to Detect (MTTD)    – how long before we notice?
Mean Time to Respond (MTTR)   – how long to contain?
False Positive Rate           – % of alerts that are FP
Alert Volume                  – total daily alerts
Dwell Time                    – how long attacker was in before detection

Goals:
  MTTD < 1 hour for P1
  MTTR < 4 hours for P1
  FP rate < 20%
  Dwell time < 24 hours

Write Splunk SPL (or pseudo-code) detection rules for: (1) brute force: >10 failed logins in 5 min from same IP, (2) brute force success: IP in (1) later has successful login, (3) suspicious PowerShell: -EncodedCommand in process args, (4) data exfiltration: >50MB outbound to single external IP in 1 hour, (5) off-hours admin login: admin login between 10pm-6am. Test each rule against sample log data.

✦ Answer the questions to complete this task

What is a correlation rule?

What is alert fatigue?

Build a Python script that: (1) downloads the AbuseIPDB blocklist (or a CSV of malicious IPs), (2) compares against your server's auth.log for any matches, (3) for each match, enriches with VirusTotal (using their free API tier), (4) outputs: IP, confidence score, number of reports, last seen, matched log lines. This simulates SIEM threat intel enrichment.

✦ Answer the questions to complete this task

What is a threat intelligence feed?

Given this attack sequence: (1) phishing email with malicious macro → (2) PowerShell downloads payload → (3) scheduled task persistence → (4) credential dump from LSASS → (5) SMB lateral movement → (6) data compressed and exfiltrated over HTTPS. Map each step to MITRE ATT&CK tactic and technique ID. Then write one detection rule for each step.

✦ Answer the questions to complete this task

What MITRE ATT&CK tactic does 'scheduled task persistence' belong to?

What ATT&CK technique ID covers credential dumping from LSASS?

💪 Exercises & Challenges

📝 MCQ Medium +20 XP

Security Operations MCQ

Security Operations MCQ

Start →
⚙️ Practical Medium +30 XP

Build a SIEM Detection Lab

Build a SIEM Detection Lab

Start →
🚩 Challenge Hard +50 XP

Hunt the Threat in the Logs

Hunt the Threat in the Logs

Start →