
Scanner CLI basato su YAML che rileva servizi, file e cartelle esposti su endpoint web. Progettato per sviluppatori per integrare controlli di sicurezza nelle pipeline CI/CD con firme personalizzabili.

ChopChop è uno strumento a riga di comando per il test dinamico della sicurezza delle applicazioni web, inizialmente scritto dal Michelin CERT.
Il suo obiettivo è scansionare diversi endpoint e identificare l'esposizione di servizi/file/cartelle attraverso la webroot.
I controlli/firme sono dichiarati in un file di configurazione (di default: chopchop.yml), completamente configurabile, e specialmente da parte degli sviluppatori.

"Chop chop" è una frase che deriva dal cantonese. "Chop chop" significa "sbrigati" e suggerisce che qualcosa dovrebbe essere fatto ora e senza indugio.
Abbiamo cercato di rendere il processo di compilazione indolore e, si spera, dovrebbe essere semplice come:
$ go mod download
$ go build .
Dovrebbe risultare un binario gochopchop nella cartella.
Grazie a Github Container Registry, siamo in grado di fornirti alcune immagini Docker appena compilate!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Ma se preferisci, puoi anche compilarlo localmente, vedi sotto:
docker build -t gochopchop .
Stiamo cercando continuamente di rendere goChopChop il più semplice possibile. Scansionare un host con questo strumento è semplice come:
$ ./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
La riscrittura in Golang è avvenuta un paio di mesi fa, ma c'è ancora molto da fare. Ecco alcune funzionalità che stiamo pianificando di integrare: [x] Threading per migliori prestazioni [x] Possibilità di specificare il numero di thread concorrenti [x] Colori e migliore formattazione [x] Possibilità di filtrare i controlli/firme da cercare [x] Mock e test unitari [x] Github CI E molto altro!
Per testare rapidamente chopchop end-to-end, abbiamo fornito un web-server in tests/server.go.
Per provarlo, esegui go run tests/server.go e poi esegui chopchop con il seguente comando ./gochopchop scan http://localhost:8000 --verbosity Debug.
ChopChop dovrebbe stampare "nessuna vulnerabilità trovata".
Ci sono anche test unitari che puoi lanciare con go test -v ./....
Questi test sono integrati nel workflow CI di Github.
Puoi trovare i flag disponibili per il comando scan:
| Flag | Flag completo | Descrizione |
|---|---|---|
-h | --help | Guida di aiuto |
-v | --verbosity | Livello di dettaglio del logging |
-c | --signature | Percorso del file di firma personalizzato |
-k | --insecure | Disabilita la verifica SSL |
-u | --url-file | Percorso di un file specificato contenente gli URL da testare |
-b | --max-severity | Blocca la pipeline CI se la gravità è superiore o uguale al flag specificato |
-e | --export | Tipo di esportazione dell'output (csv e/o json) |
--export-filename | Specifica il nome del file per i file di esportazione | |
-t | --timeout | Timeout per le richieste HTTP |
--severity-filter | Filtra i plugin per gravità | |
--plugin-filter | Filtra i plugin per nome del plugin | |
--threads | Numero di thread concorrenti |
Ecco un elenco di utilizzi avanzati che potrebbero interessarti.
Nota: I reindirizzamenti come > per il post-processing possono essere utilizzati.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins o plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 per 4 worker$ ./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
Scrivere un nuovo controllo è semplice come:
- 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"
Un endpoint (es. /.git/config) è mappato a più controlli, evitando di inviare X richieste per X controlli. È possibile eseguire più controlli con una singola richiesta HTTP.
Ogni controllo necessita di questi campi:
| Attributo | Tipo | Descrizione | Opzionale? | Esempio |
|---|---|---|---|---|
| name | string | Nome del controllo | No | Git exposed |
| description | string | Una breve descrizione del controllo | No | Ensure .git repository is not accessible from the webroot |
| remediation | string | Fornisce una remediation per questo specifico "problema" | No | Do not deploy .git folder on production servers |
| severity | Enum("High", "Medium", "Low", "Informational") | Valuta la criticità se si attiva nel tuo ambiente | No | High |
| status_code | integer | Il codice di stato HTTP che dovrebbe essere restituito | Sì | 200 |
| headers | Lista di stringhe | Elenco di intestazioni che dovrebbero essere nella risposta HTTP | Sì | N/A |
| no_headers | Lista di stringhe | Elenco di intestazioni che NON dovrebbero essere nella risposta HTTP | Sì | N/A |
| match | Lista di stringhe | Elenca le stringhe che dovrebbero essere nella risposta HTTP | Sì | "[branch" |
| no_match | Lista di stringhe | Elenca le stringhe che NON dovrebbero essere nella risposta HTTP | Sì | N/A |
| query_string | Parametri GET da passare all'endpoint | Stringa | Sì | query_string: "id=FOO-chopchoptest" |
| Nome libreria | Link | Licenza |
|---|---|---|
| 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 |
Fai riferimento al file third-party.txt per ulteriori informazioni.
ChopChop è stato rilasciato sotto licenza Apache License 2.0.
Fai riferimento al file LICENSE per ulteriori informazioni.