
YAML-gesteuerter CLI-Scanner, der offengelegte Dienste, Dateien und Ordner auf Web-Endpunkten erkennt. Entwickelt für Entwickler, um Sicherheitsprüfungen mit anpassbaren Signaturen in CI/CD-Pipelines zu integrieren.

ChopChop ist ein Kommandozeilenwerkzeug für dynamische Anwendungssicherheitstests (DAST) auf Webanwendungen, das ursprünglich vom Michelin CERT entwickelt wurde.
Ziel ist es, mehrere Endpunkte zu scannen und die Offenlegung von Diensten/Dateien/Ordnern über das Webroot zu identifizieren.
Prüfungen/Signaturen werden in einer Konfigurationsdatei (standardmäßig chopchop.yml) deklariert, die vollständig konfigurierbar ist – insbesondere auch von Entwicklern.

„Chop chop“ ist ein Ausdruck aus dem Kantonesischen. „Chop chop“ bedeutet „beeil dich“ und deutet an, dass etwas sofort und ohne Verzögerung erledigt werden sollte.
Wir haben versucht, den Build-Prozess so schmerzfrei wie möglich zu gestalten, und hoffentlich sollte es so einfach sein wie:
$ go mod download
$ go build .
Es sollte ein resultierendes Binary gochopchop im Ordner sein.
Dank Github Container Registry können wir Ihnen einige frisch erstellte Docker-Images bereitstellen!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Wenn Sie es vorziehen, können Sie es auch lokal erstellen, siehe unten:
docker build -t gochopchop .
Wir arbeiten kontinuierlich daran, goChopChop so einfach wie möglich zu gestalten. Das Scannen eines Hosts mit diesem Dienstprogramm ist so einfach wie:
$ ./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
Die Umschreibung in Go fand vor ein paar Monaten statt, aber es gibt noch so viel zu tun. Hier sind einige Funktionen, die wir einzuplanen gedenken: [x] Threading für bessere Leistung [x] Möglichkeit, die Anzahl der gleichzeitigen Threads anzugeben [x] Farben und bessere Formatierung [x] Möglichkeit, Prüfungen/Signaturen zu filtern [x] Mocks und Unit-Tests [x] GitHub-CI Und vieles mehr!
Für schnelle End-to-End-Tests von chopchop haben wir einen Webserver in tests/server.go bereitgestellt.
Um ihn auszuprobieren, führen Sie bitte go run tests/server.go aus und dann chopchop mit dem folgenden Befehl: ./gochopchop scan http://localhost:8000 --verbosity Debug.
ChopChop sollte „no vulnerabilities found“ ausgeben.
Es gibt auch Unit-Tests, die Sie mit go test -v ./... starten können.
Diese Tests sind in den GitHub-CI-Workflow integriert.
Sie finden die verfügbaren Flaggen für den Befehl scan:
Hier ist eine Liste fortgeschrittener Nutzungsmöglichkeiten, die Sie interessieren könnten.
Hinweis: Umleitungen wie > für die Nachbearbeitung können verwendet werden.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins oder plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 für 4 Arbeiter$ ./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
Das Schreiben einer neuen Prüfung ist so einfach wie:
- 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"
Ein Endpunkt (z. B. /.git/config) ist mehreren Prüfungen zugeordnet, was vermeidet, X Anfragen für X Prüfungen zu senden. Mehrere Prüfungen können mit einer einzigen HTTP-Anfrage durchgeführt werden.
Jede Prüfung benötigt folgende Felder:
Bitte beziehen Sie sich auf die Datei third-party.txt für weitere Informationen.
ChopChop wurde unter der Apache-Lizenz 2.0 veröffentlicht.
Bitte beziehen Sie sich auf die Datei LICENSE für weitere Informationen.
| Flagge | Vollständige Flagge | Beschreibung |
|---|
-h | --help | Hilfe-Assistent |
-v | --verbosity | Ausführlichkeitsstufe der Protokollierung |
-c | --signature | Pfad zu einer benutzerdefinierten Signaturdatei |
-k | --insecure | SSL-Verifizierung deaktivieren |
-u | --url-file | Pfad zu einer angegebenen Datei mit zu testenden URLs |
-b | --max-severity | CI-Pipeline blockieren, wenn der Schweregrad über oder gleich dem angegebenen Flag liegt |
-e | --export | Exporttyp der Ausgabe (csv und/oder json) |
--export-filename | Dateinamen für die Exportdatei(en) angeben | |
-t | --timeout | Zeitüberschreitung für die HTTP-Anfragen |
--severity-filter | Plugins nach Schweregrad filtern | |
--plugin-filter | Plugins nach Plugin-Name filtern | |
--threads | Anzahl gleichzeitiger Threads |
| Attribut | Typ | Beschreibung | Optional? | Beispiel |
|---|
| name | string | Name der Prüfung | Nein | Git exposed |
| description | string | Eine kurze Beschreibung der Prüfung | Nein | Ensure .git repository is not accessible from the webroot |
| remediation | string | Geben Sie eine Abhilfemaßnahme für dieses spezifische „Problem" an | Nein | Do not deploy .git folder on production servers |
| severity | Enum("Hoch", "Mittel", "Niedrig", "Information") | Bewerten Sie die Kritikalität, falls es in Ihrer Umgebung ausgelöst wird | Nein | Hoch |
| status_code | integer | Der HTTP-Statuscode, der zurückgegeben werden soll | Ja | 200 |
| headers | Liste von strings | Liste der Header, die in der HTTP-Antwort vorhanden sein sollen | Ja | N/A |
| no_headers | Liste von strings | Liste der Header, die in der HTTP-Antwort NICHT vorhanden sein sollen | Ja | N/A |
| match | Liste von strings | Liste der Zeichenfolgen, die in der HTTP-Antwort vorhanden sein sollen | Ja | "[branch" |
| no_match | Liste von strings | Liste der Zeichenfolgen, die in der HTTP-Antwort NICHT vorhanden sein sollen | Ja | N/A |
| query_string | GET-Parameter, die an den Endpunkt übergeben werden müssen | string | Ja | query_string: "id=FOO-chopchoptest" |
| Bibliotheksname | Link | Lizenz |
|---|
| Viper | https://github.com/spf13/viper | MIT-Lizenz |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT-Lizenz |
| Cobra | https://github.com/spf13/cobra | Apache-Lizenz 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache-Lizenz 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT-Lizenz |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (vereinfachte Lizenz) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT-Lizenz |