- Os sistemas modernos de anti-cheat baseados em kernel estão entre os softwares de segurança mais complexos no ambiente Windows, monitorando memória e eventos do sistema em nível de kernel mesmo durante a execução do jogo
- Para superar as limitações da proteção em modo de usuário, utilizam drivers de kernel e monitoram em tempo real criação de processos e threads, carregamento de imagens, alterações no registro etc.
- Sistemas importantes como BattlEye, EasyAntiCheat, Vanguard e FACEIT AC operam com uma arquitetura de três camadas composta por driver de kernel, serviço e DLL do jogo, sendo o Vanguard carregado na inicialização e, por isso, detentor do controle mais forte
- Eles bloqueiam trapaças combinando defesas em múltiplas camadas, como varredura de memória, detecção de hooks, verificação de integridade de drivers, resposta a ataques DMA e detecção baseada em comportamento
- No fim, a atualização remota baseada em TPM e a verificação de confiança do hardware estão emergindo como a base central da segurança em jogos
1. Limitações da proteção em modo de usuário e a migração para o kernel
- Processos em modo de usuário estão abaixo do kernel em termos de privilégio, então são facilmente contornados por trapaças em nível de driver de kernel ou hipervisor
- Exemplo: uma chamada
ReadProcessMemory pode ser falsificada por meio de hooking no kernel
- Cheats em modo kernel podem manipular diretamente a memória do jogo e evitar detecção em modo de usuário
- Para responder a isso, o anti-cheat migrou para o nível de kernel, realizando monitoramento no mesmo nível de privilégio
2. A “corrida armamentista” entre cheat e anti-cheat
- Continua a corrida por elevação de privilégios: modo de usuário → kernel → hipervisor → DMA
- O anti-cheat responde com bloqueio de drivers, detecção de hipervisor e defesa DMA baseada em IOMMU
- Esse processo aumenta o custo e a dificuldade de desenvolver cheats, com o efeito de barrar o acesso de usuários comuns
3. Principais sistemas de anti-cheat de kernel
- BattlEye: centrado no driver de kernel
BEDaisy.sys, registra callbacks para criação de processos, threads e carregamento de imagens
- EasyAntiCheat (EAC): pertence à Epic Games e usa uma estrutura semelhante de três camadas
- Vanguard: carrega
vgk.sys na inicialização e exerce controle forte com um modelo de lista de permissões para drivers
- FACEIT AC: obtém alto nível de confiança com monitoramento em nível de kernel
- O artigo da ARES 2024 destaca que esses sistemas têm uma estrutura técnica semelhante à de rootkits, embora seu objetivo seja defesa
4. Estrutura de três camadas do anti-cheat de kernel
- Driver de kernel: executa hooking de chamadas de sistema, varredura de memória e controle de acesso
- Serviço em modo de usuário: responsável por comunicação de rede, gestão de banimentos e envio de telemetria
- DLL do jogo: realiza verificações dentro do processo do jogo e IPC com o serviço
- A comunicação entre eles ocorre por IOCTL, Named Pipe e Shared Memory
5. Diferença entre carregamento na inicialização e em tempo de execução
- BattlEye/EAC: carregam o driver quando o jogo é iniciado e o descarregam ao encerrar
- Vanguard: é carregado na inicialização e monitora todos os drivers carregados depois disso
- Por isso, é necessário reiniciar o sistema, mas a proteção começa já na fase de boot
6. Monitoramento baseado em callbacks do kernel
- ObRegisterCallbacks: controla acesso a handles de processo e bloqueia acesso à memória por processos externos
- PsSetCreateProcessNotifyRoutineEx: bloqueia a criação de processos de cheat
- PsSetCreateThreadNotifyRoutine: detecta threads anômalas dentro do processo do jogo
- PsSetLoadImageNotifyRoutine: detecta carregamento de DLLs não permitidas
- CmRegisterCallbackEx: monitora alterações no registro
- Driver minifilter: bloqueia acesso a arquivos de cheat no nível do sistema de arquivos
7. Proteção de memória e varredura
- Restrição de acesso a handles para bloquear leitura/escrita externa de memória
- Verificação de hash das seções de código para detectar patches no código
- Percurso da árvore VAD para detectar memória executável mapeada manualmente
- Identificação heurística de memória executável anônima, DLLs mapeadas manualmente e shellcode
8. Detecção de injeção
- Detecta diversas técnicas de injeção, como CreateRemoteThread, APC, NtMapViewOfSection e Reflective DLL
- Análise de stack frames (
RtlWalkFrameChain) para verificar execução de código anômala
9. Detecção de hooks
- Hooking de IAT: detecta adulteração da Import Address Table
- Hooking inline: verifica patches comparando instruções JMP no início de funções
- Verificações de integridade de SSDT, IDT e GDT para impedir hooking em nível de kernel
- Detecção de uso direto de syscall para bloquear tentativas de contornar a
ntdll
10. Proteção em nível de driver
- Detecção de drivers não assinados e modo de assinatura de teste
- Operação de blocklist para impedir ataques BYOVD (abuso de drivers vulneráveis)
- Monitora estruturas internas do kernel como PiDDBCacheTable, MmUnloadedDrivers e BigPool para detectar drivers mapeados manualmente
11. Antidebugging e prevenção de análise
- NtQueryInformationProcess para verificar a presença de depurador
- Detecção de depurador de kernel pela variável KdDebuggerEnabled
- Detecção de threads ocultas com a flag ThreadHideFromDebugger
- Bloqueio de ambientes de análise por verificação de timing com RDTSC, breakpoints de hardware e presença de hipervisor
12. Cheats baseados em DMA e resposta
- Dispositivos DMA via PCIe leem memória sem intervenção da CPU
- A IOMMU restringe acessos DMA, mas pode ser neutralizada se estiver desativada ou mal configurada
- Disfarçar dispositivos FPGA como dispositivos legítimos dificulta a detecção
- Secure Boot e TPM 2.0 podem mitigar parcialmente o problema por meio da verificação de integridade de boot
13. Detecção baseada em comportamento e machine learning
- Análise da entrada do mouse para diferenciar movimento humano de mira automática
- Uso de modelos CNN e Transformer para detectar triggerbots e aimbots
- Redes neurais em grafo para detectar trapaças em equipe, como wallhack e conluio
- Pipeline de telemetria: captura de entrada no kernel → transmissão criptografada → análise de ML no servidor → decisão de banimento
14. Ambientes virtuais e evasão de análise
- Detecção de VM por meio do bit de hipervisor do CPUID e de strings do fornecedor
- Verificação de rastros de registro e dispositivos de VMware, VirtualBox e Hyper-V
- Ambientes com virtualização dupla podem ser identificados por atraso na execução de instruções
15. Identificação de hardware e aplicação de banimentos
- Geração de HWID com base em SMBIOS, disco, GPU, MAC, MachineGuid etc.
- Spoofing de HWID pode ser tentado por manipulação de registro, drivers ou hardware físico,
mas pode ser detectado por inconsistência entre identificadores ou formatos anormais
16. Tendências futuras e transição tecnológica
- Após o DMA, a próxima etapa são cheats baseados em firmware, elevando ao máximo a dificuldade de detecção
- Aimbots de hardware baseados em IA são difíceis de distinguir de entradas humanas
- Atestação remota baseada em TPM e cloud gaming estão surgindo como alternativas de longo prazo
- O anti-cheat de kernel continua sendo a linha de frente prática,
mas a verificação de confiança do hardware e a validação no lado do servidor são apontadas como o rumo final
1 comentários
Comentários do Hacker News
Em resumo, os cheats modernos burlam o anti-cheat usando hipervisores, patches de BIOS, dispositivos DMA etc.
Quanto mais a proteção é reforçada no nível de hardware, mais os criadores de cheats evoluem junto.
Mas, com o surgimento da análise de gameplay baseada em IA, a abordagem de detectar o próprio trapaceiro vem mostrando resultado.
No fim, o futuro está em anti-cheat em modo de usuário, não em modo kernel, e na análise de gameplay.
Na verdade, isso parece ser prova de que o anti-cheat está funcionando bem.
Antes, bastava baixar um programa e já dava para trapacear, mas agora a barreira de entrada ficou tão alta que muita gente nem tenta.
Ainda assim, no começo do texto foi dito que essas medidas defensivas podem ser neutralizadas, então fica a dúvida se elas são confiáveis ou não.
Eu mesmo tive duas contas banidas, mas consegui reverter pelo suporte ao cliente.
Porém, como parece que IA está sendo usada no atendimento, imagino que haja muitos bans injustos.
Esse tipo de sistema de banimento baseado em comportamento tem o risco de punir por engano até usuários dedicados, então é difícil confiar.
Ou seja, como qualquer um já não consegue mais criar cheats, o anti-cheat está tendo algum sucesso.
Mas a análise de gameplay provavelmente só pega trapaceiros mais óbvios, e pode deixar passar cheats do tipo ESP.
Esse tipo de trapaceiro destrói a comunidade aos poucos, então é ainda mais perigoso.
Mexer no kernel é ignorar todo o modelo de segurança do sistema operacional.
Na prática, já houve casos em que anti-cheats com bugs tiveram privilégios de root comprometidos.
O certo é usar os recursos de sandbox do SO e a cadeia de confiança da fase de boot.
Por isso é difícil depender só dos recursos do SO, e a attestation também tem alcance prático limitado.
Mesmo sem ser perfeito, se isso puder reduzir estatisticamente o número de trapaceiros, já tem valor.
Eu gostaria de ver jogos com um sistema opcional de pareamento por anti-cheat.
Só quem ativou o anti-cheat jogaria entre si, e quem desativou ficaria em uma estrutura regulada pela própria comunidade.
Parece que só uma empresa do porte da Valve conseguiria testar algo assim.
Mas autorregulação da comunidade nunca é eficiente em grande escala.
Pessoalmente, acho que, se houver trapaceiro, é melhor simplesmente fechar o jogo e sair para tomar um ar.
Em vez de instalar um anti-cheat em nível de kernel, “parecido com malware”, prefiro jogar em console.
Trapaceiros, por natureza, mostram padrões de comportamento anormais, então seria possível pegá-los registrando todas as entradas no servidor e aplicando detecção de anomalias com machine learning.
Também dá para criar objetos “honeypot” para induzir apenas trapaceiros a reagirem.
Como em p-hacking, você pode confundir variações acidentais com sinais significativos.
De fato, o Dota 2 baniu todas as contas que leram áreas anormais de dados dentro do cliente.
Anúncio de patch relacionado
Não é um problema que se resolve simplesmente jogando ML em cima.
A análise comportamental tem dificuldade para acompanhar a velocidade com que a comunidade muda.
Trapaceiros normalmente reagem cerca de 100 ms mais rápido que jogadores profissionais.
Eu não sou gamer, mas acho que o problema de prevenção de cheats em jogos online é um desafio tecnicamente interessante.
O conselho simplista de “processar tudo no servidor” não é realista.
Jogos são mais como liga de bairro do que Olimpíadas, então o mais importante é a diversão, não a equidade perfeita.
Se trapaceiros forem pareados entre si, o impacto sobre usuários comuns diminui.
Mas grandes empresas de jogos não mantêm esse tipo de equipe.
O anti-cheat só serve para elevar a barreira de entrada.
É preciso criar um ambiente em que trapacear online seja visto como coisa de perdedor.
O anti-cheat em nível de kernel tenta travar o cliente o máximo possível, mas ainda assim trapaceiros continuam existindo.
No fim, isso significa que o servidor não pode confiar completamente no cliente.
Nem o código de rede consegue resolver isso por completo.
A cultura competitiva dos jogos hoje em dia é uma estrutura em que as empresas fazem os usuários competir com estranhos, em vez de amigos.
Mas fica a dúvida se é mesmo necessário chegar a esse ponto.
Disputar habilidade, como nos esportes ou no xadrez, é um desejo humano instintivo.
A expressão de que anti-cheat em kernel seria “o software mais sofisticado” parece exagerada.
Interceptar system calls não é nenhuma técnica especial.
Parece haver muita gente que nunca jogou jogos competitivos.
Kernel-level anti-cheat (KLAC) realmente funciona.
Soluções em kernel como FACEIT ou Vanguard têm muito menos cheats do que abordagens baseadas em VAC/VACNet.
Claro que não são perfeitas, mas aumentam bastante a barreira de entrada.
Só um dispositivo DMA já custa centenas de dólares, e cheats avançados são caros por serem vendidos por assinatura.
Jogos são uma escolha, então, se você não gosta de KLAC, é só não jogar.
Mas, se recusar isso, vai ter de aceitar um ambiente tomado por trapaceiros.
Ouvi dizer que medições de boot com TPM e UEFI Secure Boot permitem atestação remota, e surpreende saber que um atacante ainda pode manipular isso.
Devemos ter a liberdade de garantir plenamente a propriedade do nosso dispositivo sem sofrer discriminação.