
Encontrando segredos expostos e dados pessoais no GitLab
GitLab Watchman é uma aplicação que usa a API do GitLab para detectar segredos expostos e dados pessoais. Também enumera a instância do GitLab para qualquer informação útil.
Pesquisa no GitLab por projetos compartilhados internamente e analisa:
Para os seguintes dados:
Você pode executar o GitLab Watchman para procurar resultados que remontam até:
Isso significa que, após uma varredura profunda, você pode agendar o GitLab Watchman para executar regularmente e retornar apenas resultados do seu período de tempo escolhido.
GitLab Watchman pode enumerar informações potencialmente úteis de uma instância do GitLab:
GitLab Watchman usa assinaturas YAML personalizadas para detectar correspondências no GitLab. Essas assinaturas são extraídas do repositório central Watchman Signatures. O Slack Watchman atualiza automaticamente sua base de assinaturas em tempo de execução para garantir que está usando as assinaturas mais recentes para detectar segredos.
Você pode definir assinaturas que deseja desabilitar ao executar o GitLab Watchman adicionando seus IDs à seção 'disabled_signatures' do arquivo 'watchman.conf'. Por exemplo:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Você pode encontrar o ID de uma assinatura nos arquivos YAML individuais no repositório Watchman Signatures.
GitLab Watchman oferece as seguintes opções de registro de logs:
GitLab Watchman usa por padrão o registro de logs stdout amigável para terminal se nenhuma opção for especificada. Isso foi projetado para ser mais fácil para humanos lerem.
O registro de logs em JSON também está disponível, o que é perfeito para ingestão em um SIEM ou outras plataformas de análise de logs.
O registro de logs formatado em JSON pode ser facilmente redirecionado para um arquivo como abaixo:
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman usa a API v4 e funciona com versões do GitLab Enterprise Edition:
Para pesquisar nos escopos:
A instância do GitLab deve ter Elasticsearch configurado e estar executando a Enterprise Edition com uma licença mínima GitLab Starter ou Bronze.
Para executar o GitLab Watchman, você precisará de um token de acesso pessoal do GitLab.
Você pode criar um token de acesso pessoal na interface do GitLab através de Configurações -> Tokens de Acesso -> Adicionar um token de acesso pessoal
O token precisa de permissão para os seguintes escopos:
api
Nota: Os tokens de acesso pessoal agem em nome do usuário que os cria, então sugiro que você crie um token usando uma conta de serviço, caso contrário o aplicativo terá acesso aos seus repositórios privados.
Você também precisa fornecer a URL da sua instância do GitLab.
GitLab Watchman obterá o token e URL do GitLab das variáveis de ambiente GITLAB_WATCHMAN_TOKEN e GITLAB_WATCHMAN_URL.
Opções de configuração podem ser passadas em um arquivo chamado watchman.conf que deve ser armazenado no seu diretório home. O arquivo deve seguir o formato YAML e deve ser como abaixo:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman procurará por este arquivo em tempo de execução e usará as opções de configuração dele.
Você pode instalar a versão estável mais recente via pip:
python3 -m pip install gitlab-watchman
Ou compile você mesmo a partir do código-fonte. Baixe os arquivos de origem da versão e, a partir do diretório raiz do repositório, execute:
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman também está disponível no Docker hub como uma imagem Docker:
docker pull papermountain/gitlab-watchman:latest
Você pode então executar o GitLab Watchman em um contêiner, certificando-se de passar as variáveis de ambiente necessárias:
// help
docker run --rm papermountain/gitlab-watchman -h
// scan all
docker run --rm -e GITLAB_WATCHMAN_TOKEN=abc123 -e GITLAB_WATCHMAN_URL=https://example.gitlab.com papermountain/gitlab-watchman --timeframe a --all
docker run --rm --env-file .env papermountain/gitlab-watchman --timeframe a --all
GitLab Watchman será instalado como um comando global, use da seguinte forma:
usage: gitlab-watchman [-h] --timeframe {d,w,m,a} [--output {json,stdout}] [--version] [--all] [--blobs] [--commits] [--wiki-blobs] [--issues]
[--merge-requests] [--milestones] [--notes] [--snippets] [--enumerate] [--debug] [--verbose]
Finding exposed secrets and personal data in GitLab
options:
-h, --help show this help message and exit
--output {json,stdout}, -o {json,stdout}
Where to send results
--version, -v show program's version number and exit
--all, -a Find everything
--blobs, -b Search code blobs
--commits, -c Search commits
--wiki-blobs, -w Search wiki blobs
--issues, -i Search issues
--merge-requests, -mr
Search merge requests
--milestones, -m Search milestones
--notes, -n Search notes
--snippets, -s Search snippets
--enumerate, -e Enumerate this GitLab instance for users, groups, projects.Output will be saved to CSV files
--debug, -d Turn on debug level logging
--verbose, -V Turn on more verbose output for JSON logging. This includes more fields, but is larger
required arguments:
--timeframe {d,w,m,a}
How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time
Você pode se interessar pelos outros aplicativos da família Watchman:
O código-fonte deste projeto é lançado sob a GNU General Public Licence. Este projeto não está associado ao GitLab.