Bagaimana cara mencegah spoofing identitas dalam game multi pemain?

9

Saya sedang memikirkan klien spoofing alamat IP, menipu klien lain bahwa mereka adalah server; hal semacam itu. (Saya tidak tahu banyak tentang ini, jadi jika ini benar-benar salah, mohon perbaiki saya.)

Apa yang harus saya lakukan untuk mencegah hal ini? Karena ini adalah permainan waktu nyata, jika saya menggunakan enkripsi, saya akan menggunakan sesuatu yang cepat dan aman seperti RC4. Haruskah saya mengenkripsi data paket dengan kunci, yang diberikan server kepada klien?

Jika ada bedanya, saya menggunakan UDP.

liamzebedee
sumber

Jawaban:

8

Salah satu solusi yang mungkin adalah mengotentikasi pengguna menggunakan TCP + TLS; kemudian, dalam saluran yang sama, gunakan sesuatu seperti Diffie-Hellman untuk menegosiasikan kunci simetris. Akhirnya mengenkripsi setiap paket UDP menggunakan algoritma simetris seperti RC4.

Anda secara teknis tidak perlu menggunakan TCP + TLS untuk menegosiasikan kunci simetris jika Anda menggunakan sesuatu seperti SRP - ingat saja bahwa Diffie-Hellman yang bersih rentan terhadap serangan MITM .

Anda bisa melangkah lebih jauh dan menggunakan bidang SEQ khusus dalam paket UDP Anda (jika Anda menggunakan beberapa bentuk UDP yang dapat diandalkan) untuk mengimplementasikan bentuk enkripsi mode-balik - di mana Anda menambahkan nomor SEQ ke kunci negosiasi untuk setiap paket; membuatnya jauh lebih sulit untuk memasang serangan teks biasa.

Jangan biarkan server Anda hanya membagikan kunci sesuka hati - server 'spoof' bisa dengan mudah membagikan kunci itu sendiri; mengalahkan tujuan keseluruhan skema enkripsi Anda. Satu-satunya cara yang terjamin adalah menggunakan TLS atau pengetahuan timbal balik (seperti kata sandi / hash).

Jonathan Dickinson
sumber
Bisakah Anda jelaskan kerentanan apa yang akan ditutup ini? Saya pernah mendengar tentang IP spoofing dan sejenisnya, tapi saya tidak dididik tentang topik
liamzebedee
@ LiamE-p GameDev bukan tempat untuk kursus kilat tentang keamanan; saya juga tidak punya waktu untuk membagikannya. Pada dasarnya SRP dan TLS (keduanya) harus seaman situs web perbankan online Anda - SRP lebih-lebih dengan mode CTR. Jika Anda membutuhkan lebih banyak penjelasan, Anda harus bertanya di situs web Security SE.
Jonathan Dickinson
Ini pasti akan menjadi topik pada keamanan SE. Saya akan menandai mod untuk memigrasikannya di sana.
Rory Alsop
8

Saya memiliki latar belakang yang jauh (2 tahun lalu) dalam peretasan, paket paling sulit yang pernah retak (dan apa yang saya sarankan Anda gunakan) menggunakan metode enkripsi kunci simetris yang dijelaskan oleh Jonathan Dickinson singkatnya. Anda harus menggunakan TCP + TLS seperti yang ia sebutkan. Namun, dia mengatakan counter sequence.

Saya pernah mengalami saat-saat di mana programmer "hack proof" system dengan mudah dipalsukan karena mereka memiliki sistem penghitungan yang cukup aneh sehingga saya bisa memecahkannya tanpa pengetahuan pemrograman dan logika aljabar tahun pertama. Selama Anda memilih metode sekuensial yang tepat maka target Anda harus menerima data persis seperti yang diharapkan, juga berarti Anda harus menggunakan TCP untuk operasi yang paling aman.

