Skip to main content

Amygdala

Detection becomes action, automatically.

When something gets flagged — a bot, a credential-stuffer, a known-bad fingerprint, a fresh threat-intel hit — Amygdala turns it into a block. It is the rule engine and enforcement layer inside every Synapse agent: you author a rule once, the platform distributes it, and each agent's Amygdala evaluates and enforces it locally against its own traffic.

Signalsnetwork + portsTLS, HTTP, DNSfingerprintsML verdictsIDS contextthreat intelworkload identityflow behaviour~80 rule fieldsRule engine — runs inside every agentRules, evaluated in orderrule 1 → rule 2 → rule 3 → …the FIRST rule that matches decidesan allow does not outrank a drop — order doesallowlet it throughlogrecord what itwould have doneprove a rule safelydrop+ persistent blockIP · IP+port· fingerprintTLS ClientHello blockingneeds an intercept path —the handshake must be parsedbefore there is a verdictEnforcement backendsnftables · iptables (Linux)WFP · Packet Filter (Windows)blocks land in the kernelHillockkernel enforcementsee the Hillock diagramInputsEvaluationActionBackendsSignalsnetwork · ports · TLS · HTTPfingerprints · ML verdictsIDS · threat · k8s identity~80 rule fieldsRules, evaluated in orderrule 1 → rule 2 → rule 3 → …the FIRST match decidesallowlet it throughlogrecord, enforce nothingprove a rule safelydrop+ persistent blockIP · IP+port · fingerprintEnforcement backendsnftables · iptablesblocks land in the kernelInputsEvaluationActionBackends
Rules are walked in order — the first match decides.

What Amygdala is for

  • Auto-respond to detections. A rule that says "if the ML classifier calls this traffic C2, block the source for 24 hours" runs on every agent that receives it.
  • Match on far more than addresses. Rules are written in wirefilter and can reach ML verdicts, IDS context, threat intelligence, Kubernetes workload identity and flow behaviour — not just IP and port.
  • Enforce in the kernel. Blocks land in nftables, iptables or, on Windows, NDIS. Nothing is enforced in userspace on the hot path.
  • Try before you enforce. A log action records what a rule would have done without acting on it, so a rule can be proven on live traffic first.

What rules can match on

The rule scheme carries around eighty fields. The families matter more than the individual names:

FamilyExamplesWhat it gives you
Networkip.src, ip.dst.asn, ip.dst.country, ip.protoAddress, ASN, and geo scoping
Transporttcp.dst_port, tcp.window, tcp.ttl, tcp.mssPort and TCP-stack characteristics
Applicationtls.sni, tls.alpn, http.host, http.path, http.user_agent, dns.fqdnProtocol-level targeting
Fingerprintja4l.rtt_us, ja4ssh.c2s_bytes, ja4ls.ttlLatency, distance, and SSH session shape
ML verdictsml.traffic.c2, ml.traffic.scan, ml.flow.malicious, ml.jepa.similarityAct on what Cortex concluded
IDS contextids.score, ids.sids, ids.alert_count, ids.src_home_netAct on what Thalamus matched
Threat intelthreat.score, threat.advice, threat.labelsAct on feed reputation
Workload identityidentity.k8s.src_namespace, identity.k8s.dst_workload, identity.k8s.src_labelRules that name a Kubernetes workload, not an ephemeral pod IP
Flow behaviourflow.burstiness, flow.unique_dst_ports, flow.flows_per_minCatch scanning and beaconing by shape

Because ML, IDS and threat-intel signals are ordinary fields, one rule can combine them — a source is blocked when the classifier calls it a scanner and the IDS has already alerted on it, rather than on either alone.

Actions and precedence

A rule resolves to one of three actions:

ActionEffect
allowLet the traffic through
logRecord the match, enforce nothing
dropDrop it, and install a persistent block at the scope you chose
Rules are evaluated in order — first match wins

Amygdala walks the rule set top to bottom and takes the first rule that matches. An allow does not automatically outrank a drop: whichever appears earlier decides, and everything after it is never consulted.

Put your exceptions above the broad blocks they are meant to escape. A tenant allow-list placed below a global deny will never fire.

If no rule matches at all, traffic is allowed.

What a drop actually blocks

ScopeBlocks
IPThe source address, /32 for IPv4 or /128 for IPv6 unless you widen the prefix
IP + source portJust that address and port pair
FingerprintEvery connection presenting that fingerprint, whatever the address

How enforcement lands

BackendPlatformNotes
nftablesLinuxBlocked sets plus per-fingerprint rules in a prerouting chain
iptablesLinuxFor hosts that have not moved to nftables
NDISWindowsDrop-verdict interception, the role NFQUEUE plays on Linux
noopAnyEvaluate and report without touching the host firewall

Fingerprints derived from the TCP handshake can be enforced as ordinary firewall rules. Blocking on JA4 — the TLS ClientHello — is different: the handshake has to be parsed before a verdict exists, so it needs an intercept-for-verdict path. Amygdala offers two, AF_XDP and NFQUEUE, with AF_XDP built for line-rate handshake throughput where NFQUEUE tops out.

How it fits

Amygdala is the enforcement layer of the Gen0Sec platform. Cortex and Thalamus decide what looks malicious; Amygdala decides what to do about it and makes the kernel do it. Hillock is the kernel-level firewall it drives on Linux hosts.

Use cases

  • Block a credential-stuffing tool by fingerprint so rotating its IPs does not help it.
  • Write Kubernetes-aware rules that name a namespace or workload instead of a pod IP that changes on every restart.
  • Require two signals before acting — an ML verdict and an IDS hit — to keep false positives off the block list.
  • Ship a rule in log mode first, read what it would have caught, then promote it to drop.
  • Maintain a per-tenant allow-list — placed above the global blocks, so it takes effect.

Next steps

  • Synapse — every Synapse agent ships Amygdala configured and ready
  • Hillock — the kernel-level enforcement layer Amygdala drives
  • Cortex — the ML verdicts Amygdala rules can match on
  • Thalamus — the IDS context Amygdala rules can match on