
Scanner de CLI orientado por YAML que detecta serviços, arquivos e pastas expostos em endpoints web. Projetado para desenvolvedores integrarem verificações de segurança em pipelines CI/CD com assinaturas personalizáveis.

ChopChop é uma ferramenta de linha de comando para testes dinâmicos de segurança em aplicações web, inicialmente escrita pelo CERT da Michelin.
Seu objetivo é escanear vários endpoints e identificar a exposição de serviços/arquivos/pastas através da raiz web.
As verificações/assinaturas são declaradas em um arquivo de configuração (por padrão: chopchop.yml), totalmente configurável, e especialmente por desenvolvedores.

"Chop chop" é uma expressão enraizada no cantonês. "Chop chop" significa "depressa" e sugere que algo deve ser feito agora e sem demora.
Tentamos tornar o processo de compilação indolor e, com sorte, deve ser tão simples quanto:
$ go mod download
$ go build .
Deve resultar em um binário gochopchop na pasta.
Graças ao Github Container Registry, podemos fornecer algumas imagens Docker recém-construídas!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Mas se preferir, você também pode compilar localmente, veja abaixo:
docker build -t gochopchop .
Estamos continuamente tentando tornar o goChopChop o mais fácil possível. Escanear um host com este utilitário é tão simples quanto:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
A reescrita em Go ocorreu há alguns meses, mas ainda há muito a fazer. Aqui estão alguns recursos que planejamos integrar: [x] Paralelismo para melhor desempenho [x] Capacidade de especificar o número de threads concorrentes [x] Cores e melhor formatação [x] Capacidade de filtrar verificações/assinaturas a serem pesquisadas [x] Testes mock e unitários [x] CI do Github E muito mais!
Para testar rapidamente o chopchop de ponta a ponta, fornecemos um servidor web em tests/server.go.
Para testá-lo, execute go run tests/server.go e depois execute o chopchop com o seguinte comando ./gochopchop scan http://localhost:8000 --verbosity Debug.
O ChopChop deve exibir "no vulnerabilities found".
Também existem testes unitários que você pode executar com go test -v ./....
Esses testes estão integrados no workflow de CI do github.
Você pode encontrar as flags disponíveis para o comando scan:
Aqui está uma lista de usos avançados que podem lhe interessar.
Nota: Redirecionadores como > para pós-processamento podem ser usados.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins ou plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 para 4 workers$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
Escrever uma nova verificação é tão simples quanto:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
Um endpoint (ex. /.git/config) é mapeado para várias verificações, o que evita enviar X requisições para X verificações. Várias verificações podem ser feitas através de uma única requisição HTTP.
Cada verificação precisa desses campos:
Por favor, consulte o arquivo third-party.txt para mais informações.
ChopChop foi lançado sob a Apache License 2.0.
Por favor, consulte o arquivo LICENSE para mais informações.
| Flag | Flag completa | Descrição |
|---|
-h | --help | Assistente de ajuda |
-v | --verbosity | Nível de verbosidade do log |
-c | --signature | Caminho do arquivo de assinatura personalizado |
-k | --insecure | Desabilitar verificação SSL |
-u | --url-file | Caminho para um arquivo especificado contendo URLs para testar |
-b | --max-severity | Bloquear o pipeline de CI se a gravidade for maior ou igual à flag especificada |
-e | --export | Tipo de exportação da saída (csv e/ou json) |
--export-filename | Especificar o nome do arquivo para o(s) arquivo(s) de exportação | |
-t | --timeout | Tempo limite para as requisições HTTP |
--severity-filter | Filtrar plugins por gravidade | |
--plugin-filter | Filtrar plugins por nome do plugin | |
--threads | Número de threads concorrentes |
| Atributo | Tipo | Descrição | Opcional? | Exemplo |
|---|
| name | string | Nome da verificação | Não | Git exposed |
| description | string | Uma pequena descrição para a verificação | Não | Ensure .git repository is not accessible from the webroot |
| remediation | string | Fornecer uma remediação para este "problema" específico | Não | Do not deploy .git folder on production servers |
| severity | Enum("High", "Medium", "Low", "Informational") | Avaliar a criticidade se acionar no seu ambiente | Não | High |
| status_code | integer | O código de status HTTP que deve ser retornado | Sim | 200 |
| headers | Lista de strings | Lista de cabeçalhos que devem estar na resposta HTTP | Sim | N/A |
| no_headers | Lista de strings | Lista de cabeçalhos que NÃO devem estar na resposta HTTP | Sim | N/A |
| match | Lista de strings | Listar as strings que devem estar na resposta HTTP | Sim | "[branch" |
| no_match | Lista de strings | Listar as strings que NÃO devem estar na resposta HTTP | Sim | N/A |
| query_string | Parâmetros GET que devem ser passados para o endpoint | String | Sim | query_string: "id=FOO-chopchoptest" |
| Nome da Biblioteca | Link | Licença |
|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |