Non preoccuparti di provare a identificare un client compromesso
I'm wondering the following: how do I prevent this without rewriting the entire server to be authoritative which would be a huge uplift?
Purtroppo non puoi.
- Lo stato del gioco è vulnerabile agli exploit perché il server non lo protegge / gestisce.
- Il tuo server è "vulnerabile" perché trasmette i cambiamenti di stato sfruttati ai suoi clienti.
L'unico modo per risolvere il problema è far sì che il server gestisca lo stato del gioco.
... That is: I know to an extent it's not entirely preventable, but I'm wondering if we did something like had a private/public key exchange before login to the server, and those keys were gitignored, or something to that effect: could we do it?
Probabilmente questo scambio di chiavi potrebbe essere facilmente recuperato se qualcuno volesse passare attraverso il problema di creare un client hackerato. Il client compromesso sarebbe stato modificato per inviare dati come se fosse quello reale.
Trappole di Kicking / Banning dei client compromessi
Le risposte precedenti hanno menzionato il fatto che puoi semplicemente kickare / bloccare gli hacker, ma questo è un po 'più complesso di quanto possa sembrare al valore nominale.
Il successo dipende da:
1. Quanto bene la comunità può identificare quando qualcuno sta hackerando
-
Se vedi un giocatore che si teletrasporta su tutta la mappa, certo, è piuttosto ovvio, ma puoi rilevare problemi più sottili (ad esempio, se i client hacker sono in grado di vedere parti della mappa, non dovrebbero essere in grado per vedere? O aimbots?)
-
Se il tuo gioco è competitivo, i giocatori possono discutere su chi ha hackerato o chi ha appena avuto un buon obiettivo / tempo di reazione / buona fortuna, ecc.
-
Se il tuo motore è così vulnerabile che i clienti decidono uccisioni / danni, il tuo team di moderazione probabilmente avrà molto lavoro da fare per loro. Qualsiasi miglioramento apportato alla sicurezza del tuo gioco comporterà meno lavoro manuale rivedendo i presunti video di gioco degli hacker, ecc.
2. Quanto bene il server può identificare i tuoi giocatori
Se hai una grande comunità, tentare di proteggere tutti i server pubblici in cui chiunque può unirsi sarà piuttosto difficile.
Identificazione degli utenti per indirizzo IP
Vantaggi:
- Facilità d'uso. Non è necessaria alcuna registrazione aggiuntiva per il tuo gioco, la maggior parte degli utenti sarà in grado di scaricarlo e giocare.
Svantaggi
Se i tuoi server accettano solo dati da qualsiasi indirizzo IP,
- Gli utenti possono facilmente utilizzare i proxy per aggirare i divieti IP.
- Gli utenti legittimi con connessioni Internet consumer cambieranno frequentemente gli indirizzi IP.
- Dalla mia esperienza alcuni tentativi di amministratori di server di bloccare gli hacker noti con intervalli di divieto hanno inavvertitamente causato il blocco dell'80% dei clienti di un ISP.
- I nuovi utenti potrebbero provare a giocare per la prima volta e scoprire che sono bannati senza motivo, mi consiglia di dare loro un modo per contattare qualcuno su questo.
Altri metodi di identificazione
-
Un motore di gioco che ho usato ha aggirato il problema dell'indirizzo IP facendo in modo che gli utenti si registrino per gli account e quindi autorizzando i server a autorizzare solo alcuni giocatori. Questi account erano richiesti solo per i server più "seri" (per i tornei, ecc.)
-
Su una scala più piccola, il solo fatto di consentire ai tuoi server di essere protetti da password può contribuire notevolmente a mantenere gli hacker fuori dai giochi competitivi e seri.
La protezione dello stato del gioco è il modo migliore per tenere lontani gli hacker
-
Il modo migliore per ridurre il rischio che un client hacker rovini il gioco per altri client è di fare in modo che ogni modifica allo stato del gioco (che riguarda altri client) sia convalidata dal server.
-
In questo modo anche se un client hacker decide di ignorare gli aggiornamenti del server dicendo che un giocatore ha subito danni, tutto ciò che fa è desincronizzare il gioco stesso del giocatore.
Sfide progettuali per creare un server meno vulnerabile
C'è molto da coprire, ma citerò i principali problemi che ho affrontato come qualcuno che ha lavorato su questo:
Creazione di un client reattivo
-
Affinché il gioco rimanga fluido, è probabile che il client debba eseguire qualche codice da solo e fare qualche ipotesi su quale sarà il prossimo frame valido.
-
Alcune operazioni eseguite dal client, come ad esempio i movimenti del mouse, si verificano troppo velocemente perché il server possa convalidare, ma se non lo fai, puoi aprirti ai client hacker che spostano il mouse impossibilmente veloce o preciso.
-
Potrebbe non esserci una risposta facile per tutti gli exploit possibili, ad esempio, gli aimbots e gli hack da muro sono ancora in fase di realizzazione per giochi FPS ben finanziati e popolari.
Consentire al client di ricevere dati dal server
-
Sapere quali dati del client da buttare quando il server invia al client un aggiornamento non è facile.
-
Il codice del client potrebbe non solo aggiornare i dati del gioco principale, ma anche tutte le interpolazioni del client nel mezzo, per evitare di disturbare il jitter / rendering glitch.