Sicurezza di distribuzione server-client

0

Chiedo scusa in anticipo se questo è il sito SE sbagliato per questo argomento, anche se dovrebbe essere una corrispondenza abbastanza appropriata.

Sto costruendo un videogioco in cui una delle funzionalità disponibili per gli utenti sarà online multiplayer. Rilascerò il software server gratuitamente (e open source) con la speranza che gli utenti siano in grado di eseguire i propri server modificabili per le loro comunità.

I server possono utilizzare liberamente le risorse "vanilla", tuttavia alcuni potrebbero decidere di aggiungere le proprie risorse come trame e modelli. Quello che mi piacerebbe realizzare è quello di consentire ai client di (con l'esplicita azione dell'utente) di scaricare le risorse richieste.

Per aggiungere un ulteriore livello di complessità, alcune di queste risorse sono disponibili per il download pubblicamente, mentre altre sono proprietarie e disponibili solo tramite il server.

La mia preoccupazione principale è la riduzione dei file dannosi attraverso il software di distribuzione. Tuttavia, la mia "grazia salvifica" potrebbe essere che tutti i file distribuiti saranno .png , .txt , .xml , .yml e .mdl , e tutti saranno utilizzabili nelle loro forme esistenti senza modifiche .

I file non verranno trasferiti al client, ma il client lo farà. Questo eliminerà qualsiasi problema con il server che ha accesso al filesystem del client, che potrebbe davvero fare del male.

Ora, per la domanda parte di questo:

Oltre a un ampio disclaimer che informa l'utente che è un loro problema se succede qualcosa, dove dovrebbero essere poste le mie preoccupazioni riguardo la sicurezza e la validità dei file?

Tutte le comunicazioni da e verso il server saranno crittografate, probabilmente usando qualcosa di simile al protocollo Signal. Inoltre, quando un amministratore del server carica un file, il server genererà un hash che dovrebbe consentire al software client di verificare che il file non sia stato modificato durante il transito, anche se non di più.

Una maggioranza di massa dei file trasmessi sarà .txt file, che di per sé non dovrebbero contenere alcun pericolo intrinseco (a mia conoscenza). Inoltre, nessuno dei file viene eseguito. Il codice sulla macchina del cliente analizzerà i file e scarterà tutto ciò che non è il formato giusto.

Capisco che non tutte le preoccupazioni possono essere affrontate qui perché l'argomento è abbastanza ampio, anche se qualsiasi suggerimento su eventuali problemi potenziali o qualsiasi altra cosa di cui essere generalmente consapevole sarà apprezzato.

    
posta Foxtrek_64 16.01.2017 - 14:36
fonte

1 risposta

-1

Alcune cose:

Parte 1/4, le risorse del server:

To add a further layer of complexity, some of these assets are available for download publicly, while some are proprietary and only available through the server.

E come si impedisce che un client lo scarichi e quindi preleva il file e lo distribuisce liberamente? Niente affatto, giusto. Devi rinunciare a quel piano, non c'è una protezione efficace.

Parte 2/4, la connessione:

Protocollo del segnale e alcuni semplici hash dei dati trasmessi? Non tirare il tuo ... Non sono sicuro del segnale, ma usa ad es. TLS e tu hai tutto. Crittografia, integrità, autenticità ...

Parte 3/4, i punti finali:

File, es. blob di byte, non danneggiare. Errori nei programmi di lettura dei file. E sì, anche immagini e file txt ... non importa che tipo di file: se il programma ha un errore, alcuni contenuti di file possono portare a azioni dannose.

Che cosa significa per te? Alimentare un'immagine al sistema operativo per visualizzarlo va bene. Se il sistema operativo ha un errore, non è né colpa tua né sei in grado di risolverlo. Lo stesso vale per le librerie di terze parti ecc. (Anche i bug di segnalazione dovrebbero essere uno dei tuoi compiti).
Ma il tuo programma è importante. Il bug non ha bisogno di essere nella lib di grapics, OS ecc. Anche se il tuo programma legge l'immagine dalla rete e la trasmette, potrebbe esserci un bug (buffer overflow ...) che può portare a un exploit.
Non posso davvero dirti di non creare bug, perché tutti lo fanno, ma tieni presente che ciascuna delle tue code line ha il potenziale per diventare un'infezione per tutti gli utenti.

E non, mai, per nessun motivo, fidati dell'altra parte della rete e / o dei file precedentemente salvati. Non fare affidamento sul client che l'altra parte è il tuo server e viceversa. Controlla tutto ciò che deve essere controllato. Lo stesso vale per i file salvati: se li carichi, esegui gli stessi controlli dei contenuti appena ricevuti dalla rete.

Parte 4/4, imbroglioni:

Ancora una volta, come server, non fidarti del client. Questo include informazioni come "Io sono il numero cliente X" (può essere falsificato, introdurre un sistema di autenticazione sicuro), "Il mio record è XYZ" (haha, salvarlo sul lato server e calcolare sempre le modifiche lì, senza alcun input client), "Ho appena sparato al nemico Foo e questo l'ha ucciso" (calcola lato server se c'è un nemico foo, quale arma hai, che danno può fare, che salute ha Foo, dove hai puntato la tua arma, se c'è un ostacolo tra tu e foo, se il tuo ultimo colpo era troppo recente per sparare di nuovo, ecc.ecc.), e così via.

Il client si trova sempre al server. E il server anche ai clienti. Tutti i file sono malvagi. E tutti i giocatori sono anche cattivi. Tienilo a mente e il 90% del lavoro di sicurezza è fatto.

    
risposta data 16.01.2017 - 15:25
fonte

Leggi altre domande sui tag