
Uma ferramenta para capturar todos os segredos do git utilizando múltiplas ferramentas de busca git de código aberto.
git-all-secrets é uma ferramenta que pode:
A varredura é feita por várias ferramentas de código aberto, tais como:
NOTA - Mais ferramentas podem ser adicionadas no futuro, se desejado!
NOTA - A varredura pode ser feita por todas as ferramentas ou por qualquer uma delas, especificando a flag toolName.
Se todas as ferramentas forem usadas para escanear, a saída final da ferramenta combina a saída de todos os arquivos de todas as ferramentas em um único arquivo de saída consolidado.
A maneira mais fácil de executar git-all-secrets é via Docker e eu recomendo fortemente instalar o Docker se você ainda não o tiver. Depois de ter o Docker instalado,
docker run --rm -it abhartiya/tools_gitallsecrets --help para entender as diferentes flags que ele pode receber como entrada.docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<>. Você também pode especificar uma ferramenta específica para usar na varredura digitando algo como docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<>. As opções são thog e repo-supervisor.thogEntropy assim - docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy.docker ps -a.docker cp <container-id>:/root/results.txt .-token = Token de acesso pessoal do Github. Precisamos disso porque requisições não autenticadas à API do Github podem atingir o limite de taxa rapidamente!
-org = Nome da Organização a ser escaneada. Isso escaneará todos os repositórios públicos na org + todos os repositórios e gists de todos os usuários da org. Se você estiver usando um token de um usuário que faz parte desta org, ele também clonará e escaneará todos os gists secretos pertencentes a esse usuário, bem como todos os repositórios privados nessa org aos quais o usuário tem acesso. No entanto, NÃO clonará nem escaneará nenhum repositório privado deste usuário pertencente a esta org. Para escanear repositórios privados de usuários, use a flag scanPrivateReposOnly com a flag user juntamente com a chave SSH montada em um volume.
-user = Nome do Usuário a ser escaneado. Isso escaneará todos os repositórios e gists deste usuário. Se o token fornecido for o token do usuário, os gists secretos também serão clonados e escaneados. Mas apenas repositórios públicos serão clonados e escaneados. Para escanear repositórios privados deste usuário, use a flag scanPrivateReposOnly com a flag user juntamente com a chave SSH montada em um volume.
-repoURL = URL HTTPS do Repositório a ser escaneado. Isso escaneará apenas este repositório. Para repositórios públicos, mencionar a URL https do repositório será suficiente. No entanto, se você deseja escanear um repositório privado, então você precisa fornecer a URL ssh juntamente com a chave SSH montada em um volume e a flag scanPrivateReposOnly.
-gistURL = URL HTTPS do Gist a ser escaneado. Isso escaneará apenas este gist. Não existe conceito de gist público ou secreto desde que você tenha a URL. Mesmo se você tiver um gist secreto, se alguém souber a URL HTTPS do seu gist secreto, também poderá acessá-lo.
A flag token é obrigatória. Não pode estar vazia.
As flags org, user, repoURL e gistURL não podem estar todas vazias ao mesmo tempo. Você precisa fornecer apenas um desses valores. Se você fornecer todos eles ou múltiplos valores juntos, a ordem de precedência será org > user > repoURL > gistURL. Por exemplo, se você fornecer ambas as flags -org=secretorg123 e -user=secretuser1 juntas, a ferramenta reclamará que não precisa de nada junto com o valor org. Para executá-la apenas contra um usuário específico, basta fornecer a flag user e não a flag org.
A maneira mais segura de escanear repositórios privados é clonar usando URLs SSH. Para conseguir isso, é necessário colocar uma chave SSH apropriada que foi adicionada a um usuário do Github. O Github possui documentação útil para configurar sua conta. Certifique-se de que esta chave não tenha nenhuma frase secreta definida. Depois de ter a chave SSH, basta montá-la no contêiner Docker através de um volume. É tão simples quanto digitar os comandos abaixo:
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
OR
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
Aqui, estou mapeando minha chave SSH pessoal id_rsa_personal armazenada localmente para /root/.ssh/id_rsa dentro do contêiner para que o git-all-secrets tente clonar o repositório via ssh e use a chave SSH armazenada em /root/.ssh/id_rsa dentro do contêiner. Dessa forma, você não está realmente armazenando nada sensível dentro do contêiner. Você está apenas usando um arquivo da sua máquina local. Depois que o contêiner é destruído, ele não tem mais acesso a esta chave.
A API do Github limita as circunstâncias em que um repositório privado é relatado. Se alguém está tentando escanear uma Organização com um usuário que não é administrador, pode ser necessário fornecer a equipe que fornece acesso ao repositório para o usuário. Para fazer isso, use a flag teamName junto com a flag org. Exemplo abaixo:
docker run --it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
O git-all-secrets agora também suporta escaneamento do Github Enterprise. Se você tem seu próprio Github Enterprise hospedado atrás de uma VPN ou algo assim, certifique-se de estar conectado à VPN ou na rede correta que tem acesso aos repositórios do Github Enterprise. A enterpriseURL é o que você precisa para escanear seus repositórios do Github Enterprise. Abaixo estão alguns exemplos:
Exemplo 1:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git
Aqui, estou montando minha chave SSH do github enterprise no contêiner, seguida pelo meu token de acesso pessoal, a URL corporativa para a qual as requisições serão enviadas e o repositório que desejo escanear.
Exemplo 2:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git -toolName thog -thogEntropy
Acima, estou executando apenas o truffleHog contra o repositório com as configurações de Entropia.
Exemplo 3:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -user <username> -scanPrivateReposOnly
Acima, estou escaneando apenas os repositórios privados do usuário cujo token é fornecido, com todas as ferramentas (repo-supevisor e thog), mas sem a configuração de entropia do truffleHog.
rules.json e incluí-lo ao executar docker run usando o argumento -v $(pwd)/rules.json:/root/truffleHog/rules.json.git-all-secrets com bastante facilidade.Analisei um grande número de ferramentas de código aberto que poderiam ser potencialmente usadas para procurar segredos em repositórios do github. Algumas das principais ferramentas que considerei boas são: gitrob, truffleHog e git-secrets.
O Gitrob é uma ferramenta autônoma que é bastante difícil de integrar com outras ferramentas porque tem seu próprio banco de dados e interface para ver todos os segredos descobertos. Também produz muitos falsos positivos, mais do que o truffleHog. E não destaca realmente os segredos descobertos. Ele apenas olha para os arquivos e suas extensões, não para o conteúdo real. Portanto, embora o Gitrob seja uma ótima ferramenta para começar, recomendo executá-lo de vez em quando para entender como está a superfície de ataque e ver se mudou.
Depois, há o truffleHog que procura por segredos nos conteúdos reais do arquivo examinando a entropia de Shannon e imprime a saída na tela. Ele recebe uma URL de repositório ou um diretório de repositório como argumento. Esta é uma ferramenta muito boa, embora tenha sua parcela de falsos positivos. Algumas outras desvantagens são:
Finalmente, existe o git-secrets que pode sinalizar coisas como segredos da AWS. A melhor parte é que você também pode adicionar suas próprias expressões regulares para segredos que você sabe que ele deve procurar. Uma grande desvantagem é que ele não faz um bom trabalho em encontrar strings de alta entropia como o truffleHog faz. Você também só pode escanear um diretório específico que seja um repositório, então também não há varredura recursiva a partir de um diretório de repositórios.
Então, como você pode ver, existem ferramentas decentes por aí, mas elas precisavam ser combinadas de alguma forma. Também havia a necessidade de escanear recursivamente vários repositórios e não apenas um. E quanto aos gists? Existem organizações e usuários. Depois, existem repositórios para organizações e usuários. Também existem gists de usuários. Todos estes devem ser escaneados. E escaneados de forma que pudessem ser automatizados e facilmente consumidos por outras ferramentas/frameworks.
2/9/19 - Adicionada a flag blacklist para pular alguns nomes de repositórios durante a varredura. Obrigado @sjqnn pelo PR. Construída e enviada uma nova imagem Docker. GLHF!
7/31/18 - Simplificada a instalação do trufflehog usando pip. O @mhmdiaa corrigiu um bug na função de saída do trufflehog onde não estava mesclando e ordenando corretamente. Atualizado o arquivo regex para incluir coisas como password. Construída e enviada uma nova imagem Docker. GLHF!
7/15/18 - Atualizado o fork do repo-supervisor porque o upstream teve algumas alterações. Reconstruída uma nova imagem Docker usando o Trufflehog mais recente. Fornecido o arquivo rules.json que contém todas as regexes que o Trufflehog usa para encontrar segredos. Adicionada a capacidade de também mesclar saídas (em json) para ambas as ferramentas usando a flag -mergeOutput. Reduzido drasticamente o tamanho da imagem Docker usando builds multi-estágio e dep para gerenciar dependências. Um grande agradecimento ao @mhmdiaa por tudo isso!
12/12/17 - Para alguns repositórios grandes, o truffleHog falha e sai. Mas não queremos parar por aí. Queremos notificar o usuário que a varredura falhou para aquele repositório e continuar escaneando os outros repositórios. Isso agora está implementado na imagem Docker mais recente.
12/11/17 - Removido o gitsecrets porque o truffleHog agora suporta funcionalidade de regex. Simplesmente adicionar suas regex no arquivo rules.json e reconstruir a imagem Docker basicamente nos dará a funcionalidade que o gitsecrets fornecia anteriormente, então não há mais necessidade do gitsecrets. Também adicionei suporte para escanear repositórios e gists do Github Enterprise. O @high-stakes ajudou a obter um PR que (esperançosamente) corrige o bug do Goroutine limitando a quantidade de threads. Finalmente, também foi adicionado suporte para escanear repositórios privados de uma organização.
12/08/17 - Removido meu próprio fork do truffleHog. Usando a versão upstream agora junto com a funcionalidade de regex do truffleHog + modo de entropia. Em breve, acredito que podemos substituir tanto o gitsecrets quanto o repo supervisor apenas pelo truffleHog assim que alguns problemas forem corrigidos.
Se você quiser mostrar um pouco de amor, meu endereço de carteira BTC é 1PtMhXWCcMZCitcDfaEBe7jnV9sjKoNvq7.
-output = Este é o nome do arquivo onde todos os resultados serão armazenados. Por padrão, é results.txt.
-cloneForks = Esta é a flag booleana opcional para clonar forks de repositórios de org e usuário. Por padrão, é definido como 0, ou seja, nenhum fork é clonado. Se os forks devem ser clonados, este valor precisa ser definido como 1. Ou, simplesmente mencione -cloneForks junto com outras flags.
-orgOnly = Esta é a flag booleana opcional para pular a clonagem de repositórios de usuários pertencentes a uma org. Por padrão, é definido como 0, ou seja, comportamento normal. Se os repositórios de usuários não devem ser escaneados e apenas os repositórios da org devem ser escaneados, este valor precisa ser definido como 1. Ou, simplesmente mencione -orgOnly junto com outras flags.
-toolName = Esta é a flag string opcional para especificar qual ferramenta usar na varredura. Por padrão, é definido como all, ou seja, thog e repo-supervisor serão todos usados na varredura. Os valores são thog ou repo-supervisor.
-teamName = Nome da Equipe da Organização que tem acesso a repositórios privados para varredura. Esta flag não foi totalmente testada, então não posso garantir a funcionalidade.
-scanPrivateReposOnly = Esta é a flag booleana opcional para especificar se você deseja escanear repositórios privados de usuários ou não. Mencionar isso NÃO escaneará repositórios públicos de usuários. E você precisa fornecer a chave SSH montando o volume no contêiner. Além disso, isso só funciona com a flag user, a flag repoURL ou a flag org.
Quando a flag org é mencionada junto com a flag scanPrivateReposOnly e sem a flag orgOnly, ela escaneará os repositórios públicos E privados pertencentes a esta org aos quais o usuário tem acesso (cujo token é fornecido). Em seguida, continuará escaneando APENAS os repositórios privados do usuário (cujo token é fornecido). Finalmente, continuará escaneando todos os gists públicos e secretos deste usuário (cujo token é fornecido). Em resumo, a flag scanPrivateReposOnly realmente afeta apenas as flags user e repoURL.
-enterpriseURL = Flag opcional para fornecer a URL do Github Enterprise, se você deseja escanear repositórios corporativos. Deve ser algo como https://github.org.com/api/v3 juntamente com a chave SSH montada no contêiner. Consulte escaneando github enterprise abaixo.
-threads = O valor padrão é 10. Isso é para limitar o número de threads se o seu sistema não for suficientemente potente. Na maioria dos casos, deixar como 10 deve ser suficiente.
-thogEntropy = Esta é uma flag opcional que basicamente indica se você deseja obter segredos baseados em alta entropia do truffleHog ou não. Os segredos de alta entropia do truffleHog produzem MUITO ruído, então se você realmente não quer todo esse ruído e está executando git-all-secrets em uma organização grande, recomendo não mencionar esta flag. Por padrão, é definido como False, o que significa que o truffleHog produzirá resultados apenas com base nas expressões regulares no arquivo rules.json. Se você estiver escaneando uma organização relativamente pequena com um conjunto limitado de repositórios ou um usuário com poucos repositórios, mencionar esta flag faz mais sentido.
-mergeOutput = Flag opcional para mesclar e deduplicar a saída das ferramentas usadas (atualmente truffleHog e repo-supervisor). O valor padrão é False.
-blacklist = Nomes de repositórios fornecidos como valores separados por vírgula que NÃO devem ser escaneados.
Ao especificar a flag scanPrivateReposOnly:
-v.ssh ao usar a flag e não a URL https.Consulte escaneando repositórios privados abaixo.
Ao especificar teamName, é importante que o token fornecido pertença a um usuário que seja membro da equipe. Resultados inesperados podem ocorrer caso contrário. Consulte escaneando uma equipe da organização abaixo.
Ao especificar a flag enterpriseURL, ela sempre considerará a url SSH, mesmo se você fornecer a url https de um repositório. Toda a clonagem/escaneamento corporativo acontece via url ssh e não via url https.
Conforme mencionado acima, certifique-se de que a chave SSH usada (para escanear a URL ssh) não tenha nenhuma frase secreta definida.
12/07/17 - Atualizei a documentação com mais detalhes e explicação sobre as diferentes flags.
12/05/17 - Integrado suporte de escaneamento para repositórios privados via chave SSH. Isso tem sido um pedido há muito tempo e agora é possível. Além disso, mudei o esquema de tags da imagem Docker. A partir de agora, a imagem mais recente terá a tag latest. E todas as versões anteriores serão marcadas com um número. Tudo isso não teria sido possível sem a equipe SimpliSafe, especialmente Matthew Cox (https://github.com/matthew-cox). Então, um grande obrigado a você, Matt!
10/14/17 - Construída e enviada a nova imagem abhartiya/tools_gitallsecrets:v6. Esta nova imagem tem a versão mais recente do git-secrets bem como do repo-supervisor, ou seja, mesclei algumas alterações upstream no meu fork juntamente com algumas alterações adicionais que já havia feito no meu fork. A nova imagem usa essas alterações, então tudo está atualizado e melhor!* 10/14/17 - Construída e enviada a nova imagem abhartiya/tools_gitallsecrets:v5. Esta imagem corrige um bug muito estúpido e irritante que possivelmente estava fazendo o repo supervisor falhar. Algo mudou na forma como os valores de Environment estão sendo lidos no Dockerfile, o que resultou no repo supervisor não entender qual caminho do node usar. Inferno do Node!
9/29/17 - Construída e enviada a nova imagem com a flag orgOnly - abhartiya/tools_gitallsecrets:v4
8/22/17 - Adicionado o toggle -orgOnly por kciredor: analisa o repositório da organização especificada e ignora os repositórios do usuário.
6/26/17 - Removido algum output no repo-supevisor que exibia erros quando nenhum segredo era encontrado. Output desnecessário! Construída e enviada a nova imagem - abhartiya/tools_gitallsecrets:v3
6/25/17 - Adicionada a flag toolName para especificar qual ferramenta usar para escanear. Construída e enviada a nova imagem - abhartiya/tools_gitallsecrets:v2
6/14/17 - Adicionado o repo-supervisor como ferramenta de escaneamento, também atualizado e adicionado o número da versão à imagem docker - abhartiya/tools_gitallsecrets:v1
6/14/17 - Adicionada a flag cloneForks para evitar clonar forks de repositórios da organização e do usuário. Por padrão, isso é falso. Se desejar escanear forks, basta definir o valor para 1, ou seja, -cloneForks=1