Pwn2Win CTF 2018 – Bastidores

Pelo terceiro ano consecutivo conseguimos fazer uma competição internacional temática insana, extremamente inovadora e com muitos challenges complexos. Diferente dos anos anteriores, onde a organização como um todo, desde a primeira reunião, levou cerca de 10 meses, esse ano fizemos tudo em 8, começando as atividades em março. Para a criação dos challenges, usamos especificamente os meses de outubro e novembro.

O lado negativo desse evento foi conflitar com as Finals do Real World CTF, a competição que mais premiou na história (200k USD). Esse fato acabou tirando 20 Top Teams do páreo, e o Pwn2Win 2018 terminou com um recorde de 7 desafios sem solves.

Novamente utilizamos nossa plataforma NIZKCTF, o provisionamento de instâncias exclusivas por meio de containers LXC, e uma rede VPN para os times que se qualificassem resolvendo 6 desafios previamente. Diminuímos esse “trigger” para a VPN, em relação ao ano passado, pois os challenges estavam mais complexos.

APOIO INSTITUCIONAL

Como nos anos anteriores, utilizamos a Cloud da UFSCar para a competição, e só assim conseguimos o provisionamento necessário para escalar as máquinas e suprir a demanda de recursos.

EQUIPE

Como de praxe, além dos membros do ELT, sempre são convidados alguns amigos do time para compor a equipe de criação dos desafios. A ideia principal é sempre trazer inovação e originalidade. Mais uma vez, realizamos essa tarefa com maestria! Abaixo, os responsáveis e suas funções:

Álisson “gnx” Bertochi (ELT) – gerenciamento geral da equipe, divulgação, criação da estória e dos challenges que fizeram parte da Attack Step;

André “andre_smaira” Smaira (ELT) – criação de challenges de PPC, PPC-M e Reversing;

Caio Lüders (ELT) – criação de challenges Misc e Net/For;

Diego Aranha (ELT) – criação de challenge de Criptografia;

É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 challenge de Exploitation;

Gabriel “spooks” Alves (ELT) – tradução e revisão das descrições e Plataforma;

José “cabeça” Teixeira Silva Junior (convidado) – criação dos challenges de Reversing e PPC usando a arquitetura da Manchester Dataflow Machine;

Luan “herrera” Herrera (ELT) – criação de challenges Web;

Lucas “whoisroot” Magalhães (convidado) – Provisionador do Game e Plataforma;

Marcio “pimps‘ Almeida (convidado) – criação de challenges Web e Forensics;

Manoel Netto (ELT) – criação de challenge Web;

Paulo “dr4kks” Klaus (convidado) – criação de challenge PPC;

Paulo “thotypous” Matias (ELT) – criação de challenges de Reversing e Crypto. Gerenciamento da Infraestrutura e Plataforma PPC-M;

Pedro “pedroysb” Barbosa (ELT) – criação de challenges de Crypto e Exploitation;

Thiago “thnc” Cardoso (ELT) – criação de challenges de Exploitation;

Vinicius “pdpano” Aurichio (ELT) – criação do challenge quântico de Criptografia/Reversing;

PRINCIPAIS DESAFIOS

Gerenciamento da Equipe

Como nos anos anteriores, talvez esse seja o maior desafio de todos. Gerenciar uma equipe de 17 pessoas não é nada fácil. Para comunicação em realtime, utilizamos um grupo no Whatsapp e o IRC.  O Trello foi usado para checklists e centralização das informações mais relevantes que todos deveriam ter acesso. Um repositório SFTP para as armazenar as informações e files dos desafios prontos, e o Google Docs com uma planilha de gerenciamento e acompanhamento do status e progresso de cada chall em particular. O Google Meet foi usado para reuniões com áudio/vídeo.

Infraestrutura

Praticamente as mesmas tecnologias do ano passado foram utilizadas nessa edição. Esse é o ponto mais crítico de qualquer Capture the Flag, ainda mais em um como o nosso, com VPN e máquinas provisionadas exclusivas para cada time.

Abaixo, um resumo das tecnologias e serviços utilizados no evento:

  • AWS Lambda: utilizado para CI (Continuous Integration) da plataforma;
  • Azure: o challenge Windows (algo não tão convencional em CTFs) do feroso utilizou novamente uma instância 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 6 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) e repositório principal dos files estáticos (via Swift). Segue uma imagem com o total de recursos utilizados na Nuvem UFSCar (OpenStack) ao final do evento. Alguns desafios eram bastante pesados, como o TPM 2.0 (que usava virtualização nested) e o Message Board (que usava um servidor de aplicação em Java), então nas horas finais do evento redimensionamos algumas das instâncias para 128GB de RAM e 40 vCPUs, para evitar lentidão.

  • Namesilo: sempre utilizamos a namesilo para os domínios que figuram no evento;

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, que foi aceito para publicação na IEEE Security & Privacy em uma edição especial sobre segurança no Brasil que deve ser impressa em breve. 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 6 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.

Segue uma imagem da infraestrutura utilizada para os desafios isolados:

Bons Challenges

Apesar de termos começado a organização do evento em março, fizemos todos os desafios em apenas 2 meses (outubro e novembro). O objetivo foi alcançado com maestria e trouxemos muita inovação e challenges brutais.

RANKING GERAL

Tivemos a grata surpresa de pela primeira vez em edições internacionais do evento, vermos um time do #CTF-BR figurar no Top 3. Parabéns Fireshell Security Team!

GRÁFICO TOP 10

A evolução do Top 10 pode ser vista abaixo:

ESTATÍSTICAS

Número de times

  • Times inscritos: 206
  • Times pontuantes (ao menos uma submissão correta): 163
  • Times provisionados na VPN (resolveram ao menos 6 desafios): 22
  • Evolução ao longo do tempo:

Países participantes (com base nos times que disponibilizaram essa informação)

  • Total de países (registrados): 44
  • Total de países (ao menos um solve): 37
  • Países com mais times inscritos:
    1. us – 25
    2. br – 25
    3. ru – 10
    4. in – 10
    5. pl – 7
  • Países com mais times pontuantes:
    1. us – 20
    2. br – 18
    3. ru – 8
    4. pl – 7
    5. jp – 7
  • Máximo de pontos por time/país:
    1. tw – 4462
    2. ca – 3840
    3. br – 2711
    4. pl – 2286
    5. ro – 2222
  • Média de pontos por time/país:
    1. tw – 2496
    2. ua – 1201
    3. gb – 1168
    4. at – 1126
    5. tn – 913

Submissões corretas (agregado de todos os times)

  • Total de submissões corretas: 545
  • Submissões corretas por hora:

  • Taxa de submissões corretas:
    • Max: 1 a cada 2 segundos
    • Média: 1 a cada 5 minutos
    • Min: 1 a cada 110 minutos
    • Histograma:

Total de challenges: 25 avulsos + 5 que compõe a Attack Step

Total de Solves e Autores:

  1. [Story] A Segregated New World (Read First) – 162 solves, por gnx
  2. [Bonus] g00d b0y – 115 solves, por gnx
  3. [Muitas] Attack Step (First Flag) – 1 solve, por gnx
  4. [Muitas] Attack Step (Second Flag) – sem solves, por gnx
  5. [Web] BavBin – sem solves, por herrera
  6. [Web] Berg’s Club – 8 solves, por Manoel
  7. [Web] Message Board (First Flag) – 7 solves, por pimps
  8. [Web] Message Board (Second Flag) – 2 solves, por pimps
  9. [Web] Message Board (Third Flag) – 2 solves, por pimps
  10. [Web] Trick or Treat – sem solves, por herrera
  11. [Pwn] EMETaCrazy – 5 solves, por feroso
  12. [Pwn] Minishell, 22 solves, por pedroysb
  13. [Pwn] Super Storage – 5 solves, por pedroysb
  14. [Pwn/Crypto] TPM 2.0 – 1 solve, por pedroysb
  15. [Crypto] Recovery of the Master Key, sem solves, por dfaranha
  16. [Crypto] GCM – 8 solves, por pedroysb
  17. [Rev] Inherit the Stars – sem solves, por thotypous
  18. [Rev] MDFM Flag Verifier – 2 solves, por cabeça
  19. [Rev] Too Slow – 7 solves, por andre_smaira e thotypous
  20. [Rev/Crypto] Back to Bletchley Park – 1 solve, por pdpano e thotypous
  21. [Forensics] Message Board (Fourth Flag) – 1 solve, por pimps
  22. [PPC] Noizy Maze, sem solves, por andre_smaira
  23. [PPC] Super Gravitron Leet Edition (SGLE) – sem solves, por dr4kks
  24. [PPC-M] Russian Polygons, 18 solves, por andre_smaira
  25. [PPC-M] Sum (Hello World Platform) – 127 solves, por thotypous
  26. [PPC-M] The Bavarian Hierarchy, 33 solves, por andre_smaira
  27. [Misc] Ultramegapolyglot – 18 solves, por g3ol4d0

TASKS SEM SOLVES VALENDO PREMIAÇÃO

Decidimos fazer uma chamada pública, pós-evento, oferecendo até 2 moneros (XMR) e a possibilidade de entrar no nosso Hall da Fama pra quem conseguir resolver alguns dos desafios sem solves do evento.

A Parte 1, postada no Reddit, conta 2 desafios: [Rev] Inherit the Stars e [Crypto] Recovery of the Master Key.

Em breve lançaremos a parte 2, com os challenges do herrera.

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. Usamos muitos recursos pois tivemos que escalar várias máquinas de challenges isolados, como a TPM 2.0 que usava QEMU nos containers LXC, e a Message Board, que usava Java.

FEEDBACKS

Os feedbacks estão sendo muito positivos até o momento, tanto no nosso formulário, quanto no CTFTime.

Ainda não conseguimos cumprir o pedido do ano passado, de fazer uma classificatória online com finais presenciais no Brasil, pois é extremamente difícil conseguirmos patrocínio por aqui (mas realmente tentamos esse ano!). Se você conhece alguma empresa grande que possa se interessar em embarcar nessa ideia conosco, contate-nos (elt at ctf-br dot org).

CONCLUSÃO

Com certeza entramos pra história como um dos melhores CTFs que o mundo já viu. A originalidade pode ser vista em challenges como o Quântico, o TPM 2.0, challenges de web client-side do herrera, que terminaram sem solve, challenges usando MDFM (arquitetura nunca explorada anteriormente em desafios), Inherit the Stars (provavelmente o desafio de MIPS mais difícil lançado até hoje), Attack Step, challenges Web “Real World” do pimps, SGLE (PPC extremamente inovador), um Windows Pwnable realmente complexo (primeiro a ter que bypassar EMET), entre outros.

Como “cereja do bolo”, também mostramos a força do cenário com um time brasileiro ficando no famigerado Top 3!

Avante #CTF-BR, rumo ao topo do mundo!!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *