skip to content

Your LSASS handle-access hunt returns 30,000 benign rows — why is that fine in a hunt but not a rule?

level: seniorimportance: must knowfreq 50%

answer

  1. once in bulk versus one at a time
  2. who pays for each benign row
  3. context travels with the hunter
  4. exclusions here are disposable
  5. hunted is not the same as detected

basics

~20 s

A hunt's output is reviewed once, in bulk, by an analyst already holding the context, so noise can be aggregated and filtered interactively. A standing rule's noise recurs forever, lands on whoever is on shift, and costs a fresh triage every firing.

solid answer

~50 s

The two consume noise completely differently. A hunt result is a single result set: I sort it, group it by source image, drop the endpoint agent, the backup client and the task manager in one pass, and spend my attention on the tail — 30,000 rows can collapse to a few dozen worth reading in minutes, and the cost of a benign row is one line in a table. A standing rule pays that cost per firing, forever, and pays it in somebody else's attention while they are holding other work. So the noisiest variant of the sweep — a read handle to `lsass.exe` from any source at all — stays a hunt query and is deliberately never promoted. What must not happen is quietly forgetting that: the variant list records that this procedure is *hunted*, not *detected*, so nobody plans controls from a coverage map that claims otherwise.

go deeper

for a junior

Understand that a hunt query and a standing detection are different things, and that a query returning thousands of legitimate results can still be a perfectly good hunt.

for a middle

Be able to explain the cost asymmetry concretely: reviewed once in bulk by someone with context, versus one firing at a time, forever, by whoever is on shift.

for a senior

Show the working method — aggregate before reading, exclude the enumerable known-good for this sweep only, read the tail — and be able to argue why a specific variant should stay a hunt rather than become a rule.

for a principal

Own the reporting consequence: make sure the difference between hunted and detected reaches whoever plans controls, because a coverage map that hides it will attract investment decisions built on a query nobody has run in months.

## Two different economics, not two different tolerances People describe this as a hunt having a "higher noise tolerance", which makes it sound like sloppiness. It is not a tolerance, it is a different cost structure. A hunt result is consumed **once, in aggregate, by a person who already holds the context**. I ran the sweep, I know what the technique is, I know which procedure each row corresponds to, and I am looking at all of the rows at the same time. That last part is what makes bulk noise cheap: with the whole set in front of me I can group by source image and see immediately that 29,600 of the 30,000 rows come from four pieces of software the estate is supposed to be running. Four exclusions, applied to this sweep only, and the tail I actually read is small. The marginal cost of a benign row is a row. A standing rule is consumed **one firing at a time, by whoever is on shift, forever, without context**. They did not choose the query, they are holding other work, and they must reach a verdict on this one event in isolation. The marginal cost of a benign firing is a whole triage, and it is charged to a different person than the one who wrote the rule. Multiply by every occurrence for as long as the rule exists. That asymmetry — bulk-and-once versus one-at-a-time-and-forever, self-served versus charged to someone else — is the entire answer, and it explains why the same logical predicate can be excellent as a hunt and unshippable as a detection. ## How you actually work a noisy result set The practical technique is to attack the volume before reading anything. Aggregate by the fields that carry legitimacy — source image, signing status, source user, host role — and read the counts, not the rows. Familiar high-volume sources get excluded for this sweep with a comment saying why. What survives is the interesting shape: a source image seen on two hosts out of nine thousand, a source running as a service account that has no business touching that process, a handle opened at an hour that host is normally idle. Crucially, the exclusions you apply here are **disposable**. They are good enough for one analyst's session because you can see what you excluded and undo it. A rule's exclusions are permanent blind spots that an adversary can deliberately live inside — which is another reason the promotion decision is not automatic. ## Promotion is a decision, and the answer is often no A hunt variant becomes a candidate for a standing rule only when its benign hits are few, *stable*, and attributable to a small enumerable set of sources you can exclude with a predicate that will not rot; and when a team is willing to own the resulting queue. The broadest variant here fails all of that: every endpoint agent, management tool and inventory scanner in a large fleet legitimately opens read handles to the credential process, the set changes whenever the platform team deploys something, and pinning it down would require exclusions so broad an intruder could simply run from inside them. So the right outcome is often that the noisiest variant is **deliberately left in the hunt and never promoted**. That is a considered decision, not a failure. Narrower variants off the same list — an unusual call stack, a specific source image, the dump file's creation — may promote perfectly well, and you can promote those while leaving the broad one where it is. ## Say out loud what is only hunted The failure mode that hurts later is silence. If the variant list is not written down with a *hunted* / *detected* column, the organisation ends up with a coverage map that claims this technique is handled, when what actually exists is a query a human runs when they remember. Someone will make an investment decision on that map. Record which procedures have a standing detection, which are only swept periodically, at what cadence, and by whom — and state that a hunted-only variant means there is no automatic notification if it happens tonight. ## And the null result One more discipline that belongs to the same honesty. If the sweep finds nothing, what you have learned is that the variants you searched for left no trace in the records you searched, over the window you could reach, on the hosts that were reporting. It is not evidence the estate is clean. Telemetry gaps, variants absent from your list, and hosts that stopped shipping records all produce exactly the same empty result set as an uncompromised fleet. Report the finding with its scope attached, and treat any host that produced *no* records at all across the window as a finding of its own.

  • What would make a variant of this sweep a genuine promotion candidate?
    Benign hits that are few, stable over time, and produced by a small enumerable set of sources you can exclude with a predicate that will not rot as the estate changes — plus a team willing to own the queue it creates. A narrow variant, such as a read handle with an unbacked call stack, usually qualifies where the broad one never will.
  • How do you record a variant you have decided never to promote?
    On the variant list, with an explicit hunted-not-detected marker, the cadence it is swept at, and who owns the sweep. The point is that anyone reading the coverage map sees there is no automatic notification for that procedure, so control investment is planned against reality rather than against a green cell.
  • The sweep found nothing across the whole window. What have you actually learned?
    That the variants on your list left no trace in the records you searched, over the window you reached, on the hosts that were reporting. Missing variants, telemetry gaps and silent hosts all produce the same empty result. Report the scope with the finding, and treat hosts that produced no records at all as a finding in their own right.
  • Someone proposes shipping the broad sweep as a rule but routing it to a low-priority queue instead of a notification. Good idea?
    Only if that queue has a named owner and a worked-through review cadence. Otherwise you have created an unworked backlog that grows forever and gives false comfort, which is worse than an honest hunted-only entry — the coverage map now says detected, and nobody is reading the queue.

A hunt is reading a warehouse inventory with a highlighter; a rule is having the warehouse phone you every time a box moves.

saying these in an interview costs you the question

  • Promotes every useful hunt query into a standing rule
  • Treats benign rows in a hunt as detection failures
  • Claims a technique is covered when only a hunt exists
  • Reads an empty hunt result as proof the estate is clean
  • Ships broad logic into an unowned queue and calls it coverage

context