Conferência DEFCON 19. Corte o MMORPG por diversão e lucro. Parte 2

Conferência DEFCON 19. Corte o MMORPG por diversão e lucro. Parte 1

Josh Phillips: como dissemos, todos os hacks são bastante simples e seu uso às vezes não requer nenhuma habilidade, apenas uma abordagem criativa dos negócios. Para usar a "superpotência", você não precisa ser o deus da engenharia reversa, mas definitivamente ajuda coisas como excesso de número inteiro ou preenchimento insuficiente, e você pode facilmente alterar os valores desejados de 0 a máximo, por exemplo, para causar danos fatais ao inimigo.



Mike Donnelly: sim, tudo se resume à capacidade de criar hacks, por exemplo, para maximizar sua armadura. Isso acontece no World of Warcraft - tivemos um cara que, sentado na capital Orc, Orgrimmar, tirou o capacete 100 vezes e o colocou, bombeando suas forças do nível 2 ao 32.

Josh Phillips: isso realmente aconteceu, ou talvez ele tenha usado o editor de memória e tirado uma captura de tela?

Mike Donnelly: Você pode estar certo!

Josh Phillips: Meu modo favorito é o Modo GM. Algumas empresas produzem jogos com a possibilidade aberta de engenharia reversa, para que você, tornando-se o mestre do jogo, possa se teleportar para as pessoas, destruir coisas, dar comandos e fazer outras coisas interessantes. Também existe um truque interessante, como o roubo de itens de personagens de NPC que não são jogadores. O jogo Age of Conan foi um dos primeiros em que havia uma vulnerabilidade que poderia matar a GM, e eu não acho que seus desenvolvedores estavam felizes com isso.

Mike Donnelly: a vulnerabilidade era a possibilidade de falsificar o ID dos principais players?

Josh Phillips: Bem, sim, como o que você disse ao servidor: "Sou mestre em jogos e vou morrer agora."

Mike Donnelly: Às vezes, um servidor confia em você quando você afirma ser outro personagem do jogo, dizendo: "Sou assim e estou vendendo isso!"

Josh Phillips: Eu já disse que os desenvolvedores de jogos são pessoas ingênuas. Interface do usuário para hackers O hack é menos valioso. É útil se você quiser ver o espaço do jogo muito longe ou percorrer o mapa da área de jogo como um fantasma, enquanto permanece no lugar.



Mike Donnelly: você ainda pode usar uma tradução "selvagem" do idioma, por causa da qual, por exemplo, os jogadores da Aliança não entenderão mais os jogadores da ala. Aqui, o hacking ocorre no lado do cliente, para que durante o diálogo o texto do oponente enviado ao jogador simplesmente não seja exibido. Isso é bastante fácil de fazer, mas duvido que alguém pague por esse tipo de hack.

Josh Phillips: A próxima seção da apresentação é chamada: "Estou na sua base, pessoal, para matar você!" Vou tentar explicar para você como escrever um hack de teleporte. Existe uma maneira fácil e uma maneira difícil para isso.

A maneira mais fácil é encontrar a posição do jogador na memória, reescrevê-la e acessar a função de jogo, responsável por alterar a localização do jogador para se teletransportar para o local selecionado. Portanto, se você sabe onde o código responsável pela localização do jogador está localizado e pode chamá-lo diretamente usando alguma função, pode ser um feitiço de teletransporte, chamado de "feitiço de conjuração" na linguagem Lua, e você pode atribuir o valor desejado locais de teletransporte do jogador. No entanto, o servidor não será capaz de reconhecer se você é um guerreiro comum ou um mago que pode usar feitiços. Este método funciona em muitos jogos.
A maneira mais difícil é fingir pacotes de movimento. Isso exigirá cálculos matemáticos e conhecimento de como eles são atualizados, engenharia reversa de pacotes de movimento e similares. Pode ser necessário ajustar o carimbo de data / hora para se teletransportar ou correr mais rápido.



O próximo hack é ataques à lógica do jogo, substituindo o ID original no pacote pelo ID desejado, que mencionamos no contexto de Age of Conan. Estes são ataques às habilidades de negociação do jogador, dano crítico ou a destruição completa do dano de Fall de ambos os personagens e itens do jogo, bem como ataques de comerciantes de NPCs com o objetivo de assalto. Em Age of Conan, era possível infligir dano crítico a qualquer personagem do jogo e até matar GM, atribuindo a ele um milhão de danos de queda, após o que ele simplesmente morreu.

Mike Donnelly: sim, isso foi engraçado!

Josh Phillips: Você também pode usar código malicioso neste jogo, para que alguém tenha um relacionamento comercial com você sem nem mesmo saber. Você pode forçar o NPC a vender alguma coisa, e essa técnica ainda é usada por muitos jogadores, exceto eu, porque eu não gosto de roubar personagens do computador. E acho que nenhum de vocês deveria fazer isso.

