Ringkasan

SOC Automation adalah praktik mengorkestrasi alur kerja keamanan secara otomatis — dari alert SIEM hingga remediasi — tanpa intervensi manual. SOAR (Security Orchestration, Automation, and Response) adalah platform yang menjembatani deteksi (SIEM/EDR) dengan aksi (firewall, endpoint, ticketing). Catatan ini mencakup arsitektur SOAR, perbandingan platform open-source (Shuffle, Wazuh+TheHive, Splunk SOAR), playbook automation dalam YAML, incident enrichment pipeline, serta teknik automated containment.

Domain Terkait: siem-security-data-lake-architecture (sumber alert) → incident-response-framework (playbook dasar) → threat-hunting-methodology (deteksi proaktif) → blueteam-detection-matrix (detection coverage) → endpoint-detection-playbook (remediasi endpoint)


Daftar Isi


1. Mengapa SOC Automation Diperlukan

SOC modern menghadapi tiga masalah utama:

MasalahTanpa SOARDengan SOAR
Volume alert10.000+ alert/hari → analyst fatigueFiltering, dedup, prioritization otomatis
Mean-Time-to-Respond (MTTR)30-120 menit per alert30 detik - 5 menit
Analyst shortageJunior handle triage, senior burnoutAutomated tier-1, analyst fokus investigasi
ConsistencySetiap analyst beda prosedurPlaybook enforce standarisasi

Rumus MTTR improvement:

Dengan SOAR, waktu triage, enrichment, dan containment bisa turun dari ribuan detik ke satuan detik.


2. Arsitektur SOAR — Event Pipeline

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│  SIEM    │───▶│  SOAR    │───▶│ Case     │───▶│ Remediate│
│ Wazuh    │    │ Shuffle  │    │ TheHive  │    │ Firewall │
│ Splunk   │    │          │    │          │    │ EDR      │
│ ELK      │    │          │    │          │    │ DNS      │
└──────────┘    └──────────┘    └──────────┘    └──────────┘
                     │
                     ▼
              ┌──────────────┐
              │ Enrichment   │
              │ VirusTotal   │
              │ AbuseIPDB    │
              │ Shodan       │
              │ WHOIS        │
              └──────────────┘

Layers:

  1. Detection Layer — SIEM/EDR kirim alert via webhook, syslog, atau API
  2. Orchestration Layer — SOAR filter alert, jalankan playbook, trigger enrichment
  3. Case Management Layer — Buat ticket dengan semua evidence terstruktur
  4. Remediation Layer — Execute action: block IP, isolate host, reset credential
  5. Enrichment Layer — API calls ke threat intel untuk konteks tambahan

3. Perbandingan Platform SOAR

FiturShuffleWazuh+TheHiveSplunk SOARPalo Alto XSOAR
OSOpen SourceOpen SourceCommercialCommercial
LisensiApache 2.0AGPL v3Per-seatPer-seat
PlaybookYAML + UIPython + templatePython (Apps)Python (Playbook)
Integrasi200+ apps50+ via Hive300+ apps600+ apps
AI/MLGemini API-SOAR AICortex ML
DeployDocker/PodmanDocker/PodmanCloud/On-premOn-prem/Cloud
UI Modern✅ Ya⚠️ Functional✅ Ya✅ Ya

Rekomendasi:

  • Shuffle — untuk tim dengan budget $0, mau fleksibilitas maksimal
  • Wazuh+TheHive — sudah punya Wazuh, perlu case management
  • Splunk SOAR — enterprise, sudah pakai Splunk SIEM

4. Shuffle — Open-Source SOAR

Shuffle adalah SOAR open-source berbasis workflow YAML. Bisa di-deploy via Docker/Podman dengan resource minimal.

Deploy dengan Podman

# docker-compose.yml → podman-compose
version: "3.8"
services:
  shuffle:
    image: ghcr.io/frikky/shuffle:latest
    ports:
      - "3001:3001"
    environment:
      - SHUFFLE_DB_TYPE=sqlite
      - SHUFFLE_ORG_ID=your-org
    volumes:
      - ./shuffle-data:/etc/shuffle
    restart: unless-stopped

