Bagikan melalui


Panggilan balik (RPC)

Seringkali model pemrograman mengharuskan panggilan balik server ke klien melalui panggilan prosedur jarak jauh (RPC), atau panggilan klien ke server yang tidak tepercaya. Ini memperkenalkan banyak potensi perangkap.

Pertama, panggilan balik ke klien harus dilakukan dengan tingkat peniruan yang cukup rendah. Jika server adalah layanan sistem yang sangat istimewa, memanggil kembali klien lokal dengan tingkat peniruan identitas atau lebih tinggi dapat memberi klien hak istimewa yang cukup untuk mengambil alih sistem. Memanggil kembali klien jarak jauh dengan tingkat peniruan yang lebih tinggi dari yang diperlukan juga dapat menyebabkan konsekuensi yang tidak diinginkan.

Kedua, jika penyerang menginduksi layanan Anda untuk melakukan panggilan balik, penyerang dapat meluncurkan apa yang disebut lubang hitam—penolakan serangan layanan. Serangan semacam itu tidak spesifik untuk RPC; dalam serangan ini, mesin menginduksi Anda untuk mengirim lalu lintas ke dalamnya, tetapi tidak menanggapi permintaan Anda. Anda tenggelam semakin banyak sumber daya untuk memanggil lubang hitam, tetapi mereka tidak pernah kembali. Salah satu contoh umum serangan tersebut adalah serangan tingkat TCP yang disebut serangan banjir TCP/IP SYN.

Pada tingkat RPC, serangan lubang hitam sederhana terjadi ketika penyerang memanggil antarmuka, dan meminta server untuk memanggil antarmuka kembali. Antarmuka mematuhi, tetapi penyerang tidak pernah mengembalikan panggilan: satu utas di server diikat. Penyerang melakukan ini 100 kali, mengikat 100 utas di server. Akhirnya server kehabisan memori. Men-debug server berpotensi mengungkapkan identitas pemanggil lubang hitam, tetapi sering kali server akan dimulai ulang tanpa mencurigai kesalahan bermain, atau mungkin tidak ada cukup keahlian yang tersedia untuk menentukan penyerang.

Perangkap ketiga ada pada klien. Seringkali klien melakukan panggilan ke server yang memberi tahu server cara memanggilnya kembali (biasanya pengikatan string), dan kemudian menunggu panggilan dari server tiba, dengan buta menerima panggilan apa pun di titik akhir yang mengklaim berasal dari server. Protokol panggilan balik dari server ke klien harus menyertakan beberapa mekanisme verifikasi untuk memastikan bahwa ketika panggilan balik datang ke klien, itu benar-benar berasal dari server.