Mike Donnelly: causa lágrimas digitais ...

Josh Phillips: seguido por bobagens ou clonagem de itens. Muitos jogos têm vulnerabilidades, como problemas de delimitação do servidor. Por exemplo, Age of Conan, EverQuest, Final Fantasy XII e Ultima Online têm zoneamento, ou seja, se você lançar um feitiço de um lado e depois cruzar a linha do servidor, encontre o inimigo que o derrotou lá e você poderá continuar a batalha. O truque pelo método de repetição é que, a uma velocidade tremenda, por exemplo, 1000 vezes por segundo, você move as coisas para frente e para trás da janela de negociação para a sua mochila. Como resultado disso, o servidor para de rastrear as coisas e enche completamente sua mochila. Todo mundo conhece o jogo Diablo 1, onde você simplesmente joga um objeto no chão, corre até ele, passa o mouse sobre ele, tenta pegá-lo e ele aparece imediatamente em sua mochila, enquanto permanece no chão, então essa é uma maneira bem engraçada de hackear.

Hackear recursos de jogos, ou Asset hacking, como mencionei, não vale a pena, a menos que alguém tenha publicado para você o seu trabalho que você pode emprestar. Quem jogou WoW sabe que alguém pode aparecer magicamente do seu lado - não sei como é chamado corretamente ...

Mike Donnelly: campo de batalha, campo de batalha.

Josh Phillips: na verdade, eu nunca joguei World of Warcraft, para mim é muito chato. Assim, os jogadores usam o teletransporte para transferir instantaneamente do campo de batalha para a base inimiga e matar todos os adversários lá. Eles também podem modificar o mapa do jogo e criar um túnel para percorrer o subsolo até a área desejada, para que ninguém o veja. Talvez você veja o pequeno nome dele - uma etiqueta se movendo no mapa, mas você não verá o próprio jogador. Mas, de qualquer forma, esses métodos de hacking não valem o esforço.

Iniciarei a seção "Hacking 420 Games" com uma citação de Maquiavel: "Nada de bom foi alcançado sem perigo", para que você possa ser processado.

Mike Donnelly: sim, sim, sim.

Josh Phillips: Eu acho que realmente é. Você pode usar o bot no jogo, alguém falou sobre isso há alguns anos atrás, e eu queria bater nele, porque não era interessante. Portanto, para isso, você faz algo como ler pixels e automatizar esse processo, não há engenharia reversa aqui. Por exemplo, com um toque rápido de tecla, você redesenha os pontos críticos “vermelhos” de seu próprio dano, para que eles não fiquem vermelhos e você não morra. Este é um hack de uma escala muito limitada e suas ações passarão despercebidas se você agir muito rapidamente.

Mike Donnelly: exatamente assim, você precisa agir muito rapidamente. Alguém sabe por que a detecção funciona tão mal? Entenda-me corretamente, não quero embelezar a situação com detecção no lado do cliente, todo mundo parece muito sábio aqui ... Obviamente, os produtores de jogos não gostam de tudo o que estamos falando, então eles tentam encontrar seu software no jogo e, se o encontrarem, isso banyat você. Se você trapaceia por diversão, o máximo que pode perder é a sua própria conta de jogo, mas se você tiver 100 mil clientes, esse é um grande problema, porque se você banir todos os seus clientes, simplesmente queima.



Portanto, impedir a detecção de trapaça é muito importante. Falaremos sobre isso mais tarde, mas agora quero observar que a detecção do seu software no lado do cliente é muito importante.

Josh Phillips: Algum de vocês se perguntou por que uma onda de proibições acontece uma vez a cada 3 meses? O fato é que, quando você bane 50 mil contas toda semana, as pessoas que vinculam essas 50 mil contas nunca mais fazem isso novamente devido ao alto custo. Mas se você os banir não mais que uma vez a cada 3 ou 4 meses, eles comprarão novamente as contas, pois isso será rentável. As empresas pensam algo assim: encontramos esses caras que usam, digamos, o bot Glider, mas não os banirão, porque se os banirmos com muita frequência, eles não nos trarão mais do que US $ 50 de lucro.

Mike Donnelly: sim, é verdade.

Josh Phillips: Outra maneira de hackear é injetar código quando você insere um código pequeno de montador para fazer algumas pequenas coisas, por exemplo, chamando remotamente algum tipo de procedimento RPC. A superfície do seu ataque pode aumentar, quero dizer, você pode realmente usar algo como uma injeção de DLL em um grande pedaço de código escrito em C ou C ++ de alto nível, o que é realmente fácil de detectar. Você escreve um carregador de DLL que corrige todas as suas importações e tudo mais.

