Learning Roadmap — Hands-On

SOC Analyst: Zero → Senior L3

A 4-phase roadmap from complete beginner to Senior L3 — no dry theory, no fake courses. Every phase has specific exercises, real queries, scripts you can run right now. This is the battle map nobody teaches you.

2026 Roadmap Blue Team SIEM · IR · Threat Hunting
Q
QA210
Security Researcher & Threat Analyst. No theory — only stuff that runs in production.
TL;DR

Quick Summary

4Phases
6MNewbie → L1
2YL1 → L2
5+Years to L3

Key Takeaways

  • Phase 1 — Newbie (0–6 months): Build foundations with your hands. Wireshark, Event Viewer, Linux logs. Don't read theory — capture real packets, read real logs.
  • Phase 2 — Junior L1 (6M–2 years): Write SPL/KQL like breathing. Read alerts like a book. SIEM queries, MITRE ATT&CK top 5, EDR triage workflow.
  • Phase 3 — Mid-Level L2 (2–4 years): Solve real cases, not theory exams. Incident Response full playbook, Volatility3 memory forensics, static Malware Analysis, YARA rules.
  • Phase 4 — Senior L3 (5+ years): Don't wait for alerts — hunt. Threat Hunting, Sigma rules, Python automation, SOAR playbooks, Threat Intelligence.
  • Core philosophy: Hands BEFORE brain — touch real data before understanding the theory. Every skill is learned through hands-on labs, not through videos.
01

Why 90% of People Learning Cyber Security Get Stuck at the Starting Line

Honestly — do you know the biggest reason people learning Cyber Security get stuck? It's not because they lack resources. It's not because courses are expensive. It's because they learn in the wrong order.

Most beginners do exactly one thing: open a book, read theory, memorize, then take a certification. They memorize the 7-layer OSI model but can't read a single real packet. They know the definition of Brute Force but have never seen 1000 consecutive Event ID 4625 in one minute. They buy a $500 course then stand in front of a real SIEM not knowing what query to type.

Mistake #1 for Beginners
Theory first, practice later. This is the guaranteed formula for spending 6 months learning and still not being able to do anything real. Courses teach you "what Brute Force is" — but not "what Brute Force looks like across 1000 log lines, and which query finds it." That difference is everything.

This article is a battle map. Every phase, every skill, every specific technique. No room for "learn theory to understand, then practice" — because that approach has been proven to fail 90% of people.

QA210's Philosophy
Hands BEFORE brain. Touch real data before understanding the theory. Open Wireshark — capture packets — then read about TCP handshake. Open Event Viewer — read 4625 — then understand what Brute Force is. Backwards from every traditional course, but exactly how real people learn in production. Theory comes after your hands already know what to do.
02

Phase 1: NEWBIE (0–6 months) — Build Foundations With Your Hands, Not Your Brain

Exercise #1: Capture Packets — Don't Read About It

Install Wireshark. Open it. Select your Wi-Fi interface. Capture packets on your home network right now. Don't read documentation — capture and watch simultaneously. Every packet tells a story. You just need to learn how to read it.

Type this filter into Wireshark's filter bar:

Wireshark Display Filters
# See every TCP connection being initiated (SYN packets)
tcp.flags.syn == 1 and tcp.flags.ack == 0

# See which domains your machine is querying
dns.qry.name contains "."

# Find DNS Exfiltration indicators — weird domain names
dns.qry.name contains ".xyz"
dns.qry.name contains ".top"

When you type tcp.flags.syn == 1 and tcp.flags.ack == 0, you'll see every TCP connection your machine is initiating. Each line is an application connecting to some server. If you see your machine connecting to a domain like a2b3c4d5.xyz — that's a DNS Exfiltration indicator. Data is leaking out through DNS queries to random domains. This is a technique real APTs use.

Why Is This Exercise Important?
Every packet tells a story. When you can read packets, you understand: who your machine is talking to, which application is sending data where, and whether there are any suspicious connections. This is the foundation of every SOC skill you'll build later. Wireshark isn't just a tool — Wireshark is a language.

