- 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
Komentar Hacker News
Fakta bahwa file
robots.txtmemblokir akses robot ke tree/spigot/sudah sesuai dugaan, tetapi kemudian ditemukan bahwa dengan menghapus/spigot/dari URL, Spigot masih tetap bisa diakses; karena namespace/~aujtidak diblokir olehrobots.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.txtSebelumnya ada komentar dari penulis yang menyebut bahwa ia tidak menyiapkan
robots.txtsecara 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 detikSoal 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 endpointMuncul 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"
Kasus paling parah adalah bot
facebookexternalhityang dijalankan meta (Facebook), dan bahkan sudah didokumentasikan secara resmi bahwa bot ini mengabaikanrobots.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 hariSaat 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
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
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 Throttlingke GPRS, dan di Chromium bisa buka F12 > Network > buatCustom profilemenjadi 20kbps untuk membatasi kecepatan agar terasa lebih nyataJadi penasaran apakah ada juga konten terkait Shakespeare di sini