TLS Parmak İzi ve JA4 Hash'leri Açıklandı
TLS Client Hello mesajları neden cihaz tanımlama için bir altın madeni ve JA4 hash'leri, tarayıcı güncellemelerine dayanan kararlı bir parmak izini bize nasıl sunuyor.
Her HTTPS bağlantısı bir TLS el sıkışması ile başlar ve her TLS el sıkışması bir Client Hello mesajıyla başlar. Bu mesaj, bağlanan istemci hakkında zengin bilgiler içerir — şifre paketleri, uzantılar, desteklenen eğriler, imza algoritmaları — ve bunlar tarayıcılar, sürümler ve işletim sistemleri arasında önemli ölçüde değişir. TLS parmak izi bu bilgileri yakalar ve bunu bir tanımlama sinyali olarak kullanır.
Bir Client Hello'nun İçinde Ne Var?
Bir tarayıcı bir HTTPS sunucusuna bağlandığında, şunları içeren bir Client Hello mesajı gönderir: desteklediği TLS sürümü, kullanmaya hazır olduğu şifre paketleri listesi, içerdiği TLS uzantıları (SNI, ALPN ve key share gibi), desteklediği eliptik eğriler, kabul ettiği imza algoritmaları ve sunduğu sıkıştırma yöntemleri.
Her tarayıcı ailesinin kendine özgü bir parmak izi vardır. Chrome, Firefox ve Safari'nin hepsi farklı şifre paketi sıralamaları, farklı uzantı kümeleri ve farklı eğri tercihleri gönderir. Aynı tarayıcı ailesi içinde bile, şifre paketleri eklendikçe veya kullanımdan kaldırıldıkça farklı sürümler biraz farklı Client Hello mesajları gönderebilir.
JA3'ten JA4'e
JA3, 2017'de Salesforce tarafından tanıtılan ilk TLS parmak izi hash'iydi. TLS sürümünü, şifre paketlerini, uzantıları, eliptik eğrileri ve EC nokta biçimlerini bir dizede birleştirir ve bir MD5 hash'i hesaplar. Çığır açıcı olmasına rağmen JA3'ün sınırlamaları vardır: analiz edilmesi zor, tek ve şeffaf olmayan bir hash üretir ve herhangi bir alandaki küçük değişiklikler tamamen farklı bir hash oluşturur.
FoxIO tarafından 2023'te tanıtılan JA4, JA3'ü birçok yönden geliştirir. Üç bileşenli, yapılandırılmış bir parmak izi üretir: okunabilir bir ön ek ("t13d1715h2" gibi — TLS 1.3, 17 şifre paketi, 15 uzantı, HTTP/2), şifre paketlerinin sıralı bir hash'i ve uzantıların sıralı bir hash'i. Bu yapı, tanımlama için gereken hassasiyeti korurken JA4 parmak izlerini bir bakışta analiz edilebilir kılar.
TLS Parmak İzleri Cihaz İstihbaratı İçin Neden Önemli
TLS parmak izleri değerlidir çünkü herhangi bir JavaScript çalışmadan önce toplanırlar. User agent'ını sahteleyen, canvas render'ını taklit eden ve navigator özelliklerini yamalanan bir bot bile, aslında kullandığı TLS kütüphanesi ne ise ondan gerçek bir Client Hello mesajı gönderir. Eğer Client Hello "Go'nun crypto/tls kütüphanesi" diyorsa ama user agent "Chrome 124" diyorsa, bir şeyin sahtelendiğini biliriz.
Bu çapraz doğrulama, bot tespiti için son derece güçlüdür. Çoğu otomasyon çerçevesi — Selenium, Puppeteer, Playwright — tarayıcının yerel TLS yığınını kullanır; bu yüzden TLS parmak izleri kontrol ettikleri tarayıcıyla eşleşir. Ancak özel HTTP istemcileri, Go tabanlı scraper'lar ve requests kütüphanesini kullanan Python betiklerinin hepsi, onları hemen tarayıcı olmayan istemciler olarak tanımlayan kendine özgü TLS parmak izlerine sahiptir.
TLS Parmak İzi Kararlılığı
TLS parmak iziyle ilgili bir endişe, tarayıcı güncellemeleri arasındaki kararlılıktır. Chrome bir şifre paketi eklediğinde veya kaldırdığında, TLS parmak izi değişir. Pratikte bu, beklediğinizden daha seyrek gerçekleşir. Chrome'un şifre paketi listesi nispeten kararlıdır — büyük değişiklikler her sürümde değil, yılda bir veya iki kez olur.
JA4'ün yapılandırılmış biçimi burada yardımcı olur. Okunabilir ön ek, küçük sürüm değişiklikleri arasında kararlı kalır (şifre paketlerinin ve uzantıların sayısı sık değişmez); bu yüzden ayrıntılı hash değiştiğinde bile ön ek süreklilik sağlar. Çok katmanlı tanımlama sistemimizde, TLS parmak izi verileri Tier 2'ye yerleştirilir — tanımlamaya katkıda bulunacak kadar kararlı, ancak beklenen kaymayı ele almak için oturumlar arası eşleştirmeyle işlenir.
Sunucu Tarafında Toplama
JavaScript çalıştırılmasını gerektiren istemci tarafı sinyallerin aksine, TLS parmak izleri tamamen sunucu tarafında toplanır. Edge sunucularımız ham TLS el sıkışmasını inceler ve bağlantı kurulmadan önce Client Hello'yu çıkarır. Bu, TLS parmak izinin JavaScript engellendiğinde, tarayıcıda gizlilik uzantıları yüklü olduğunda veya istemci hiç tarayıcı olmadığında bile çalıştığı anlamına gelir.
Bu sunucu tarafı doğa, TLS parmak izlerini sahteciliğe karşı da dirençli kılar. Belirli bir tarayıcıyı taklit eden özel bir TLS Client Hello oluşturmak teorik olarak mümkün olsa da, bunu yapmak TLS'i düşük seviyede uygulamayı gerektirir — bir user agent dizesini değiştirmekten çok daha fazla çaba. Çoğu sahtecilik aracı buna kalkışmaz.
Cihaz Tanımlamayla Entegrasyon
Cihaz tanımlama motorumuzda, TLS parmak izi hem bir sinyal hem de bir doğrulayıcı olarak hizmet eder. Bir sinyal olarak, kendi tanımlama ağırlığıyla genel cihaz parmak izine katkıda bulunur. Bir doğrulayıcı olarak, beyan edilen tarayıcı kimliğine karşı bir çapraz kontrol sağlar. Eğer JavaScript sinyalleri "macOS üzerinde Chrome" diyorsa ama TLS parmak izi "Linux üzerinde Firefox" diyorsa, bu tutarsızlık Smart Signals analizimizde bir kurcalama işareti tetikler.