Skip to content

stage(research): complete — research brief + findings - #9

Merged
craig-dt merged 3 commits into
mainfrom
stage/research
Aug 11, 2026
Merged

stage(research): complete — research brief + findings#9
craig-dt merged 3 commits into
mainfrom
stage/research

Conversation

@craig-dt

Copy link
Copy Markdown
Collaborator

Stage 1 of the pipeline. Docs only — no code.

Delivers docs/research-brief.md (the approved gate) and docs/research.md (findings against it), and advances current_stage to prd.

Three findings that change the design as briefed

1. Suricata over Snort 3. Decided on your stated tiebreaker — volume of high-confidence free rulesets. Suricata has ~30 centrally-indexed free sources with a declared licence each (OISF/suricata-intel-index), and ET's per-rule confidence metadata gives a machine-checkable Tier 2 admission filter. Snort's counter-argument is recorded: Talos LightSPD is curated by paid researchers while ET Open is community-produced.

2. Replay only for PANW. Zeek and Suricata read a pcap natively; only PANW VM-Series has no offline ingest. The brief sent everything through replay. Since replay is the largest threat to label fidelity — and a dropped packet is an invisible missing label — keeping Tier 2/3 offline makes them deterministic and reproducible, and confines the risk to the one source that can't avoid it.

3. JA4 as enrichment, not a label. This contradicts the brief and is the most significant finding:

  • abuse.ch SSLBL's JA3 list has its newest entry dated 2021-08-03 and warns its fingerprints are "not been tested against known good traffic yet and may cause a significant amount of FPs". The file regenerates every 5 minutes, so mtime-based freshness checks would call it healthy.
  • JA3 is collision-prone and destabilised by Chrome/Firefox ClientHello shuffling. For training data the costly failure is a collision mislabelling benign traffic.
  • No free trustworthy JA4 malicious-verdict feed exists, and no threat name is derivable from a fingerprint match.
  • Licence flag: JA4+ (JA4S/JA4H/JA4X/…) is FoxIO License 1.1, non-commercial only. Plain JA4 is BSD 3-Clause. Recommend restricting to plain JA4.

Also surfaced

  • pcap ingest normalization is a real work item. Zeek cannot read pcapng at all; Suricata only partially, breaking on multi-datalink files. Since pcapng is Wireshark's default, "all commonly supported formats" needs a detect/convert/split stage with the conversion recorded in provenance.
  • Positive Technologies rule sources excluded — non-standard licence (noted per your guidance) and the vendor has been under US sanctions since 2021. Flagged as your call.
  • No government body publishes a maintained ruleset. Stated plainly rather than padding the list.

Open items

4 decisions needed from you and 5 open questions are listed at the end of docs/research.md — chiefly the JA4 enrichment-vs-label ruling, the PT sanctions call, whether JA4+ needs legal review, and whether the lab is a v1 prerequisite.

Closes #1

🤖 Generated with Claude Code

Part A of Stage 1. Records the four decisions from the grill:
- PANW VM-Series is a Tier 1 trust source; replay architecture accepted
- trust modelled per-source, not per-rule (so ruleset curation is the
  entire false-positive defence)
- free rulesets preferred, 30-day delay acceptable, search broadened to
  government and professionally-curated sources
- licence status must be recorded, not satisfied; unlicensed is acceptable
- validation is trust-by-construction (logged as an explicit assumption)

Also notes that designing and building the lab environment is deferred to
plan/build, not dropped.

Refs #1
Three findings that change the design as briefed:

1. Suricata over Snort 3, decided on free high-confidence ruleset volume
   plus a machine-readable licence/provenance index (OISF/suricata-intel-index)
   and per-rule ET confidence metadata usable as a Tier 2 admission filter.

2. Replay only for PANW. Zeek and Suricata read pcaps natively; only
   PANW VM-Series has no offline ingest. Keeping Tier 2/3 offline makes them
   deterministic and confines replay-fidelity risk to the Tier 1 path.

3. JA4 as enrichment, not a label. The canonical free JA3 feed (abuse.ch
   SSLBL) is frozen at 2021-08-03 and self-declares untested FP posture;
   JA3 is collision-prone and broken by ClientHello shuffling; no free
   trustworthy JA4 verdict feed exists and no threat name is derivable.
   Also flags FoxIO License 1.1 (non-commercial) on the JA4+ suite —
   plain JA4 is BSD 3-Clause and safe.

Also documents a required pcap ingest normalization stage: Zeek cannot read
pcapng at all, Suricata only partially.

Refs #1
@craig-dt craig-dt mentioned this pull request Aug 11, 2026
9 tasks
Craig reviewed docs/research.md and left inline notes; all 24 resolved.

Corrections to my own findings:

