Connect identity, authentication, message intent, URL infrastructure, and campaign relationships into one explainable analyst decision.
message → identity → content / URL → graph links → decision → investigation
Product visualization. UI values are illustrative; measured public-replay metrics are reported below.
Phishing and BEC are not just text-classification problems. High-confidence investigations often depend on who the sender claims to be, where replies go, whether authentication failed, what the message asks the user to do, which domains/URLs are involved, and whether the same infrastructure is targeting other recipients.
| 01 · Identity Executive impersonation, reply-to mismatch, first-seen sender and authentication failures. |
02 · Intent Urgency, payment, credential requests and recipient targeting become explainable content-risk signals. |
03 · Infrastructure Sender domains, reply domains and URLs create reusable threat relationships. |
04 · Campaign Connected components surface shared infrastructure and repeated attack campaigns. |
Every decision contains a class (benign, phishing, bec), a risk score, normalized features, and human-readable reasons. Campaign discovery then links messages that reuse sender domains, reply-to domains or URLs.
The checked-in fixture contains six synthetic messages: three malicious and three benign.
| Metric | Result |
|---|---|
| Messages | 6 |
| True positives | 3 |
| False positives | 0 |
| Precision | 1.00 |
| Recall | 1.00 |
| False-positive rate | 0.00 |
| Campaign components | 5 |
These results demonstrate the detection/evaluation mechanics on the included deterministic fixture. They are not production email-security efficacy claims.
| Signal family | Examples |
|---|---|
| Identity | executive impersonation, reply mismatch, first-seen sender |
| Authentication | normalized SPF / DKIM / DMARC failures |
| Content | urgency, payment requests, credential requests |
| URL / domain | suspicious TLD, mismatched or reused infrastructure |
| Behavioral | many recipients, unusual targeting patterns |
| Graph | sender / domain / URL connected components |
- Review the product dashboard and architecture above.
- Open
src/phishgraph/features.pyfor explainable identity/content/URL signals. - Open
src/phishgraph/detector.pyfor scoring and classification. - Open
src/phishgraph/graph.pyfor campaign discovery. - Inspect
reports/baseline.jsonand launch the analyst dashboard.
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
phishgraph --input sample_data/messages.jsonl --output reports/baseline.json
python -m unittest discover -s tests -vpython -m pip install streamlit
streamlit run dashboard/app.pyThe dashboard includes sender-domain risk trends, decision mix, campaign clusters, investigation queue, evidence-signal distributions and message-level drill-down.
src/phishgraph/
├── models.py normalized message record
├── features.py identity, auth, content + URL features
├── detector.py explainable scoring + class decision
├── graph.py connected campaign discovery
├── evaluation.py precision / recall / FPR
└── cli.py deterministic replay entry point
sample_data/ synthetic labeled email telemetry
reports/ checked-in measured replay
assets/ product + architecture visuals
dashboard/ product-style analyst surface
tests/ scoring + graph invariants
A production system would ingest Microsoft 365 / Google Workspace telemetry, secure email gateway events, URL reputation, domain age, directory context and thread history; use calibrated ML/LLM models behind deterministic evidence constraints; and feed analyst dispositions back into thresholding and campaign intelligence.
Privacy boundary: the checked-in dataset is synthetic and contains no real mailbox content.