
Scanner CLI piloté par YAML qui détecte les services, fichiers et dossiers exposés sur des points de terminaison web. Conçu pour les développeurs afin d'intégrer des contrôles de sécurité dans les pipelines CI/CD avec des signatures personnalisables.

ChopChop est un outil en ligne de commande pour les tests de sécurité dynamiques des applications web, initialement écrit par le CERT de Michelin.
Son objectif est de scanner plusieurs points de terminaison et d'identifier l'exposition de services/fichiers/dossiers à travers la racine web.
Les vérifications/signatures sont déclarées dans un fichier de configuration (par défaut : chopchop.yml), entièrement configurable, et notamment par les développeurs.

"Chop chop" est une expression originaire du cantonais. "Chop chop" signifie "dépêchez-vous" et suggère que quelque chose doit être fait maintenant et sans délai.
Nous avons essayé de rendre le processus de construction aussi simple que possible et, espérons-le, cela devrait être aussi facile que :
$ go mod download
$ go build .
Un binaire gochopchop devrait se trouver dans le dossier.
Grâce au Github Container Registry, nous sommes en mesure de vous fournir des images Docker fraîchement construites !
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Mais si vous préférez, vous pouvez aussi le construire localement, voir ci-dessous :
docker build -t gochopchop .
Nous essayons continuellement de rendre goChopChop aussi simple que possible. Scanner un hôte avec cet utilitaire est aussi simple que :
$ ./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 réécriture en Golang a eu lieu il y a quelques mois, mais il reste encore beaucoup à faire. Voici quelques fonctionnalités que nous prévoyons d'intégrer : [x] Multithreading pour de meilleures performances [x] Possibilité de spécifier le nombre de threads simultanés [x] Couleurs et meilleur formatage [x] Possibilité de filtrer les vérifications/signatures à rechercher [x] Tests unitaires et avec simulation [x] CI GitHub Et bien plus encore !
Pour tester rapidement chopchop de bout en bout, nous avons fourni un serveur web dans tests/server.go.
Pour l'essayer, exécutez go run tests/server.go puis lancez chopchop avec la commande suivante ./gochopchop scan http://localhost:8000 --verbosity Debug.
ChopChop devrait afficher "aucune vulnérabilité trouvée".
Il y a aussi des tests unitaires que vous pouvez lancer avec go test -v ./....
Ces tests sont intégrés dans le workflow CI de GitHub.
Vous trouverez ci-dessous les indicateurs disponibles pour la commande scan :
Voici une liste d'utilisations avancées qui pourraient vous intéresser.
Remarque : Les redirections comme > pour le post-traitement peuvent être utilisées.
$ ./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 pour 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
Écrire une nouvelle vérification est aussi simple que :
- endpoint: "/.git/config"
checks:
- name: Git exposé
match:
- "[branch"
remediation: Ne pas déployer le dossier .git sur les serveurs de production
description: Vérifie que le dépôt GIT est accessible depuis le site
severity: "High"
Un point de terminaison (par exemple /.git/config) est mappé à plusieurs vérifications, ce qui évite d'envoyer X requêtes pour X vérifications. Plusieurs vérifications peuvent être effectuées via une seule requête HTTP.
Chaque vérification nécessite ces champs :
Veuillez vous référer au fichier third-party.txt pour plus d'informations.
ChopChop a été publié sous la licence Apache 2.0.
Veuillez vous référer au fichier LICENSE pour plus d'informations.
| Indicateur | Indicateur complet | Description |
|---|
-h | --help | Assistant d'aide |
-v | --verbosity | Niveau de détail des logs |
-c | --signature | Chemin du fichier de signature personnalisé |
-k | --insecure | Désactiver la vérification SSL |
-u | --url-file | Chemin vers un fichier contenant des URL à tester |
-b | --max-severity | Bloquer le pipeline CI si la sévérité est supérieure ou égale à l'indicateur spécifié |
-e | --export | Type d'exportation de la sortie (csv et/ou json) |
--export-filename | Spécifier le nom du fichier pour le(s) fichier(s) d'exportation | |
-t | --timeout | Délai d'attente pour les requêtes HTTP |
--severity-filter | Filtrer les plugins par sévérité | |
--plugin-filter | Filtrer les plugins par nom de plugin | |
--threads | Nombre de threads simultanés |
| Attribut | Type | Description | Optionnel ? | Exemple |
|---|
| name | string | Nom de la vérification | Non | Git exposé |
| description | string | Une petite description de la vérification | Non | Assurer que le dépôt .git n'est pas accessible depuis la racine web |
| remediation | string | Donner une remédiation pour ce "problème" spécifique | Non | Ne pas déployer le dossier .git sur les serveurs de production |
| severity | Enum("High", "Medium", "Low", "Informational") | Évaluer la criticité si cela se déclenche dans votre environnement | Non | High |
| status_code | integer | Le code de statut HTTP qui doit être retourné | Oui | 200 |
| headers | Liste de string | Liste des en-têtes qui doivent être présents dans la réponse HTTP | Oui | N/A |
| no_headers | Liste de string | Liste des en-têtes qui ne doivent PAS être présents dans la réponse HTTP | Oui | N/A |
| match | Liste de string | Lister les chaînes qui doivent être présentes dans la réponse HTTP | Oui | "[branch" |
| no_match | Liste de string | Lister les chaînes qui ne doivent PAS être présentes dans la réponse HTTP | Oui | N/A |
| query_string | Paramètres GET à passer au point de terminaison | String | Oui | query_string: "id=FOO-chopchoptest" |
| Nom de la bibliothèque | Lien | Licence |
|---|
| Viper | https://github.com/spf13/viper | Licence MIT |
| Go-pretty | https://github.com/jedib0t/go-pretty | Licence MIT |
| Cobra | https://github.com/spf13/cobra | Licence Apache 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Licence Apache 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | Licence MIT |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Licence simplifiée) |
| Go-runewidth | https://github.com/mattn/go-runewidth | Licence MIT |