3 poin oleh GN⁺ 2025-04-04 | 1 komentar | Bagikan ke WhatsApp

curl-impersonate

Build khusus dari curl yang dapat meniru browser tertentu, termasuk Chrome, Edge, Safari, dan Firefox. curl-impersonate dapat melakukan handshake TLS dan HTTP yang sama persis dengan browser asli. Dapat digunakan sebagai alat baris perintah atau diintegrasikan sebagai library.

Mengapa ini diperlukan?

  • Saat klien HTTP berkomunikasi dengan situs web TLS, langkah pertama yang dilakukan adalah handshake TLS. Pesan pertama pada tahap ini disebut Client Hello.
  • Pesan Client Hello yang dihasilkan oleh sebagian besar klien dan library HTTP sangat berbeda dari browser asli.
  • Jika server menggunakan HTTP/2, selain handshake TLS juga diperlukan handshake HTTP/2, dan pengaturan yang dipertukarkan pada tahap ini juga berbeda dari browser asli.
  • Karena alasan ini, beberapa layanan web mengidentifikasi klien melalui handshake TLS dan HTTP, lalu menyajikan konten yang berbeda untuk klien yang berbeda.
  • Metode ini dikenal sebagai TLS fingerprinting dan HTTP/2 fingerprinting, yang membuat web menjadi kurang terbuka, kurang privat, dan lebih membatasi untuk klien web tertentu.
  • curl yang dimodifikasi di repositori ini membuat handshake TLS dan HTTP tampak persis sama dengan browser asli.

Bagaimana cara kerjanya?

  • curl dimodifikasi secara signifikan agar terlihat seperti browser.
  • curl dikompilasi dengan nss, library TLS yang digunakan Firefox, dan versi Chrome dikompilasi dengan BoringSSL, library TLS milik Google.
  • Cara mengonfigurasi berbagai ekstensi TLS dan opsi SSL diubah.
  • Dukungan untuk ekstensi TLS baru ditambahkan.
  • Pengaturan curl untuk koneksi HTTP/2 diubah.
  • Menjalankan curl dengan flag non-default seperti --ciphers, --curves, dan beberapa header -H.

Browser yang didukung

  • Dapat meniru berbagai versi Chrome, Edge, Firefox, dan Safari.
  • Tersedia skrip wrapper untuk setiap browser guna menjalankan curl-impersonate.

Penggunaan dasar

  • Untuk setiap browser yang didukung, tersedia skrip wrapper yang menjalankan curl-impersonate dengan header dan flag yang diperlukan.
  • Contoh: curl_chrome116 https://www.wikipedia.org

Dokumentasi

  • Dokumentasi tambahan tersedia di direktori docs/.

Instalasi

  • curl-impersonate memiliki dua versi karena alasan teknis. Ada versi chrome yang meniru Chrome, Edge, dan Safari, serta versi firefox yang meniru Firefox.
  • Binary yang sudah dikompilasi untuk Linux dan macOS tersedia di halaman GitHub Releases.

Penggunaan lanjutan

libcurl-impersonate

  • libcurl-impersonate.so adalah libcurl yang dikompilasi dengan perubahan yang sama seperti curl-impersonate versi baris perintah.
  • Menyediakan fungsi API tambahan curl_easy_impersonate.

Menggunakan variabel lingkungan CURL_IMPERSONATE

  • Pada aplikasi yang sudah menggunakan libcurl, library yang ada dapat diganti saat runtime menggunakan LD_PRELOAD.
  • Dengan menetapkan variabel lingkungan CURL_IMPERSONATE, semua opsi dapat diatur secara otomatis.

Kontribusi

  • Anda dapat berkontribusi dengan memeriksa issue yang terbuka dan membuka pull request yang menyertakan perubahan.

Sponsor

  • Ada sponsor yang membantu membuka dan memelihara proyek ini. Jika ingin menjadi sponsor, Anda dapat menghubungi langsung.

1 komentar

 
GN⁺ 2025-04-04
Komentar Hacker News
  • Pujian untuk penulis kode dan pengunggahnya. Saya sedang terlibat dalam proyek browser yang menggunakan OpenSSL, dan sempat berpikir harus menganalisisnya sendiri lewat WireShark. Sekarang ada banyak materi yang bisa dijadikan referensi. Jika penggunaan OpenSSL yang paling umum adalah Python, maka opsi spoofing TLS Firefox adalah hal yang wajib di era Cloudflare.

    • Ada fork dari proyek ini yang lebih baik daripada aslinya dan dikelola secara aktif: curl-impersonate
    • Ada juga binding Python untuk fork tersebut bagi para pengguna Python: curl_cffi
  • Semoga Ladybird mendapat sorotan di masa depan. Saat ini ia memakai cURL untuk jaringan. cURL mungkin masih punya beberapa keterbatasan (misalnya tidak bisa menangani WebSockets di h2). Namun jika ada mesin browser baru bermunculan, lalu lintas yang sah bisa memiliki fingerprint yang sama dengan cURL bawaan.

  • Saya penasaran apakah nilai IP_TTL sudah disetel sesuai platform. Jika belum, itu masih bisa meninggalkan fingerprint di lapisan IP. Jika nilai TTL di lapisan IP kurang dari 64, itu menunjukkan bahwa ia tidak berjalan di Windows modern, atau berjalan di perangkat Windows modern yang TTL bawaannya telah diubah. TTL paket di Windows modern secara bawaan dimulai dari 128, sementara kebanyakan platform lain dimulai dari 64. Platform lain tidak bermasalah untuk komunikasi internet, jadi paket IP dari Windows modern akan selalu terlihat dari jarak jauh dengan TTL 64 atau lebih.

  • Jika TLS handshake terlihat berbeda, saya penasaran apakah dimungkinkan ada filter setingkat nginx yang bisa menyaring lalu lintas yang mengaku sebagai browser web (misalnya user agent Chrome). Ini mencakup sebagian besar lalu lintas bot berbahaya, dan saya ingin memblokirnya.

  • Saya selalu punya perasaan campur aduk saat hal seperti ini muncul di sini. Di satu sisi, bagus untuk memberi tahu orang-orang bahwa kemandirian dan semangat membangkang masih hidup. Namun, seperti proyek "freedom is unstable", jika ini menarik perhatian yang tidak diinginkan, hasilnya bisa lebih buruk bagi orang-orang yang bergantung padanya. Menulis browser itu sulit, dan para pemain lama terus membuatnya makin sulit.

  • Alat ini sangat berguna bila digabungkan dengan skrip bash kecil dan gnu parallel untuk memetakan endpoint https dalam pekerjaan red team. Saya memakainya pada alamat-alamat dalam suatu rentang yang hanya merespons ke browser yang sesuai. Anda bisa memakai switch curl biasa seperti -H untuk spoofing header.

  • Saat Show HN dulu tautan

  • Sekarang saya menunggu versi MCP :)

  • Saya rindu masa-masa ketika situs web hanya secara sederhana mengizinkan atau memblokir bot.