Maneira fácil de ganhar dinheiro com o Bug Bounty

Figura 2


Certamente você já ouviu a expressão "caçar bagagens" mais de uma vez e tenho certeza de que não recusaria ganhar algumas centenas (ou mesmo milhares) de dólares se encontrasse uma vulnerabilidade potencial no programa de outra pessoa. Neste artigo, falarei sobre um truque que ajudará a pesquisar projetos de código aberto para essas vulnerabilidades.

Recompensas de bugs em software livre e de código aberto - o que é?


Bug Bounty é um nome genérico para vários programas nos quais desenvolvedores de sites e software oferecem recompensas em dinheiro por encontrar bugs e vulnerabilidades. Além dos conhecidos programas Bug Bounty de grandes empresas, como Apple ou Microsoft, também existem programas para procurar vulnerabilidades em projetos de código aberto.

Muitos deles podem ser encontrados no HackerOne, mas talvez o maior seja o FOSSA - Auditoria de Software Livre e de Código Aberto. Este é um programa de pesquisa de vulnerabilidades patrocinado pela União Europeia para vários projetos de código aberto. A premiação total é uma quantia impressionante - até 850.000 euros!

Como participar?


Primeiro você precisa se registrar no HackerOne . Precisamos exatamente daqueles projetos que são de código aberto. O HackerOne tem uma lista inteira .

Se houver um desejo de participar do Bug Bounty da União Europeia - uma lista dos projetos participantes deste programa pode ser encontrada aqui . Para a maioria dos projetos, basta registrar-se no HackerOne, mas muitos dos programas listados nessa lista estão no intigriti.com.

Para participar, você precisa escolher um projeto adequado para si e depois ler atentamente as condições de participação. Se eles satisfazem você, é hora de praticar.

Para encontrar a vulnerabilidade e obter o seu dinheiro, basta baixar o projeto (ou cloná-lo no GitHub) e analisar cuidadosamente cada linha de código, examinando cada expressão em busca de possíveis erros. Se você encontrar algo que possa afetar a segurança do programa - escreva-o em um relatório e envie-o aos desenvolvedores. Se eles avaliarem sua descoberta como vale a promoção - seu dinheiro estará no seu bolso :).

Espera, cadê a leveza?


E a facilidade é que não é necessário analisar o código exclusivamente manualmente. Existem ferramentas para procurar erros no código no modo automático. Por exemplo, analisadores de código estático. Eu prefiro usar nosso desenvolvimento - PVS-Studio . O analisador PVS-Studio é capaz de encontrar erros no código escrito em C ++, C # e Java e também possui uma interface conveniente. Além disso, existem várias opções para seu uso gratuito. Existem também muitos outros analisadores de código .

Obviamente, os analisadores estáticos podem detectar longe de todos os erros. Sim, e Deus os abençoe! Afinal, nosso objetivo é encontrar erros de maneira rápida e fácil, e não encontrá-los todos.

Após o download e a montagem do projeto, basta fazer alguns cliques para iniciar a análise. O resultado será um relatório com uma quantidade (geralmente considerável) de avisos gerados pelo analisador. No PVS-Studio, eles são classificados em três níveis de confiança. Você deve começar com os avisos de primeiro nível, para que os níveis de laranja e amarelo possam ser filtrados do resultado da análise.

Figura 1


Um exemplo de filtragem dos resultados da análise.

Portanto, resta apenas revisar os avisos restantes e selecionar deles os locais que podem constituir o maior perigo. É necessário verificar se é possível reproduzir algum deles diretamente durante a operação do programa. Se você conseguir fazer isso, não só aumentará as chances de os desenvolvedores aceitarem o relatório, mas também aumentará o valor do pagamento. Nesse assunto, a visibilidade é sua melhor amiga.

Também vale a pena considerar se o erro encontrado afeta a segurança do programa. De fato, nesse caso, o valor pago a você será várias vezes maior :)

A captura de tela mostra a interface do Visual Studio. No entanto, não se deixe enganar por isso. O analisador pode ser usado não apenas como um plug-in para o Visual Studio, mas também de forma independente, inclusive no Linux e no macOS .

Prós desta abordagem


Em primeiro lugar, o uso de um analisador estático é uma das maneiras mais fáceis de encontrar erros. Para usar analisadores de código, não é necessário nenhum conhecimento especial: você só precisa entender o idioma em que o código testado está escrito.

Em segundo lugar, os analisadores são cuidadosos. Eles não se cansam e não perdem a vigilância, ao contrário de uma pessoa. Portanto, usando-os, você pode analisar bases de código arbitrariamente grandes com custo quase mínimo.

Em terceiro lugar, os analisadores geralmente têm mais conhecimento que uma pessoa. O que isso significa? Deixe-me explicar minha idéia sobre o exemplo de código do kernel do Android:

static void FwdLockGlue_InitializeRoundKeys() { unsigned char keyEncryptionKey[KEY_SIZE]; .... memset(keyEncryptionKey, 0, KEY_SIZE); // Zero out key data. } 

Parece onde pode haver um erro?

Acontece que o compilador, vendo que a matriz keyEncryptionKey não é usada em nenhum outro lugar, pode otimizar o código e remover a chamada de função memset dele. E ele fará isso apenas durante a montagem na configuração da versão. Tudo ficaria bem, mas apenas a chave de criptografia permanecerá desbloqueada na RAM por algum tempo, para que possa ser obtida por um invasor. Uma verdadeira falha de segurança!

E, afinal, encontrar você mesmo esse erro é quase impossível: no modo de depuração, chamar memset funciona bem. E você não escreverá nenhum teste para isso ... Resta apenas saber sobre esse recurso e lembrar você mesmo.

Mas e se os desenvolvedores do projeto não souberem sobre esse recurso? E se você não souber sobre esse recurso ao procurar bugs? Isso não é importante para o analisador, pois ele possui o diagnóstico V597 ; portanto, ao visualizar um relatório, você definitivamente o saberá.

Finalmente, em quarto lugar. Um dos benefícios mais úteis do uso de análise estática ao perseguir um Bug Bounty é a velocidade. Sim, com ele você pode conferir dois, três, quatro projetos à noite - mas isso não é tudo.

Mais importante, você pode ser o primeiro. Embora seja oferecida uma recompensa por encontrar bugs em qualquer projeto, o projeto continua sendo finalizado e desenvolvido. Os desenvolvedores lançam novos lançamentos e novos recursos, e com eles vêm novos códigos e novos espaços abertos para erros. Usando a abordagem descrita por mim, será possível examinar com precisão novos erros e possíveis vulnerabilidades no primeiro dia de sua publicação.

Figura 4


Potenciais vulnerabilidades


O leitor atento pode ficar intrigado:

Pare, pare! Por um lado, refere-se a uma busca no código por erros nos programas; por outro lado, são mencionadas vulnerabilidades em potencial. Além disso, as vulnerabilidades são mais interessantes do ponto de vista do Bug Bounty. Por favor, esclareça!

O fato é que erros e possíveis vulnerabilidades são essencialmente a mesma coisa. Obviamente, apenas alguns erros / vulnerabilidades em potencial em pesquisas futuras podem se tornar vulnerabilidades reais. No entanto, um erro inofensivo e uma vulnerabilidade séria podem parecer exatamente iguais no código. O artigo “ Como o PVS-Studio pode ajudar a encontrar vulnerabilidades? ” Apresenta vários desses erros (à primeira vista comuns), que agora são conhecidos por serem vulnerabilidades.

A propósito, de acordo com o relatório do Instituto Nacional de Padrões e Tecnologia (NIST), cerca de 64% das vulnerabilidades nos aplicativos estão associadas a erros de software e não a deficiências de segurança (não falta de recursos de segurança).

Então pegue o PVS-Studio com confiança e comece a procurar por erros e defeitos de segurança! A propósito, a classificação dos avisos de acordo com a CWE o ajudará com isso.

Conclusão


Espero ter ajudado o leitor a encontrar o bug que lhe traria um pouco de reconhecimento e recompensa monetária. Estou certo de que a análise estática os ajudará com isso! Lembre-se de que os desenvolvedores, como regra, não têm tempo para uma análise detalhada dos erros encontrados; portanto, você ainda precisa provar que sua descoberta pode realmente afetar o programa. A melhor maneira seria visualizá-lo. E lembre-se: quanto mais forte o bug no código puder violar a segurança, mais eles pagarão por ele.

Provavelmente é tudo. Boa sorte para encontrar sua recompensa!



Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: George Gribkov. Uma maneira fácil de ganhar dinheiro com o Bug Bounty .

Source: https://habr.com/ru/post/pt464555/


All Articles