Lion Cipher Lab

Fingerprint TLS clients with JA3/JA4 to hunt malware C2

Why it matters

Most of the traffic leaving a network in 2026 is TLS-encrypted, which is usually framed as a defender's problem: you cannot read the payload, so how do you catch command-and-control that hides inside HTTPS? The quietly powerful answer is that you do not need the payload. The very first message of every TLS handshake — the ClientHello — is sent in cleartext, and it spells out exactly how the client's TLS library is configured: which TLS versions it offers, which cipher suites and in what order, which extensions and elliptic curves. Different software builds that message differently, so hashing…

What you'll learn

Steps in this lab

  1. The encrypted-traffic problem, and the thing the ClientHello gives away
  2. JA3 and its successor JA4 — what each one is
  3. Turn fingerprinting ON in suricata.yaml, then test and reload
  4. Generate distinct client stacks on purpose
  5. Read the fingerprints out of eve.json with jq
  6. Match a fingerprint against a public malicious-JA3 feed
  7. The judgment: a fingerprint names the software, never the intent
  8. What you built, and where it plugs in

Open the full interactive lab →