Curl-impersonate: Başlıca tarayıcıları taklit edebilen özel bir curl derlemesi
(github.com/lwthiker)curl-impersonate
Belirli tarayıcıları taklit edebilen özel bir curl derlemesidir; Chrome, Edge, Safari ve Firefox'u taklit edebilir. curl-impersonate, gerçek tarayıcılarla aynı TLS ve HTTP handshake süreçlerini gerçekleştirebilir. Komut satırı aracı olarak kullanılabilir veya bir kütüphane olarak entegre edilebilir.
Neden gerekli?
- Bir HTTP istemcisi TLS web siteleriyle iletişim kurduğunda, ilk olarak TLS handshake işlemini gerçekleştirir. Bu sıradaki ilk mesaja Client Hello denir.
- Çoğu HTTP istemcisi ve kütüphanesinin oluşturduğu Client Hello mesajı, gerçek tarayıcılardan oldukça farklıdır.
- Sunucu HTTP/2 kullanıyorsa, TLS handshake'e ek olarak HTTP/2 handshake de gerekir ve bu sırada değiş tokuş edilen ayarlar da gerçek tarayıcılardan farklıdır.
- Bu nedenle bazı web servisleri, TLS ve HTTP handshake üzerinden istemciyi tanımlar ve farklı istemcilere farklı içerik sunar.
- Bu yöntemler TLS fingerprinting ve HTTP/2 fingerprinting olarak bilinir; web'i daha az açık, daha az mahrem ve belirli web istemcileri için daha kısıtlı hale getirir.
- Bu depodaki değiştirilmiş
curl, TLS ve HTTP handshake'in gerçek tarayıcılarla tam olarak aynı görünmesini sağlar.
Nasıl çalışır?
curl, tarayıcı gibi görünecek şekilde ciddi ölçüde değiştirilmiştir.curl, Firefox'un kullandığı TLS kütüphanesi olannssile derlenir; Chrome sürümü ise Google'ın TLS kütüphanesi olanBoringSSLile derlenir.- Çeşitli TLS uzantıları ve SSL seçeneklerinin yapılandırılma biçimi değiştirilmiştir.
- Yeni TLS uzantıları desteği eklenmiştir.
- HTTP/2 bağlantıları için
curlayarları değiştirilmiştir. curl,--ciphers,--curvesve bazı-Hheader'ları gibi varsayılan olmayan bayraklarla çalıştırılır.
Desteklenen tarayıcılar
- Chrome, Edge, Firefox ve Safari'nin çeşitli sürümleri taklit edilebilir.
- Her tarayıcı için
curl-impersonateçalıştıran wrapper script'ler sağlanır.
Temel kullanım
- Desteklenen her tarayıcı için, gerekli header ve bayraklarla
curl-impersonateçalıştıran bir wrapper script vardır. - Örnek:
curl_chrome116 https://www.wikipedia.org
Belgeler
- Ek belgeler
docs/dizininde bulunur.
Kurulum
curl-impersonate, teknik nedenlerle iki sürüme sahiptir. Chrome, Edge ve Safari'yi taklit eden chrome sürümü ile Firefox'u taklit eden firefox sürümü vardır.- Linux ve macOS için önceden derlenmiş binary'ler GitHub releases sayfasında sunulur.
İleri seviye kullanım
libcurl-impersonate
libcurl-impersonate.so, komut satırıcurl-impersonateile aynı değişikliklerle derlenmiş bir libcurl'dür.- Ek API fonksiyonu
curl_easy_impersonatesağlar.
CURL_IMPERSONATE ortam değişkenini kullanma
- Halihazırda
libcurlkullanan uygulamalarda,LD_PRELOADile mevcut kütüphane çalışma zamanında değiştirilebilir. CURL_IMPERSONATEortam değişkeni ayarlanarak tüm seçenekler otomatik olarak yapılandırılabilir.
Katkı
- Açık issue'ları inceleyip, değişikliklerinizi içeren bir pull request açarak katkıda bulunabilirsiniz.
Sponsorlar
- Projenin açık tutulmasına ve sürdürülmesine yardımcı olan sponsorlar vardır. Sponsor olmak istiyorsanız doğrudan iletişime geçebilirsiniz.
1 yorum
Hacker News yorumları
Kod yazarı ve gönderiyi paylaşan kişiye övgüler. OpenSSL kullanan bir tarayıcı projesinde çalışıyorum ve bunu WireShark ile bizzat analiz etmem gerekeceğini düşünüyordum. Artık başvurabileceğim bolca kaynak var. OpenSSL'in en yaygın kullanım alanı Python ise, Cloudflare çağında Firefox TLS spoofing seçeneği vazgeçilmezdir.
Ladybird'ün gelecekte ilgi görmesini umuyorum. Şu anda ağ iletişimi için cURL kullanıyor. cURL'ün hâlâ bazı sınırlamaları olabilir (örneğin WebSockets'i h2 üzerinde işleyememesi). Ancak yeni bir tarayıcı motoru ortaya çıkarsa, meşru trafik varsayılan cURL ile aynı fingerprint'e sahip olabilir.
IP_TTLdeğerini platforma uygun ayarlayıp ayarlamadıklarını merak ediyorum. Ayarlamadılarsa, IP katmanında da bir miktar fingerprint bırakabilir. IP katmanındaki TTL değeri 64'ün altındaysa, bu onun modern Windows'ta çalışmadığını ya da varsayılan TTL'i değiştirilmiş modern bir Windows cihazında çalıştığını gösterir. Modern Windows'ta paket TTL'i varsayılan olarak 128'den başlar, diğer çoğu platformda ise 64'ten başlar. Diğer platformlarda internet iletişiminde sorun olmadığı için, modern Windows'un IP paketleri uzaktan bakıldığında her zaman 64 veya üzeri TTL ile görünür.TLS handshake farklı görünüyorsa, kendisini web tarayıcısı (ör. Chrome user agent) olarak tanıtan trafiği filtreleyebilen nginx düzeyinde bir filtre mümkün mü diye merak ediyorum. Kötü niyetli bot trafiğinin büyük kısmı bunu oluşturuyor ve bunu engellemek istiyorum.
Böyle şeylerin burada yer alması konusunda hep ikircikli hissediyorum. Bir yandan insanlara bağımsızlığın ve muhalif ruhun hâlâ yaşadığını göstermek güzel. Ama öte yandan, "Özgürlük istikrarsızdır" projelerinde olduğu gibi istenmeyen ilgiyi çekerse, ona bağımlı olan insanlar için daha kötü olabilir. Tarayıcı yazmak zor ve mevcut oyuncular bunu sürekli daha da zorlaştırıyor.
Bu araç, küçük bir bash betiği ve gnu parallel ile birleştirildiğinde, red team çalışmalarında https endpoint'lerini haritalamak için çok kullanışlı. Bunu, yalnızca uygun tarayıcıya yanıt veren kapsamdaki adreslerde kullanıyorum. Header spoofing için
-Hgibi normal curl anahtarlarını kullanabiliyorsunuz.Show HN zamanı: bağlantı
Şimdi MCP sürümünü bekliyorum :)
Web sitelerinin botlara ya izin verdiği ya da engellediği o basit zamanları özlüyorum.