Sicurezza in un gioco iOS?

1

Sono parte di un team che costruisce un gioco iOS con elementi multiplayer.

Una preoccupazione in questo momento è come rendere il gioco più sicuro, dalla manipolazione degli utenti. So che ci sono molti giochi multiplayer là fuori, e quindi ci devono essere tecniche che usano per rendere i loro giochi più sicuri.

Un esempio di uno scenario è se il gioco salvato è stato memorizzato sul dispositivo locale. C'è qualche metodo che possiamo usare - forse la crittografia o qualcos'altro, che può impedire all'utente di generare solo i propri salvataggi?

O quando effettui una chiamata a un metodo, simile a "createItem:", potrebbero aggiungere qualcosa al loro gioco che non dovrebbero essere in grado di fare. Mi chiedo come altri giochi iOS impediscano tale attività?

    
posta Andrew 16.09.2014 - 14:57
fonte

4 risposte

5

Risposta breve: No.

Aiuta ad avere un modello mentale appropriato del problema che stai affrontando. Immagina che la tua app sia un archivista (programma binario) che lavora in un ufficio in affitto (il telefono dell'utente). Ha il suo computer, scrivania e telefono (processo in esecuzione sul telefono dell'utente), ma il sistema di archiviazione (file system) è controllato dal proprietario dell'edificio per uffici (l'utente). Puoi fidarti del padrone di casa per continuare a fornire le tue apparecchiature da ufficio, ma sai che hanno un programma tutto loro, che potrebbe includere un pasticcio nel lavoro che stai facendo.

Il punto importante da vedere è che l'impiegato può lavorare senza impedimenti, ma torna a casa tutte le sere (quando l'app è chiusa) e il giorno dopo potrà solo ricordare dove si trovava e cosa fare leggere le istruzioni dal sistema di archiviazione - che potrebbe essere compromessa dal padrone di casa ostile.

Questo spiega perché è in definitiva impossibile garantire un flusso di lavoro sicuro mentre si dipende completamente da un provider di persistenza ostile. Puoi lasciare le tue note, ma il proprietario potrebbe intercettarle e modificarle. È possibile crittografare le note in modo che gli altri non possano leggerle, ma il proprietario può applicare la crittanalisi. È possibile firmare le note in modo che non possano essere modificate, ma la crittanalisi può essere applicata anche a tale problema. Peggio ancora, il padrone di casa è in grado di scansionare il cervello dell'impiegato (programma binario) mentre dorme e analizza il suo funzionamento, compresa la parte in cui memorizza la chiave di crittografia segreta. Il proprietario può persino simulare l'esecuzione del programma in un ambiente segreto e osservare come funziona la crittografia (qui la metafora si rompe).

Pertanto, tutto ciò che puoi fare per rendere sicuro il tuo flusso di lavoro è cercare di rendere le contromisure più costose. La crittografia può aiutare in questo, ma dipende dalla situazione se è possibile renderlo abbastanza costoso da impedire effettivamente ciò che si vuole impedire. Probabilmente nessuno impiegherà la virtualizzazione e la crittanalisi solo per generare un punteggio elevato online falso in un piccolo gioco casuale. Ma non si sa mai - forse la tua app diventerà virale, e i profili di alto livello valgono un sacco di soldi. Tutto quello che puoi fare è stimare quanto sforzo qualcuno potrebbe spendere per sovvertire il tuo programma e pianificare questa quantità di contromisure.

    
risposta data 16.09.2014 - 15:10
fonte
2

Beh, questo richiede un altro approccio. Normalmente con https ti piacerebbe ottenere degli attaccanti sconosciuti lontano dall'utente. Ma questa volta hai bisogno dell'applicazione per proteggere l'utente dagli attacchi. I giochi di hacking richiedono diversi livelli di hacking

Prima di tutto dovresti proteggere che il gioco possa girare in modalità emulatore (o qualcosa del genere). Con un'applicazione come bit slicer puoi facilmente cercare la quantità di denaro corrente (o qualsiasi altra proprietà) e cercare di nuovo quando il valore è cambiato. Quindi cambiano il valore nella tua memoria per il valore che preferiscono. La soluzione a questo è un algoritmo può essere utilizzato per memorizzare un valore e avere un checksum memorizzato da qualche altra parte in memoria. In questo modo si impedisce agli utenti di tentare di hackerare localmente sul dispositivo iOS stesso che esegue il gioco su dispositivi jailbreaked.

La seconda sicurezza che serve è evitare l'uso di un hack proxy, ancora una volta per non proteggere l'applicazione da hacker esterni ma di nuovo all'interno. https non fornisce affatto questa protezione. Quello che succede è che un utente scarica un'applicazione come Charles sul loro Mac. Quindi sul proprio dispositivo iOS passano alle impostazioni di rete e impostano le impostazioni del proxy in modo che ogni richiesta venga inviata al Mac. Quindi avviano il gioco e guardano il Mac per tutte le comunicazioni tra il dispositivo iOS e Internet. Un'app come Charles può modificare i valori delle intestazioni e il corpo delle richieste e delle risposte HTTP utilizzando le espressioni regolari in tempo reale. Quindi, anche quando il server risponde che qualcuno ha 100 monete d'oro, un'espressione regolare semplice in Charles potrebbe far sì che il dispositivo riceva una risposta dal server in quanto l'utente avrebbe ad esempio oro 100k.

Il modo migliore per proteggersi dagli hack proxy è che il codice firma tutto. Ciò significa che tutti i valori o il gruppo / matrice di valori hanno un determinato checksum che si applica solo a quel dispositivo. L'algoritmo dipende da determinate chiavi, id del dispositivo liek, id della sessione e tipo di proprietà. Quindi, quando un valore di 100 gold viene inviato al client, con esso viene inviato anche un valore di segno di codice. Le stesse chiavi sono sul dispositivo che fa che quando cifra il valore di 100 avrebbe lo stesso valore di codice del codice inviato dal server. Quando qualcuno cambia il valore 100 usando un hack proxy, il risultato della crittografia sarebbe diverso dal server e noterai che l'utente sta tentando di hackerare o di essere hackerato da qualcun altro. Almeno, il dispositivo non dovrebbe accettare il valore.

    
risposta data 16.09.2014 - 15:25
fonte
0

Dovrai avere il codice sul server che rileva i tentativi di manomissione e li gestisce.
Quindi non calcolare se quella pistola colpisce qualcosa sul client, non calcola quanto danno ha fatto la spada sul client, non calcola nemmeno se l'utente vede qualcosa sul client. Fare tutto ciò sul server, il client è solo per visualizzare i dati e generare input.
Inoltre, non lasciare che il client comunichi al server "Mi sono spostato di 5 metri in avanti". No, lascia che il client dica al server "andare avanti per 2 secondi" e poi il server calcola quanto è lontano, o se è anche possibile (impedisce agli hacker di velocità e alle persone di superare ostacoli solidi).

Sono solo alcune delle cose che dovresti fare, sono sicuro che puoi pensare molto di più a te basandoti su quello che il tuo gioco farà.

    
risposta data 18.09.2014 - 08:33
fonte
-3

Direi di sì ma non al 100%. Esistono degli strumenti per proteggere dati come Serializzazione o Crittografia e così via.

Apple fornisce anche un modo per salvare i dati con NSUserDefaults ma ciò significa che devi utilizzare alcuni framework che utilizzano Objective-C sul retro.

Qui puoi trovare alcuni più risposte.

    
risposta data 16.09.2014 - 16:35
fonte

Leggi altre domande sui tag