2 poin oleh GN⁺ 2025-07-13 | 1 komentar | Bagikan ke WhatsApp
  • Penulis mengelola generator hierarki halaman web palsu bernama Spigot, yang mengekspos halaman yang dibuat secara acak untuk menghadapi web crawler yang agresif
  • Belakangan ini, ia menemukan bahwa image crawler menelusuri situs secara intensif untuk mencari gambar jpg
  • Untuk menangani pembuatan gambar real-time dengan sumber daya CPU seminimal mungkin, ia mengusulkan pendekatan yang memanfaatkan hanya bagian terstruktur dari file JPEG asli sebagai templat, lalu menyisipkan data acak ke bagian terkompresinya
  • Hasil percobaan menunjukkan bahwa JPEG yang dibuat dengan cara ini, meski mengandung kesalahan, tetap dapat ditampilkan oleh sebagian besar image viewer dan tampak cukup meyakinkan bagi crawler
  • Metode ini mengurangi konsumsi sumber daya server, sekaligus membebani crawler, dan telah diterapkan pada sekitar 60% halaman Spigot

Latar belakang Spigot dan pemalsuan JPEG

  • Spigot secara real-time membuat hierarki halaman web palsu berbasis Markov Chain untuk memberikan data tak bermakna kepada web crawler yang agresif
  • Beberapa crawler menggunakan signature browser acak dan IP untuk menyamarkan identitas, dan ditemukan kemungkinan penyalahgunaan perangkat ilegal melalui botnet
  • Melalui analisis trafik, terkonfirmasi bahwa crawler baru bernama "ImageSiftBot" secara intensif meminta halaman Spigot untuk mengumpulkan gambar
  • Tujuan utama Spigot adalah meminimalkan penggunaan CPU server dan menjaga operasi tetap efisien

Mencari cara murah untuk menghasilkan gambar

  • Membuat gambar secara dinamis membutuhkan konsumsi CPU besar karena kompresi, sehingga diperlukan metode yang efisien
  • Perhatian diarahkan pada fakta bahwa file JPEG terdiri dari struktur file (ukuran, warna, dll.) dan area data piksel terkompresi
  • Setelah mengekstrak hanya informasi header terstruktur dari banyak JPEG, dirancang metode untuk mengisi area data piksel dengan data acak
  • Dengan cara ini, gambar bisa dibuat seketika tanpa perlu mengompresi ulang setiap kali, sehingga beban server tetap minimal

Struktur file JPEG dan implementasi nyata

  • File JPEG terdiri dari beberapa chunk (dengan marker dan panjang)
  • Header/meta-informasi dipertahankan, hanya panjang data piksel terkompresi yang dicatat → lalu data acak disisipkan hanya ke area ini
  • Saat menggunakan 514 sampel JPEG, seluruh informasi header dan data terstruktur yang diperlukan hanya sekitar 500KB, sehingga beban memori nyaris tak berarti
  • Contoh kode: gambar dibuat dengan mengisi chunk data piksel tiap templat dengan bilangan acak

Hasil penggunaan nyata dan rilis open source

  • Image viewer nyata tetap bisa menampilkan gambar sampai tingkat tertentu meskipun area piksel berisi acak sepenuhnya
  • Web crawler sulit mengidentifikasi kesalahan, dan biaya pengumpulan data pun meningkat
  • Berdasarkan JPEG berukuran 1280x960 dan 200~300KB, sekitar 900 gambar per detik dapat dihasilkan, sehingga pemrosesan real-time tidak menjadi masalah
  • Metode ini diterapkan pada 60% dari seluruh halaman Spigot, dan menggunakan seed acak berbasis URL agar permintaan ulang mengembalikan gambar yang sama
  • Volume permintaan tinggi teramati dari ImageSiftBot, Meta, AmazonBot, GPTBot, dan lainnya
  • Tujuan intinya adalah memberi beban pada crawler dengan sumber daya server yang kecil

Kode Huffman dan optimasi tambahan

  • Data piksel JPEG menggunakan pengodean Huffman, sehingga menyisipkan data acak sepenuhnya dapat menyebabkan error pada sebagian viewer
  • Dengan menambahkan teknik bit masking sederhana (0x6D) agar tidak muncul tiga atau lebih bit 1 berturut-turut, kemungkinan munculnya kode Huffman yang salah turun dari 90% menjadi di bawah 4%
  • Membuat stream Huffman yang sepenuhnya valid juga memungkinkan, tetapi manfaatnya kecil dibanding sumber daya server dan waktu pengembangan yang dibutuhkan

Kesimpulan

  • Metode pembuatan JPEG palsu milik Spigot menghemat sumber daya server dengan efisiensi luar biasa sekaligus memicu kebingungan dan pemborosan sumber daya di pihak crawler
  • Kode terkait kurang dari 100 baris dan dipublikasikan di GitHub
  • Ini adalah teknik pertahanan/distribusi trafik web yang sederhana namun kreatif

