
Muito já foi dito sobre o Bug Bounty, e a necessidade de tais programas para as empresas parece óbvia. Durante a existência de nosso próprio programa, o Mail.ru Mail pagou mais de US $ 250.000, o pagamento médio é de US $ 379, já
escrevemos um pouco mais sobre isso. Hoje, usando o exemplo da recente conferência de segurança da informação do ZeroNights, falaremos sobre como você pode atrair hackers para participar da busca de bugs e vulnerabilidades por meio de eventos especializados.
Este ano, a conferência ZeroNights foi realizada no A2 Green Concert Club, em São Petersburgo. Apesar de se mudar de Moscou, a conferência reuniu mais de 1000 participantes em 2 dias. Durante a conferência, foram ouvidos relatos de muitos especialistas legais. Se você precisa de hardcore, confira a exploração NUClear, do Modo Gráfico ao Modo Deus, Vulnerabilidades de Descoberta da Virtualização de GPU, Pesquisando Marvell Avastar Wi-Fi: do conhecimento zero ao RCE sem fio no ar. Este ano também houve muitos relatórios interessantes sobre a Web, você pode ver slides e WebVillage e não apenas. Pessoalmente, o relatório de Ilya Nesterov e Sergey Shekyan foi importante para mim. Distinguir um bot de um usuário real está ficando cada vez mais difícil. Leia mais sobre os relatórios
aqui .
Nossas tarefas
Estabelecemos as seguintes tarefas:
- Promoção da marca e programa Bug Bounty na comunidade.
- Recrutamento de especialistas inteligentes que lidam com êxito com a tarefa.
Idéia
O desafio mais difícil em tais projetos: desenvolver tarefas interessantes que, em primeiro lugar, atrairão participantes e, em segundo lugar, permitirão testar suas habilidades reais.
Este ano, nosso estande foi um prédio de escritórios equipado com correio pneumático. A essência da tarefa: o chefe do correio aéreo envia cartas ao contador, e a tarefa do hacker é mudar o caminho e interceptar a carta usando amortecedores especiais.
O estande ficou assim:

Em vez do próprio correio, usamos bolas de tênis, que desciam de cima para baixo nas unidades necessárias, por padrão em "contabilidade". Era necessário ativar os portões, que eram controlados usando o Arduino + RPi3, e redirecionar o "correio" para outras unidades.
Esquema de ação:
- Estamos conectados à rede Wi-Fi do trabalho.
- Encontramos na rede Raspberry Pi, que está conectada ao Arduino, que controla os amortecedores.
- O RPi está girando um servidor da web. Duas tarefas precisam ser concluídas - explorar as vulnerabilidades e, no final, eles deram botões para ativar os amortecedores, o que permitiu o redirecionamento de "emails"

A bola simboliza a letra pneumática:

Ideias para tarefas que extraímos dos relatórios de nossos pesquisadores.
Missões
Na primeira tarefa, os participantes tiveram que encontrar o host RPi3 e encontrar uma vulnerabilidade de configuração típica para o servidor da web Apache: a página / server-status, que exibe todas as solicitações HTTP recebidas. Entre outras, uma solicitação com um valor secreto nos parâmetros GET chegou a esta página, o que permitiu passar o primeiro nível. Para esta tarefa, os visitantes receberam um código promocional de US $ 100,00 para participar do programa Bug Bounty.
SoluçãoUma vulnerabilidade de configuração do Apache é procurada por ferramentas comuns, como dirbuster, a linha de status do servidor está em todos os dicionários atuais. Além disso, deixamos algumas dicas para que a tarefa possa ser resolvida sem scripts e programas, mesmo a partir de um telefone comum.
Para concluir a segunda tarefa, foi necessário estudar cuidadosamente o conteúdo da página de monitoramento já conhecida. No código do aplicativo cliente, era necessário encontrar um método oculto que não fosse chamado a partir da interface, mas continha uma vulnerabilidade - uma injeção NoSQL "cega" no Mongodb.
SoluçãoPara automatizar a injeção cega, duas tarefas precisam ser abordadas:
Escreva um script que possa receber 1 bit de informação em uma solicitação. Na saída, você deve poder inserir a expressão lógica de interesse na solicitação e, de acordo com a resposta do servidor, entender se é verdadeiro ou falso.
Para descobrir como obter informações de interesse do banco de dados pouco a pouco (por exemplo, se você deseja saber o valor do campo secret = 'some_secret', pode usar expressões regulares. Primeiro, descobrimos o primeiro caractere secret ~ '^ a', secret ~ '^ b' ... secret ~ '^ s' ... Depois disso, o segundo segredo ~ '^ sa', segredo ~ '^ sb' ... Da mesma forma, obtemos todo o token secreto).
Esta não é a única e nem a implementação mais eficiente; você pode ver melhores opções no código sqlmap.
A principal dificuldade era uma pilha de tecnologia atípica: o MeteorJS, que usa ativamente Websockets, bem como MongoDB e Pubsub, em vez das solicitações e respostas HTTP usuais, não permitia o uso das ferramentas existentes e exigia que os participantes pudessem automatizar os ataques. Muitos participantes procuraram vulnerabilidades na funcionalidade da plataforma MeteorJS, confundindo-a com um código de tarefa. Além disso, para alguns participantes, houve dificuldades em automatizar solicitações por meio de Websockets.

Os participantes receberam um moletom do Mail.ru Bug Hunter como prêmio por este concurso.
Resultados
Em apenas dois dias da conferência, mais de 200 pessoas participaram de nossa competição. 100 participantes concluíram a primeira tarefa, 45 pessoas concluíram a segunda tarefa.
Obviamente, depois de concluir a tarefa com sucesso, entrevistamos imediatamente. As cartas geradas por US $ 100 têm um efeito atrasado, mas várias delas já foram ativadas e tivemos bons bugs no H1. Eles incentivam os hackers a procurarem novos bugs, nos ajudam a melhorar nossos sistemas e a segurança. Um cartão pequeno - ótimos resultados. E cem dólares é cem dólares.
