SOC › Module 2 › Lesson 4
Lab — Hunting
Pack methodology, hypothesis, and hunt loop cards — hunting basics file from $HUNT_LAB only.
Visual · t30_hunting_lab
Lab: hunting basics pack. $HUNT_LAB only. Original Cyberlium.
Opening
Hunting pack ties methodology to hypothesis to loop — paperwork before ATT&CK mapping module.
Lessons 2-1–2-3 named hunt methodology, hypothesis writing, and the hunt loop. This lab merges three cards into one $HUNT_LAB hunting artifact with optional jq intent on YOUR auth jsonl. No live tenant access — hunt literacy paperwork only. Next: Quiz — Threat Hunting Basics.
1. Lab contract: hunting basics pack
Create $HOME/cyberlium-lab/t30-m02-l04-hunting-lab.txt merging methodology, hypothesis, and loop sections with $HUNT_LAB scenario ID and M1 ethics cross-reference.
Optional: paste conceptual jq one-liner for failed-auth count on YOUR jsonl — no real usernames from production.
Command guide
Try these commands — Lab contract: hunting basics pack
═══ TOOLS & WEBSITES ═══ Browse / read these (authorized learning only — stay in YOUR lab / program scope)
Optional command
jq manual — https://jqlang.github.io/jq/manual/
MITRE T1078 — https://attack.mitre.org/techniques/T1078/ (valid accounts) Splunk hunt — https://docs.splunk.com/Documentation/ES
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
sudo apt install jq sudo apt install python3
macOS:
Command — copy this
brew install jq brew install python3
Windows:
Command — copy this
choco install jq
Download https://python.org/downloads/
═══ LINUX / macOS ═══
Command — copy this
export HUNT_LAB=${HUNT_LAB:-$HOME/cyberlium-lab/t30-hunt}
cat > "$HUNT_LAB/logs/auth.jsonl" <<'EOF'
{"ts":"2026-08-22T04:10:01Z","event_id":4625,"host":"WIN-HUNT01","user":"jsmith","src_ip":"203.0.113.77","result":"failure","reason":"bad password"}
{"ts":"2026-08-22T04:10:03Z","event_id":4625,"host":"WIN-HUNT01","user":"jsmith","src_ip":"203.0.113.77","result":"failure","reason":"bad password"}
{"ts":"2026-08-22T04:10:08Z","event_id":4625,"host":"WIN-HUNT01","user":"jsmith","src_ip":"203.0.113.77","result":"failure","reason":"bad password"}
{"ts":"2026-08-22T04:10:22Z","event_id":4624,"host":"WIN-HUNT01","user":"jsmith","src_ip":"203.0.113.77","result":"success","reason":"network logon"}
{"ts":"2026-08-22T04:12:00Z","event_id":4624,"host":"WIN-HUNT02","user":"svc_backup","src_ip":"10.0.3.50","result":"success","reason":"service logon"}
{"ts":"2026-08-22T04:15:33Z","event_id":4625,"host":"WIN-HUNT01","user":"administrator","src_ip":"10.0.2.10","result":"failure","reason":"bad password"}
EOFCommand — copy this
echo 'Seeded auth.jsonl — FAKE failed-then-success sequence for hunt lab'
python3 - <<'PY'
import json, os
lab = os.environ.get('HUNT_LAB', os.path.expanduser('~/cyberlium-lab/t30-hunt'))
path = os.path.join(lab, 'logs', 'auth.jsonl')
events = [json.loads(l) for l in open(path)]
by_user = {}
for e in events:
by_user.setdefault(e['user'], []).append(e)
print('Failed-then-success hunt (YOUR lab):')
for user, evs in by_user.items():
fails = [x for x in evs if x['result']=='failure']
succ = [x for x in evs if x['result']=='success']
if fails and succ: print(f' {user}: {len(fails)} fail → {len(succ)} success — INVESTIGATE')
PY═══ WINDOWS ═══
Command — copy this
Get-Content $HOME/cyberlium-lab/t30-hunt/hunt/hunt-hypothesis.md | Select-String Hypothesis Write-Output 'Hunt YOUR seeded auth.jsonl — no offensive playbooks'
Primary tools to practice this lesson: jq, python3. Reference sites: jq manual (https://jqlang.github.io/jq/manual/); MITRE T1078 (https://attack.mitre.org/techniques/T1078/); Splunk hunt (https://docs.splunk.com/Documentation/ES). Run every command in the box — install first, then the usage lines — only on YOUR lab / program scope.
2. Cross-check refusal boundaries
Grep pack for production tenant URLs, live hunt IDs, exploit scripts, offensive playbooks — redact or delete. Hunting pack stays documentary.
Update pack if you rotate lab sample — note new jsonl filename.
3. Lock the proof
chmod 600 on the pack. Quiz next — then ATT&CK Mapping.
Hunting basics literacy feeds ATT&CK lessons in M3.
4. What you ship: hunting basics pack for $HUNT_LAB
Merged methodology, hypothesis, loop sections. $HUNT_LAB named. NO live consoles. chmod 600.
5. What you record before the next lesson
Date. Hunting pack path. $HUNT_LAB named. File t30-m02-l04-hunting-lab.txt chmod 600.
6. Wrong vs right: stranger prod vs YOUR hunt telemetry
Worked failure — same MSF word, opposite target. Right never needs a café Wi-Fi or classmate laptop.
Wrong
Include production Splunk savedsearch in pack. Skip hypothesis section.
Right
Write YOUR hunting basics pack for $HUNT_LAB. chmod 600. Next: Quiz — Threat Hunting Basics.
Mission: freeze YOUR hunting basics pack
1) Merge M2 literacy sections. 2) Confirm zero production tenant refs. 3) Link M1 ethics cross-ref. 4) chmod 600.
Stuck? Ask Cyberlium AI Mentor
One governed hunting pack beats ten unauthorized dashboard screenshots.
Knowledge Check
APPLY: This lab requires:
Multiple choice
Knowledge Check
APPLY: True or False: Hunting pack should reference $HUNT_LAB sample scenario.
True or False
Knowledge Check
APPLY: Hunting pack should include:
Multiple choice