How_to_align_with_TLS_fingerprinting

Tantangan keamanan baru mendorong evolusi langkah-langkah anti-bot, dan terkadang bahkan scraper yang sah pun ikut terkena dampaknya. Salah satu teknik tersebut adalah TLS fingerprinting, metode licik yang belum terlalu dikenal tetapi cukup efektif untuk mengidentifikasi perangkat yang berupaya terhubung ke server. Mengapa metode ini bukan yang paling mudah untuk dibypass, dan apa yang perlu dilakukan agar berhasil melakukan scraping data yang Anda butuhkan? Artikel ini mengulas semuanya. 

Apa itu TLS?

Untuk memahami TLS fingerprinting, mari terlebih dahulu melihat TLS itu sendiri. TLS atau Transport Layer Security (sebelumnya SSL – Secure Sockets Layer) adalah protokol yang berjalan melalui koneksi HTTP standar dan mengamankan aktivitas online Anda. Ketika Anda melihat tanda gembok di dekat URL atau alamat situs web dimulai dengan https, artinya TLS aktif. Kini, sulit menemukan situs web yang tidak menggunakan TLS. Jika Anda mencoba mengunjungi situs web yang hanya dimulai dengan “http” (tanpa “s”), browser Anda akan menampilkan peringatan tentang koneksi yang tidak aman, alih-alih mengarahkan Anda ke halaman web. 

TLS mengenkripsi data Anda sebelum mengirimkannya ke server target, mengubahnya menjadi rangkaian simbol acak, seperti 9823h4brjhvbi, sehingga pelaku kejahatan tidak dapat menggunakannya meskipun mencegat informasi Anda. Namun, sebelum mengirim data Anda, TLS harus memastikan bahwa informasi tersebut dikirim ke server yang sah dan server itu kemudian harus menguraikannya. Karena itu, sebelum mengirim data, TLS terlebih dahulu membuat koneksi dengan bertukar serangkaian pesan dengan server target untuk memverifikasinya, menyepakati metode enkripsi, serta menghasilkan kunci sesi bersama yang membantu melindungi dan menguraikan data selama komunikasi. 

Seluruh proses ini disebut TLS handshake, yang dimulai dengan pesan “ClientHello”. Pesan ini penting dalam TLS fingerprinting karena menjadi sumber data yang kemudian digunakan server untuk mengidentifikasi Anda.  

Apa saja komponen pesan “ClientHello”

Karena pesan “ClientHello” tidak berisi data sensitif, seperti kredensial, dan dikirimkan dalam format yang tidak terenkripsi, Anda dapat dengan mudah menangkap dan melihat isinya menggunakan alat analisis jaringan seperti Wireshark. Pesan ini berisi banyak data. 

  • TLS version – versi tertinggi yang didukung client.
  • Random – angka acak dari client.
  • Session ID – digunakan untuk sesi yang dilanjutkan, sehingga kosong pada handshake pertama.  
  • Cipher suites – algoritme enkripsi yang didukung client. Daftarnya disusun berdasarkan urutan preferensi.
  • Compression method – saat ini nilainya hampir selalu 0.
  • Supported extensions – fitur tambahan yang mungkin ingin digunakan client, misalnya:
  • Server Name Indication (SNI) – menentukan hostname yang diminta client. 
  • Protokol Application-Layer Protocol Negotiation (ALPN) – ekstensi untuk menegosiasikan protokol yang harus ditangani melalui TLS. Protokol ini efektif karena tidak bergantung pada lapisan aplikasi. Biasanya, ekstensi TLS untuk server web adalah HTTP/1.1 atau HTTP/2. 
  • TLS libraries – beragam library yang digunakan client, karena tiap client menggunakan library yang berbeda.
  • Signature algorithms – daftar algoritme yang didukung untuk memverifikasi identitas server.
  • Elliptic curves – karena komunikasi terenkripsi menggunakan persamaan kurva pada medan hingga, bagian ini menunjukkan kurva yang akan digunakan. 
  • Elliptic curve point formats – menjelaskan cara titik dikodekan. 

Ada juga ekstensi lainnya. Dari semua itu, situs web dapat menyimpulkan cukup banyak data tentang Anda dari pesan “ClientHello”, termasuk software stack seperti keluarga browser, jenis perangkat, dan postur keamanan.  

Metode JA3 fingerprinting

Baik, server telah menerima pesan “ClientHello”. Lalu apa? Di sinilah teknik JA3 digunakan. Teknik ini dikelola oleh Salesforce dan merupakan solusi fingerprinting paling populer. Teknik ini berfokus pada lima komponen utama pesan: TLS version, cipher suites, extension IDs, supported groups (elliptic curves), dan elliptic curve point formats. Setiap bagian diubah ke format desimal lalu digabungkan dengan koma dan tanda hubung. Namun, data fingerprint sebenarnya berupa string panjang, sehingga demi kemudahan digunakan MD5, fungsi hash kriptografis. Fungsi ini menghasilkan hash tetap 128-bit. Browser lalu membandingkan hasilnya dengan kemungkinan fingerprint lain, sering kali dari database internal. Namun, database publik juga terkadang digunakan. 

Tujuannya adalah menemukan perbedaan: apakah client ini tampak seperti web browser biasa, atau ada sesuatu yang mencurigakan? Masalahnya, hash yang dihasilkan web browser biasa seperti Chrome dan library pemrograman yang digunakan untuk web scraping akan berbeda karena pesan ClientHello masing-masing juga berbeda. Karena algoritme JA3 hanya mempertimbangkan beberapa variabel, pilihan fingerprint unik tidak banyak, sehingga relatif mudah membedakan pengguna biasa dari bot scraping. 

Hal itu membuktikan bahwa TLS fingerprinting efektif untuk menangkal scraper dan menjadi masalah besar bagi pihak yang mengandalkan web scraping. 

Ada database anti-web-scraping yang mengumpulkan berbagai kemungkinan JA3 fingerprinting. Anda dapat menghitung fingerprint Anda dan memeriksa apakah fingerprint tersebut masuk whitelist untuk memastikan akses yang lancar. 

JA3 fingerprint bukan satu-satunya yang dapat mengungkap bahwa client yang terhubung adalah scraper. Perbedaan nilai dalam pesan ClientHello itu sendiri pun dapat memicu sistem anti-bot. Contohnya:

  • Tidak adanya SNI dapat menjadi tanda bahaya karena biasanya SNI diharapkan ada dalam request.
  • request ALPN yang usang dapat dipandang sebagai tanda aktivitas mencurigakan karena browser modern biasanya mendukung HTTP/2.
  • Elliptic curves yang didukung browser seperti Chrome dan yang didukung skrip pemrograman berbeda, sehingga dapat menimbulkan kecurigaan.
  • Daftar Cipher Suites disusun berdasarkan prioritas dan harus cocok dengan daftar web browser umum, termasuk urutannya. Hal yang sama berlaku untuk Extensions.

Cara menyelaraskan dengan TLS fingerprinting 

Dalam TLS fingerprinting, tujuan Anda adalah membuat scraper Anda cocok dengan fingerprint web browser umum. Ini bukan tugas mudah, tetapi ada beberapa cara yang dapat Anda coba. Anda bahkan mungkin perlu menggabungkan beberapa di antaranya. 

Ketika Anda menggunakan browser berkualitas tinggi seperti Puppeteer, Playwright, atau Selenium, Anda sebenarnya menggunakan browser asli dan hasilnya memperoleh fingerprint autentik. Browser tersebut tidak mengubah TLS fingerprinting, sehingga situs web tidak dapat menentukan apakah browser biasa atau browser headless yang berupaya terhubung. Satu celah lebih sedikit.

  • Gunakan kumpulan browser dan versi sistem operasi

Cara ini membantu mendistribusikan koneksi melalui beberapa fingerprint, yang berguna jika Anda menjalankan proyek web scraping berskala besar. 

  • Gunakan HTTP client berbasis LibCurl 

Anda dapat memperbarui client tersebut agar menggunakan curl-impersonate. Ini adalah versi modifikasi library libcurl yang menambal TLS fingerprint agar tampak seperti fingerprint web browser biasa. Library yang mendukung libcurl mencakup Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python), serta library bawaan curl dan crul komunitas (R). 

  • Penguatan TLS

Jika Anda menggunakan bahasa Go, Anda beruntung karena Go adalah salah satu bahasa yang memungkinkan TLS spoofing. Library seperti utls dari Refraction Networking, ja3transport, dan CycleTLS adalah yang Anda perlukan.

Namun, hal ini tidak semudah itu jika Anda menggunakan Java atau Python. Dengan Java, Anda dapat menggunakan metode sslconfig.enabledCipherSuites untuk mengonfigurasi ulang daftar cipher suites yang tidak diaktifkan. Dengan Python, yang dapat Anda lakukan adalah mengonfigurasi variabel Cipher Suite dan TLS version menggunakan requests dan httpx. Spoofing pada variabel tersebut dapat membantu mengatasi gangguan akses, tetapi fingerprint Anda tetap tidak akan terlihat benar-benar autentik. 

  • Rotasikan elemen lain 

Ketika seluruh lalu lintas memiliki TLS fingerprint yang sama, meskipun terlihat asli, hal itu dapat tampak mencurigakan. Cobalah merotasi elemen yang dapat dirotasi, seperti cookie, user agent, header, dan IP address. Ini akan sedikit mengubah pesan ClientHello Anda sehingga JA3 fingerprint juga akan sedikit berbeda. Browser multi-akun dan proxy berkualitas tinggi akan membantu Anda dalam hal ini. 

Penutup

Terakhir, menyesuaikan diri dengan TLS fingerprinting dapat menjadi tantangan karena berbagai situs web sedikit mengadaptasi protokol TLS dan memiliki kriteria serta database sendiri untuk mengizinkan atau menolak akses. Agar berhasil melakukan TLS spoofing, fokuslah pada setiap situs web secara khusus, dengan mengidentifikasi pemicu mekanisme fingerprinting-nya dan cara situs tersebut menyesuaikan protokol standar. Selain itu, sumber web kini menggabungkan sinyal tingkat jaringan, seperti JA3 fingerprinting, dengan sinyal tingkat aplikasi seperti font dan resolusi layar. Jadi, hanya mengandalkan TLS spoofing tidak cukup, Anda perlu memastikan setiap detail scraper Anda tampak asli. Tinjau juga semuanya secara berkala karena situs web sering memperbarui kebijakan dan skema deteksinya, serta pendekatan anti-bot baru terus muncul. Anda juga perlu melakukan hal yang sama untuk memperoleh data akurat. Tentu saja, Anda harus selalu berada dalam batas yang diizinkan, hanya melakukan scraping pada data yang tersedia, menghindari beban berlebih pada situs web target, dan menggunakan alat yang tepercaya, seperti proxy yang diperoleh secara legal. DataImpulse tentu dapat membantu pada bagian terakhir. Tekan tombol “Coba sekarang” atau hubungi kami di [email protected] jika Anda memiliki pertanyaan.

Share article: