Memakai HTML Trap Untuk Mendeteksi Bot
Salah satu teknik untuk mendeteksi bot (seperti scrapper) adalah menggunakan trap berupa HTML tersembunyi yang tidak bisa dilihat oleh pengguna namun akan dibaca oleh bot. HTML honeypot seperti ini adalah salah satu teknik yang dipakai oleh layanan anti-spam seperti Cloudflare dan DataDome. Pada tulisan ini, saya akan membuat trap berupa form HTML untuk login pada blog ini. Form login ini tidak akan terlihat oleh pengguna sehingga tidak akan ada request dari pengguna. Bila ada yang memanggilnya, kemungkinan besar ini adalah IP bot atau scrapper yang membaca HTML. Saya kemudian bisa menambahkan daftar IP yang terdekteksi ke platform threat intelligence untuk diawasi lebih lanjut atau di-blokir. Ini adalah salah satu bentuk pertahanan di fase Reconnaissance.
HTML Trap
Sebagai latihan, saya akan menambahkan sebuah trap statis pada halaman https://jocki.me dalam bentuk HTML pada seperti berikut:
Pada HTML di atas, saya mendefinisikan HTML Form yang berisi username
dan password
serta sebuah tombol Login. Bila tombol Login tersebut ditekan, data akan dikirim ke hxxps[://]jocki[.]me/ikcoj/wp-login[.]php
. Walaupun HTML Form tersebut bisa dipakai, pengguna tidak akan pernah menjumpai HTML Form ini karena saya menggunakan position: fixed
di CSS dengan z-index: -2
sehingga ia akan ditimpa oleh <div>
di depannya. Biar lebih pasti lagi, saya menambahkan sebuah <div>
berwarna putih (backgrond-color: white
) dengan z-index: -1
sehingga warna putih polos ini akan menimpa HTML Form dibelakangnya.
Karena HTML Form di atas tidak akan pernah terlihat, saya akan mengasumsikan siapa saja yang berinteraksi dengan hxxps[://]jocki[.]me/ikcoj/wp-login[.]php
adalah bot.
Analisa
Untuk melihat hasil dari trap, saya dapat menggunakan query berikut ini di Log Explorer untuk mencari HTTP request yang memenuhi kriteria:
Bila saya mengaktifkan Log Analitycs, saya juga dapat menggunakan BigQuery SQL untuk membaca log seperti yang terlihat pada gambar berikut ini:
Bila ingin lebih indah lagi, saya juga dapat mengubah log menjadi metrics dan membuat visualiasi-nya dalam bentuk dashboard seperti pada gambar berikut ini:
Pada hasil di atas, terlihat bahwa terdapat IP dari berbagai negara berbeda yang mengerjakan POST request pada trap yang saya buat. Top IP berasal dari Kamboja, India, Brazil, Indonesia, dan Nepal. Bila dilihat dari user agent-nya, seluruh request menggunakan user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
. Ini seharusnya adalah Chrome 120 pada Windows 10. Namun, pengguna biasa seharusnya sudah men-upgrade browser mereka menjadi yang terbaru.
Setelah melakukan pencarian, user agent ini adalah user agent yang dipakai oleh malware seperti SSLoad. Ada kemungkinan IP yang dipakai untuk memanggil trap adalah IP yang terinfeksi malware dan kini menjadi zombie yang dipakai untuk menyerang situs lain, termasuk blog ini.
Sebagai langkah berikutnya, bila ini adalah sistem yang kritis, saya dapat mem-blokir seluruh IP yang memanggil trap dengan menambahkannya pada firewall. Tingkat false positive disini sangat rendah karena IP tersebut sudah dengan sengaja mengirim POST request (berbeda dengan GET request yang bisa saja datang dari service worker dan search engine crawler sehingga boleh diabaikan).