1 komentar

 
GN⁺ 2025-07-13
Komentar Hacker News
  • Fakta bahwa file robots.txt memblokir akses robot ke tree /spigot/ sudah sesuai dugaan, tetapi kemudian ditemukan bahwa dengan menghapus /spigot/ dari URL, Spigot masih tetap bisa diakses; karena namespace /~auj tidak diblokir oleh robots.txt, bahkan crawler yang beritikad baik pun bisa tanpa sengaja masuk ke jalur tersebut dan terjebak dalam loop halaman tak berujung, dan ini jelas bukan situasi yang menyenangkan tautan referensi robots.txt

    • Sebelumnya ada komentar dari penulis yang menyebut bahwa ia tidak menyiapkan robots.txt secara terpisah; soal pilihan yang seekstrem ini, ia mengatakan tidak suka dengan gagasan bahwa operator situs web harus sengaja mengatur sesuatu hanya untuk mencegah DOS akibat crawler, dan menurutnya crawler yang sah seharusnya tidak terus-menerus mengais satu situs lebih dari 15 kali per detik

    • Soal bahkan crawler yang beritikad baik pun bisa terjebak dalam loop halaman tak berujung, ada keraguan tentang sejauh mana operator situs web punya kewajiban untuk "bersikap ramah" kepada orang-orang yang mengais situs mereka; tidak yakin itu memang harus begitu

  • Jika bisa mengidentifikasi crawler yang mengabaikan robots.txt, rasanya akan lebih efisien untuk membiarkan koneksi jaringan mereka tetap tersita alih-alih melemparkan informasi "sampah"; tidak terlalu paham kenapa perlu menyediakan sampah tanpa batas di endpoint

  • Muncul ide bahwa untuk mengacaukan scraper input AI, mungkin setiap gambar bisa diberi caption palsu, misalnya untuk gambar gumpalan hijau diberi "seekor kucing sedang bermain dengan bola catnip", dan untuk gambar biru diberi "seekor burung robin sedang membuat sarang"

    • Jika scrapernya dibuat dengan baik, gambar itu sendiri bisa dianalisis dengan model CLIP atau model caption lain untuk memeriksa ulang apakah deskripsi teks benar-benar cocok dengan gambarnya
  • Kasus paling parah adalah bot facebookexternalhit yang dijalankan meta (Facebook), dan bahkan sudah didokumentasikan secara resmi bahwa bot ini mengabaikan robots.txt; dalih dari Facebook adalah untuk mendeteksi tautan berbahaya, tetapi pada praktiknya jika pengguna jahat terus-menerus mengirimkan URL endpoint mahal ke Facebook, hasilnya Facebook yang justru melempar bom trafik sebagai gantinya, sehingga selama beberapa hari setiap bulan situs dihantam trafik lebih dari 10 r/s sepanjang hari

    • Tapi tetap muncul pertanyaan apakah 10 r/s benar-benar setara dengan "bom trafik", karena bahkan untuk satu server tunggal pun nyaris tidak akan terasa
  • Saat membaca tulisan tentang Spigot, jadi teringat pada Project Honeypot; 20 tahun lalu rasanya sangat menyenangkan setiap kali menerima email yang mengatakan bahwa skrip proyek itu dan catatan MX yang saya donasikan membantu menangkap pemanen email di situs saya, misalnya pemberitahuan bahwa berkat MX saya, pengirim spam yang belum terverifikasi (IP: 172.180.164.102) berhasil terdeteksi

    • Skrip honeypot itu memang keren, tetapi dari sudut pandang masa kini terasa sangat kuno; skrip Python-nya juga hanya mendukung CGI dan Zope secara bawaan (dan tidak bisa dimodifikasi karena TOS), jadi orang yang membuat aplikasi WSGI tampaknya harus mengakalinya dengan wrapper
  • Memalsukan JPEG jauh lebih ringan bagi CPU daripada membuatnya secara benar, dan proses ini sendiri juga bisa berfungsi sebagai semacam fuzzing yang memicu crash di sisi malware lawan jika decoding JPEG mereka rapuh

  • Fakta bahwa trafik masuk baru-baru ini berasal dari ribuan IP rumahan tidak serta-merta berarti itu botnet klasik; bisa jadi justru banyak orang mendaftar ke "VPN gratis" atau alat "penghasil pendapatan pasif", lalu perangkat mereka menjadi node keluar trafik bagi pengguna lain dalam struktur "proxyware", sehingga tanpa sadar mereka menjadi jalur trafik untuk crawler AI referensi terkait

    • Pada akhirnya proxyware seperti ini juga merupakan variasi botnet yang diikuti pengguna secara sukarela; karena kecil kemungkinan para pengguna ini akan menyadari di tempat seperti HN bahwa IP mereka bermasalah, ada pendapat bahwa mungkin bagus juga mengarahkan IP mereka ke halaman peringatan terpisah yang memberi tahu "Anda adalah bagian dari botnet", meski secara praktis memblokir tanpa syarat tetap yang paling mudah

    • Ada juga pendapat bahwa struktur seperti ini jelas cukup layak masuk kategori botnet

  • Cara membicarakan soal bagaimana memuaskan bot terasa mengesankan; tulisannya menyenangkan dan proyeknya juga menarik

  • Sikap "saya kasihan pada bot yang berjuang menjalankan tugas yang diberikan, jadi saya memikirkan cara untuk menghiburnya" terasa sangat segar dan lucu; jelas sangat berbeda dari thread yang biasanya penuh kemarahan dan keluhan

    • Sikap positif seperti ini mungkin juga dimungkinkan karena ada keleluasaan untuk memberi penderitaan dan sampah kepada crawler jahat
  • Saya suka hasil dari tautan ini (gambarnya) lihat gambar, rasanya seperti semacam karya seni yang memuat pesan

    • Jika ingin merasakan pengalaman Spigot yang sesungguhnya, di Firefox bisa buka F12 > Network > ubah No Throttling ke GPRS, dan di Chromium bisa buka F12 > Network > buat Custom profile menjadi 20kbps untuk membatasi kecepatan agar terasa lebih nyata

    • Jadi penasaran apakah ada juga konten terkait Shakespeare di sini