No começo do ano, mais especificamente em fevereiro, logo após o Pwn2Win PTE, decidimos fazer mais uma edição do Pwn2Win CTF, e então começamos a saga que durou 10 meses para criar uma experiência única em termos de CTFs, com infraestrutura própria e diferenciada, plataforma segura sem riscos de ser ownada (ou dos resultados serem contestados, como aconteceu recentemente em uma competição internacional), além de muitos challenges originais e únicos.
Essa edição contou com muitas novidades, como a plataforma NIZKCTF, o provisionamento de instâncias exclusivas por meio de containers LXC, e uma rede VPN para os times que se qualificassem fazendo no mínimo 8 desafios.
Apoio Institucional
Este ano, tivemos apoio institucional da Pró-Reitoria de Extensão da UFSCar, por meio do processo ProEx nº 23112.003615/2017-82.
Equipe
Com uma equipe multidisciplinar, composta por membros do ELT e alguns convidados, foi possível concretizar com maestria esse evento épico! Abaixo, os responsáveis e suas funções:
Álisson “gnx” Bertochi (ELT) – gerenciamento geral da equipe, divulgação, criação da estória e de challenges nas categorias PPC, Forensics, Networking, Web, Misc, Exploitation e Attack Step;
Anderson “DarkShymia” Tomkelski (ELT) – criação de challenge de Eletrônica;
André “andre_smaira” Smaira (ELT) – criação de challenges de Forensics, PPC-M e Physics;
Antônio Carlos Falcão Petri (convidado) – backend da Plataforma;
Bruno “v3ntur4” Ventura (convidado) – frontend da Plataforma;
Caio Lüders (ELT) – colaboração na homologação de alguns challenges;
Éderson “edtsz” Szlachta (convidado) – confecção dos certificados dos times vencedores;
eremitah (convidado) – ideias e revisão da estória;
Fernando “feroso” Dantas (ELT) – criação de challenges de Exploitation;
Gabriel “spooks” Alves (convidado) – tradução e revisão das descrições, Provisionador do game;
Luan “herrera” Herrera (ELT) – criação de challenges Web e homologação de desafios;
Luca “C4ndy” Otoni (convidado) – contribuição com traduções;
Lucas “whoisroot” Magalhães (convidado) – Provisionador do game;
Manoel “Manoel” Netto (ELT) – criação de challenge Web;
Paulo “thotypous” Matias (ELT) – criação de challenges de Forensics, Reversing e Eletrônica. Gerenciamento da Infraestrutura, da Equipe da Plataforma e Plataforma PPC-M;
Pedro “pedroysb” Barbosa (ELT) – criação de challenges de Crypto e Exploitation, backend da plataforma;
Rodolfo “rodolfoams” Marinho (convidado) – criação do challenge “Intel SGX”, juntamente com o pedroysb;
Thiago “thnc” Cardoso (ELT) – criação de challenges de Reversing e Misc, backend da plataforma;
Thiago Mosqueiro (convidado) – traduções iniciais das descrições e auxílio em um challenge Misc;
Venício “arkadio” Santos (convidado) – auxílio na homologação de um challenge de Forensics;
Principais desafios
Gerenciamento da Equipe
Gerenciar uma equipe composta por tantas pessoas é um desafio complexo e extremamente desgastante. Utilizamos o Trello, com checklists e todas as outras informações importantes pertinentes ao evento, e fizemos reuniões mensais no IRC (sempre na primeira segunda-feira, com agenda predefinida) para acompanhar o andamento das atividades. Também utilizamos um grupo no whatsapp para contato em realtime, além de um repositório SFTP para centralizar os arquivos e informações dos desafios, quando finalizados. O Google Docs foi utilizado na reta final para organizar informações dos challenges e máquinas que seriam utilizadas.
Infraestrutura
A Infraestrutura sempre é um dos maiores desafios de qualquer competição Capture the Flag. Dessa vez, por utilizarmos o GitHub com nossa nova plataforma do game, atrás da CloudFlare, foi um problema a menos para nos preocupar. Utilizamos infraestrutura pública, sem gastar um centavo, e tivemos um dashboard rodando 100% estável (fora alguns problemas no começo da competição, que foram resolvidos com ajustes na configuração da AWS Lambda). O carro-chefe na nossa infra, além do GitHub, foi a Nuvem UFSCar (OpenStack).
Abaixo, um resumo das tecnologias e serviços utilizados no evento:
- AWS Lambda: utilizado para CI (Continuous Integration) da plataforma;
- Azure: os challenges Windows (algo não tão convencional em CTFs) do feroso utilizaram instâncias na Azure;
- Bitbucket: utilizamos um repositório privado no Bitbucket para armazenarmos códigos de challenges mais complexos;
- Containers LXC: essa tecnologia foi usada para os challenges “isolated“, onde foram provisionadas máquinas únicas, exclusivas e isoladas para cada time que resolvesse 8 desafios, recebendo assim as credenciais para a rede VPN;
- CloudFlare: gerenciamento de DNS, proteção, cache e certificado SSL para o dashboard:
- DreamHost: utilizamos a DH como mirror para nossos files estáticos;
- GitLab: deixamos o GitLab de prontidão, caso ocorresse algum problema no GitHub e precisássemos migrar “on the fly“;
- GitHub: plataforma do game e dashboard no github.io;
- Nuvem UFSCar (OpenStack): utilizamos para todas instâncias (máquinas para os challenges), repositório principal dos files estáticos (via Swift) e load balancer para challenges que sofreriam diversas conexões simultâneas. Segue uma imagem com o total de recursos utilizados na Nuvem UFSCar (OpenStack):
- Rede Backup: Contamos com endpoints de backup no IFSC-USP, gentilmente cedidos pelo Prof. Carlos Antônio “Totó” Ruggiero, para eventuais emergências. Agradecemos ao Aparecido Luciano Breviglieri Joioso, Marcelo Fernando Camargo Sirbone, Fábio Rogério da Silva e Fabiano Losilla de Carvalho por configurarem um enlace L2 pela Rede Metropolitana de São Carlos conectando esses endpoints à Nuvem UFSCar;
- Vultr: alugamos na Vultr a VPS do challenge “Blackbox Pentesting”.
Plataforma e Provisionamento
A plataforma utilizada foi criada “from scratch”, e é baseada em provas não-interativas de conhecimento zero. Mais informações podem ser encontradas no nosso artigo arXiv:1708.05844. Apesar de ser um pouco mais “complexa” para instalação e utilização, levando em conta as plataformas baseadas em web tradicionalmente utilizadas, que são totalmente user-friendly, a nossa proporciona segurança e auditoria que as outras não proporcionam.
O Provisionamento da VPN para os desafios isolados foi integrado com a plataforma, que monitorava a quantidade de desafios resolvidos pelas equipes, e quando atingisse o limiar de 8 desafios, subia os containers para o time e mandava as informações para configurar a VPN com o script “setup-vpn” através de news privadas e encriptadas. Mais detalhes podem ser encontrados no artigo que publicamos na Trilha de Ferramentas da SBSeg 2017, e que será apresentado em Brasília pelo Gabriel Alves no dia 7 de novembro.
Segue uma imagem da infraestrutura utilizada para os desafios isolados:
Bons challenges
Ter bastante tempo para trabalhar e lapidar bons challenges é essencial, por isso utilizamos os 10 meses disponíveis para essa missão. Obviamente, nem todos membros da equipe aproveitaram todo o tempo, mas quem conseguiu aproveitar, fez muitos challenges de altíssimo nível.
Ranking Geral
Primeiramente, gostaríamos de parabenizar o FireShell, time brasileiro melhor colocado, figurando no Top 11. Os poloneses do p4 e Dragon Sector, que venceram ano passado, não é nenhuma novidade estarem no topo, mas quem realmente surpreendeu, destruindo a competição jogando com apenas 3 players (WTF!), foi o ESPR. Estamos realmente impressionados com o desempenho esmagador desse Dream Team. Além disso, ao invés de ficarem com a premiação de R$ 1000,00, eles decidiram doá-la para o Hospital de Câncer de Barretos. Uma nobre atitude de um grande time!
Gráfico Top 10
A evolução do Top 10 pode ser vista abaixo:
Estatísticas
Número de times
- Times inscritos: 283
- Times pontuantes (ao menos uma submissão correta): 207
- Times provisionados na VPN (resolveram ao menos 8 desafios): 31
- Evolução ao longo do tempo:
Países participantes (com base nos times que disponibilizaram essa informação)
- Total de países: 43
- Países com mais times inscritos:
- US – 43
- BR – 30
- CN – 15
- KR – 14
- JP – 12
- Países com mais times pontuantes (ao menos uma submissão correta):
- US – 36
- BR – 21
- CN – 11
- KR – 9
- JP – 9
- Máximo de pontos por time/país
- DE – 7522
- PL – 5646
- GB – 3452
- SE – 3445
- CN – 2557
- Média de pontos por time/país
- PL – 1919
- DE – 1423
- GB – 1274
- SE – 1150
- SG – 1150
Submissões corretas (agregado de todos os times)
- Total de submissões corretas: 964
- Submissões corretas por hora:
- Taxa de submissões corretas:
- Máxima: 1 submissão a cada 2 segundos
- Média: 1 submissão a cada 3 minutos
- Mínima: 1 submissão a cada 64 minutos
- Histograma:
Total de challenges: 32 avulsos + 5 que compõem a Attack Step
Total de Solves e Autores:
- [Bonus] g00d b0y, criado por gnx, 143 solves
- [Attack Step] Intermediate, criado por gnx, 2 solves
- [Attack Step] Final, criado por gnx, 1 solve
- [Story] Great Cybernetic Revolution, criado por gnx, 193 solves
- [PPC] p0ng Adventure, criado por gnx e andre_smaira, 3 solves
- [Misc] Baby Regex, criado por gnx, 19 solves
- [Misc] Biometric Login, criado por thnc, 3 solves
- [Forensics] Rootkit, criado por gnx, 5 solves
- [Forensics / Networking] Botnet in the Wild, criado por gnx, 5 solves
- [Forensics] Executive Order, criado por thotypous, 5 solves
- [Exploitation] Tokens v2.0, criado por gnx, 22 solves
- [Exploitation] Warehouse, criado por pedroysb, 37 solves
- [Exploitation] Wrong User, criado por pedroysb, 8 solves
- [Exploitation] ButcherCorp Repository, criado por pedroysb, 5 solves
- [Exploitation] SEHLokoD+, criado por feroso, 11 solves
- [Exploitation] Hidden Program (Warmup), criado por andre_smaira, 145 solves
- [Exploitation] Pretty It All, criado por feroso, 5 solves
- [Crypto] Differential Privacy, criado por pedroysb, 64 solves
- [Crypto] Asymmetric Encryption, criado por pedroysb, 17 solves
- [Physics] People Throwing, criado por andre_smaira, sem solves
- [Physics] People Throwing 2, criado por andre_smaira, 1 solve
- [PPC-M] Resistance, criado por andre_smaira, 11 solves
- [PPC-M] Secure Path, criado por andre_smaira, 13 solves
- [PPC-M] Sum (Hello World Platform), criado por thotypous, 171 solves
- [Rev / Crypto] Intel SGX, criado por rodolfoams e pedroysb, 1 solve
- [Rev / Eletrônica] Shift Register, criado por thotypous, 1 solve
- [Rev / Eletrônica] Top Secret, criado por DarkShymia, 40 solves
- [Rev] Achievement Unlocked, criado por thnc, 18 solves
- [Rev] No BS, criado por thotypous, 1 solve
- [Web / Recon] Blackbox Pentesting, criado por herrera e gnx, 4 solves
- [Web] Criminals, criado por Manoel, 9 solves
- [Web] Netscape, criado por herrera, 1 solve
Agradecimentos
Nossa principal parceira, à qual devemos um agradecimento mais que especial, é a UFSCar, pois sem sua cloud OpenStack, não seria possível fazer a competição com tanta qualidade e estabilidade. A equipe de suporte do GitHub também está de parabéns, por sempre esclarecer dúvidas rapidamente, e ser muito responsável e profissional (de certa forma, eles foram cobaias dessa experiência intensa usando a nova plataforma).
Feedbacks
Quase 100% dos feedbacks estão sendo positivos. A plataforma é nosso “calcanhar de aquiles”, gerando sentimentos de amor e ódio, e quem não gostou, é exclusivamente por já estar acomodado com o “default“, com submissão gráfica e sem nenhum esforço para instalação. Infelizmente, esse é o preço a se pagar para ter algo seguro e confiável, nem tudo são flores!
A sugestão pra próxima edição mais interessante que recebemos foi do time 火车跑的快 , 全靠梅神带:
“online international qualifications then on-site final round in brazil ^^~“
Se você participou da competição e ainda não deu seu feedback, pode nos ajudar através desse link: https://goo.gl/mBz813.
Conclusão
Sem sombra de dúvidas fizemos uma das melhores e mais originais competições que já passaram pelo CTFTime. Infelizmente, com o rating atual, que não deve chegar a 30 na média da votação (já que existe uma limitação que impede novas competições de crescerem rapidamente sua pontuação), e sabendo que o evento vale muito mais que isso, não estamos 100% motivados para pensar em uma nova edição no momento. Mas isso só o tempo dirá!
Assim como na edição passada, desbloqueamos alguns Achievements em termos de originalidade e brutalidade, com challs como Shift Register (Eletrônica), Intel SGX (Rev/Crypto), Netscape (Web), No BS (Rev), Attack Step, Biometric Login (Adversarial Machine Learning) entre outros. 🙂
Avante #CTF-BR, rumo ao topo do mundo!!
4 respostas para “Pwn2Win CTF 2017 – Bastidores”
Parabéns pelo CTF. Alto nível de complexidade e diversão.
Ano que vem FireShell Security Team espera por outra sessão de lágrimas.
Não se pode tirar o mérito do evento pelos problemas que aconteceram devido a plataforma. E de fato a pontuação no CTFtime não condiz com a realidade. Vocês estão de parabéns pelo evento de alto nível. Espero que próximo ano possa ter novamente, certamente terei muito prazer em jogar.
[…] Curioso para conhecer os bastidores do Pwn2Win CTF 2017? Confira o post com as informações em https://ctf-br.org/2017/10/pwn2win-ctf-2017-bastidores/. […]
[…] https://ctf-br.org/2017/10/pwn2win-ctf-2017-bastidores/ a organização conseguiu ter uma plataforma completamente nova desenvolvida pelo time, exclusivamente para a competição – NIZKCTF, https://arxiv.org/abs/1708.05844 […]