Exercise #2: Open Event Viewer — Read What Windows Is Telling You

Press Win + R, type eventvwr.msc, hit Enter. Navigate to Windows Logs → Security. This is where Windows records everything happening on your machine — who logged in, who failed, which process ran, which file was accessed. Start with these 3 Event IDs:

Event IDMeaningWhen to Sound the Alarm
4625Failed logon100 times/min from the same IP = Brute Force
4624 Type 10RDP logon (remote desktop)3 AM from a foreign IP = Big Problem
4688Process creationWhere attackers leave traces — must enable "Include Command Line" in Group Policy

Hands-on exercise: filter for Event ID 4625 in the last 24 hours on your machine. How many failed logins do you see? From which IPs? If there are > 50 from the same IP — someone is brute forcing your machine.

PowerShell
# Query Event ID 4625 (Failed Logon) in the last 24 hours
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id = 4625
    StartTime = (Get-Date).AddHours(-24)
} | Select-Object TimeCreated, 
    @{N='TargetUser';E={$_.Properties[5].Value}},
    @{N='SourceIP';E={$_.Properties[19].Value}} |
    Format-Table -AutoSize

# Count failed logons by source IP
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} |
    Group-Object {$_.Properties[19].Value} |
    Sort-Object Count -Descending |
    Select-Object Count, Name -First 10

Windows Internals Deep Dive

Once you're comfortable with Event Viewer, you need to understand where attackers hide. Windows has several persistence locations (running code on every startup) that every SOC analyst must know by heart:

Registry & Commands
# PERSISTENCE VECTORS — Where attackers hide auto-running code

# 1. Registry Run keys (auto-run when user logs in)
# Check:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

# 2. Service creation (create hidden service)
# Check:
reg query "HKLM\SYSTEM\CurrentControlSet\Services" /s | findstr "ImagePath"

# 3. Scheduled Tasks (tasks running on schedule)
schtasks /query /fo LIST /v

# 4. Group Policy audit
gpresult /H report.html
Critical Note About Event ID 4688
By default, Event 4688 does not log the command line of the process. You must enable "Include Command Line in Process Creation Events" in Group Policy (Computer Configuration → Administrative Templates → System → Audit Process Creation). If you don't enable this = you see powershell.exe running but have no idea what command it executed. You're flying blind.

Linux Basics — You Don't Need to Learn Everything

You don't need to become a Linux admin. You just need to be able to read Linux logs and know a few filter commands. Here are the log files you must know:

Bash — Log Analysis
# Read authentication log — find failed SSH logins
sudo cat /var/log/auth.log | grep "Failed password"

# Read syslog — system overview
sudo tail -100 /var/log/syslog

# Read Nginx access log — find web attacks
sudo cat /var/log/nginx/access.log | grep "POST" | grep "200"

# Use grep + awk + cut to filter
grep "Failed password" /var/log/auth.log | \
    awk '{print $(NF-3)}' | \
    sort | uniq -c | sort -rn | head -20

# Check crontab — persistence vector
crontab -l
sudo crontab -l

# Check systemd services
systemctl list-unit-files --state=enabled

Hands-on exercise: write a Bash script to parse auth.log for failed SSH logins, count by IP, and output the top 10:

Bash — SSH Brute Force Detector
#!/bin/bash
# ssh_brute_detector.sh — Detect SSH brute force
# Usage: ./ssh_brute_detector.sh [threshold]

LOG="/var/log/auth.log"
THRESHOLD=${1:-50}

echo "=== SSH Brute Force Detector ==="
echo "Threshold: $THRESHOLD attempts"
echo "Log file: $LOG"
echo ""

# Count failed logins by IP
echo "--- Top attacking IPs ---"
grep "Failed password" "$LOG" | \
    awk '{ 
        for(i=1;i<=NF;i++) 
            if($i=="from") print $(i+1) 
    }' | \
    sort | uniq -c | sort -rn | \
    awk -v thresh="$THRESHOLD" '$1 >= thresh {print $1 " attempts → " $2 " ⚠️ BRUTE FORCE"}'

echo ""
echo "--- Targeted accounts ---"
grep "Failed password" "$LOG" | \
    awk '{
        for(i=1;i<=NF;i++)
            if($i=="for") print $(i+1)
    }' | sort | uniq -c | sort -rn | head -10

Weekly Lab Roadmap

WeekContentTool/Platform
1–2TryHackMe Pre-Security path (free)TryHackMe
3–4Build Windows Server 2019 VM, enable audit policy, create users, test brute force, read logsVirtualBox
5–6Download PCAP samples from malware-traffic-analysis.net, analyze like a real investigationWireshark
Month 2–3Linux — log analysis, crontab, systemd, bash scriptingUbuntu VM
Month 4–6CompTIA Security+ certification — solidify your foundationSecurity+
Learning Method — Phase 1
Open Wireshark — capture real packets — read every byte. Open Event Viewer — filter for 4625 — see who's brute forcing your machine. No theory can replace hands-on packet capture. No video can replace querying logs yourself and discovering anomalies on your own. Hands touch data first, brain understands later.
03

Phase 2: JUNIOR L1 (6 months – 2 years) — Write Queries Like Breathing, Read Alerts Like a Book

The Truth About L1 Work

Sit staring at alerts for 8 hours a day. Most are false positives. But one is real. Find it. That's your job. And to do that, you have to write SIEM queries as fast as writing your native language — fast, accurate, no syntax errors. Every second of delay gives the attacker more time.

The Brutal Truth About L1
You'll look at 500 alerts per day. 495 are false positives. 5 are real. Missing 1 of those 5 = incident. Your job isn't "processing alerts" — your job is finding a needle in a haystack, every day, without missing any. The most important skill isn't knowing a SIEM — it's knowing which questions to ask.

Splunk SPL — Learn It This Way or Stay Slow

Don't learn syntax first. Start from investigation questions. Example: "Which accounts are being brute forced in the last 24 hours?" — translate that question into SPL:

Splunk SPL
# Brute Force Detection — Find accounts being brute forced
index=windows_logs EventCode=4625
| stats count by TargetUserName, Source_Network_Address
| where count > 50
| sort - count

# Brute Force Success — Account brute forced then successfully logged in
index=windows_logs (EventCode=4625 OR EventCode=4624)
| stats count as attempts, 
    count(eval(EventCode=4625)) as failed, 
    count(eval(EventCode=4624)) as succeeded
  by TargetUserName, Source_Network_Address
| where failed > 10 AND succeeded > 0
| sort - failed

# Detect Impossible Travel — logins from 2 countries within 1 hour
index=windows_logs EventCode=4624 Logon_Type=10
| iplocation Source_Network_Address
| stats values(Country) as countries, 
    dc(Country) as country_count 
  by TargetUserName
| where country_count > 1

Next challenge: "Which accounts successfully logged in after 10+ failed attempts?" — this is a sign of brute force success, the attacker guessed the right password. The second query above answers exactly that question.

SIEM Learning Method
Translate investigation questions → queries, don't Google syntax then try to write. Start with "what do I want to find?" then figure out how to express it in SPL/KQL. Do 50 investigation questions = you write queries like breathing. You don't need to memorize syntax — memorize questions.

Elastic KQL — Your Phishing Hunting Weapon

Phishing = the #1 attack vector. Signature tell: user opens Word/Excel → spawns PowerShell/CMD. The KQL query below detects that pattern:

Elastic KQL
# Phishing Detection — Office app spawns shell
process.parent.name : ("winword.exe" OR "excel.exe" OR "outlook.exe")
AND process.name : ("cmd.exe" OR "powershell.exe" OR "wscript.exe" OR "mshta.exe")

# Why add outlook.exe and mshta.exe?
# - outlook.exe: HTML attachment with macro/veil code
# - mshta.exe: HTML Application (HTA) — attacker uses 
#   it to run JScript/VBScript via mshta, bypassing many AV
# Most original documentation SKIPS these 2 vectors!

# Extended version — add suspicious child processes
process.parent.name : ("winword.exe" OR "excel.exe" OR "outlook.exe" OR "powerpnt.exe")
AND process.name : ("cmd.exe" OR "powershell.exe" OR "wscript.exe" OR "mshta.exe" 
    OR "cscript.exe" OR "certutil.exe" OR "bitsadmin.exe")
Why Add outlook.exe and mshta.exe?
Most phishing detection resources only mention Word/Excel → CMD/PowerShell. But attackers have shifted to HTML attachments sent through Outlook, using mshta.exe (HTML Application engine) to execute JScript/VBScript. This vector bypasses many AV products because mshta is a legitimate Windows binary. Missing it = missing a whole class of real-world attacks.

MITRE ATT&CK — Don't Get Overwhelmed

MITRE ATT&CK has 400+ techniques. Don't try to learn all of them. Pick the top 5 and go deep. These are the 5 techniques you'll see every day in the SOC:

TechniqueNameWhy You Must Know It
T1059Command & Scripting — PowerShell, CMDUsed daily. Every alert relates to this.
T1003OS Credential Dumping — Mimikatz, LSASSSeeing this = real attacker. Never a false positive.
T1053Scheduled Task — Persistence via Task SchedulerAttackers create tasks to run code on every startup.
T1021Remote Services — RDP, SMB lateral movementAttackers move between machines. Look for unusual RDP.
T1055Process Injection — Inject into legitimate processEvasion technique — real process running fake code.

For each technique: reproduce in your lab → see what it leaves in the logs → this is the only way to recognize it in production. No shortcuts. You have to create a malicious scheduled task yourself, watch Event 4698 appear, write a query to detect it. Then next time you see an alert — you'll recognize it instantly.

EDR Tools — Reading the Process Tree

CrowdStrike Falcon / Microsoft Defender for Endpoint — the two most common EDRs. The most important skill: reading the process tree (parent → child relationship). Every EDR alert shows you the process tree:

▶ ALERT TRIAGE WORKFLOW — L1 SOC Analyst
[1]RECEIVE ALERTEDR/SIEM triggers alert. Read alert title, severity, affected host.
[2]CHECK CONTEXTLook at the process tree (parent → child). What's the parent? What command line was run? Which user? What time? Source/destination IP?
[3]TRUE/FALSE?Classify: True Positive (real attack) vs False Positive (normal activity). Based on context — not just the alert title.
[4]ESCALATE/CLOSETrue Positive → escalate to L2 immediately + isolate endpoint. False Positive → close with clear explanation + tune rule if needed.

Sample process tree that should set off alarms: winword.exe → cmd.exe → powershell.exe → IEX (New-Object Net.WebClient).DownloadString(...). Word never spawns CMD. If you see this = phishing confirmed 99%.

Learning Method — Phase 2
Set up an Elastic lab at home, inject fake logs yourself, write your own alerts, trigger them — then investigate like a real case. Build a Splunk free tier, ingest Windows Event Logs, write queries to find brute force. One investigation question per day. Do this for 3 months = you'll write SPL/KQL as naturally as writing your native language.
04

Phase 3: MID-LEVEL L2 (2–4 years) — Solve Real Cases, Not Theory Exams

Case Study: Web Shell — From Alert to Root Cause in 90 Minutes

This is a real L2 investigation. Every step, every decision, every query. Follow the timeline:

08:47 AM
SIEM Alert — Outbound Traffic Spike
Web server 192.168.1.50 outbound traffic spike: 2GB of data outbound in 10 minutes. Alert triggered by data exfiltration detection rule.
08:50 AM
Verify Alert — Pull Nginx Logs
Pull Nginx logs from Elastic. See HTTP POST to /uploads/image.php — a PHP file in the image upload directory? Clear anomaly. Upload directories should never execute PHP.
09:05 AM
Web Shell Confirmed
Request content shows: cmd=whoami, cmd=id, cmd=cat /etc/passwd. Attacker is executing commands through a web shell. Web shell 100% confirmed.
09:15 AM
Memory Forensics — Volatility3
Run Volatility3 on the web server's memory dump. Find httpd process with outbound connection to 45.33.32.156:4444 — Reverse Shell. Port 4444 is Metasploit's default.
09:20 AM
Containment Actions
Isolate endpoint via EDR. Preserve image.php (SHA256 hash for future correlation). Find the upload vulnerability in the code. Check for lateral movement — has the attacker moved to other machines?
09:55 AM
IR Report — Root Cause & Remediation
Root cause: file upload didn't validate extensions + PHP execution enabled in the upload directory. Remediation: disable PHP execution, add extension whitelist, deploy WAF rule blocking web shell patterns.
Volatility3 Commands
# List running processes
python3 vol.py -f memory.dmp linux.pslist

