skip to content

Banking The Result

What you owe once the searching stops: a clean hunt written up as coverage, a promising query handed to someone who will own it, and a programme defended by what it actually produced.

on this pageshow

explore

questions

12

A threat hunt across your ESXi hosts returns no hits — what does that negative result establish?

level: juniorimportance: must knowfreq 56%

answer

  1. a statement about the search, not the estate
  2. three ways a zero happens
  3. telemetry, logic, scope
  4. ESXi hosts carry no endpoint agent
  5. no evidence found, in what was searched

basics

~20 s

A negative hunt establishes only that the logic you ran, over the telemetry you held, for the hosts that were reporting, in the window retained, matched nothing. It is a statement about the search, not proof the estate is clean.

solid answer

~50 s

It establishes that the logic I ran, against the telemetry I had, for the hosts that were forwarding, over the window actually retained, matched nothing. That is a bounded statement about my search, not a statement about the environment. A zero has three possible parents: the behaviour never happened; it happened in a form my logic did not match; or it happened somewhere my logic could not see. On a virtualisation cluster the third is the live risk, because ESXi hosts sit outside the endpoint-agent estate and only appear in the search if each was configured to forward `auth.log` and `shell.log` off the host. So I bank the negative with its scope attached — technique identifiers, the host list, the sources, the date range, and the hosts that were silent. A negative with a scope is coverage; a negative without one is just a sentence.

go deeper

for a junior

Be ready to say, in one sentence, that a hunt with no hits establishes only that your queries matched nothing in the records you actually searched. Naming the three limits — telemetry, logic, scope — is what a screener is listening for.

for a middle

An interviewer expects you to explain how a zero is manufactured by the pipeline rather than the adversary: sources that were never forwarded, retention shorter than the time picker, and logic that encodes one variant of a technique.

for a senior

Show that you would not write the negative up until you had tested the zero itself, and that you treat the discovery of eleven blind hosts as the hunt's real output rather than an aside.

for a principal

Own the framing risk: a bounded negative is read as an assurance by everyone above you unless the write-up prevents it. Decide what your organisation is allowed to conclude from an empty hunt, and say so in the standard.

## The claim a hunt can and cannot make Threat hunting is a deliberate search for adversary behaviour that no alert fired on. Most hunts end the same way: nothing. That outcome is normal and it is still worth something — but only if you are precise about what it means, because "we hunted for it and found nothing" is the single easiest sentence in security operations to over-read. A hunt result is the output of a pipeline with three independent stages, and every one of them must have worked before the zero says anything about an adversary at all: 1. **The telemetry existed.** The records describing the behaviour were generated, shipped, parsed and retained for the period you claim to have covered. 2. **The logic matched.** Your query expressed the behaviour in the form the adversary would actually have used, not just the one form the write-up illustrated. 3. **The scope covered the ground.** The hosts, accounts and time range you searched include the place and moment the behaviour would have occurred. If any stage failed, the zero is about your pipeline, not about the estate. That is why a bare "no findings" is close to worthless: it does not say which of the three it is asserting. ## Why a virtualisation cluster makes this concrete Suppose a public write-up describes an actor pivoting from stolen administrator credentials into vCenter, enabling SSH or the ESXi Shell on the hosts, and running commands directly on the hypervisors. You hunt it. Every one of the three stages is fragile here: - ESXi is not a general-purpose operating system running your endpoint agent, so the richest telemetry you have everywhere else simply does not exist on these machines. What you have is host syslog — authentication events, shell command records, the host agent and vCenter agent logs — and only if each host was pointed at a collector. - Host-local ESXi logs live on a small scratch area and can roll quickly or not survive a reboot, so a host that was not forwarding has no recoverable history at all. - Retention for that syslog stream may be far shorter than the retention your search interface implies for other sources. A ninety-day time picker over a fourteen-day stream returns zero rows for the seventy-six days that were never there, and returns them without an error. So a truthful negative from that hunt might be: *no records matching three named techniques were found in forwarded ESXi authentication and shell logs from 37 of 48 hosts, over the 14 days retained*. Every clause in that sentence is load-bearing, and dropping any of them turns a defensible statement into an indefensible one. ## Getting the direction of the claim right The reliable formulation is that the hunt found no evidence of the behaviour in the records searched. It did not establish the behaviour's absence, and it certainly did not establish the absence of an adversary — an intruder who never touched a hypervisor is entirely compatible with your result, and so is one who did it on a host that was never forwarding. Nor does a zero say anything about your detection rules. A hunt query is an ad-hoc search a human wrote and ran once; a deployed rule is a different artefact with a different failure mode. Conflating the two is a common wrong answer. ## Why the negative is still worth banking Three reasons a properly recorded empty hunt earns its keep: - **It is coverage evidence.** Six months later, someone will ask whether this technique was ever looked for in the cluster. A scoped record answers that; a memory does not. - **It exposes the gap.** The most useful output of that hunt is often not the security result at all — it is the discovery that eleven hosts are invisible. That gap is actionable in a way the zero is not. - **It is a baseline.** When the same hunt runs next quarter with more hosts forwarding and longer retention, you can say the estate's answerability improved, which is a real claim about the defence. ## The failure mode on the reading side A hunter writes a careful, bounded negative and an executive, an auditor or a project sponsor reads it as "we checked, we're fine". That collapse happens by default unless the write-up prevents it in plain language, near the top, in the same sentence as the result. Put the gaps where the conclusion is, not in an appendix nobody opens. ## The one thing a zero does prove It proves something about you rather than the adversary: that a named hypothesis was tested, to a stated depth, over stated ground, on a stated date, by a named person. That is a modest claim, and it is the only one the evidence supports.

  • Someone says the hunt proved the cluster was not compromised by that technique. How do you correct them without making the hunt sound worthless?
    I would say the hunt tested a specific hypothesis over specific ground and found nothing there, which is genuinely useful and worth recording. Then I would name the ground: fourteen days of forwarded logs from thirty-seven of forty-eight hosts. The correction is not that the hunt failed, it is that its conclusion has edges, and the eleven unsearched hosts are the next piece of work rather than a footnote.
  • Does an empty hunt tell you anything about whether your detection rules for that technique work?
    No. A hunt query is an ad-hoc search a human ran once; a deployed rule is a separate artefact running continuously with its own inputs and its own ways of silently breaking. A zero from the hunt says nothing about whether the rule would fire, and a rule that has never fired says nothing about whether the technique occurred. They are separate questions and get answered separately.
  • The hunt was based on one public write-up of the technique. What does that limit?
    It limits the logic stage. The write-up shows one observed implementation, and my query almost certainly encodes that implementation's specifics — a particular command form, a particular sequence. An actor who reached the same objective through the vCenter API rather than a host shell would produce no match. I record which variants the logic covered so the negative is not read as covering the technique in general.

