Come posso evitare lo spoofing delle identità in una partita multiplayer?


9

Sto pensando ai client che falsificano gli indirizzi IP, inducendo gli altri client a essere il server; quel genere di cose. (Non ne so molto, quindi se è completamente sbagliato, per favore correggimi.)

Cosa devo fare per impedirlo? Perché è un gioco in tempo reale, se dovessi usare la crittografia, userei qualcosa di veloce e sicuro come RC4. Devo crittografare i dati del pacchetto con una chiave che il server fornisce al client?

Se fa la differenza, sto usando UDP.

Risposte:


8

Una possibile soluzione è autenticare l'utente utilizzando TCP + TLS; quindi, all'interno dello stesso canale, usa qualcosa come Diffie-Hellman per negoziare una chiave simmetrica. Finalmente crittografa ogni pacchetto UDP usando un algoritmo simmetrico come RC4.

Tecnicamente non è necessario utilizzare TCP + TLS per negoziare la chiave simmetrica se si utilizza qualcosa come SRP - basta ricordare che Diffie-Hellman pulito è vulnerabile a un attacco MITM .

Potresti andare ancora oltre e utilizzare il campo SEQ personalizzato nei tuoi pacchetti UDP (se stai usando una forma di UDP affidabile) per implementare una forma di crittografia contromodale - in cui aggiungi il numero SEQ alla chiave negoziata per ciascun pacchetto; rendendo molto più difficile montare un attacco di tipo testo normale.

Non lasciare che il tuo server distribuisca le chiavi a piacimento: un server "spoof" potrebbe altrettanto facilmente distribuire la propria chiave; sconfiggere lo scopo dell'intero schema di crittografia. L'unico modo garantito è utilizzare TLS o la conoscenza reciproca (come una password / hash).


Potresti descrivere esattamente quali vulnerabilità questo chiuderebbe? Ho sentito parlare di spoofing IP e simili, ma non sono istruito sull'argomento
liamzebedee,

@ LiamE-p GameDev non è il luogo per un corso intensivo sulla sicurezza; né ho il tempo di distribuirne uno. Essenzialmente SRP e TLS (entrambi) dovrebbero essere sicuri come il tuo sito web di banking online - SRP ancora di più con la modalità CTR. Se hai bisogno di più di una spiegazione, dovresti chiedere sul sito Web di Security SE.
Jonathan Dickinson,

Questo sarebbe sicuramente in tema di sicurezza SE. Contrassegno una mod per migrarla lì.
Rory Alsop,

8

Ho un background distante (2 anni fa) nell'hacking, i pacchetti più difficili da craccare (e quello che ti suggerisco di usare) sta usando un metodo di crittografia a chiave simmetrica che Jonathan Dickinson ha descritto in breve. Dovresti usare TCP + TLS come anche lui ha menzionato. Tuttavia, ha detto una contro-sequenza.

Mi sono imbattuto in tempi in cui un sistema "a prova di hacking" dei programmatori è stato facilmente falsificato perché hanno un sistema di conteggio abbastanza strano che potrei decifrarlo senza conoscenze di programmazione e logica algebrica del primo anno. Finché si sceglie un metodo sequenziale adeguato, il target deve ricevere i dati esattamente come previsto, il che significa anche che è necessario utilizzare TCP per le operazioni più sicure.

Di nuovo in pista per "nelle mie esperienze", un sistema che ho trovato funziona in modo fantastico. Un metodo sequenziale basato sul tempo inviato e sul tempo previsto. Dal momento che i pacchetti devono sempre essere ricevuti nell'ordine corretto, falsificare un pacchetto è stato quasi impossibile poiché non avrei mai potuto prevedere quando sarebbe stato inviato un pacchetto e quando era previsto (tra un pacchetto e l'altro) senza prima hackerare il programma client.

La breve risposta

In breve: ogni struttura di pacchetto avrebbe anche un timestamp come quando veniva inviata al millisecondo. È dannatamente semplice ed è davvero facile controllare se un tempo è precedente / successivo. Il motivo per cui ha senso è perché il server può ancora ricevere i pacchetti in ordine con lo spoofing, senza il tempo per l'autenticazione.

Questo ovviamente non è l'unico metodo sequenziale o addirittura il migliore di qualsiasi metodo. È solo uno che ho scoperto che funziona molto bene. In combinazione con TCP + TLS non dovresti avere troppi problemi.


Il problema con i giochi è che le cose accadono a livelli inferiori al millisecondo.
Jonathan Dickinson,

@JonathanDickinson È del tutto vero. Ma usando UDP e specialmente quando si usa TCP, gli algoritmi di calcolo dei dead dead dovrebbero essere usati per operazioni sub millisecondi e persino per molti millisecondi. Questo è per aiutare in termini di velocità, elementi visivi e alcune cose dietro le quinte ovviamente. (principalmente legato alla velocità)
Joshua Hedges l'

6
Credo che alla fine della giornata sia un gioco e non un sistema di controllo satellitare a raggi di morte. +1
Jonathan Dickinson l'

4

Personalmente, non esagererei troppo presto. Anche se crittografate i pacchetti come raccomanda Jonathan, gli hacker come mio fratello accederanno ai dati dei pacchetti prima che vengano crittografati. Se gli utenti malintenzionati vogliono entrare, troveranno un modo per entrare.

Ora che è fuori mano, ci sono modi per gli sviluppatori indipendenti di ridurre al minimo il danno che gli utenti malintenzionati possono fare. Probabilmente dovresti crittografare i tuoi pacchetti in uscita, ma questo fermerà solo determinati tipi di attacchi, non illuderti nel pensare che ora sia "a prova di hacking". Per disattivare davvero gli hacker, dai ai clienti il ​​minor controllo possibile sul cambio di gioco. Uno di questi grandi MMO là fuori era solito consentire ai client di dire al server quanto XP avevano guadagnato. Indovina cosa è successo lì? Non farlo. Lascia che il client dica al server che vuole lanciare un super-incantesimo sulla creatura, quindi lascia che il server risolva l'azione e quindi aggiunge XP quando la creatura è morta. I client dovrebbero essere terminali sottili, stupidi, che possono inviare e ricevere comandi e possono fare delle previsioni (se necessario).il gioco e reagire ai comandi inviati dai client.

Le grandi società di giochi usano quanto sopra oltre a qualcosa come VAC o PunkBuster per impedire agli hacker noti di continuare a disturbare i clienti paganti. Il modo in cui funzionano queste misure di sicurezza è abbastanza segreto, ma conosco un metodo che usano: scansionano le applicazioni attualmente in esecuzione e confrontano quelle con gli elenchi di hack noti. Una volta che sei stato sorpreso a imbrogliare, non sarai in grado di unirti ai server protetti VAC / PunkBuster.

Correlati: logica di gioco sul server! Bene o male?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.