In this Article
Yeni güvenlik zorlukları, bot karşıtı önlemlerin gelişmesine yol açar ve bazen meşru veri kazıyıcılar bile bu süreçte zarar görebilir. Bu tekniklerden biri, bir sunucuya bağlanmaya çalışan cihazı tanımlamak için kullanılan sinsi, henüz çok iyi bilinmeyen ve oldukça etkili bir yöntem olan TLS parmak izidir. Bunu aşmak neden kolay değildir ve ihtiyacınız olan verileri başarıyla kazımak için ne yapmalısınız? Bu makale tüm ayrıntıları açıklıyor.
TLS tam olarak nedir?
TLS parmak izini anlamak için önce TLS’in kendisine bakalım. TLS veya Transport Layer Security (önceki adıyla SSL – Secure Sockets Layer), standart bir HTTP bağlantısı üzerinden çalışan ve çevrimiçi faaliyetlerinizi güvence altına alan bir protokoldür. Bir URL’nin yanında kilit simgesi gördüğünüzde veya bir web sitesinin adresi https ile başladığında TLS’in etkin olduğu anlamına gelir. Aslında artık TLS kullanmayan bir web sitesine rastlamak zordur. Yalnızca “http” ile başlayan (“s” olmadan) bir web sitesini ziyaret etmeye çalışırsanız, tarayıcınız sizi bir web sayfasına yönlendirmek yerine güvenli olmayan bağlantıyla ilgili bir uyarı gösterir.
TLS, verilerinizi hedef sunucuya göndermeden önce şifreler; bunları 9823h4brjhvbi gibi rastgele simge dizelerine dönüştürür. Böylece kötü niyetli kişiler bilgilerinizi ele geçirse bile bunları kullanamaz. Ancak TLS, verilerinizi göndermeden önce bilgiyi meşru sunucuya gönderdiğinden emin olmalı, sunucu da bunların şifresini çözmelidir. Bu nedenle TLS, veri göndermeden önce bir bağlantı kurar: Hedef sunucuyu doğrulamak, şifreleme yöntemi üzerinde anlaşmak ve iletişim sırasında verileri korumaya ve çözmeye yardımcı olacak ortak oturum anahtarlarını oluşturmak için onunla bir dizi ileti alışverişinde bulunur.
Bu sürecin tamamına, “ClientHello” iletisiyle başlayan TLS el sıkışması denir. Sunucuların sizi tanımlamak için kullandığı veri kaynağı olduğundan, TLS parmak izi açısından bizi ilgilendiren ileti budur.
“ClientHello” iletisi nelerden oluşur?
“ClientHello” iletisi kimlik bilgileri gibi hassas veriler içermez ve şifrelenmemiş biçimde iletilir. Bu nedenle onu kolayca yakalayabilir, Wireshark gibi ağ analiz araçlarıyla içeriğini görüntüleyebilirsiniz. Çok sayıda veri içerir.
- TLS sürümü: Bir istemcinin desteklediği en yüksek sürüm.
- Rastgele değer: İstemciden gelen rastgele sayı.
- Oturum ID’si: Sürdürülen oturumlar için kullanılır; bu nedenle ilk el sıkışmasında boştur.
- Şifreleme paketleri: İstemcinin desteklediği şifreleme algoritmaları. Tercih sırasına göre listelenirler.
- Sıkıştırma yöntemi: Günümüzde neredeyse her zaman 0’dır.
- Desteklenen uzantılar: İstemcinin kullanmak isteyebileceği ek özellikler. Örneğin:
- Server Name Indication (SNI): İstemcinin talep ettiği ana makine adını belirtir.
- Application-Layer Protocol Negotiation (ALPN) protokolü: TLS üzerinden hangi protokolün kullanılacağının görüşülmesini sağlayan uzantıdır. Uygulama katmanından bağımsız olduğu için etkilidir. Web sunucuları için TLS uzantıları genellikle HTTP/1.1 veya HTTP/2’dir.
- TLS kitaplıkları: Farklı istemciler farklı kitaplıklar kullandığı için, istemcinin kullandığı kitaplıklardan oluşan aralık.
- İmza algoritmaları: Sunucunun kimliğini doğrulamak için desteklenen algoritmaların listesi.
- Eliptik eğriler: Şifreli iletişim sonlu alanlar üzerindeki eğri denklemlerini kullandığından, bu bölüm hangi eğrinin kullanılacağını belirtir.
- Eliptik eğri nokta biçimleri: Noktaların nasıl kodlandığını belirtir.
Başka uzantılar da vardır. Tüm bunlarla bir web sitesi, tarayıcı ailesi, cihaz türü ve güvenlik duruşu gibi yazılım yığını bilgileri de dahil olmak üzere, “ClientHello” iletisinden hakkınızda önemli miktarda veri çıkarabilir.
JA3 parmak izi yöntemi
Peki, bir sunucu “ClientHello” iletisini aldı. Sonra ne olur? Burada JA3 tekniği devreye girer. Salesforce tarafından yönetilir ve en popüler parmak izi çözümüdür. İletinin beş temel bileşenine odaklanır: TLS sürümü, şifreleme paketleri, uzantı ID’leri, desteklenen gruplar (eliptik eğriler) ve eliptik eğri nokta biçimleri. Her parça ondalık biçime dönüştürülür ve virgüllerle, tirelerle birleştirilir. Ancak asıl parmak izi verisi uzun bir dizedir; bu yüzden kolaylık için kriptografik özet işlevi olan MD5 kullanılır. Bu, sabit 128 bitlik bir özet üretir. Ardından bir tarayıcı sonucu, genellikle dahili bir veritabanındaki diğer parmak izi olasılıklarıyla karşılaştırır. Yine de bazen herkese açık olanlar da kullanılır.
Amaç farklılıkları fark etmektir: Bu istemci tipik bir web tarayıcısı gibi mi görünür, yoksa onda şüpheli bir şey mi vardır? Sorun şu ki Chrome gibi sıradan bir web tarayıcısının veya web scraping için kullanılan bir programlama kitaplığının ürettiği özetler farklı olur; çünkü ilgili ClientHello iletileri de farklıdır. JA3 algoritmaları yalnızca birkaç değişkeni dikkate aldığından benzersiz parmak izi seçeneği çok değildir; dolayısıyla sıradan bir kullanıcıyı veri kazıma botundan ayırt etmek görece kolaydır.
Bu durum, TLS parmak izinin veri kazıyıcılarla mücadelede etkili olduğunu kanıtlar ve web scraping’e dayananlar için ciddi bir baş ağrısına dönüştürür.
JA3 parmak izi olasılıklarını toplayan veri kazıma karşıtı veritabanları vardır. Sorunsuz erişim sağlamak için parmak izinizi hesaplayabilir ve beyaz listede olup olmadığını kontrol edebilirsiniz.
Ancak yalnızca JA3 parmak izleri, bağlanan istemcinin veri kazıyıcı olduğu gerçeğini ortaya çıkarmaz. ClientHello iletisindeki değer farkı bile bot karşıtı sistemleri tetikleyebilir. Örneğin:
- SNI’nin olmaması, bir istekte genellikle beklenen bir unsur olduğu için kırmızı bayrak olabilir.
- Modern tarayıcılar genellikle HTTP/2’yi desteklediğinden, güncel olmayan ALPN istekleri şüpheli etkinlik işareti olarak görülebilir.
- Chrome gibi tarayıcıların desteklediği eliptik eğriler ile programlama betiklerinin destekledikleri farklıdır; bu durum şüphe uyandırabilir.
- Cipher Suites listesi öncelik sırasına göre düzenlenir ve sıra da dahil olmak üzere yaygın web tarayıcılarının listesiyle eşleşmelidir. Aynı durum Extensions için de geçerlidir.
TLS parmak iziyle uyum sağlama yolları
TLS parmak izi söz konusu olduğunda hedefiniz, veri kazıyıcınızı yaygın bir web tarayıcısının parmak izleriyle eşleştirmektir. Bu kolay bir görev değildir; ancak deneyebileceğiniz birkaç fikir vardır. Hatta bunlardan bazılarını bir arada kullanmak isteyebilirsiniz.
- Şunları kullanın: başsız tarayıcılar
Yüksek kaliteli tarayıcılar kullandığınızda, örneğin Puppeteer, Playwright veya Selenium, aslında gerçek tarayıcılar kullanır ve sonuç olarak gerçek parmak izleri elde edersiniz. Bunlar TLS parmak izini değiştirmez; dolayısıyla web siteleri normal bir tarayıcının mı yoksa başsız bir tarayıcının mı bağlanmaya çalıştığını belirleyemez. Bir açık daha az.
- Tarayıcı ve işletim sistemi sürümlerinden oluşan bir koleksiyon kullanın
Bu yöntem, bağlantıları birden fazla parmak izine dağıtmaya yardımcı olur; büyük bir web scraping projesi yürütüyorsanız faydalıdır.
- LibCurl tabanlı HTTP istemcisi kullanın
Bu tür istemcileri curl-impersonate kullanacak şekilde güncelleyebilirsiniz. Bu, TLS parmak izlerini sıradan bir web tarayıcısınınki gibi göstermek için düzelten libcurl kitaplığının değiştirilmiş bir sürümüdür. libcurl’ü destekleyen kitaplıklar arasında Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python), curl varsayılan ve crul topluluk kitaplıkları (R) bulunur.
- TLS güçlendirmesi
Go dilini kullanıyorsanız şanslısınız; TLS spoofing’e izin veren dillerden biridir. Refraction Networking’in utls, ja3transport ve CycleTLS gibi kitaplıkları ihtiyacınız olanlardır.
Ancak Java veya Python kullanıyorsanız işler o kadar kolay değildir. Java ile sslconfig.enabledCipherSuites yöntemini kullanarak etkin şifreleme paketleri listesini yeniden yapılandırabilirsiniz. Python ile requests ve httpx kullanarak Cipher Suite ile TLS sürümü değişkenlerini yapılandırabilirsiniz. Bu değişkenleri taklit etmek erişim kesintilerinin çözülmesine yardımcı olabilir; ancak parmak izleriniz yine de gerçekten özgün görünmez.
- Diğer öğeleri döngüsel olarak değiştirin
Tüm trafik aynı TLS parmak izine sahipse, gerçek görünse bile şüpheli görünebilir. Çerezler, kullanıcı aracısı, HTTP istek başlıkları ve IP adresi gibi döngüsel olarak değiştirilebilen öğeleri değiştirmeyi deneyin. Bu, ClientHello iletinizi biraz değiştirir; sonuç olarak JA3 parmak izleri de bir ölçüde farklılaşır. Çok hesaplı tarayıcılar ve yüksek kaliteli proxy’ler bu konuda size yardımcı olur.
Son söz
Son olarak, farklı web siteleri TLS protokolünü biraz farklı uyarladığı ve erişime izin vermek veya erişimi reddetmek için kendi ölçütlerine ve veritabanlarına sahip olduğu için TLS parmak iziyle uyumlu çalışmak zor olabilir. TLS parmak izlerini başarıyla taklit etmek için her web sitesine özel olarak odaklanın; parmak izi mekanizmalarını neyin tetiklediğini ve standart protokolü nasıl özelleştirdiğini belirleyin. Ayrıca günümüzde web kaynakları, JA3 parmak izi gibi ağ düzeyi sinyalleri yazı tipleri ve ekran çözünürlüğü gibi uygulama düzeyi sinyallerle birleştirir; bu nedenle yalnızca TLS spoofing’e güvenmek yeterli olmaz, veri kazıyıcınızın her ayrıntısının gerçek görünmesini sağlamalısınız. Her şeyi düzenli olarak gözden geçirin: Web siteleri politikalarını ve algılama şemalarını sık sık günceller, yeni bot karşıtı yaklaşımlar ortaya çıkar; doğru veri elde etmek için siz de aynısını yapmalısınız. Elbette her zaman izin verilen sınırlar içinde kalmalı, yalnızca erişilebilir verileri kazımalı, hedef web sitelerine aşırı yük bindirmekten kaçınmalı ve yasal yollarla elde edilmiş proxy’ler gibi güvenilir araçlar kullanmalısınız. DataImpulse son konuda size kesinlikle yardımcı olabilir. “Şimdi deneyin” düğmesine basın veya sorunuz varsa [email protected] adresinden bizimle iletişime geçin.
