
Uma forma de monitorar continuamente informações sensíveis que possam ser expostas no Github
Sei que existem muitas outras ferramentas disponíveis para encontrar informações sensíveis vazadas no Github, eu mesmo ainda uso algumas delas. No entanto, acredito que elas ainda carecem de algumas funcionalidades como:
Outras ferramentas são mais focadas em encontrar informações sensíveis que existem em um repositório que recebeu o endereço Git. Existem apenas algumas ferramentas semelhantes na época em que desenvolvi o GitMonitor, focadas em primeiro encontrar os repositórios com os quais você precisa se preocupar, encontrar todos os repositórios relevantes e depois verificar se informações sensíveis existem entre eles ou não.
Além de regras para verificar informações sensíveis, a ferramenta também precisa de regras para procurar repositórios de interesse. Os repositórios a serem considerados podem ser aqueles que contenham palavras-chave relacionadas à empresa ou ao projeto.
Se você é um caçador de recompensas (bug bounty), terá interesse em apenas alguns alvos por vez. No entanto, se você é um engenheiro de segurança de uma empresa, precisará saber quando um repositório relacionado à sua empresa ou projeto aparece e pode conter informações sensíveis. Esses repositórios podem aparecer em qualquer lugar no Github, com qualquer nome e postados por qualquer conta. Você também deve receber um alerta assim que tal repositório aparecer (monitoramento contínuo).
A ferramenta possui um mecanismo de relatório flexível.
Foi por isso que criei esta ferramenta - GitMonitor. O GitMonitor usa dois conjuntos diferentes de regras para encontrar o que você precisa. O conjunto de regras de busca irá procurar repositórios que podem estar relacionados à sua organização ou projetos internos, ou qualquer outra coisa, clonar os repositórios que correspondem para o ambiente local. Então, o conjunto de regras de filtragem sensível para verificar se existem informações sensíveis nesses repositórios. Finalmente, a ferramenta relatará via Slack. Você pode usar esta ferramenta com Cronjob para criar um sistema de monitoramento contínuo para rastrear informações sensíveis relacionadas à sua organização que vazaram no Github e receber os resultados via Slack.
Atualização 15 de junho de 2020: Atualizamos para a versão 1.0. Esta versão corrige alguns bugs para que o Gitmonitor funcione de forma estável. Recomendamos que você execute um git pull se estiver usando versões anteriores.
Usa dois conjuntos diferentes de regras, um conjunto de regras de busca (yaml) para procurar o repositório de interesse, e um conjunto de regras de filtro (regex) para verificar se esses contêineres de interesse contêm informações sensíveis. As Regras de Busca (yaml) e as Regras de Filtragem (regex) são definidas separadamente. Os usuários podem definir regras yaml e regex de forma fácil e intuitiva.
Conjunto de regras de busca: Você pode criar muitas regras diferentes usando diferentes arquivos yaml. As regras permitem definir de forma flexível como deseja procurar repositórios; você pode usar palavras-chave, ou palavras-chave associadas a linguagem, nome de arquivo e extensão, ou também pode definir para excluir repositórios da busca com base em linguagem, nome de arquivo ou extensão. As palavras-chave serão pesquisadas nos nomes dos repositórios, nos códigos dos repositórios e também nos commits.
Conjunto de regras de filtragem: Você pode adicionar ou modificar regex facilmente para encontrar informações sensíveis que possam existir em repositórios.
O primeiro repositório que corresponder ao conjunto de regras de busca será clonado para o ambiente local. Em seguida, o conjunto de regras de filtragem verificará se este repositório contém informações sensíveis. Após finalizar a verificação de informações sensíveis, o Gitmonitor registrará os resultados e excluirá automaticamente este repositório local para economizar espaço antes de continuar repetindo esse processo até que todos os repositórios relevantes tenham sido encontrados e verificados.

> python3 -m pip install -r requirements.txt
Por favor, certifique-se de ter o Pyyaml versão 5x ou superior instalado (pip3 install --ignore-installed PyYAML)
A tabela a seguir explica o significado de cada chave no arquivo de configuração:
> export GIT_USERNAME=seu nome de usuário do Github
> export GIT_PASSWORD=sua chave pessoal ou senha do Github
Ou definir informações de credenciais no arquivo de configuração (Não recomendado):
Exemplo de arquivo de configuração quando você define as informações de credenciais em variáveis de ambiente

Você pode criar vários arquivos yaml diferentes, como o modelo de regra, para definir múltiplas palavras-chave. Um arquivo de regra se parecerá com a imagem abaixo:

> python3 gitmonitor.py
Por exemplo:

Muitas áreas deste projeto podem ser melhoradas e alteradas significativamente enquanto refatoramos o código atual e implementamos novas funcionalidades. Feedback com melhorias e pull requests da comunidade serão altamente apreciados e aceitos.
Em geral, seguimos o fluxo de trabalho Git 'fork-and-pull'.
NOTA: Certifique-se de mesclar as últimas alterações do 'upstream' antes de fazer um pull request!
Relatório via Slack.
Esta ferramenta pode ser agendada por Cronjob para monitoramento contínuo.
| Chave | Descrição |
|---|
| user | Nome de usuário do Github - Deixe em branco se você configurou as credenciais do Github através de variáveis de ambiente |
| pass | Senha do Github - Deixe em branco se você configurou as credenciais do Github através de variáveis de ambiente |
| webhooks | Token do Webhook de entrada para postar mensagens do GitMonitor no Slack |
| rule | O diretório que contém o conjunto de regras de busca |
| source | O diretório para baixar o repositório |
| log | O diretório conterá o arquivo JSON que registra o status após cada varredura, esse arquivo JSON é usado para comparar resultados entre varreduras (para identificar novos repositórios) |
| start | Define banner para início da varredura e banner para resultado da varredura do Conjunto de Regras de Filtragem Sensível - Será mostrado nos resultados enviados ao Slack |
| end | Define banner para final da varredura e banner para resultado da varredura do Conjunto de Regras de Busca - Será mostrado nos resultados enviados ao Slack |
| all | Define banner para mostrar todos os repositórios - Será mostrado nos resultados enviados ao Slack |