Cyber Arena BR
Desafios CTF em português com validação de flag por hash, pontuação, sequência de dias, ranking e certificação por trilha.
Cinco trilhas por cargo: SOC/Blue Team, Pentest/Red Team, AppSec, OT/ICS e AI Red Team. Cinco níveis de dificuldade numa escala fixa de pontos, de 10 a 200. O desafio vive num catálogo global da plataforma; o jogador envia a flag e o serviço decide.
A flag crua nunca é persistida nem devolvida. O banco guarda apenas o sha256, a comparação acontece no serviço sobre o hash e um desafio cadastrado sem hash nunca casa — nega o acerto em vez de aceitar qualquer coisa. O primeiro acerto pontua; uma repetição é absorvida pelo índice único e não pontua de novo. A sequência de dias é determinística sobre o relógio injetado: mesmo dia mantém, dia seguinte soma, lacuna reseta. O leaderboard é da organização e ordena por pontos e sequência. A separação entre humanos e coletivos de IA existe no schema e na consulta, mas nenhum código marca um perfil como coletivo — hoje esse segmento sai vazio.
A Arena é o funil que alimenta o Marketplace de Talentos: as trilhas em que a pessoa acertou flag viram skills verificadas no perfil de candidato dela. A dica por IA é socrática, proibida de revelar a flag ou entregar exploit pronto, e o enunciado entra embrulhado como dado não-confiável para que uma injeção escondida no texto do desafio não vire instrução.
Capacidades em operação
Cada item corresponde a funcionalidade que existe no código e é alcançável por um usuário com o escopo correto.
-
Catálogo de desafios
Filtro por trilha e dificuldade, com paginação por cursor. Cada item traz se o próprio usuário já resolveu e quantas pessoas distintas da organização resolveram. Nem a flag nem o hash saem na resposta.
-
Validação de flag por hash
Comparação de sha256 no serviço. Guardamos o hash do que foi enviado, nunca o texto. Rate-limit de 12 por minuto por IP e por tenant contra força bruta, mais Idempotency-Key para o replay não repontuar.
-
Pontuação com fallback declarado
Usa os pontos do desafio quando declarados e positivos; senão cai na escala canônica por dificuldade. Dificuldade fora do vocabulário vale zero, para não inflar pontuação com dado inesperado.
-
Sequência de dias (streak)
Função pura sobre o dia de calendário UTC do último acerto: mesmo dia mantém, dia seguinte soma um, lacuna maior reseta para um. Não dá para farmar o mesmo dia.
-
Perfil do jogador
Handle, bio e skills com upsert; a projeção é criada sob demanda no primeiro acesso e a corrida por criação simultânea é absorvida pelo índice único.
-
Leaderboard da organização, com recorte por trilha
Ordena por pontos e sequência, opcionalmente recortado por trilha — com o recorte, pontos e resolvidos falam do mesmo conjunto, porque o filtro mora dentro da agregação. Uma agregação por página, sem uma consulta por jogador; no ranking geral o serviço ainda grava o rank_cache de cada perfil exibido. A separação entre humanos e coletivos de IA existe no schema e na consulta, mas nenhum código marca um perfil como coletivo — hoje esse segmento sai vazio.
-
Certificação por trilha
Limiares declarados: SOC 3, Pentest 5, AppSec 4, OT 3, AI Red Team 3 desafios distintos resolvidos. Credencial opaca com prefixo JC-ARENA, emitida uma vez por trilha, sem PII.
-
Dica por IA (rascunho)
Empurrão socrático de duas a quatro frases com disclaimer explícito de que é gerada por IA. Rate-limit de 15 por minuto. Gateway indisponível ou resposta bloqueada devolve 200 com dica nula, não erro.
-
Catálogo declarativo versionado
Trilhas, escala de pontos e limiares expostos por rota própria na versão arena.v1, para o front renderizar sem reimplementar a regra em JavaScript.
-
Auditoria sem segredo
A submissão grava apenas se acertou, se foi o primeiro acerto e quantos pontos rendeu. Nem a flag nem o hash entram no log.
Entregáveis
- Catálogo de desafios e página de desafio com enunciado
- Perfil de jogador com pontos, sequência e posição no ranking
- Leaderboard da organização por pontos e sequência, com recorte por trilha
- Certificacao de trilha com credencial opaca, visivel para o proprio titular dentro da organizacao (nao ha rota de conferencia por terceiros)
- Skills verificadas que atravessam para o perfil do Marketplace de Talentos
O que este módulo não faz
Não há laboratório. A plataforma valida a flag; ela não sobe nem entrega o ambiente do desafio — o broker de container por usuário é gancho externo e não existe no repositório. Não há rota de escrita de desafio: o catálogo é global e o único writer no código é o seed, que insere UM desafio (recon-http-headers, trilha appsec, fácil). Como o limiar de certificação de AppSec é quatro desafios, com o conteúdo semeado nenhuma certificação pode ser emitida hoje; popular o catálogo exige escrita direta no banco por administrador de plataforma. O endpoint de dica por IA existe na API mas não tem chamador no front — o cliente JavaScript não expõe a função. O leaderboard e o contador de quem resolveu são da própria organização, não da plataforma: a RLS impede ver o acerto de outro tenant, e um total global seria inventado. Não há cobrança por desafio nem por dica; o modelo é assinatura.
Declaramos o limite porque software de segurança que promete tudo não é auditável. Se o que falta aqui é o que você precisa, o serviço consultivo cobre — ou dizemos que não cobre.
Conecta com
- Marketplace de Talentos (skills verificadas e pontos derivam daqui)
- Cyber Range OT/ICS (reusa a escala de pontos e a função de ranking)
- Gateway de IA da plataforma (dica)
Controle de acesso
O acesso é concedido por escopo, não por perfil genérico. Quem só precisa ler não recebe permissão de escrita, e a barreira é o banco de dados, não a interface.
- arena:challenge:read
- arena:attempt:submit
- arena:profile:read
- arena:profile:manage
- arena:cert:read
Quer ver funcionando?
Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.