- Fixed a real bug in the proposed Tier 2 admission filter. The global
  rule (confidence == High AND severity in Major,Critical) would have
  excluded 100% of the IOC feeds (abuse.ch, malsilo, pawpatrules), which
  carry no ET confidence taxonomy — admitting ET Open alone. Replaced with
  a per-source policy: metadata filter for signature rulesets, wholesale
  admission plus snapshot provenance for IOC feeds.

- Reversed the 'drop JA3' conclusion. ET Open maintains its own
  emerging-ja3.rules with created_at dates through 2026_03_13, carrying
  confidence and signature_severity metadata, MIT-licensed, ~100+ rules
  targeting malware C2. Having found abuse.ch SSLBL frozen at 2021 I
  generalised wrongly to 'no trustworthy free JA3 source'. ET's rules are
  kept and confidence-filtered; only the abandoned SSLBL source is dropped.

- Narrowed the ClientHello-shuffling critique: it degrades JA3 for browser
  identification, but ET's rules fingerprint malware TLS stacks, which are
  typically fixed.

- Clarified that '>70% metadata coverage' is not '70% admitted'.

Decisions recorded: Suricata; Approach B; vwire not tap; no --topspeed;
Positive Technologies excluded; JA4+ approved with Legal engaged; lab is a
v1 requirement; NGFW default with --offline for Tier 2 only; millisecond
clock accuracy; pcapng supported via editcap normalization; encrypted
detection lives in Tier 2 as Suricata rule content via native ja3.hash /
ja4.hash keywords; JA4 as enrichment until ET ships ja4 rules.

Adds commercial pricing as requested: ET Pro ~$900/sensor/year list
(~$750 reseller); Secureworks and Stamus are quote-only.

Answers the fingerprint-aging question: JA4/JA3 hashes are deterministic
and never reassigned, so aging is about the population of software sharing
a fingerprint, not expiry.

Filed #10 (untagged ET rules) and #11 (admission-filter measurement).

Refs #1
@craig-dt

Copy link
Copy Markdown
Collaborator Author

Review notes resolved — all 24 inline notes actioned; braces stripped and decisions folded into docs/research.md.

Two corrections to my own findings

The admission filter had a real bug, which your "what is the impact to the other sets?" note exposed. The global rule confidence == High AND severity in (Major, Critical) would have excluded 100% of the IOC feeds — abuse.ch, malsilo, pawpatrules carry no ET confidence taxonomy, so the condition is false for every rule in them. As written it admitted ET Open and silently deleted everything else. Now a per-source policy: metadata filter for signature rulesets, wholesale admission plus snapshot provenance for IOC feeds, where FP risk lives in the indicator list rather than the rule logic.

"Drop JA3" is reversed, with your agreement. ET Open maintains its own emerging-ja3.rulescreated_at dates through 2026_03_13, confidence and signature_severity metadata on every rule, MIT-licensed, ~100+ rules targeting malware C2 (Cobalt Strike, Remcos, Trickbot). Having found abuse.ch SSLBL frozen at 2021, I generalised to "no trustworthy free JA3 source" — wrong. Only the abandoned SSLBL source is dropped.

Also narrowed: the ClientHello-shuffling critique degrades JA3 for browser identification, but these rules fingerprint malware TLS stacks, which are typically fixed. And clarified that ">70% metadata coverage" is not "70% admitted" — coverage means the tag exists; admission also requires High and Major/Critical.

Your Tier 2 framing was right at the mechanism level

Suricata matches fingerprints natively via the ja3.hash / ja4.hash rule keywords, so encrypted detection is Tier 2 rule content — no separate engine, no separate feed pipeline, and it inherits the same filter, snapshot provenance, and tiering as every other rule. JA4 stays enrichment only because ET ships no ja4 rules yet; it promotes into Tier 2 with zero architectural change the day they do.

Also added

  • Pricing: ET Pro ~$900/sensor/year list, ~$750 via the OPNsense reseller. Secureworks scwx/* and Stamus nrd-* publish nothing — quote-only.
  • Aging answer: a JA3/JA4 hash is deterministic and never reassigned, so aging isn't expiry — it's the population of software sharing a fingerprint changing. Malware rotating its TLS library yields false negatives (inert entries); benign software adopting a fingerprint yields false positives (the dangerous case). Sourcing verdicts through ET rules puts that maintenance burden on ET.
  • Issues Research: should untagged ET Open rules be admitted? #10 (untagged ET rules) and Measure Tier 2 admission-filter impact per source #11 (admission-filter measurement) filed for the deferred items.

Open questions are down from 5 to 5 — but they're different ones, all narrower and mostly empirical.

@craig-dt
craig-dt merged commit 3f22c15 into main Aug 11, 2026
2 checks passed
@craig-dt
craig-dt deleted the stage/research branch August 11, 2026 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Stage: Research

1 participant