Playbook Sederhana — Block IP via Cloudflare

# playbook-block-ip.yaml
name: "Block Malicious IP"
trigger:
  type: webhook
  endpoint: /block-ip
 
steps:
  - id: parse_alert
    type: jsonpath
    input: $TRIGGER
    config:
      source_ip: $.alert.source_ip
      severity: $.alert.severity
 
  - id: enrich_ip
    type: http
    url: "https://www.virustotal.com/api/v3/ip_addresses/{{steps.parse_alert.source_ip}}"
    headers:
      x-apikey: $VT_API_KEY
    output: $ENRICHMENT
 
  - id: decision
    type: condition
    input:
      field: "{{steps.enrich_ip.data.attributes.last_analysis_stats.malicious}}"
      condition: "> 5"
    branches:
      true: block_ip
      false: log_only
 
  - id: block_ip
    type: http
    url: "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall/access_rules/rules"
    method: POST
    headers:
      Authorization: "Bearer $CF_API_TOKEN"
    body:
      mode: block
      configuration:
        target: ip
        value: "{{steps.parse_alert.source_ip}}"

Integrasi Webhook SIEM

# Di Wazuh → ossec.conf tambahkan integration
<integration>
  <name>shuffle</name>
  <hook_url>http://shuffle:3001/api/v1/webhook/block-ip</hook_url>
  <alert_format>json</alert_format>
</integration>

5. Wazuh + TheHive — Detection-to-Case Pipeline

Wazuh sebagai SIEM/EDR mengirim alert ke TheHive sebagai case management. Pipeline ini gratis, mature, dan banyak dipakai.

TheHive Deploy

version: "3.8"
services:
  thehive:
    image: thehiveproject/thehive:latest
    ports:
      - "9000:9000"
    environment:
      - JAVA_OPTS=-Xms2G -Xmx4G
    volumes:
      - thehive-data:/opt/thp/data
    depends_on:
      - cassandra
      - elasticsearch

Wazuh → TheHive Integration

<!-- /var/ossec/etc/ossec.conf -->
<integration>
  <name>thehive</name>
  <hook_url>http://thehive:9000/api/alert</hook_url>
  <alert_format>json</alert_format>
  <rule_id>5710,5712,5715</rule_id>
</integration>

Automated Case Creation

Flow: Wazuh detect → alert JSON → TheHive create alert → analyst triage → escalate to case.

# thehive-create-case.py — Webhook receiver
from flask import Flask, request
import requests
 
app = Flask(__name__)
 
THEHIVE_URL = "http://thehive:9000"
THEHIVE_KEY = "your-api-key"
 
@app.route("/webhook/wazuh", methods=["POST"])
def handle_alert():
    alert = request.json
 
    # Buat alert di TheHive
    payload = {
        "title": f"Wazuh Alert: {alert['rule']['description']}",
        "description": alert.get("full_log", ""),
        "severity": alert["rule"]["level"],
        "tags": ["wazuh", alert["rule"]["groups"][0]],
        "source": "wazuh",
        "sourceRef": alert["id"],
        "artifacts": [
            {"dataType": "ip", "data": alert["data"]["src_ip"]},
            {"dataType": "hostname", "data": alert["agent"]["name"]},
        ]
    }
 
    resp = requests.post(
        f"{THEHIVE_URL}/api/alert",
        headers={"Authorization": f"Bearer {THEHIVE_KEY}"},
        json=payload
    )
    return resp.text

6. Playbook Automation — YAML Format

Playbook adalah inti SOAR. Format YAML memungkinkan version control dan review.

Struktur Playbook

name: string
description: string
trigger: # Event source
  type: webhook|schedule|api
  config: {}
steps: [] # Daftar aksi berurutan
variables: {} # Konstanta / env vars
error_handling: # Apa yang terjadi jika step gagal
  default: fail|skip|retry

Step Types

TypeFungsiContoh
httpHTTP requestAPI call ke firewall, VT, Slack
conditionBranchingIf malicious > 5 → block
jsonpathExtract fieldParse nested JSON
pythonCustom scriptCompute hash, decode base64
emailKirim emailNotifikasi ke analyst
sshSSH commandExecute command di server

