fix(ja4ebpf): Rocky Linux RPM builder, remove correlated field, fix thesis

- Dockerfile.package: migre go-builder de golang:bookworm (Debian) vers
  rockylinux:9, installe Go depuis le tarball officiel, remplace apt par
  dnf (clang llvm libbpf-devel bpftool)

- Suppression du champ 'correlated' de l'agent ja4ebpf : avec eBPF/XDP,
  la corrélation L3/L4↔L7 est toujours implicite par présence des champs.
  Supprimé de : session.go, manager.go, main.go (x5), clickhouse.go

- Thèse (6 corrections listées + cohérence correlated) :
  1. §3.5 + §3.9.1 : SSL_read retourne des octets bruts sans respecter les
     frontières H2 → buffer circulaire de réassemblage en Go userspace
  2. §3.1 : supprimé libpcap + CAP_NET_RAW, remplacé par définition uprobe
  3. §4 + §7 : compte exact 96 features en 8 familles (Famille 1–8),
     supprimé taxonomie F1–F11 obsolète, tous les totaux mis à jour
  4. §2.4 + §8 : remplacé 7 fausses URLs arXiv par [Référence à vérifier]
  5. §4 Famille 2 : ja4_drift_ratio → renvoi à Famille 8 (définition complète)
  6. §6.4 : ajouté limite 'Overhead de l'uprobe SSL_read'
  + §3.6 : supprimé correlated=0/1 du texte architectural

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
toto
2026-04-12 04:48:40 +02:00
parent b1218a2367
commit 957918c565
19 changed files with 104 additions and 92 deletions

View File

@ -283,9 +283,9 @@ func consumeSynEvents(ctx context.Context, rd *ringbuf.Reader, mgr *correlation.
TCPOptionsRaw: tcpOpts,
SYNTimestamp: time.Now(),
}
// Si TLS est déjà présent (arrivé avant SYN), marquer la session corrélée.
// Si TLS est déjà présent (arrivé avant SYN), les deux couches sont disponibles.
if s.TLS != nil {
s.Correlated = true
_ = s.TLS // corrélation implicite par présence des deux champs
}
})
}
@ -363,7 +363,7 @@ func consumeTLSEvents(ctx context.Context, rd *ringbuf.Reader, mgr *correlation.
}
// Corréler si L3/L4 est déjà présent
if s.L3L4 != nil {
s.Correlated = true
_ = s.L3L4 // corrélation implicite par présence des deux champs
}
})
}
@ -471,9 +471,7 @@ func consumeSSLEvents(ctx context.Context, rd *ringbuf.Reader, mgr *correlation.
if len(s.Requests) == 0 {
s.Requests = append(s.Requests, req)
}
if s.TLS != nil {
s.Correlated = true
}
_ = s.TLS // corrélation implicite
})
continue
}
@ -493,9 +491,7 @@ func consumeSSLEvents(ctx context.Context, rd *ringbuf.Reader, mgr *correlation.
HeaderOrder: req.Headers,
HeaderOrderSig: req.HeaderSig,
})
if s.TLS != nil {
s.Correlated = true
}
_ = s.TLS // corrélation implicite
})
continue
}
@ -635,9 +631,7 @@ func consumeHTTPPlainEvents(ctx context.Context, rd *ringbuf.Reader, mgr *correl
HeaderOrderSig: req.HeaderSig,
})
// Corréler si L3/L4 est déjà présent (TCP SYN capturé)
if s.L3L4 != nil {
s.Correlated = true
}
_ = s.L3L4 // corrélation implicite
})
}
}