# Network connections — find reverse shells
python3 vol.py -f memory.dmp linux.netstat

# Find injected code in process memory
python3 vol.py -f memory.dmp linux.malfind

# DLL libraries loaded — find suspicious DLLs
python3 vol.py -f memory.dmp linux.dlllist

# Windows equivalents (if memory dump is Windows)
python3 vol.py -f memory.dmp windows.pslist
python3 vol.py -f memory.dmp windows.netstat
python3 vol.py -f memory.dmp windows.malfind
python3 vol.py -f memory.dmp windows.dlllist

Incident Response Framework

L2 analysts must have an IR Playbook for each type of incident. Standard framework: Contain → Eradicate → Recover → Lessons Learned. Every step has a specific checklist, nothing is "improvised." Root cause analysis methodology: 5 Whys — ask "why?" 5 times to find the real root cause, not just the symptom.

Forensics Timeline Reconstruction
Every L2 investigation must end with a timeline. When was the entry point? When did lateral movement occur? How long did data exfiltration take? What was the root cause? Is remediation sufficient? The timeline is the most important deliverable of L2 — not the alert closure.

Static Malware Analysis

L2 doesn't need to know full reverse engineering. But you must know static malware analysis — reading a binary without running it:

PE Header Reading — what does the binary say before it runs? Use pestudio or die (Detect It Easy) to read the PE header: which compiler, which sections are abnormal, which imports are suspicious (VirtualAlloc, WriteProcessMemory, CreateRemoteThread = process injection).

Strings Extraction — use FLOSS (FireEye Labs Obfuscated String Solver) instead of regular strings, because FLOSS decodes obfuscated strings too:

YARA Rule
rule Suspicious_PowerShell_Download {
  meta:
    description = "Detects PowerShell download cradle patterns"
    author = "QA210"
    severity = "high"
    date = "2026-03-01"
  strings:
    $s1 = "IEX" ascii wide
    $s2 = "New-Object Net.WebClient" ascii wide
    $s3 = "DownloadString" ascii wide
    $s4 = "Invoke-Expression" ascii wide
    $s5 = "FromBase64String" ascii wide
    $s6 = "System.Net.Sockets" ascii wide
  condition:
    2 of ($s1, $s2, $s3, $s4, $s5, $s6)
}

VirusTotal Deep Dive — don't just check the detection ratio. Read the behavioral analysis tab: what processes does it spawn, what files does it create, what registry keys does it modify, what network connections does it make. That's where you see the malware's real TTPs.

L2 Hands-On Lab

  1. Download FlareVM + REMnux — the two standard malware analysis VMs. FlareVM = Windows analysis, REMnux = Linux analysis. Set up both, network isolated.
  2. Get real samples from MalwareBazaar.abuse.ch — in a sandbox! Download samples, analyze with pestudio, FLOSS, strings, YARA. Never run on your real machine.
  3. Run Volatility3 on sample memory dumps — search GitHub for "volatility memory dump samples", download, analyze. Find injected processes, network connections, persistence mechanisms.
  4. Build a vulnerable Apache server, upload a web shell, investigate yourself, then patch. Investigating your own case = deepest understanding.
Learning Method — Phase 3
Download real malware samples (ANY.RUN, MalwareBazaar), set up FlareVM, analyze step by step like a detective. Run Volatility3 on real memory dumps. Build a vulnerable server lab, attack it yourself, investigate it yourself, patch it yourself. Every investigation is a case study. Do 20 cases = you'll investigate naturally.
05

Phase 4: SENIOR L3 (5+ years) — Don't Wait for Alerts. Hunt.

The Biggest Mindset Shift

L1/L2 react to alerts. Seniors create new detections for things that no alert covers. The question a Senior asks every week:

The Senior L3 Question
"If an APT has been in my system for 3 months without triggering a single alert — what are they doing and where do I find them?"

This is the question that separates L2 from L3. L2 asks "which alerts do I need to handle?" L3 asks "what's happening that I can't see?" Threat Hunting isn't a job — it's a mindset.

Threat Hunting — 4-Step Process

▶ THREAT HUNTING PROCESS — 4 Steps
[1]HYPOTHESISBased on Threat Intel. Example: "APT41 uses DLL Sideloading. Are any DLLs loading from unusual directories?"
[2]HUNT QUERYTranslate hypothesis into a query. Run across the entire environment, no time limits.
[3]ANALYZEWhich process loaded the DLL? What's the parent process? When was it created? By whom? Pivot from 1 indicator → find more.
[4]DOCUMENTFound something → incident. Nothing found → document "hunted technique X, clean" so the team knows it's been checked.

Sample hunt query — find DLL Sideloading (DLL loading from unusual directories):

Elastic KQL — Hunt Query
# DLL Sideloading Hunt — Find DLLs loading from unusual directories
event.type: "library" AND
dll.path: (* AND NOT "C:\\Windows\\*" AND NOT "C:\\Program Files\\*")
AND process.name: ("svchost.exe" OR "lsass.exe" OR "explorer.exe")

# Logic: svchost/lsass/explorer should only load DLLs 
# from C:\Windows\ or C:\Program Files\
# If loading DLL from AppData, Temp, Downloads → SIDESTEPPING

Sigma Rules — Write New Detections

What is Sigma? A standard format for writing detection rules — vendor-agnostic. Write 1 Sigma rule → convert to Splunk SPL, Elastic KQL, Microsoft Sentinel KQL, QRadar AQL... All from 1 source. This is why Seniors must know how to write Sigma:

Sigma Rule — Credential Dumping Detection
title: Potential Credential Dumping via LSASS Access
id: a3a8c5e2-7f1b-4d9e-a6c3-8b2d1e4f5a7c
status: production
level: high
author: QA210
date: 2026/03/01
description: >
  Detects potential credential dumping by monitoring process access 
  to lsass.exe with specific access patterns used by Mimikatz 
  and similar tools.

logsource:
  category: process_access
  product: windows

detection:
  selection:
    TargetImage|endswith: '\lsass.exe'
    GrantedAccess|contains:
      - '0x1010'
      - '0x1410'
      - '0x143a'
      - '0x1410'
  condition: selection

tags:
  - attack.credential_access
  - attack.t1003.001
  - attack.credential_access
  - car.2019-04-004
Why Is Sigma Important?
Write 1 Sigma rule, run sigmac -t splunk -o output.txt rule.yml → get Splunk SPL instantly. Run sigmac -t elasticsearch -o output.txt rule.yml → get an Elastic query. 1 rule, multiple SIEMs. This is how large teams operate — they don't write separate queries for each platform.

Python Automation — Real Scripts, Not Hello World

The script below enriches IOCs from the VirusTotal API — ready to run, processes 200 IPs per hour automatically. Add CSV export + Slack webhook = mini SOAR:

Python — VirusTotal IOC Enrichment
#!/usr/bin/env python3
"""
VT IOC Enrichment Script — QA210
Enrich IP addresses via VirusTotal API v3.
Free tier: 4 requests/minute → ~200 IPs/hour.
"""
import requests
import json
import csv
from time import sleep

API_KEY = "YOUR_VT_API_KEY_HERE"
VT_BASE = "https://www.virustotal.com/api/v3"

def enrich_ip(ip: str, api_key: str) -> dict:
    """Enrich single IP via VirusTotal."""
    url = f"{VT_BASE}/ip_addresses/{ip}"
    headers = {"x-apikey": api_key}
    response = requests.get(url, headers=headers)
    
    if response.status_code != 200:
        return {"ip": ip, "error": response.status_code}
    
    data = response.json()
    stats = data["data"]["attributes"]["last_analysis_stats"]
    
    return {
        "ip": ip,
        "malicious": stats.get("malicious", 0),
        "suspicious": stats.get("suspicious", 0),
        "undetected": stats.get("undetected", 0),
        "country": data["data"]["attributes"].get("country", "Unknown"),
        "owner": data["data"]["attributes"].get("as_owner", "Unknown"),
        "reputation": data["data"]["attributes"].get("reputation", 0)
    }

def bulk_enrich(ip_list: list, api_key: str, output_csv: str = None):
    """Bulk enrich IP list. Auto-throttle for VT free tier."""
    results = []
    
    for i, ip in enumerate(ip_list):
        result = enrich_ip(ip, api_key)
        results.append(result)
        
        # Alert on high-risk IPs
        if result.get("malicious", 0) > 3:
            print(f"[HIGH RISK] {ip} — "
                  f"{result['malicious']} vendors flagged malicious "
                  f"| Owner: {result.get('owner', 'N/A')}")
        
        # VT free tier: 4 requests/minute
        sleep(15)
        
        # Progress
        if (i + 1) % 10 == 0:
            print(f"[PROGRESS] {i+1}/{len(ip_list)} IPs processed")
    
    # Export to CSV if requested
    if output_csv:
        with open(output_csv, "w", newline="") as f:
            writer = csv.DictWriter(f, fieldnames=results[0].keys())
            writer.writeheader()
            writer.writerows(results)
        print(f"[EXPORT] Results saved to {output_csv}")
    
    return results

# === USAGE ===
# suspicious_ips = ["45.33.32.156", "107.189.19.52", "91.234.99.42"]
# results = bulk_enrich(suspicious_ips, API_KEY, output_csv="vt_results.csv")

SOAR Playbook — Automating Response

Automated response playbook for malware detection — reduces MTTC from 20-45 minutes (manual) to under 2 minutes:

▶ SOAR PLAYBOOK — Malware Detection Auto-Response
[1]TRIGGEREDR alert — malicious process detected on endpoint.
[2]AUTO: Query ADGet user info + manager. Who's logged in? Which department? Privilege level?
[3]AUTO: IsolateIsolate endpoint via EDR API. Cut network access immediately — preserve forensic data.
[4]AUTO: Lock AccountTemporarily lock AD account (15 minutes). Block credential reuse.
[5]AUTO: Jira TicketCreate Jira ticket with full context: host, user, process tree, hash, VT results.
[6]AUTO: Slack AlertPost alert to #soc-incidents channel. Team receives info immediately.
[7]HUMAN: L2 ReviewL2 analyst reviews within 15 minutes. Confirm or adjust response.
[8]HUMAN: DecisionExtend isolation + full forensic OR remediate + unlock account.
MTTC: Under 2 Minutes vs 20-45 Minutes Manual
Manual response: 20-45 minutes from detection to isolation. During that time, the attacker has already moved laterally, dumped credentials, exfiltrated data. SOAR playbook: under 2 minutes. Steps 1-6 run automatically in ~30 seconds. L2 just needs to review and decide. The difference between "stopping it in time" and "being one step behind" is automation.

Threat Intelligence

L3 must know how to consume and produce threat intelligence. Tools: MISP / OpenCTI — feed management and correlation. Method:

  1. Feed Management — Subscribe to threat feeds (AlienVault OTX, Abuse.ch, MITRE ATT&CK). Ingest into MISP/OpenCTI. Auto-correlate with internal logs.
  2. APT Group Tracking — Track APT groups by region, sector, TTPs. Know which groups target your industry.
  3. TTP Mapping — Map every intel report to MITRE ATT&CK techniques. From technique → write detection rule → hunt query.
  4. Write Intel Reports — Actionable, not copy-paste. Format: TTP observed → IoC list → detection recommendations → hunting queries.

Lead & Mentor

L3 isn't just technical — you have to build the team. Coaching L1/L2, reviewing detection rules, designing tabletop exercises, building security programs. This is the difference between "Senior technical" and "Senior leader":

  1. L1/L2 Coaching — Pair investigation. Sit next to a junior, guide them through each step, ask "why did you make that decision?" to develop their investigative thinking.
  2. Detection Rule Review — Review the team's Sigma/YARA rules. Is the logic correct? Where are the coverage gaps? What's the false positive rate?
  3. Tabletop Exercise Design — Create simulated attack scenarios, let the team practice response. Discover process gaps before a real incident happens.
  4. Security Program Building — Build a detection engineering pipeline, define SLAs for alert response, create metrics dashboards for SOC effectiveness.
Learning Method — Phase 4
Don't sit waiting for alerts. Build your own hypotheses, hunt on your own, write your own detections, measure your own coverage gaps. One hunt session per week. One new Sigma rule per month. One SOAR playbook per quarter. Seniors create detections for things that nobody's alerting on yet — that's the real value.
06

Certification Roadmap

Certifications don't replace skills. But they're checkpoints — proving you've learned enough breadth. And many companies use certifications as CV filters. Here's the certification table by phase:

LevelTimelineFocus SkillsTarget Certifications
Newbie0–6 monthsWireshark, Linux, Windows Event LogSecurity+, Google Cyber
Junior L16M–2 yearsSplunk, Elastic, MITRE ATT&CK, EDRCyberOps, CSA, BTL1
Mid-Level L22–4 yearsIR, Volatility, Static Malware AnalysisCySA+, GCIH, BTL2
Senior L35+ yearsThreat Hunting, Python, SOAR, IntelCISSP, GCFA, GCTI, CISM
Certifications ≠ Skills
Don't take certifications just to get a piece of paper. Take them to validate you've understood enough breadth. Security+ doesn't make you an analyst — but it ensures you're not missing foundational knowledge. CISSP doesn't make you a Senior — but it ensures you understand security holistically. Certifications are checkpoints, not destinations.
07

5 Things to Do Today — No Matter What Level You're At

Reading this and doing nothing = wasted time. Here are 5 things you can do tonight:

  1. Install Wireshark + capture packets on your home network right now. Type tcp.flags.syn==1 and tcp.flags.ack==0 — see what's connecting to what. You'll be surprised how many servers your machine talks to that you never knew about. Every connection is a question: "Why is my machine connecting to this IP?"
  2. Open TryHackMe — do the SOC Level 1 room tonight. Free, real labs, nothing to install. Sign up → choose "SOC Level 1" path → start. Your first hour in a SOC lab is worth more than 10 hours of watching videos.
  3. Set up Elastic Stack locally with Docker in 15 minutes. docker-compose up — you've got a real SIEM running on your machine. Ingest Windows Event Logs, write your first query. This is a safe environment to make mistakes — and making mistakes is how you learn fastest.
  4. Read 1 real APT report on MITRE ATT&CK or Mandiant. Understand what real attackers do. Not CTFs, not labs — real adversaries targeting real victims. Know the enemy = know what you need to detect.
  5. Write your first 20-line Python script to read Windows Event Logs. import xml.etree.ElementTree — read .evtx files, analyze them yourself. Your first script = your first step into automation. From here, every next script is easier than the last.
Start Tonight
No more prep needed. No $500 course required. No need to wait until you're "ready." You'll never be ready — but you can start. Open Wireshark. Capture packets. Ask questions. That's how every Senior started — nobody was born knowing how to read packets.
END

Closing

Cyber Security doesn't lack learners. It lacks people who dare to do.

You read this article in 25 minutes. But doing every exercise across all 4 phases = 5 years of real experience. No shortcuts, no hacks — just sitting down, opening the tools, and doing the work.

The difference between a Senior and a Newbie isn't time — it's the number of times you refused to give up debugging an alert until you found the root cause. Every time you don't quit halfway, you move one step forward. Every time you choose to read logs instead of closing the alert, you move one step forward.

Start tonight. Open Wireshark. Capture packets. Ask questions.

Q
QA210
Security Researcher & Threat Analyst. If you read this far — you're more serious than 90% of people. Keep that energy. Every Senior was once a Newbie who didn't know how to open Wireshark.

Discussion