7. Automated Containment Techniques

Firewall Block — iptables/nftables

# Webhook receiver via python
@app.route("/contain/block-ip")
def block_ip():
    ip = request.args.get("ip")
    subprocess.run([
        "ssh", "admin@firewall",
        f"nft add rule inet filter input ip saddr {ip} drop"
    ])

Cloudflare WAF Block

curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall/access_rules/rules" \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"block","configuration":{"target":"ip","value":"1.2.3.4"},"notes":"SOAR automation"}'

EDR Isolate (Wazuh Active Response)

<!-- ossec.conf -->
<active-response>
  <command>host-deny</command>
  <location>local</location>
  <level>10</level>
  <rules_group>authentication</rules_group>
  <timeout>3600</timeout>
</active-response>

Containment Decision Matrix

IndicatorConfidenceAction
IP known malicious (VT > 5)HighBlock at firewall + notify
Beaconing to C2HighIsolate endpoint + block IP
Suspicious login from new geoMediumMFA challenge + log
Port scan from internal IPLowLog + investigate

8. Incident Enrichment Pipeline

Setiap alert harus di-enrich sebelum ditindaklanjuti.

# enrichment-playbook.yaml
steps:
  - id: get_ip
    jsonpath:
      input: $ALERT
      path: $.source_ip
 
  - id: vt_lookup
    type: http
    url: "https://www.virustotal.com/api/v3/ip_addresses/{{get_ip.value}}"
 
  - id: abuseipdb
    type: http
    url: "https://api.abuseipdb.com/api/v2/check?ipAddress={{get_ip.value}}"
 
  - id: shodan
    type: http
    url: "https://api.shodan.io/shodan/host/{{get_ip.value}}?key=$SHODAN_KEY"
 
  - id: whois
    type: http
    url: "https://whois.api/{{get_ip.value}}"
 
  - id: merge_enrichment
    type: python
    script: |
      result = {
        "ip": steps.get_ip.value,
        "vt_malicious": steps.vt_lookup.data.attributes.last_analysis_stats.malicious,
        "abuse_confidence": steps.abuseipdb.data.abuseConfidenceScore,
        "shodan_ports": steps.shodan.data.ports,
        "whois_org": steps.whois.data.org
      }
      # Decision logic
      if result["vt_malicious"] > 5 or result["abuse_confidence"] > 50:
        trigger("block_ip", {"ip": result["ip"]})

9. MCP vs Webhook vs API-Native Orchestration

Tiga pendekatan untuk menghubungkan SOAR dengan tools lain:

ApproachLatencyComplexityUse Case
Webhook100-500msRendahFire & forget, notifikasi Slack
API-Native50-200msSedangQuery threat intel, block IP
MCP (Model Context Protocol)200ms-2sTinggiOrchestration dengan LLM agent

MCP memungkinkan SOAR berintegrasi dengan LLM agent untuk decision making:

SIEM Alert → SOAR playbook → MCP call → LLM analisis konteks → SOAR eksekusi

Ini sangat powerful untuk alert ambiguity tinggi (contoh: “Login dari IP asing — apakah ini threat atau user legit?“).


10. Deploy & Operasional

Minimum Resource

PlatformCPURAMStorage
Shuffle2 vCPU4 GB20 GB
TheHive + Cassandra4 vCPU8 GB50 GB
Wazuh (server)4 vCPU8 GB100 GB

Runbook Checklist

  • Deploy SOAR (Shuffle atau TheHive)
  • Konfigurasi webhook SIEM → SOAR
  • Buat 3 playbook pertama: block-ip, isolate-host, notify-slack
  • Tes enrichment pipeline (VT, AbuseIPDB)
  • Uji automated containment di staging
  • Monitor false positive rate
  • Backup playbook ke git

11. Metrik & Dashboard

MetrikTargetCara Ukur
Alert-to-case time< 5 menitSOAR logs
Playbook success rate> 95%Step completion
False positive rate< 10%Analyst feedback
MTTR< 15 menit criticalCase resolved time

12. Referensi

Cross-link vault: