Pembatasan nilai * permintaan tidak terautentikasi * *


11

Katakanlah kita memiliki penyeimbang beban yang juga membatasi laju. Pembatasan nilai tampaknya cukup mudah bagi pengguna yang masuk - lihat saja JWT dan mungkin gunakan penyimpanan data dalam memori untuk melihat berapa banyak permintaan dalam 10 detik terakhir untuk pengguna tersebut.

Namun, bagaimana dengan pengguna yang tidak masuk (tidak diauthentikasi)? Kami tidak tahu pasti siapa mereka atau dari mana permintaan itu berasal, jadi tidak dapat dengan mudah menilai-membatasi permintaan itu atau ..?

Apakah ada solusi bawaan untuk ini pada AWS dan platform hosting lainnya, apakah ini sesuatu yang perlu kita khawatirkan? Sepertinya kita perlu menangani logika pembatasan-tingkat pengguna yang login secara manual, tetapi bagaimana dengan pengguna yang tidak login?

Tebakan / harapan saya adalah mungkin ada beberapa mekanisme bawaan untuk membatasi permintaan yang tidak diautentikasi pada platform hosting, mohon informasikan kepada kami semua.


2
Halaman ini tidak pernah menyebutkan pengguna yang masuk. Faktanya, teknik yang dijelaskan di sana dikutip sebagai mitigasi serangan brute-force pada kata sandi, yang menyiratkan pengguna yang tidak masuk.
Robert Harvey

1
Mengapa Anda ingin menggunakan pembatasan tingkat? Apakah itu untuk melawan serangan penolakan layanan, untuk mencegah pengguna melebihi rencana pembayaran mereka, sesuatu yang lain? Kasus penggunaan memengaruhi metode yang dapat Anda gunakan secara efektif.
Bart van Ingen Schenau

1
Pertanyaan ini mungkin lebih cocok untuk security.stackexchange.com , meskipun saya tidak mengatakan itu di luar topik
Peeyush Kushwaha

@ BartartIngenSchenau semua hal di atas?

Mengapa Anda harus memiliki dua batas nilai yang berbeda? Apakah Anda menjual segala "rencana" dengan berbagai kendala / fitur?
Laiv

Jawaban:


9

Namun, bagaimana dengan pengguna yang tidak masuk (tidak diauthentikasi)? Kami tidak tahu pasti siapa mereka atau dari mana permintaan itu berasal, jadi tidak dapat dengan mudah menilai-membatasi permintaan itu atau ..?

Ada beberapa pendekatan yang bisa Anda ambil. Salah satunya adalah bahwa Anda memerlukan pengidentifikasi asal yang cukup andal, misalnya alamat IP. Anda dapat menilai batas berdasarkan alamat IP, sehingga serangan pada satu mesin yang dikompromikan akan terbatas. Ini adalah pendekatan yang cukup sederhana, tetapi ada kelemahan bahwa ada penyedia jaringan besar hanya dapat menggunakan alamat IP keluar tunggal untuk menyembunyikan sejumlah besar pengguna di belakang NAT.

Pendekatan lain untuk pembatasan tingkat yang dapat Anda lakukan adalah meminta bukti kerja untuk setiap permintaan yang tidak diautentikasi. Server Anda mengeluarkan kode tantangan yang setiap klien membuat permintaan tidak terauthentikasi (mis. Permintaan login) harus menghitung respons intensif sumber daya sebelum permintaan diproses. Implementasi umum dari ide ini mengharuskan klien untuk menghitung pengembalian hash parsial.


Saya gagal melihat, bagaimana "bukti kerja" dapat mencegah serangan DOS? Klien dapat mengabaikan tantangan dan terus mengirim permintaan hingga yang gagal. Apakah ada proses ketiga yang menangani tantangan?
Laiv

4
@Laiv POW dapat diterbitkan dan diperiksa dengan andal tanpa menghubungkan ke database pusat, yang merupakan tempat sebagian besar skema pembatasan laju lainnya gagal. Ini meningkatkan biaya serangan untuk penyerang, karena meningkatkan pertahanan Anda dan meningkatkan load factor lebih murah untuk Anda dan pengguna yang sah daripada memperbesar serangan untuk penyerang. Ini menciptakan disinsentif ekonomi untuk menyerang sistem, karena juga secara efektif mengecualikan perangkat berdaya rendah (misalnya printer yang dikompromikan, IOT, router) agar tidak digunakan sebagai platform serangan yang efektif.
Lie Ryan

6

Untuk mengetahui apakah permintaan berasal dari pengguna yang diautentikasi atau dari pengguna anonim, Anda harus selalu memproses permintaan tersebut (meskipun dengan cepat). Ini masih berarti aplikasi Anda rentan terhadap serangan penolakan layanan.

Anda harus memeriksa permintaan keseluruhan per detik, dan jika jumlah tertentu terlampaui, Anda mengabaikan sisanya. Angka itu harus cukup tinggi untuk tidak menyebabkan masalah selama berfungsi normal, tetapi harus melindungi terhadap serangan tersebut.

