Dovrei usare websockets (ws) o secure websockets (wss) per il mio gioco?

5

Sto facendo un gioco e sto usando websocket per il 99% delle comunicazioni. L'unico http (s) è sul caricamento iniziale della pagina e al momento dell'accesso / registrazione.

Sono un noob completo quindi correggimi se sbaglio, ma SSL serve solo a prevenire gli attacchi dell'uomo nel mezzo, giusto? Nessuno dei pacchetti che invio su Websocket è "confidenziale". È principalmente [packetName, xCoord, yCoord]. Non riesco a pensare a nessun pacchetto di gioco che sto mandando dove sarebbe importato se una terza persona li avesse presi (anche se quella persona era nella stessa partita nella stessa stanza perché tutti possono sempre vedere tutti gli altri mentre sono in il gioco).

So che generalmente è considerata una buona pratica usare sempre SSL, ma il mio gioco ha un sacco di comunicazione tra client e server (molti aggiornamenti di posizione al secondo e voglio usare il minor ritardo / larghezza di banda / elaborazione possibile) ) quindi mi chiedo se è necessario?

Qual è la cosa peggiore che potrebbe accadere se non si abilita wss?

    
posta Chron Bag 12.06.2016 - 07:06
fonte

2 risposte

8

(tl; dr in fondo)

La crittografia è essenzialmente gratuita a questo punto, anche su connessioni remote. Quasi tutte le lingue principali lo hanno incorporato, o ha una libreria per esso, ecc. Il vantaggio di non utilizzare TLS / SSL è una frazione molto piccola di un secondo tempo di avvio, una riduzione molto trascurabile dell'utilizzo della CPU (una piccola frazione di una percentuale) e circa 4kb di larghezza di banda salvata per sessione (TLS non ha effetti apprezzabili sulla larghezza di banda dopo l'iniziale handshake). Quindi, supponendo di mantenere aperta la connessione per un intero gioco, non stai praticamente risparmiando nulla.

Tuttavia, avere i dati inviati in chiaro rende facile per qualcuno che è interessato a giocare con il gioco per vedere cosa sta facendo. Una volta che sanno qual è il tuo protocollo, possono usarlo a loro vantaggio. Una persona che utilizza uno strumento progettato per svolgere alcune attività è sempre in grado di sovraperformare qualcuno che non ha quello strumento. Sto solo pensando casualmente, ho inventato il botting, la manipolazione dei punteggi più alti, i falsi aggiornamenti client, i giochi con strumenti e il dirottamento di sessione.

Il fare il bucato, ad esempio, è far giocare il computer per te. I computer sono davvero bravi a guardare avanti un milione di mosse in anticipo, quindi possono quasi sempre selezionare la mossa corretta e infallibile da compiere in qualsiasi circostanza più veloce di un umano. Ciò significa che vinceranno e che i giocatori veri perderanno, il che significa che il gioco finirà per essere abbandonato o pieno di robot che giocano l'un l'altro.

I punteggi più alti significano cose per le persone. È una cosa dell'ego. Quindi, quando giocano e ottengono un punteggio di 250, e vedono che il miglior giocatore ha un punteggio di 4.294.967.295, non si preoccuperanno di giocare. Ad esempio, questo potrebbe accadere se il codice di punteggio elevato ha un protocollo facile da interrompere (sì, alcuni giochi in realtà segnalano solo un punteggio elevato e il server lo accetta). Quella parte dovrebbe essere protetta dalla manomissione.

Gli aggiornamenti dei client falsi possono o potrebbero non essere un problema, ma fondamentalmente si riduce a se si può "mentire" con un cliente per far pensare che il gioco si trovi in uno stato diverso da quello in cui è effettivamente. Ad esempio, le persone potrebbero apparire nel posto sbagliato su una mappa, le persone possono teletrasportarsi "magicamente" perché il server accetta le coordinate senza convalida dell'input, ecc. Puoi farlo anche con la crittografia, ma ciò significa che devi modificare binario invece di scrivere solo il tuo cliente.

Le riproduzioni assistite da strumenti sono simili al botting: la persona sta ancora giocando, ma sono guidate dallo strumento per prendere decisioni ottimali, in tempo reale, anche se stanno perdendo. Una persona con uno strumento di solito ha prestazioni migliori di una senza (presupponendo un po 'di pratica, ovviamente), quindi di solito viene considerata come imbrogliare, ed è impossibile rilevare a meno di un cane da guardia per proteggere il cliente. È ancora più semplice se puoi modificare i pacchetti in qualsiasi modo desideri.

Il dirottamento della sessione potrebbe verificarsi se riescono a capire la parte della connessione che rappresenta la loro sessione. Vedete, non è possibile semplicemente eseguire il downgrade di una connessione TLS a uno stato non crittografato (almeno, non che io possa dirlo). Quindi, ciò significa che devi abbandonare la connessione e aprirne una nuova. Questa nuova connessione deve identificare il server che è. Certo, è possibile utilizzare una sorta di token, ma sarebbe meglio essere un nonce (un valore monouso), altrimenti l'attaccante conoscerà le informazioni sulla sessione e potrebbe ingannare il legittimo client dal continuare, magari ripetendo la connessione a il server, ecc.

Tutto sommato, dovresti sempre utilizzare TLS. Anche se è un gioco di Tic-Tac-Toe o Connect Four. Qualcuno, da qualche parte, vorrà imbrogliare il tuo gioco, e puoi praticamente prevenire intere classi di barare semplicemente abilitando un canale sicuro. Tranne un costo di avvio molto basso, la crittografia è essenzialmente gratuita, quindi non utilizzarla non ha vantaggi reali. Se stai eseguendo l'autenticazione in modo sicuro, non ha senso passare successivamente a un canale non protetto, poiché hai già pagato il prezzo di avvio.

    
risposta data 12.06.2016 - 09:57
fonte
2

È necessario utilizzare il protocollo WebSockets sicuro nel prodotto.

Dati (estremamente piccoli) forniti dai dettagli del tuo gioco * . Solo la risposta generale è possibile alla domanda ** :

What is the worst thing that could happen if I don't enable wss?

Se progettate e create un sistema ignorando le precauzioni di sicurezza comuni:

  • al massimo non accadrà nulla;

  • allora c'è un'intera area grigia in cui potresti finire per perdere un'opportunità o dover allocare risorse eccessive per compensare la decisione iniziale;

  • al peggio - non c'è limite alle cose brutte che possono accadere.

* È impossibile valutare l'impatto dell'uso della comunicazione non criptata non conoscendo in dettaglio quale sia il gioco. In particolare: come stai capitalizzando sul gioco? Gli utenti giocano l'uno contro l'altro? Gli utenti sono incentivati a imbrogliare (materialmente o in forma di tabelle dei punteggi)? Le informazioni richieste per tale analisi dovrebbero includere anche lo sviluppo futuro del gioco, ad esempio cosa fare se si attacca e cambiare il modello da libero e decidere di capitalizzare in futuro.

** Una verifica di tutti i possibili pericoli legati all'uso della comunicazione non crittografata in un prodotto deve tenere conto di tanti fattori che potrebbero superare rapidamente i costi di implementazione delle tecniche di crittografia appropriate.

    
risposta data 12.06.2016 - 08:08
fonte

Leggi altre domande sui tag