it-swarm-id.com

Bagaimana dan mengapa situs saya disalahgunakan?

Saya memiliki situs web populer yang memungkinkan orang memasukkan nomor telepon dan mendapatkan informasi kembali tentang nomor telepon itu, seperti nama operator telepon. Ini adalah layanan gratis, tetapi kami mengeluarkan biaya untuk setiap permintaan sehingga kami menampilkan iklan di situs untuk membantu membayarnya. Untuk memastikan orang tidak menyalahgunakannya, kami memiliki captcha dan menggunakan alamat IP untuk membatasi jumlah permintaan hingga 30 per bulan.

Tapi bagaimanapun kita telah melihat pelecehan; kami tiba-tiba mendapatkan banyak sekali kueri dari semua alamat IP yang berbeda, membuat kueri (ratusan per menit), dan membuat captcha benar. Jadi saya terus mengganti captcha - Saya sudah mencoba yang dengan kata-kata, persamaan matematika, reCAPTCHA, dll. Ketika saya melakukan ini, itu menghentikan "serangan" selama 24 jam atau lebih, dan kemudian mulai lagi.

Saya mengerti orang-orang dapat menggunakan OCR dan metode lain untuk berkeliling captcha, tetapi saya tidak mengerti mengapa mereka berasal dari banyak alamat IP yang berbeda dan tidak terkait.

Mungkin mereka memalsukan alamat IP? Jika demikian, mereka tidak dapat memperoleh hasil dari kueri, benar? Dalam hal ini, mungkin tujuannya adalah untuk mencoba melukai kita secara finansial, sebagai lawan dari mereka hanya menginginkan data?

Jika mereka tidak menipu alamat IP, mungkin mereka telah meretas sejumlah besar komputer yang berbeda dan mengeksekusi permintaan dari mereka? Ini tidak masuk akal bagi saya karena banyaknya alamat ip yang kita lihat (ratusan transaksi per menit dengan maksimum 30 kueri per alamat IP, untuk jangka waktu yang lama), dan fakta bahwa data ini benar-benar tidak begitu berharga.

Jadi saya mencoba memahami motivasi mereka dan juga bagaimana mereka mencapai ini, agar dapat melawan dengan tepat.

84
Marc

Masalah menarik. Saya ingin tahu apakah solusi untuk masalah ini mungkin memaksa browser web pengguna Anda untuk memecahkan masalah kriptografi (menggunakan javascript yang berjalan di browser web mereka) yang 'sulit' untuk dipecahkan, tetapi 'mudah' bagi situs Anda untuk memverifikasi. Dengan 'sulit' untuk dipecahkan, maksud saya masalah yang akan memakan waktu ~ 10 detik untuk dipecahkan dengan sumber daya dari desktop atau laptop biasa. Masalah yang mirip dengan masalah yang diselesaikan penambang bitcoin saat blok baru ditambang, tetapi tentu saja dalam skala yang jauh lebih sederhana.

Pengguna Anda yang sah tidak akan melihat perbedaannya, karena skrip berputar saat mereka mengisi formulir di situs Anda. Tapi, itu akan sangat memperlambat pelaku, dan memaksa mereka untuk mengalokasikan lebih banyak sumber daya, dan memaksa mereka untuk bekerja kembali alat apa pun yang mereka gunakan untuk mengotomatiskan posting ini ke situs Anda.

97
mti2935

Bagaimana?

Peternakan botnet dan captcha sewaan.

Mengapa?

Seseorang menginginkan data Anda. Lebih murah untuk mencurinya daripada membelinya.

Apa yang harus dilakukan?

Mencuri itu lebih murah, tetapi tidak gratis. Harganya "mereka" (siapa pun yang akhirnya menginginkan data, bukan botnet atau captcha farm) uang untuk melakukan serangan ini. Buat lebih mahal untuk menyerang Anda daripada nilai data.

  1. Identifikasi pola untuk mengidentifikasi spammer.

  2. Kembalikan tampak sah, tetapi data palsu ke spammer.

Setelah sejumlah respons valid, mulai selingi data palsu dengan data yang valid. Kemudian mereka harus mengambil langkah ekstra untuk memvalidasi data Anda. Langkah-langkah ekstra itu membutuhkan uang tambahan.

Jika mereka tidak memvalidasinya, data mereka kurang berguna, yaitu kurang bernilai. Mereka mungkin masih dapat menggunakannya atau menjualnya, tetapi itu kurang berharga sehingga sekali lagi biaya untuk menyerang Anda lebih tinggi daripada nilai yang dikembalikan.

34

Anda melakukan CAPTCHA salah.

Gagasan CAPTCHA adalah membuatnya sulit (baca "hampir mustahil) bagi komputer untuk menyelesaikannya, tetapi mudah bagi manusia untuk melakukannya. Jika Anda hanya menggunakan satu gambar statis, minta mengetikkan 4 misalnya, maka komputer tidak akan kesulitan untuk masuk berulang kali 4 ketika diinstruksikan untuk melakukannya.

Sebagai gantinya, pertimbangkan untuk menggunakan reCAPTCHA atau teknologi serupa. Masalah-masalah ini telah dipecahkan, dan tidak perlu menemukan kembali roda, seperti yang ditunjukkan di bawah ini:

[Reinventing the Wheel]

CC-BY-NC 2.5, Randall Munroe, xkcd.com/2140/

22
MechMK1

Jika Anda dapat memasang CAPTCHA "ketikkan nomor dalam gambar ini" dan simpan tongkat itu selama 24 jam, Anda tahu musuh Anda adalah seorang amatir. Anda tahu perangkat primitif semacam ini yang melibatkan kode dipesan lebih dahulu akan memperlambatnya selama 24 jam. Ini bisa menyenangkan :)

Saya akan menggunakan stylesheet secara luas untuk menyembunyikan informasi dalam kode halaman: dengan dua pengertian, sembunyikan CAPTCHA pertama, dan sembunyikan kedua jawaban informasi. Dengan tujuan untuk secara menyesatkan menyesatkan pencakar.

Saya akan menulis sedikit kode di sisi server untuk membuat jawaban palsu yang dapat dipercaya pada pandangan pertama, tetapi palsu dengan cara yang tidak mudah dikonfirmasi. Selanjutnya, gunakan seeding acak atau MD5 untuk memastikan input yang sama selalu memberikan jawaban palsu yang sama.

Menyesatkan di CAPTCHA:

Misalnya, tinggalkan sistem CAPTCHA terakhir yang Anda gunakan, tetapi gunakan stylesheet untuk menyembunyikannya. Ikuti dengan CAPTCHA yang berbeda, dikaburkan oleh Javascript; mungkin bahkan reCaptcha lain dengan kunci yang berbeda.

Sekarang, scraper tidak akan menyadari CAPTCHA pertama ditekan dengan stylesheet. Dengan senang hati akan menyelesaikan CAPTCHA dan mengembalikan jawabannya dengan kunci yang salah. Gotcha . Namun, seperti halnya memecahkan Enigma, Anda tidak dapat membuatnya jelas bahwa Anda telah merusak kode; scraper harus terus percaya bahwa kode itu berfungsi.

Menyesatkan jawaban:

Sajikan jawaban seperti biasa, dengan stylesheet di sekitarnya. Lembar gaya menyembunyikan hasil ini untuk orang normal; scraper tidak menyadari bahwa sheet ini memiliki properti "tersembunyi". Jawaban yang Anda berikan di sini adalah yang pals. Sajikan hasil yang benar sesudahnya. Untuk poin bonus, tunjukkan hasil dalam grafik yang membuatnya tidak dapat diuraikan. Coba sembunyikan ini tentu saja.

Jika Anda memiliki telemetri (CAPTCHA salah yang diselesaikan) bahwa ini adalah kueri yang dikikis, maka bahkan tidak perlu repot membeli hasil kueri dari penyedia layanan Anda. Masukkan sleep (t + acak) untuk rentang waktu yang biasa diambil penyedia layanan Anda, lalu kirim kembali jawaban palsu.

Terlihat normal