Searching three rooms of a twelve-room house, with the lights off in nine of them and the last hour of the CCTV overwritten, and reporting "nobody in the house". The search was real; the conclusion is bigger than the search.

saying these in an interview costs you the question

  • Treats no hits as proof the environment is clean
  • Reports 'no findings' with no host list or date range
  • Assumes the search window equals the data's retention
  • Thinks an empty hunt validates the detection rules
  • Drops silent hosts from the count instead of recording them

context

open as a page

Your hunt finds suspicious activity that no detection rule ever alerted on. Does that make it less likely to be malicious?

level: juniorimportance: must knowfreq 55%

basics

~10 s

No. A rule set only covers behaviour someone wrote a rule for, over sources someone connected. Silence measures your detection coverage, not the activity's intent. Judge the behaviour on its own evidence.

open as a page

What must a hunt query gain before it can run unattended as a detection rule?

level: juniorimportance: must knowfreq 62%

basics

~20 s

It has to stand without its author: logic narrowed from browse-everything to one defensible claim, an explicit threshold and evaluation window, a named owner who answers when it misfires, and triage notes saying what benign matches look like and what the analyst does next.

open as a page

What must an empty threat hunt's write-up record for the negative to count as coverage later?

level: middleimportance: should knowfreq 44%

basics

~20 s

Record the hypothesis and technique identifiers, the exact logic, the sources it ran against, the date range bounded by real retention, the hosts in scope versus searched versus silent, and what a hit would have looked like.

open as a page

A hunt hit lands in a self-hosted CI runner's job logs. What do you preserve before you start pivoting?

level: middleimportance: should knowfreq 48%

basics

~20 s

Export the matched records with their source, event time and collection time, and capture the query provenance: exact text, source searched, time range and timezone. Build-platform run history expires and the next job wipes the workspace.

open as a page

Sysmon Event IDs 19, 20 and 21 all record WMI activity — which one shows persistence is armed?

level: middleimportance: should knowfreq 48%

basics

~20 s

Event ID 21, the WmiEventConsumerToFilter binding. A filter (19) is a trigger with nothing attached and a consumer (20) is an action nothing calls; only the binding wires them together. Even then, 21 proves the subscription was registered, not that it has ever run.

open as a page

Your ESXi hunt query returned zero rows — how do you establish the zero is real before writing it up?

level: seniorimportance: should knowfreq 38%

basics

~20 s

Prove the data was there before concluding the behaviour was not. Check which hosts delivered events and when, check real retention, check the filtered fields are still populated, and run a broader search that must return known-benign activity.

open as a page

The release manager says your build-runner finding was an engineer debugging a failing job. How do you settle it?

level: seniorimportance: should knowfreq 44%

basics

~20 s

Settle it on evidence, not assertion: reconcile the commands against the repository's pipeline definition, find the authenticated identity and how it reached the runner, look for a change record, and check whether anything left the host. Unreconciled means escalate.

open as a page

A hunt enumerated existing WMI subscriptions estate-wide; the promoted rule watches creation events. What coverage was lost?

level: seniorimportance: should knowfreq 44%

basics

~20 s

Everything already in place. The hunt asked what exists right now; the rule only sees what is created from the moment it goes live, so the entire existing backlog — including anything planted before telemetry reached that host — is invisible to it forever. Promotion has to ship a recurring state sweep alongside the rule.

open as a page

What do you put in front of an incident lead when handing over a live hunt finding with no enrichment?

level: middleimportance: nice to knowfreq 33%

basics

~20 s

A one-line claim, the raw records with time range and timezone, the hypothesis and what would disprove it, your confidence and its basis, what is still live, what you already touched, and the specific decision you are asking for.

open as a page

Half your WMI persistence hunt needs a human to read the consumer's command line. What do you promote?

level: seniorimportance: nice to knowfreq 30%

basics

~20 s

Split it. Promote the half you can state as a decidable claim — a binding created outside the known management accounts — and keep the half that needs a human judgment on the command line as a documented recurring hunt. Encoding looks-suspicious as a keyword list buys a noisy rule and a false sense of coverage.

open as a page

An executive reads your empty ESXi hunt and asks you to confirm the cluster is clean — what do you commit to?

level: principalimportance: nice to knowfreq 27%

basics

~20 s

Commit to the bounded statement, not the binary: what was searched, over which hosts, for how long, and what remains unsearched. Then convert the gap into a costed telemetry ask, because blind hosts can never yield a stronger answer.

open as a page