Você pode atacar o nível de pacotes de rede e fazer uma coisa boa como engenharia reversa do protocolo de rede. Este é um trabalho muito demorado, porque não há muitos jogos que permitem esse tipo de análise de conteúdo. Essa ainda não é uma tarefa fácil, e se você se considera um profissional, pode escrever seu próprio cliente de jogo. As pessoas geralmente pensam que podem fazê-lo e passam muito tempo em vão, mas se você é realmente capaz de escrever um bom cliente, como os caras que me destruíram há alguns meses, pode ganhar algumas centenas de milhares por mês com isso.

Mike Donnelly: escrever um cliente personalizado não é o que você venderá, mas “agricultura de ouro” e transações com dinheiro real. Se você escreveu seu cliente do jogo, pode pedir ao seu parceiro para lançar dez milhões de cópias do jogo no servidor pharming. Se o seu cliente de jogo não precisar de um grande número de operações de renderização em 3D, ele poderá ser usado para dimensionar o cultivo de ouro.
Josh Phillips: se você normalmente pode rodar de 2 a 3 clientes de jogos em um computador e conseguiu iniciar de 200 a 300 clientes, isso será em grande escala.

Agora considere uma coisa chamada anti-fraude. Em sua ajuda, você pode lidar com software que calcula e proíbe trapaceiros. Geralmente, é uma tarefa muito difícil, mas às vezes é muito importante não ser detectada; caso contrário, você pode perder tudo. No slide, cito outra citação de Sun Tzu, que disse: “Seja extremamente sutil até a falta de forma. Seja extremamente misterioso até o silêncio.

Mike Donnelly: Quero observar que não há muitos aspectos técnicos de detecção, mas você deve abordar isso estrategicamente, isso não está no livro “MMO Hacking”. Talvez haja esse livro?



Josh Phillips: sim, foi escrito por um dos meus amigos.

Mike Donnelly: Esse cara é eliminado em primeiro lugar. Portanto, como isso não está no livro, mas se falamos de uma abordagem estratégica para os negócios, você deve se preocupar com duas coisas principais relacionadas ao seu software. Você tem uma superfície de ataque que determina o quão difícil será para detectar seu software e, neste caso, o anti-cheat pode simplesmente aumentar o código de detecção, se ele for pequeno. Em segundo lugar, você deve ter o que eu simplesmente chamo de "inteligência", isto é, quão bem você está ciente do que o inimigo está fazendo, você precisa entender como os programas de detecção dele funcionam, porque é muito importante. Ambas as coisas funcionam juntas, e se a superfície de ataque for muito grande, será difícil dizer o que o inimigo está fazendo em resposta, porque seus esforços podem ser mínimos - basta escrever uma linha de código que irá detectar seu bot. Se você fizer algo muito legal, como o meu bot, que responderá em 2 milissegundos, se o monstro fizer alguma coisa, você poderá evitar a detecção.

Portanto, essa é a decisão que você deve tomar ao escolher os recursos e projetar o que seus clientes estão pedindo. Você deve decidir se deseja correr riscos aumentando a superfície de ataque adicionando esses recursos.

Antes de mostrar o próximo slide, quero falar sobre o que aconteceu comigo e com outros desenvolvedores de software do World of Warcraft. Um cara desenvolveu software, vamos chamá-lo de Innerspace, que funcionava injetando dlls em um jogo bastante grande. Esse cara era versado em engenharia reversa, então tomou todas as medidas contra os programas de detecção da Blizzard. Mas ele ainda deixou a DLL na memória, o que ele queria "confundir" e, mais importante, ele teve que corrigir uma das funções da Blizzard. Portanto, ele simplesmente foi ao início dessa função e inseriu um “salto em distância” no lugar certo no código, tendo certeza de que ele havia mascarado o suficiente e que ninguém o encontraria.

O próximo slide mostra a função com o código inserido, preste atenção aos valores destacados em vermelho, aumentaremos esse fragmento para que todos possam vê-lo.



Este é um pedaço de código inserido dentro do jogo, mas não é o World of Warcraft ...

Josh Phillips: porque Mike está perseguindo a Blizzard ...

Mike Donnelly: Eu apenas acho que dar um exemplo do WoW não seria uma boa ideia. Neste snippet de código, você vê que o jogo usa a consulta da lista de amigos askForBuddiesList, que possui um parâmetro opcional que nunca foi usado antes. É entendido como um número de pacote, ou um número de equipe ou um número de BOB - “Brothers Over Bitches”. Este parâmetro opcional é "colado" neste local do código e enviado ao servidor, tudo é muito simples.

Portanto, esse código "colado" - vamos rolar algumas linhas para os comentários - diz: o código antigo era askForBuddiesList (0), é 0 e, em vez disso, agora um novo código é usado com o parâmetro de opção _asm, que nunca foi usado antes.



