Como evito a falsificação de identidade em um jogo multiplayer?

9

Estou pensando em clientes falsificando endereços IP, enganando outros clientes por serem o servidor; esse tipo de coisa. (Não sei muito sobre isso, por isso, se isso estiver completamente errado, corrija-me.)

O que devo fazer para evitar isso? Por ser um jogo em tempo real, se eu usasse criptografia, usaria algo rápido e seguro como o RC4. Devo criptografar os dados do pacote com uma chave que o servidor fornece ao cliente?

Se faz alguma diferença, estou usando o UDP.

liamzebedee
fonte

Respostas:

8

Uma solução possível é autenticar o usuário usando TCP + TLS; depois, no mesmo canal, use algo como Diffie-Hellman para negociar uma chave simétrica. Por fim, criptografe cada pacote UDP usando um algoritmo simétrico como o RC4.

Tecnicamente, você não precisa usar o TCP + TLS para negociar a chave simétrica se usar algo como SRP - lembre-se de que Diffie-Hellman limpo é vulnerável a um ataque MITM .

Você pode ir ainda mais longe e usar o campo SEQ personalizado em seus pacotes UDP (se estiver usando algum tipo de UDP confiável) para implementar uma forma de criptografia no modo contrário - em que você adiciona o número SEQ à chave negociada para cada pacote; tornando muito mais difícil montar um ataque de texto sem formatação conhecido.

Não permita que seu servidor entregue as chaves à vontade - um servidor 'spoof' pode facilmente distribuir sua própria chave; derrotando o objetivo de todo o seu esquema de criptografia. A única maneira garantida é usar TLS ou conhecimento mútuo (como uma senha / hash).

Jonathan Dickinson
fonte
Você poderia descrever exatamente quais vulnerabilidades seriam fechadas? Eu ouvi sobre falsificação de IP e similares, mas eu não sou educado sobre o tema
liamzebedee
@ LiamE-p GameDev não é o lugar para um curso intensivo de segurança; nem tenho tempo para distribuir uma. Essencialmente, o SRP e o TLS (ambos) devem ser tão seguros quanto o seu site de banco on-line - mais ainda com o modo CTR. Se você precisar de mais explicações, pergunte no site do Security SE.
Jonathan Dickinson
Definitivamente, este seria o tópico sobre segurança SE. Vou sinalizar para um mod migrá-lo para lá.
Rory Alsop
8

Eu tenho um histórico distante (2 anos atrás) em hackers, os pacotes mais difíceis de quebrar (e o que eu sugiro que você use) está usando um método de criptografia de chave simétrica que Jonathan Dickinson descreveu em resumo. Você deve usar o TCP + TLS como ele também mencionou. No entanto, ele disse uma sequência contrária.

Já deparei com momentos em que um sistema de "prova de invasão" de programadores era facilmente falsificado porque eles tinham um sistema de contagem suficientemente estranho para que eu pudesse decifrá-lo sem conhecimento de programação e lógica algébrica do primeiro ano. Desde que você escolha um método seqüencial adequado, seu destino deverá receber os dados exatamente como esperado, o que também significa que você deve usar o TCP para as operações mais seguras.

De volta aos trilhos para "nas minhas experiências", um sistema que encontrei funciona de maneira fantástica. Um método seqüencial com base no tempo enviado e no tempo esperado. Como os pacotes sempre devem ser recebidos na ordem correta, a falsificação de um pacote era quase impossível, pois eu nunca conseguia prever quando um pacote seria enviado e quando era esperado (entre um pacote e outro) sem primeiro invadir o programa cliente.

A resposta curta

Resumindo: cada estrutura de pacote também teria um registro de data e hora como quando foi enviado para o milissegundo. Isso é muito simples e é realmente fácil verificar se um tempo é antes / depois de outro tempo. A razão pela qual faz sentido tão bem é porque o servidor ainda pode receber pacotes em ordem com falsificação, sem tempo para autenticação.

Obviamente, esse não é o único método seqüencial ou o melhor de qualquer método. É apenas um que eu achei que funciona muito bem. Combinado com TCP + TLS, você não deve ter muitos problemas.

Joshua Hedges
fonte
O problema com os jogos é que as coisas acontecem em níveis abaixo de milissegundos.
Jonathan Dickinson
@ JonathanDickinson Isso é totalmente verdade. Mas, usando o UDP e, principalmente, o TCP, os algoritmos de contagem morta devem ser usados ​​para operações de milissegundos e até milissegundos. Isso é para ajudar na velocidade, no visual e em algumas coisas dos bastidores, é claro. (principalmente velocidade)
Joshua Hedges
6
Acho que, no final das contas, é um jogo e não um sistema de controle de satélite com raios da morte. +1
Jonathan Dickinson
4

Pessoalmente, eu não exageraria muito cedo. Mesmo se você criptografar seus pacotes como Jonathan recomenda, hackers como meu irmão acessarão apenas os dados dos pacotes antes que eles sejam criptografados. Se usuários mal-intencionados quiserem, eles encontrarão uma maneira de entrar.

Agora que isso está fora do caminho, existem maneiras de os desenvolvedores independentes minimizarem os danos que os usuários mal-intencionados podem causar. Você provavelmente deve criptografar seus pacotes de saída, mas isso só interromperá certos tipos de ataques; não se iluda pensando que agora é "prova de invasão". Para realmente desativar os hackers, ofereça aos clientes o mínimo de controle possível de mudança de jogo. Um desses grandes MMOs por aí costumava permitir que os clientes informassem ao servidor quanto XP ganharam. Adivinha o que aconteceu lá? Não faça isso. Deixe o cliente dizer ao servidor que deseja lançar algum super-feitiço na criatura e, em seguida, deixe o servidor resolver a ação e adicione o XP quando a criatura estiver morta. Os clientes devem ser terminais finos e burros, que podem enviar e receber comandos e fazer algumas previsões (se necessário).o jogo e reaja aos comandos enviados pelos clientes.

As grandes empresas de jogos usam o acima, além de algo como o VAC ou o PunkBuster, para impedir que hackers conhecidos continuem atrapalhando os clientes pagantes. O funcionamento dessas medidas de segurança é mantido em segredo, mas conheço um método que eles usam: eles examinam os aplicativos em execução no momento e os comparam com as listas de hacks conhecidos. Depois que você for pego trapaceando, não poderá ingressar em servidores protegidos pelo VAC / PunkBuster.

Relacionado: Lógica do jogo no servidor! Bom ou mal?

John McDonald
fonte