Cyberlium

SOC › Module 2 › Lesson 4

BeginnerModule 2Lesson 4/5

Lab — Hunting

Pack methodology, hypothesis, and hunt loop cards — hunting basics file from $HUNT_LAB only.

25 min+40 XP3 quiz
Module progress4 of 5

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"}
EOF

Command — 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

1

APPLY: This lab requires:

Multiple choice

Knowledge Check

2

APPLY: True or False: Hunting pack should reference $HUNT_LAB sample scenario.

True or False

Knowledge Check

3

APPLY: Hunting pack should include:

Multiple choice

← Previous

Answer all 3 knowledge checks to continue. (0/3 answered)