Kembali ke jalur "dalam pengalaman saya", satu sistem yang saya temukan bekerja secara fantastis. Metode berurutan berdasarkan waktu yang dikirim dan waktu yang diharapkan. Karena paket harus selalu diterima dalam urutan yang tepat, untuk menipu paket maka hampir tidak mungkin karena saya tidak pernah bisa memprediksi kapan suatu paket akan dikirim dan kapan paket itu diharapkan (antara satu paket dan lainnya) tanpa terlebih dahulu meretas program klien.

Jawaban singkatnya

Singkatnya: Setiap struktur paket juga akan memiliki cap waktu seperti ketika dikirim ke milidetik. Itu sangat sederhana dan sangat mudah untuk memeriksa apakah waktu sebelum / sesudah waktu lain. Alasan mengapa hal itu masuk akal adalah karena server masih dapat menerima paket untuk melakukan spoofing, tanpa waktu untuk otentikasi.

Ini jelas bukan satu-satunya metode berurutan atau bahkan yang terbaik dari metode apa pun. Hanya satu yang saya temukan yang bekerja dengan sangat baik. Dikombinasikan dengan TCP + TLS Anda seharusnya tidak memiliki terlalu banyak masalah.

Joshua Hedges
sumber
Masalah dengan permainan adalah hal-hal terjadi pada tingkat sub-milidetik.
Jonathan Dickinson
@ JonathanDickinson Itu sepenuhnya benar. Tetapi menggunakan UDP dan ketika menggunakan TCP khususnya, algoritma perhitungan mati harus digunakan untuk sub milidetik dan bahkan banyak operasi milidetik. Itu untuk membantu dalam kecepatan, visual dan beberapa hal di belakang layar tentu saja. (Sebagian besar terkait kecepatan)
Joshua Hedges
6
Saya kira pada akhirnya itu adalah permainan dan bukan sistem kontrol satelit sinar kematian. +1
Jonathan Dickinson
4

Secara pribadi, saya tidak akan terlalu dini. Bahkan jika Anda mengenkripsi paket Anda seperti yang disarankan Jonathan, peretas seperti saudara saya hanya akan mengakses data paket sebelum dienkripsi. Jika pengguna jahat ingin, mereka akan menemukan jalan masuk.

Nah, itu tidak mungkin, ada cara bagi pengembang indie untuk meminimalkan kerusakan yang dapat dilakukan pengguna jahat. Anda mungkin harus mengenkripsi paket keluar Anda, tetapi itu hanya akan menghentikan jenis serangan tertentu, jangan membodohi diri Anda dengan berpikir itu sekarang "bukti hack". Untuk benar-benar mematikan peretas, berikan klien kontrol sesedikit mungkin untuk mengubah permainan. Salah satu MMO besar di luar sana digunakan untuk memungkinkan klien memberi tahu server berapa banyak XP yang telah mereka peroleh. Coba tebak apa yang terjadi di sana? Jangan lakukan itu. Biarkan klien memberi tahu server bahwa mereka ingin memberikan mantra super pada makhluk itu, lalu biarkan server menyelesaikan tindakan dan kemudian menambahkan XP ketika makhluk itu mati. Klien harus tipis, bisu, terminal yang dapat mengirim dan menerima perintah, dan dapat melakukan beberapa prediksi (jika perlu).yang permainan dan bereaksi terhadap perintah yang dikirim oleh klien.

Perusahaan permainan besar menggunakan hal di atas sebagai tambahan untuk sesuatu seperti VAC atau PunkBuster untuk mencegah peretas yang dikenal terus mengganggu pelanggan yang membayar. Cara kerja langkah-langkah keamanan ini dirahasiakan, tetapi saya tahu satu metode yang mereka gunakan: mereka memindai aplikasi yang sedang berjalan dan membandingkannya dengan daftar peretasan yang dikenal. Setelah ketahuan selingkuh, Anda tidak akan bisa bergabung dengan server yang diamankan VAC / PunkBuster.

Terkait: Logika game di server! Baik atau buruk?

John McDonald
sumber