JA3 parmak izi, bir TLS Client Hello mesajındaki belirli alanlardan türetilen bir MD5 özetidir; TLS bağlantısını başlatan istemci uygulamasını veya kütüphanesini benzersiz biçimde tanımlamak için kullanılır ve böylece TLS istemci parmak izi çıkarma ile proxy tespiti için sağlam bir yöntem sunar.
TLS İstemci Parmak İzini Anlamak
Bir istemci TLS el sıkışmasını başlattığında, güvenli bağlantı kurmak için gereken çeşitli parametreleri içeren bir Client Hello mesajı gönderir. Bu parametreler arasında TLS sürümü, desteklenen cipher suite listesi, uzantılar, eliptik eğriler ve eliptik eğri formatları yer alır. Bu parametrelerin belirli bileşimi ve sırası genellikle belirli bir istemci uygulamasına, işletim sistemine ve TLS kütüphanesine özgüdür. Bu ayırt edici imza, diğer tanımlayıcı bilgiler (örneğin user-agent dizeleri) değiştirilmiş veya hiç yokken bile istemcinin tanınmasına olanak tanır.
JA3 Parmak İzi Nedir?
Salesforce tarafından geliştirilen JA3, Client Hello mesajının standartlaştırılmış bir parmak izini oluşturma yöntemidir. Client Hello içindeki beş temel alana odaklanır:
- TLS Sürümü: istemcinin desteklediği en yüksek TLS sürümü.
- Cipher Suite'ler: istemcinin desteklediği cipher suite'lerin tercih sırasına göre dizilmiş, virgülle ayrılmış listesi.
- TLS Uzantıları: istemcinin eklediği TLS uzantılarının türe göre sıralanmış, virgülle ayrılmış listesi.
- Eliptik Eğriler: desteklenen eliptik eğrilerin virgülle ayrılmış listesi.
- Eliptik Eğri Formatları: desteklenen eliptik eğri formatlarının virgülle ayrılmış listesi.
Bu beş değer, listelerde ayırıcı olarak "," ve beş ana alan arasında ayırıcı olarak "-" kullanılarak tek bir dizede birleştirilir. Ardından bu birleşik dize MD5 ile özetlenerek 32 karakterlik nihai JA3 parmak izi elde edilir. MD5'in kullanılma nedeni kısalık ve tutarlılıktır, kriptografik güvenlik değil.
JA3 Hesaplama Örneği
Aşağıdaki parametrelere sahip varsayımsal bir Client Hello düşünün:
- TLS Sürümü:
0x0303(TLS 1.2) - Cipher'lar:
0xc02c,0xc02b,0xc030,0xc02f,0x009c,0x0095 - Uzantılar:
0x0000,0x000b,0x000a,0x0012,0x0023,0x0017,0x0010,0x0035,0xff01,0x000d,0x0005 - Eliptik Eğriler:
0x001d,0x0023,0x0024 - Eliptik Eğri Formatları:
0x0000,0x0001,0x0002
Birleştirilmiş dize şöyle olurdu:
769,49164-49163-49168-49167-156-149,0-11-10-18-35-23-16-53-65281-13-5,29-35-36,0-1-2
Bu dizenin MD5 özeti JA3 parmak izi olur; örneğin e66a3d11b302c086d0b604e769494441.
Proxy Tespitinde JA3
Proxy'ler, özellikle forward proxy'ler ve TLS araya girme (interception) yapanlar, TLS bağlantılarını sıklıkla değiştirir ya da sonlandırıp yeniden kurar. Bu süreç doğası gereği Client Hello mesajını değiştirir ve özgün istemcininkinden farklı bir JA3 parmak izi ortaya çıkarır.
Proxy'ler JA3 Parmak İzlerini Nasıl Etkiler
-
Forward proxy'ler (HTTPS): bir istemci HTTPS proxy'ye bağlandığında, proxy hedef sunucuya yeni bir TLS bağlantısı kurar. Hedef sunucunun gördüğü
Client Hellomesajı, son kullanıcının istemcisinden değil proxy yazılımından gelir. Sonuç olarak JA3 parmak izi, son kullanıcının gerçekte kullandığı tarayıcıyı veya uygulamayı değil proxy'nin TLS yığınını (örneğin Squid, Nginx, HAProxy veya özel proxy yazılımı) yansıtır. Bu uyumsuzluk, proxy kullanımının güçlü bir göstergesidir. -
TLS araya girme proxy'leri (MITM): bu proxy'ler istemciden gelen TLS bağlantısını açıkça sonlandırır ve hedefe ayrı, yeni bir TLS bağlantısı kurar. Bu yöntem kurumsal ortamlarda denetim amacıyla ya da kötü niyetli aktörler tarafından yaygın olarak kullanılır. Hedef sunucuya gönderilen
Client Hellomesajını araya giren proxy üretir; bu da araya girme yazılımına özgü bir JA3 parmak izine yol açar. -
SOCKS proxy'ler: SOCKS proxy'ler daha alt bir katmanda çalışarak ham TCP bağlantılarını tünelleyebilir. Bir SOCKS proxy TLS el sıkışmasını değiştirmeden TCP akışını olduğu gibi iletirse, istemcinin özgün
Client Hellomesajı dokunulmadan geçebilir ve JA3 parmak izi aynı kalır. Yine de birçok SOCKS uygulaması veya belirli yapılandırmalar TLS'i sonlandırıp yeniden kurabilir ya da başlık bilgilerini değiştirebilir; bu da JA3'ün değişmesine yol açar.
JA3 ile Proxy Tespiti
Gelen Client Hello mesajlarını analiz ederek bir sunucu şunları yapabilir:
- Uyumsuzlukları tespit etmek: JA3 parmak izini
User-Agentbaşlığı gibi diğer istemci göstergeleriyle karşılaştırmak. Windows üzerinde Chrome olduğunu iddia eden birUser-Agent, bir proxy sunucusuna veya belirli bir scraping kütüphanesine ait olduğu bilinen bir JA3 parmak izi sunuyorsa, bu proxy kullanımına ya da sahteciliğe işaret eder. - Trafiği sınıflandırmak: bilinen proxy servislerinden, veri merkezlerinden veya tutarlı TLS yığınları kullanan botnet'lerden gelen trafiği belirlemek.
- Engellemek/kısıtlamak: istenmeyen trafikle (örneğin scraper'lar, botlar veya ele geçirilmiş sistemler) ilişkilendirilen belirli JA3 parmak izlerinden gelen bağlantıları engellemek veya hızını kısmak için politikalar uygulamak.
JA3 ile JA3S Karşılaştırması
JA3 istemcinin Client Hello mesajının parmak izini çıkarırken, JA3S (JA3 Server) sunucunun Server Hello mesajının parmak izini çıkarır. JA3S, Server Hello içindeki TLS sürümüne, cipher suite'e ve uzantılara odaklanır. Sunucu tarafındaki TLS uygulamalarını belirlemek için faydalı olsa da, istemci tarafı proxy tespitine doğrudan uygulanabilirliği daha azdır.
Sınırlamalar ve Atlatma Teknikleri
Güçlü olmasına rağmen JA3 parmak izi çıkarma kusursuz değildir:
- Sahtecilik (spoofing): gelişmiş istemciler, botlar veya proxy servisleri belirli JA3 parmak izlerini kasıtlı olarak taklit edecek şekilde yapılandırılabilir ve böylece meşru bir tarayıcıymış gibi görünebilir. Bunun için TLS kütüphanesinin
Client Helloparametreleri üzerinde denetim sahibi olmak gerekir. - TLS kütüphanesi güncellemeleri: TLS kütüphanelerinin (örneğin OpenSSL, NSS, BoringSSL) veya işletim sistemlerinin güncellenmesi
Client Helloparametrelerini değiştirebilir ve aksi hâlde birebir aynı olan bir istemcinin JA3 parmak izini farklılaştırabilir. Bu durum, JA3 imza veritabanlarının sürekli izlenmesini ve güncellenmesini zorunlu kılar. - Kütüphane çeşitliliği: farklı HTTP istemci kütüphaneleri (örneğin Python'un
requests'i, Go'nunnet/http'si, Node.jshttps) ve bunların altındaki TLS uygulamaları (örneğin OpenSSL, GnuTLS, BoringSSL, Go'nuncrypto/tls'i) doğal olarak birbirinden farklı JA3 parmak izleri üretir.
JA3, özellikle proxy servisleri ve bot tespiti bağlamında çeşitli istemci trafiği türlerini tanımlamak ve saptamak için güçlü bir araçtır. JA3 parmak izlerini yorumlamayı ve etkisini azaltmayı bilmek hem proxy sağlayıcıları hem de kullanıcıları için kritik önemdedir.