Penyerang akan percaya bahwa semuanya berjalan normal, dan hanya memeriksa keberhasilan permintaan, bukan kualitas hasil. Jika beruntung, penyerang Anda tidak akan login ketika setiap kueri dibuat , dan hanya membuang jawaban ke dalam database. Mungkin perlu waktu lama bagi penyerang untuk menyadari bahwa Anda telah meracuni data, pada saat itu, seluruh basis data akan rusak, tidak tahu entri mana yang valid dan mana yang beracun (lihat pentingnya membuat data palsu terlihat sah ?) Bahkan jika penyerang mencatat waktu setiap entri, sungguh bug berburu! Harus secara manual memeriksa beberapa entri untuk setiap hari untuk mengetahui kapan data memburuk.

Dan satu hal lagi. Cache jawaban yang benar, dan jika permintaan botnet ada di cache, selalu berikan jawaban yang benar dari cache. Jadi pengikis, pengusir masalah, akan mengunjungi situs web Anda yang sebenarnya dengan browser, dan meminta nomor tes 213-456-7890. Persembunyian akan berfungsi dan ini akan berperilaku seperti permintaan nyata, jadi Anda akan menghitung jawaban yang sebenarnya dan mengembalikannya. Selanjutnya, scraper akan memberitahu botnet untuk meminta 213-456-7890. Untuk melihat apakah bot mendapat hasil yang berbeda. Anda akan mendeteksi permintaan bot . Jika Anda sekarang memberikan jawaban palsu, pengikis tahu jig sudah habis, dan akan beralih pada deteksi rusak Anda. Jadi karena Anda memiliki jawaban yang benar dalam cache, berikan, bahkan di bidang tersembunyi. Sekarang, pengikis bingung: botnet tampaknya berfungsi .


Kenapa dan bagaimana

Jelas seseorang menemukan data Anda berharga. Mereka akan mendapatkannya dari sumber Anda, tetapi mereka tidak mau membayar untuk itu, sehingga mereka mencoret Anda.

  • Mungkin saja mereka sebenarnya adalah situs web pesaing yang melakukan hal yang sama dengan Anda, dan mereka membuat permintaan kepada Anda ketika mereka mendapatkannya dari pengunjung mereka. Intinya ini adalah skema untuk menggunakan layanan Anda tetapi memasang iklan mereka. Anda sendiri tahu betapa berharganya hal itu. Anda dapat mengujinya dengan membuat kueri yang tidak jelas dan berbeda di setiap situs pesaing dan melihat kueri mana yang muncul di log Anda.

Ada banyak cara untuk menyelesaikan CAPTCHA. Dalam contoh situs web pesaing yang menarik data Anda untuk pelanggan mereka, mereka mungkin hanya meneruskan CAPTCHA Anda ke pelanggan mereka. Ada juga cara untuk menipu manusia agar melakukan CAPTCHA untuk Anda, seperti "selesaikan CAPTCHA mendapatkan pornografi gratis", atau dengan menawarkan layanan yang tidak terkait yang memerlukan CAPTCHA karena alasan tertentu, seperti papan buletin anonim. Setiap kali seseorang memposting, ia mengirimkan pertanyaan dan mendapatkan posternya untuk menyelesaikan CAPTCHA Anda. Ada juga pemecahan CAPTCHA pada dasarnya perbudakan di dunia ketiga.

Kenapa?
Data yang terkait dengan nomor telepon, nama, dan alamat email sangat berharga, baik di pasar legal dan bawah tanah.

Bagaimana?
Sepertinya seseorang menggunakan botnet untuk menambang data dari Anda. Ini bisa berarti koneksi dari beberapa lusin IP yang tersebar secara global ke ribuan mereka. Secara pribadi saya tidak tahu bagaimana mereka berkeliling reCapcha, selain menggunakan tenaga kerja manual dari situs yang menawarkan layanan penyelesaian capcha. Semua ini memakan biaya dalam satu atau lain cara.

Solusi?
Penafian: Saya bukan ahli keamanan.
Beberapa layanan gratis menggunakan sistem antrian setelah sejumlah pertanyaan. Katakanlah Anda tidak ingin membebani sistem Anda, Anda mengizinkan maksimum 30 permintaan (atau berapa pun jumlah permintaan bersamaan yang dapat dikelola dengan mudah oleh sistem Anda) setiap saat. Permintaan yang dimasukkan saat antrian penuh akan menerima pesan yang menjelaskan bahwa server sedang sibuk dan mereka harus mencoba lagi di lain waktu atau secara otomatis antri. Solusi ini bukan tanpa masalah karena klien Anda yang sah terkadang harus menunggu untuk dilayani, khususnya selama masa puncak atau selama serangan.