Juga, sebagai aturan umum, Anda mungkin tidak boleh berasumsi bahwa serangan tidak akan datang dari pengguna yang diautentikasi, paling tidak untuk apa yang menyangkut serangan DOS. Kata sandi yang lemah akan dengan mudah memungkinkan seseorang untuk menganggap identitas pengguna lama. Jadi seandainya Anda bisa melakukan pemeriksaan seperti itu, pengguna (manusia) Anda seharusnya tidak perlu melakukan permintaan pada tingkat seperti itu tidak bertahan hanya karena Anda memiliki banyak pengguna individu.


Saya kira Anda bisa menggunakan alamat IP dan menetapkan batas tingkat tinggi untuk masing-masing alamat. Saya kira serangan DoS yang diatur dengan baik dapat menggunakan ribuan alamat IP? mungkin lebih? idk ... Saya sadar bahwa alamat IP yang sama dapat digunakan untuk beberapa klien yang berbeda, tetapi saya akan mengatakan ada kemungkinan kuat bahwa itu adalah pengguna yang sama, bukan?
Alexander Mills

@AlexanderMills Yah anggaplah Anda memutuskan algoritihm akan memeriksa beberapa permintaan dari alamat IP yang sama. Bahkan jika ada ribuan, mereka akan diulang untuk lebih dari 1000 permintaan. Server Anda mencatat permintaan pertama dari alamat IP yang diberikan dan banjir dimulai .. server Anda sudah ditumpuk dengan permintaan .. Anda bahkan tidak dapat memproses permintaan yang cukup untuk mendapatkan pengulangan kedua dari IP yang sama (yang masih bisa menjadi permintaan yang sah ngomong-ngomong). Ini akan melindungi terhadap serangan DoS di mana IP yang sama hanya digunakan. Lebih baik menggunakan keduanya jika ada. : P
Neil

0

Salah satu penawaran utama Cloudflare adalah perlindungan terhadap serangan Denial of Service dengan memberikan proxy yang cerdas untuk API / server web Anda. Layanan dasar gratis; mereka menghasilkan uang dari layanan terkait lainnya seperti layanan CDN dan load balancing. Mereka juga menyediakan layanan Pembatasan Rate yang lebih canggih dan terkendali , saat ini dengan harga US $ .05 per 10k permintaan bagus (tidak ada biaya untuk permintaan yang ditolak), tetapi Anda harus meningkatkan ke paket berbayar untuk mendapatkan lebih dari satu aturan global.

Anda dapat menggunakan layanan Cloudflare dengan AWS atau platform lain selama Anda memiliki kendali atas server nama domain Anda (seperti pada, Anda dapat mengubah server nama yang terdaftar untuk domain Anda).

Anda dapat memberikan batasan nilai terpisah untuk pengguna anonim dan masuk dengan mengarahkan pengguna masuk ke URL yang berbeda. Sebagai contoh, Anda mungkin cukup awalan semua jalur URL yang tersedia secara anonim dengan '/ u' untuk membuat titik akhir yang selalu memerlukan otentikasi dan memiliki batas laju yang berbeda.

Perhatikan bahwa pembatasan tingkat Cloudflare (seperti semua pembatasan tarif komersial untuk pengguna anonim yang saya ketahui) mendefinisikan klien dengan alamat IP-nya. Ini dapat menyebabkan masalah bagi orang yang menggunakan VPN komersial atau Tor, karena mereka cenderung menyembunyikan sejumlah besar klien di belakang 1 alamat IP untuk privasi tambahan.


0

Di AWS, ada layanan terkait AWS Shield dan AWS WAF . Mereka terutama ditujukan untuk mencegah serangan DDoS tetapi juga menawarkan dukungan untuk pembatasan tingkat berdasarkan alamat IP.

Dalam WAF, konsep ini disebut Aturan Berbasis Tarif . Mencegah upaya masuk berbasis brute-force disebutkan sebagai kasus penggunaan dalam pengumuman asli :

Jenis aturan baru ini melindungi situs web dan API pelanggan dari ancaman seperti serangan DDoS layer web, upaya masuk dengan kekuatan kasar, dan bot buruk. Aturan Berbasis Nilai secara otomatis dipicu ketika permintaan web dari klien melebihi ambang batas yang dapat dikonfigurasi.

Penyedia cloud lainnya harus memiliki penawaran serupa. Di sini, adalah perbandingan tabular: Google Cloud Armor vs AWS WAF vs Cloudflare WAF .

Karena Anda sudah menggunakan Nginx, menggunakan pembatasan tingkat berbasis IP bawaan juga bisa menjadi pilihan sederhana. Modul ini disebut ngx_http_limit_req_module . Posting blog ini menjelaskan cara penggunaannya.

Harap perhatikan bahwa pembatasan tingkat berbasis IP adalah konsep yang relatif sederhana tetapi tidak sempurna:

  • Alamat IP mungkin dibagikan (orang yang bekerja di kantor yang sama) yang mengarah ke hasil positif palsu
  • Seorang penyerang mungkin memiliki akses mudah ke beberapa alamat IP dan menggunakannya untuk melewati batas (serangan masuk brute-force terdistribusi)

Secara umum, alamat IP adalah awal yang baik. Tetapi jika Anda membutuhkan perlindungan yang lebih kuat, pilihan terbaik Anda akan bergantung pada model utas Anda (jenis serangan yang ingin Anda cegah).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.