JA3/JA4 TLS ujjlenyomat

A JA3 és JA4 olyan módszerek, amelyekkel a TLS-kézfogás (ClientHello) alapján egyedi ujjlenyomatot képezhetünk a kapcsolódó kliensről. Segítségével azonosítható, hogy milyen szoftver, csomag és verzió küldött egy HTTPS-kérést — még akkor is, ha a HTTP-fejlécek álcázva vannak.

JA3

A JA3 az első generációs TLS-fingerprintelési módszer, amelyet 2017-ben a Salesforce fejlesztett ki.

Hogyan működik?

  1. Kivonjuk a TLS ClientHello üzenetből a következő mezőket:
    • TLS verzió
    • Támogatott titkosítók (cipher suite) listája
    • Kiterjesztések listája
    • Elliptic curve paraméterek (supported groups)
    • Elliptic curve point formatok
  2. Ezt a négy mezőt pontokkal választjuk el
  3. Az egész stringből MD5 hash-t számolunk

Példa:

769,4865-4866-4867-49195-49199,...,0-11-10-35-16-22-23-13-43-45-51-21,,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21
→ JA3: 24a93e438d5018ee7f8390e2ecf68ea7

Korlátai

  • Csak az első (kliens által küldött) ClientHello-t elemzi
  • Nem köti össze a TLS-választ (ServerHello), ezért nem tudja pontosan, melyik titkosítót végül használják
  • Egyszerű MD5 hash: hash-ütközés lehetséges
  • Nem differenciál a rendszerfrissítések között (pl. ugyanazon Chrome két verziója hasonló ujjlenyomata lehet)

JA4

A JA4 a JA3 továbbfejlesztése, szintén a Salesforce-tól (2023).

Fejlesztések a JA3-hoz képest

  • Több komponens: nem csak a ClientHello-t, hanem a ServerHello-t is elemzi, és a kettőt összekapcsolja
  • Részletesebb titkosítólista: a sorszámozott cipher suite-ek helyett a tényleges neveket használja (pl. tls13_aes_256_gcm_sha384)
  • Jobb elágazás: külön kezeli a TLS 1.2 és 1.3 üzeneteket
  • Hosszabb hash: SHA256 az MD5 helyett, alacsonyabb ütközési valószínűség
  • Több minta: a JA4 csak mintát ad vissza (pl. t13d1516h2_8daaf6152771_e5627efa2ab5), nem hash-t, ami lehetővé teszi a részleges egyezést is

Példa

JA4: t13d1516h2_8daaf6152771_e5627efa2ab5
││││││││  │          │           │
││││││││  │          │           └─ ServerHello fingerprint
││││││││  └──────────┴─ ClientHello fingerprint (első 12 pár)
│││││││└─ SNI: h2 (HTTP/2)
││││││└─ Alkalmazás: d (DNS over HTTPS használata: nem)
│││││└─ Második: 16 kiterjesztés
││││└─ Harmadik: 15 titkosító
│││└─ Negyedik: 16 pontformátum
││└─ Ötödik: t13 (TLS 1.3)
│└─ Hatodik: tls (TLS)
└─ Első: t (TCP)

Miért fontos scrapingnál?

A TLS-fingerprintelés az egyik leghatékonyabb botvédelmi eszköz a HTTP-szintű ellenőrzések mellett. Ha egy szkript HTTP-headereket másol (User-Agent, Accept, stb.), de a TLS-ujjlenyomata eltér egy valódi böngészőétől, a szerver azonnal kiszűrheti.

Ezért használják a curl_cffi csomagot is: a BoringSSL-impersonációval a TLS-ujjlenyomat megegyezik a célböngészőével, és a szerver nem tud különbséget tenni a kérés és egy valódi böngésző között.

Hivatkozások