Anda menyebutkan mengubah metode capcha untuk menghentikan serangan untuk sementara waktu. Mungkin ada cara untuk mengganti metode capcha untuk setiap pengunjung dengan setiap permintaan secara acak? Paling tidak penyerang harus menulis ulang beberapa metode mereka. Skenario terbaik serangan sukses mereka dibagi dengan jumlah metode berbeda yang Anda masukkan.

12
phLOx

Motivasi mereka mungkin semata-mata karena mereka membangun layanan serupa sendiri dan membutuhkan data. Layanan Anda dapat menjadi salah satu sumber data yang mereka temukan dan perlu kikis.

Sudahkah Anda mencoba membatasi permintaan Anda? Anda mengatakan Anda mendapatkan ratusan menit (dengan asumsi dari alamat IP yang sama), maka tidak bisakah Anda mencatat permintaan itu, mendeteksi pengunjung berulang dalam periode waktu yang masuk akal dan kemudian sementara melarang IP untuk jangka waktu tertentu?

Anda juga bisa menambahkan elemen formulir "honeypot" ke dalam formulir Anda. Elemen formulir Honeypot disembunyikan dari pengguna geniune, tetapi diisi otomatis oleh bot. Setiap permintaan dengan data di bidang-bidang itu secara otomatis dibuang dan bahkan mungkin dilarang.

3
Stephen Bailey

Jangan gunakan satu solusi captcha, gunakan semuanya!

Karena Anda sudah memiliki beberapa yang berbeda, mengapa tidak memutarnya secara acak selama 2 jam atau bahkan berdasarkan permintaan? Sekalipun penyerang secara teoritis telah memecahkan semuanya, mereka yang perlu mendeteksi jenis captcha itu sendiri adalah captcha lain yang harus dipecahkan untuk komputer (walaupun tidak mempengaruhi manusia sama sekali).

Juga mungkin termasuk pertanyaan bodoh seperti captcha seperti "nomor telepon apa yang Anda cari lagi" dll. Semakin acak hal-hal yang semakin sulit dilakukan untuk bot.

Terutama jika Anda menggunakan disiplin ilmu yang berbeda (pengenalan gambar, angka membaca, matematika, pengetahuan umum, dll) para botters akan kesulitan menindaklanjuti.

Dan Anda tidak perlu mengakali mereka dengan sempurna, Anda hanya perlu membuatnya tidak layak waktu mereka lagi.

Sunting: ini juga akan membutuhkan pelemparan jenis captcha baru secara teratur

2
Hobbamok

Jadi saya mencoba memahami motivasi mereka dan juga bagaimana mereka mencapai ini, agar dapat melawan dengan tepat.

Mungkin juga proxy digunakan untuk mengakses layanan Anda. Hanya google untuk open proxy list mengembalikan beberapa situs yang menampilkan proxy terbuka yang dapat digunakan juga untuk menutupi alamat ip klien.

Saya sarankan untuk login HTTP Header X-Forwarded-For dan Via di sisi server selama beberapa waktu lalu periksa apakah masuk akal bahwa proxy semacam itu digunakan untuk menyalahgunakan sistem Anda. X-Forwarded-For biasanya berisi alamat IP klien, Via berisi IP proxy dalam rantai (jika ada). Perlu diketahui bahwa menggunakan proksi secara umum adalah sah, tetapi mungkin ada beberapa pola yang menarik, mis. jika Anda melihat proxy yang sama digunakan berulang kali dalam periode serangan.

2
mottek

Saya tidak menganggap ini sebagai jawaban yang lengkap. Saya mengatakan apa yang akan saya lakukan dalam situasi yang serupa.

  1. Catat kueri. Apakah ada pola dalam kueri mereka? misalnya, negara tertentu, atau wilayah tertentu. Jika mereka benar-benar menggunakan hasil, pasti ada pola. Jika tidak, saya akan mempertimbangkan nomor 2.

  2. Anda mengatakan ketika Anda mengubah jenis dan teknologi captcha, serangan berhenti selama sekitar 24 jam. Saya membaca ini dengan cara ini:

    Ketika saya bertarung selama 10 menit waktu kerja, saya merusak lawan selama 24 jam kerja.

    Jadi yang perlu Anda lakukan, adalah terus merusak jam mereka dan bertahan dalam hal itu. Itu membuat siapa pun yang melakukan ini, lelah, dan Anda bisa yakin mereka yang pertama berhenti berkelahi. peluang menang sebenarnya adalah -> 1 - (10/1440)

    Itu bukan solusi nyata, melainkan sesuatu yang akan saya pertimbangkan sebelum menuju ke nomor 3.

    Ingat, mereka mungkin kembali bulan depan atau enam bulan kemudian, tetapi sekarang mereka tahu Anda terus-menerus melawan, dan Andalah yang kehilangan terlalu sedikit.

    Anda bahkan dapat membuat pertarungan untuk mereka sedikit lebih sulit, misalnya, lebih dari 3 pertanyaan dalam satu hari, mengharuskan pengguna untuk memasukkan 2 jenis captcha. setelah 10, sistem hardcores lebih, dengan cara yang pengunjung nyata Anda tidak akan menyadarinya.

  3. Sedih tapi Gunakan Otorisasi. Bahkan Anda secara opsional dapat membuat n pertama (n <10) kueri tersedia secara anonim, tetapi lebih dari itu membutuhkan masuk.

1
FarhadGh

Saya mengembangkan formulir kontak yang telah dianiaya oleh pelaku penyalahgunaan selama lebih dari setahun sekarang dan secara konsisten gagal.

Pendekatan saya mencakup kombinasi:

  1. Setelah setiap bidang wajib divalidasi, pemicu akan memicu panggilan ajax yang mengambil 32-48 karakter baru yang dihasilkan secara acak nama bidang yang sementara disimpan dalam bentuk tabel validasi db. Kemudian ketika formulir dikirimkan, bidang yang masuk dengan nama yang belum dihasilkan oleh server atau nama bidang yang asli memicu masuk ke alamat IP jarak jauh db serta apa yang mereka kirimkan terkait dengan pengiriman formulir. Setelah nama bidang diubah, pengiriman apa pun dengan nama bidang asli terdeteksi sebagai penyalahgunaan dan diperlakukan sesuai.
  2. Mereka harus berada di halaman formulir aktif setidaknya 1,3 detik per bidang wajib dan semua bidang harus divalidasi sebelum properti tombol penonaktifan dihapus dan setidaknya nama input masukan diubah baik dengan ajax baru panggilan atau nama dan atau nilai yang diterima dari panggilan nama bidang ajax sebelumnya. Nama dan nilai tombol harus cocok selama validasi formulir di server atau penyalahgunaan terdeteksi dan ditangani sesuai.
  3. Saya mencatat semua kiriman ke db dan menandai penyalahgunaan dengan target DENY dan begitu mereka telah menyalahgunakan formulir saya, mereka secara permanen diblokir dari bahkan mengunjungi halaman formulir dan diarahkan langsung ke respons 403 setelah login dari upaya kunjungan.
  4. Selama salah satu panggilan ajax saya kadang-kadang akan secara acak menghasilkan bidang dan nilai baru yang ditambahkan ke formulir sebelum pengiriman dan harus ada atau pengiriman tidak akan memvalidasi dan akan terdeteksi sebagai penyalahgunaan.
  5. Anda dapat memasukkan bidang honeypot tetapi jangan menyembunyikan objek bidang itu akan terdeteksi. Sembunyikan objek induk jika Anda akan menyembunyikan bidang. Anda juga dapat memposisikannya secara absolut dan menempatkannya jauh dari pandangan. Setiap bidang honeypot yang masuk ke server dengan nilai apa pun dideteksi sebagai penyalahgunaan dan ditangani dengan demikian.

Pastikan untuk mencatat semua pengiriman sehingga Anda dapat memantau pola-pola baru yang dimaksudkan untuk menghindari keamanan Anda.

1
Dan Stepaniak