Então, a Blizzard encontraria no código do jogo uma função corrigida por esse cara. Para fazer isso, eles alteraram essa chamada de função para um pequeno exemplo de código. Eles usaram os registros, realizaram alguns cálculos matemáticos, para que o IDA não veja outro link para essa função. Em seguida, eles vão para a função corrigida, retiram o primeiro byte do código e o enviam como um parâmetro que nunca foi usado antes. O que, então, acontece? Eles enviam um byte de seu próprio código cada vez que fazem essa solicitação e, é claro, no lado do servidor, eles simplesmente "combinam" e, se encontrarem E9 em vez de zero, pronto, o trabalho está feito!

O que é interessante sobre este software é que você não vê nada como "se esse cara é um bot, conte para o servidor" aqui. Você vê que eu pego esse byte e o envio, e esse é um pequeno pedaço de código que nem altera o código principal da rede, não há novos parâmetros, nada de novo. A única maneira de encontrá-lo é observar de alguma forma como esses dados são coletados e, em seguida, podemos dizer: "Sim, essa coisa sempre foi 0 e agora é 9, não é bom!"

Então, quando eles fizeram isso, esse cara perdeu todos os seus clientes porque eles esperaram várias semanas para serem banidos, e então a empresa atacou várias vezes.
Este é um bom exemplo de quanto a superfície do ataque significa, porque a fixação de apenas uma função do jogo levou a essa resposta. O fato é que, se você acha que sabe onde está o código de detecção, sempre há uma chance de que não seja o que você pensa. No caso da Blizzard, eles nunca colocaram seu código de detecção fora do “guarda florestal” do diretor, “mantiveram todos os ovos em uma cesta”, escondendo os detectores no “guarda florestal”. Mas eles se prepararam e disseram que publicaríamos nosso pequeno código onde quiséssemos - e é isso.
Portanto, é extremamente importante permanecer difícil de detectar. Se surgissem algo como uma nova chamada do kernel ou lançassem um monitor de API privado, a atividade deles poderia ser detectada, mas quando eles deram apenas um pequeno passo, você foi pego imediatamente. Portanto, é muito importante observar o que eles fazem e como eles criam novas ferramentas para monitorar a aparência dos fluxos de dados no sistema.

Quanto a Glyder, tínhamos ferramentas que nos avisavam, por exemplo, que o Warden era atualizado e agora possui 9 pontos de entrada em vez de 8, e após esse aviso, corri para o meu escritório e comecei a consertar Glyder febrilmente, trazendo-o para encomende e corra novamente. Portanto, sempre há uma saída, o principal é não ser preguiçoso. Realmente há muito trabalho nesse ramo, mas vale a pena.

Josh Phillips: sim, acho que nós dois tivemos que trabalhar 36 horas sem descanso.

Mike Donnelly: quando a Blizzard atualizou o “guarda florestal”, eles adicionaram um novo scanner. Esse scanner pega a linha criptografada dentro do "zelador", recebe a chave do servidor, descriptografa essa linha e chama a função GetProcAddress, que extrai o endereço da função exportada da biblioteca conectada dinamicamente especificada, neste caso o kernel32.dll. Se eu te aborrecer, não se preocupe, será mais divertido.

Assim, eles pegam a string, seja ela qual for, e se for regulada por essa função, GetProcAddress será aplicada a ela sem nenhum parâmetro. , , , , . , - kernel32.dll , , .

, , , , Hellgate: London. , , ! : « ! , »!



, , URL — YouTube! GetProcAddress, ProcAddress , , , , , ! , . , . , , ricroll, - !

: , . , - , , , dll . , . Blizzard , «, , – , ».

, , , command & control , «» Warden Punkbaster. WoW, , .

: .

: , . Punkbaster , , . window.name, Punkbaster. : «, , , IRC , , ».

, Punkbaster : «-, !», .

, . , , . . , .

: , , Diablo 3.



, – ? Blizzard . Blizzard . , , «» Blizzard, .

: , . , , , .

: , …

Josh Phillips: Espero que ainda tenhamos um pouco de tempo, para que possamos ir para a sala de perguntas e respostas e continuar nossa comunicação.

Mike Donnelly: Obrigado, DefCon!




Obrigado por ficar conosco. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando a seus amigos, um desconto de 30% para os usuários da Habr em um análogo exclusivo de servidores básicos que inventamos para você: Toda a verdade sobre o VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps de US $ 20 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 núcleos) 10 GB DDR4 240 GB SSD de 1 Gbps até a primavera, gratuitamente, ao pagar por meio ano, você pode fazer o pedido aqui .

Dell R730xd 2 vezes mais barato? Somente nós temos 2 TVs Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 a partir de US $ 249 na Holanda e nos EUA! Leia sobre Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?

Source: https://habr.com/ru/post/pt437790/


All Articles