Detection & response

Every credential was authorized. That's the problem.

Prevention decides who may act. Nightlatch watches what actually happened — tailing the broker's audit stream, enriching source addresses with risk intelligence, and answering the question the first two legs can't: is an authorized agent behaving like a compromised one?

Monitor by default Six detectors Signed webhooks Reversible response

Detections

Six questions, asked continuously.

Each detector is configuration, not code. They read the same audit stream your auditor would, and they fold into deduplicated findings rather than paging you once per matching event.

DetectorThe question it answers
high_risk_ipIs an agent operating from an address scored hostile — a Tor exit, botnet command-and-control, or a drop-listed range?
new_source_ipDid an agent appear from outside its learned address baseline?
velocityA denial storm or token-mint storm — brute force, or a runaway loop?
dormant_awakeningDid a credential that idled for weeks suddenly come back to life?
event_matchTripwires: revoked-credential replay, break-glass admin-key use, lockouts
off_hoursActivity outside the fleet's expected hours (off by default — it earns its keep only in some environments)
findings · nightlatch monitor mode
02:14:31.008 FINDING svc-etl high_risk_ip src=185.220.101.1 tor_exit score=40
02:14:31.204 ACTION webhook → ntfy signed HMAC-SHA256
02:14:31.205 WOULD cipherlatch:revoke_tokens monitor mode — not fired
02:31:07.771 FINDING rpa-bot velocity denials=214/60s
02:31:12.640 FOLD repeat → acked finding no repage

Response

Run it in monitor for a week. Read what would have happened. Then decide.

A global mode gates every action. In monitor — the default — everything except logging is recorded as would_fire. Nothing touches your fleet until you say so, and what you turn on you can turn back.

log

A structured line, always safe, always on. The floor beneath every other action.

always available

webhook

An HMAC-SHA256-signed JSON POST — to ntfy, a Slack shim, or a SOAR pipeline. Signed, so the receiver can tell a real finding from a forged one.

HMAC-SHA256

revoke_tokens

The circuit breaker: kill an agent's outstanding tokens through the broker's own API. The agent keeps its identity and can mint again once the cause is cleared.

via Cipherlatch

revoke_agent

The heavier lever — revoke the agent itself. Reversible from the broker, because a detection product that can permanently destroy access is one nobody enables.

reversible

Findings, not alerts

Detections deduplicate into findings within a suppression window, carrying a capped evidence trail. One misbehaving agent is one thing to look at, not four hundred.

deduplicated · capped evidence

Acknowledge vs resolve

The lifecycle encodes intent. Ack means "seen — keep accumulating quietly"; repeats fold in silently. Resolve means "this is over"; a recurrence opens a fresh finding and fires actions again.

intent, not status

Why it needs a scoped key, not your master key. Nightlatch reads the audit stream and revokes agents — nothing more. Cipherlatch service keys exist because of exactly this: a machine principal carrying a role scoped to audit:read:all and agents:revoke:all, never platform admin. A watchdog should not hold the keys to the thing it watches.