Çok oyunculu bir oyunda kimlik sahtekarlığını nasıl önleyebilirim?


9

Ben istemcileri IP adreslerini taklit, diğer istemcilerin sunucu olduklarını kandırmayı düşünüyorum; bu tür şeyler. (Bu konuda fazla bir şey bilmiyorum, bu yüzden bu tamamen yanlışsa, lütfen beni düzeltin.)

Bunu önlemek için ne yapmalıyım? Gerçek zamanlı bir oyun olduğu için şifreleme kullanacak olsaydım RC4 gibi hızlı ve güvenli bir şey kullanırdım. Paket verilerini sunucunun istemciye verdiği bir anahtarla mı şifrelemeliyim?

Herhangi bir fark yaratırsa, UDP kullanıyorum.

Yanıtlar:


8

Olası bir çözüm, kullanıcının TCP + TLS kullanarak kimliğini doğrulamaktır; aynı kanalda, simetrik bir anahtar üzerinde anlaşmak için Diffie-Hellman gibi bir şey kullanın. Son olarak her UDP paketini RC4 gibi simetrik bir algoritma kullanarak şifreleyin.

SRP gibi bir şey kullanırsanız simetrik anahtar üzerinde anlaşmak için teknik olarak TCP + TLS kullanmanıza gerek yoktur - temiz Diffie-Hellman'ın bir MITM saldırısına karşı savunmasız olduğunu unutmayın .

Daha da ileri gidebilir ve her bir paket için anlaşmalı anahtara SEQ numarasını eklediğiniz bir sayaç modu şifrelemesi biçimi uygulamak için UDP paketlerinizdeki (bir tür güvenilir UDP biçimi kullanıyorsanız) özel SEQ alanını kullanabilirsiniz ; bilinen bir düz metin saldırısı yapmayı çok daha zor hale getirir.

Sunucunuzun anahtarları istediği gibi dağıtmasına izin vermeyin - 'parodi' sunucusu kendi anahtarını kolayca dağıtabilir; tüm şifreleme planınızın amacını yenmek. Tek kesin yol TLS veya karşılıklı bilgi kullanmaktır (şifre / karma gibi).


Bunun hangi güvenlik açıklarını kapatacağını tam olarak anlatabilir misiniz? IP aldatmacasını ve benzerlerini duydum, ancak bu konuda eğitim
almadım

@ LiamE-p GameDev güvenlik konusunda bir kaza kursu değil; ne de dağıtmak için vaktim yok. Esasen SRP ve TLS (her ikisi de) çevrimiçi bankacılık web siteniz kadar güvenli olmalıdır - TO modu ile SRP daha çok. Daha fazla açıklamaya ihtiyacınız varsa, Security SE web sitesinde sormalısınız.
Jonathan Dickinson

Bu kesinlikle güvenlik SE konusunda olacaktır. Bir modun oraya taşınması için işaretleyeceğim.
Rory Alsop

8

Hacking (2 yıl önce) uzak bir arka plan var, hiç çatlamak için en zor paketler (ve ne kullanmanızı öneririm) Jonathan Dickinson kısaca açıkladığı simetrik bir anahtar şifreleme yöntemi kullanıyor. Belirtildiği gibi TCP + TLS kullanmalısınız. Ancak, bir karşı sıra söyledi.

Bir programcıların "hack proof" sisteminin kolayca aldatıldığı zamanlara girdim, çünkü programlama bilgisi ve ilk yıl cebirsel mantığı olmadan onu kırabileceğim kadar garip bir sayma sistemine sahipler. Uygun bir sıralı yöntem seçtiğiniz sürece, hedefiniz tam olarak beklendiği gibi veri almalıdır, bu da en güvenli işlemler için TCP kullanmanız gerektiği anlamına gelir.

"Deneyimlerime göre" yolunda, bulduğum bir sistem fevkalade çalışır. Gönderilen süreye ve beklenen süreye göre sıralı bir yöntem. Paketlerin her zaman uygun sırada alınması gerektiğinden, bir paketi taklit etmek neredeyse imkansızdı çünkü bir paketin ne zaman gönderileceğini ve ne zaman beklendiğini (bir paket ile diğeri arasında) ilk önce istemci programını hacklemeden tahmin edemedim.

Kısa cevap

Kısacası: Her paket yapısının milisaniyeye gönderildiği gibi bir zaman damgası da olacaktır. Bu çok basit ve bir zamanın başka bir zamandan önce / sonra olup olmadığını kontrol etmek gerçekten çok kolay. Bu kadar mantıklı olmasının nedeni, sunucunun kimlik doğrulama zamanı olmadan kimlik sahtekarlığı için hala paketleri alabilmesidir.

Bu tek sıralı yöntem ya da herhangi bir yöntemin en iyisi değildir. Çok iyi sonuç verdiğini bulduğum sadece bir tanesi. TCP + TLS ile birlikte çok fazla sorununuz olmamalıdır.


Oyunlarla ilgili sorun, milisaniyenin altında gerçekleşen şeylerdir.
Jonathan Dickinson

@JonathanDickinson Bu tamamen doğru. Ancak UDP ve özellikle TCP kullanılırken, milisaniyenin altında ve hatta birçok milisaniyelik işlemlerde ölü hesaplaşma algoritmaları kullanılmalıdır. Bu, hıza, görsellere ve sahne arkasındaki bazı şeylere yardımcı olmaktır. (çoğunlukla hız ile ilgili)
Joshua Hedges

6
Günün sonunda bu bir oyun, bir ölüm ışını uydu kontrol sistemi değil. +1
Jonathan Dickinson

4

Şahsen, çok erken denize çıkmazdım. Jonathan'ın önerdiği gibi paketlerinizi şifreleseniz bile, ağabeyim gibi bilgisayar korsanları, şifrelenmeden önce paket verilerine erişeceklerdir. Kötü niyetli kullanıcılar isterse, bir yol bulacaklar.

Artık yoldan çıktığı için, indie geliştiricilerinin kötü niyetli kullanıcıların yapabileceği hasarı en aza indirmenin yolları var. Muhtemelen giden paketlerinizi şifrelemelisiniz, ancak bu sadece belirli saldırı türlerini durduracaktır, şimdi "hack kanıtı" olduğunu düşünmek için kendinizi kandırmayın. Bilgisayar korsanlarını gerçekten kapatmak için, müşterilere mümkün olduğunca az oyun değiştirme kontrolü sağlayın. Bu büyük MMO'lardan biri, istemcilerin sunucuya ne kadar XP kazandıklarını söylemelerini sağlamak için kullanılır. Tahmin et orada ne oldu? Bunu yapma. İstemcinin sunucuya yaratık üzerine süper büyü yapmak istediklerini söyleyin ve sonra sunucunun eylemi çözmesine izin verin ve sonra yaratık öldüğünde XP'yi ekleyin. İstemciler, komut gönderip alabilen ve bazı tahminler yapabilen (gerekirse) ince, aptal terminaller olmalıdır.Oyun ve müşteriler tarafından gönderilen komutlara tepki verirler.

Büyük oyun şirketleri, bilinen bilgisayar korsanlarının ödeme yapan müşterileri bozmaya devam etmesini önlemek için yukarıdaki VAC veya PunkBuster gibi şeyleri kullanır . Bu güvenlik önlemlerinin nasıl çalıştığı oldukça gizli tutulur, ancak kullandıkları bir yöntemi biliyorum: şu anda çalışan uygulamaları tararlar ve bunları bilinen kesmek listelerine kıyasla karşılaştırırlar. Hile yakalandıktan sonra, VAC / PunkBuster korumalı sunuculara katılamazsınız.

İlgili: Sunucuda oyun mantığı! İyi ya da kötü?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.