PENUMBRA
Head 01
KNOWN
labelled attacks + benign
names the family it knows
ML-NIDSNEVER BLOCKS

SEETHE

PENUMBRA
Head 02
NOVEL
benign traffic only
flags what it has never seen
ML-NIDSNEVER BLOCKS

What it is

An AI network intrusion detector. It watches traffic flow by flow, names the attacks it knows, flags the ones it has never seen, and alerts your security team.

It never blocks: a human decides.

UNSEEN!

LIVEnetwork traffic →

The thesis

A CLASSIFIER
CAN'T SEE
WHAT IT
NEVER MET.

Trained on known attack families, a supervised model files anything new under “normal” - the only bucket it has for “nothing I recognise”. So Penumbra runs two heads, and measures whether the second one earns its keep.

KNOWN

labelled attacks + benign

“which family is this?”

+

NOVEL

benign traffic only

“is this unlike anything seen?”

5%unseen attacks caught by the classifier alone
→
35%with the novelty head, same 1% false-alarm budget

Measured, not claimed

THE
NUMBERS.

94,115→203alerts became incidentsCICIDS2017, real source IPs
12.6msto score one flowwas 139 ms; 0 decisions changed
92.9%of scans caught on our own networkafter re-learning normal, no labels
18.8→2.9%false alarms, after fixing our own bugE9a: threshold fitted on memorised rows
13real Microsoft Sentinel incidentslive workspace, every record DvcAction=Allow
0endpoints that can block trafficenforced in CI

How it works

FLOW → VERDICT → HUMAN

01SENSEpcap or flow records in, features out
02SCOREknown head + novelty head, 12.6 ms a flow
03SORTknown-threat lane · hunting lane · review lane
04SHIPincidents to Microsoft Sentinel as ASIM
05DECIDEa human. Always.
0101

Honesty is a feature

WE PUBLISH
OUR MISSES.

Re-learning normal did NOT beat moving thresholds (E8, refuted)A deep sequence model lost to nine cheap featuresOur shipped detector fired on 18.8% of benign traffic - our bug, measured and fixed (E9a)Weakest families? ~90% of Analysis and Backdoor rows duplicate another family exactly3 trees + 3 SVMs lost to the forest on all three datasets (E9)Our own Sentinel claim was wrong - measured, corrected

Every experiment is written down and committed before it runs. Refuted predictions stay in the record.

ALERT.NEVERBLOCK.

DvcAction = "Allow" // we did not block
ThreatConfidence = 93 // and we were sure
EventSeverity = "High"

At a 1% false-positive rate, auto-blocking takes a business offline faster than an attacker could. Penumbra surfaces. A human decides.

COME
SEE.

“View as guest” opens a read-only console on real CICIDS2017 and NSL-KDD alerts.
Bennett University Hackathon 2026 · Microsoft track · Problem 26