Com a popularização dos CTFs pelo mundo, e principalmente no Brasil, muitas pessoas interessadas em criar competições têm surgido, porém as vezes a qualidade dos challenges deixa muito a desejar, sem trazer real aprendizado aos players. Usando a nossa experiência obtida na organização de várias edições de sucesso do Pwn2Win (público hardcore), além de diversas edições do CTF-BR University (público mais iniciante), vamos dar algumas dicas para quem deseja se aventurar na criação de desafios de qualidade. Com vocês, o “Manual CTF-BR #1 – Como criar um bom challenge“! Em breve faremos outro de Como fazer um bom CTF.
As perguntas básicas que devem ser feitas na hora da criação, e vão auxiliá-lo nessa missão:
1) Quanto tempo a pessoa vai levar pra resolvê-lo?
Claro que essa questão é um pouco difícil de responder, principalmente sem experiência prévia na criação, mas você pode levar em conta quanto tempo você demoraria para resolvê-lo, tendo em vista que já tem os conhecimentos necessários para a resolução, e levando em consideração somente as informações que serão disponibilizadas aos participantes. Como exemplo, nos challenges mais complexos que criamos para o Pwn2Win, o tempo de resolução costuma superar 1 (um) dia. Se for uma competição curta e com público alvo menos experiente, a dificuldade tem que acompanhar a experiência do público alvo, obviamente. Imagine dois cenários: tempo que alguém com os conhecimentos necessários (como você) levaria, e tempo que alguém sem experiência prévia no assunto levaria.
2) Quais skillz o player precisa ter pra resolver?
Se a resposta for “nenhuma” ou “precisa saber usar a toolzinha X”, não perca tempo implementando esse desafio. O objetivo dos CTFs é principalmente o aprendizado, então os challenges precisam acompanhar esse raciocínio, sempre tentando introduzir algo realmente relevante aos participantes. Defina um objetivo claro sobre quais conceitos técnicos você quer propagar com seu desafio.
3) Envolve adivinhação (guessing) ou o objetivo é muito obscuro?
Wrong approach, pois a dificuldade tem que estar na implementação da solução, não no fato de adivinhar o que fazer com dados random. Claro, alguns challenges podem envolver lógica para interpretar o caminho a se seguir, e isso não configura guessing SE estiver dentro de um contexto bem definido. Em suma, a pessoa precisa saber o que tem que fazer no desafio, e a dificuldade deve estar em como fazer. Os challenges do tipo “Ache a Flag”, onde é dado um dump com informações, são o melhor exemplo para definir um “challenge ruim”.
4) Qual será a descrição? É possível contextualizar?
O Pwn2Win sempre é temático pois queremos conseguir contextualizar os challenges, dando um objetivo bem definido para cada um, dentro do cenário da estória criada. Um exemplo de challenge bem contextualizado é o que utilizamos como “Challenge da Virada (2018 -> 2019)“, e a descrição pode ser vista na página do nosso Hall of Fame.
Além dessas perguntas que você pode responder para ajudá-lo, outros pontos importantes que devem ser considerados:
Inovação: challs que trazem tecnologias ou conceitos não explorados em competições anteriormente é sempre um Plus. Temos conseguido ser os pioneiros em muitos assuntos e tecnologias ao longo dos anos no Pwn2Win, já é uma característica intrínseca do nosso evento (todos esperam inovação), e isso tem agradado muito os players dos Top Teams (principalmente os poloneses).
Se baseie em quem entende: veja os desafios dos CTFs mais renomados para entender a estrutura de um bom challenge. Procure os CTFs de maior rating no CTFTime, e veja a seção de Tasks/Write-ups.
Por fim, quando o desafio estiver pronto, peça a opinião de alguém experiente no assunto abordado e que não irá jogar a competição em que ele figurará. Passe somente as mesmas informações que os players terão. Se o objetivo ficou obscuro, ou envolve adivinhação, e a dificuldade não está na implementação da solução, e sim no que fazer com informações randômicas, sua abordagem está definitivamente errada. Volte para a prancheta e siga nossas dicas para fazer um bom challenge que vai realmente ajudar no crescimento intelectual da comunidade! 🙂
Dúvidas? Nos encontre no IRC (#ctf-br @ freenode) ou no nosso grupo no Telegram e deixe-nos tentar ajudá-lo a criar um desafio de qualidade!
Update (24 de dezembro de 2019)
Eduardo Vela, integrante da Staff do Google CTF, postou um link super completo para organizadores de CTFs se basearem. Diversos tópicos são abordados, vale a leitura:
Design guidelines for CTF authors and organizers
Além dele, há mais dois interessantes:
The Many Maxims of Maximally Effective CTFs
Suggestions for running a CTF (do PPP)