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.
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
logaction 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:
| Family | Examples | What it gives you |
|---|---|---|
| Network | ip.src, ip.dst.asn, ip.dst.country, ip.proto | Address, ASN, and geo scoping |
| Transport | tcp.dst_port, tcp.window, tcp.ttl, tcp.mss | Port and TCP-stack characteristics |
| Application | tls.sni, tls.alpn, http.host, http.path, http.user_agent, dns.fqdn | Protocol-level targeting |
| Fingerprint | ja4l.rtt_us, ja4ssh.c2s_bytes, ja4ls.ttl | Latency, distance, and SSH session shape |
| ML verdicts | ml.traffic.c2, ml.traffic.scan, ml.flow.malicious, ml.jepa.similarity | Act on what Cortex concluded |
| IDS context | ids.score, ids.sids, ids.alert_count, ids.src_home_net | Act on what Thalamus matched |
| Threat intel | threat.score, threat.advice, threat.labels | Act on feed reputation |
| Workload identity | identity.k8s.src_namespace, identity.k8s.dst_workload, identity.k8s.src_label | Rules that name a Kubernetes workload, not an ephemeral pod IP |
| Flow behaviour | flow.burstiness, flow.unique_dst_ports, flow.flows_per_min | Catch 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:
| Action | Effect |
|---|---|
allow | Let the traffic through |
log | Record the match, enforce nothing |
drop | Drop it, and install a persistent block at the scope you chose |
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
| Scope | Blocks |
|---|---|
| IP | The source address, /32 for IPv4 or /128 for IPv6 unless you widen the prefix |
| IP + source port | Just that address and port pair |
| Fingerprint | Every connection presenting that fingerprint, whatever the address |
How enforcement lands
| Backend | Platform | Notes |
|---|---|---|
| nftables | Linux | Blocked sets plus per-fingerprint rules in a prerouting chain |
| iptables | Linux | For hosts that have not moved to nftables |
| NDIS | Windows | Drop-verdict interception, the role NFQUEUE plays on Linux |
| noop | Any | Evaluate 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
logmode first, read what it would have caught, then promote it todrop. - Maintain a per-tenant allow-list — placed above the global blocks, so it takes effect.