ChopChop es una herramienta de línea de comandos para pruebas de seguridad de aplicaciones dinámicas para aplicaciones web originalmente escrita por Michelin CERT.
Su objetivo es escanear múltiples puntos finales e identificar la provisión de servicios / archivos / carpetas por webroot. Los cheques / firmas se declaran en un archivo de configuración (por defecto: chopchop.yml), totalmente configurable y lo más importante por desarrolladores.
edificio
Intentamos que el proceso de compilación sea sencillo y, con suerte, debería ser tan fácil como:
$ go mod download$ go build .
Debería ser un resultado gochopchop binario en la carpeta.
Usar Docker
¡Gracias a Github Container Registry, podemos proporcionarle algunas imágenes de Docker recién creadas!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Pero si lo prefiere, también puede crearlo localmente, consulte a continuación:
Construye localmente
docker build -t gochopchop .
propósito de uso
Tratamos de hacer todo el tiempo goChopChop tan simple como sea posible. Escanear un host con esta utilidad es tan simple como:
$ ./gochopchop scan https://foobar.com
Usar Docker
docker run gochopchop scan https://foobar.com
Archivo de configuración personalizado
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
Que sigue
La refundición de Golang ocurrió hace unos meses, pero todavía queda mucho por hacer. Aquí hay algunas características que nos gustaría incluir:
[x] Enhebrado para un mejor rendimiento
[x] Posibilidad de especificar el número de subprocesos simultáneos.
[x] Colores y mejor formato
[x] Capacidad para filtrar cheques / firmas para la búsqueda
[x] Pruebas unitarias y simuladas
[x] ¡Github CI y mucho más!
Pruebas
Para habilitar una prueba rápida de un extremo a otro de Chopchop, tenemos un servidor web en formato. previsto tests/server.go. Para probar, por favor corre go run tests/server.go Luego ejecuta chochop con el siguiente comando ./gochopchop scan http://localhost:8000 –verbosity Debug. ChopChop debería mostrar «no se encontraron vulnerabilidades».
También hay pruebas unitarias para comenzar go test -v ./…. Estas pruebas están integradas en el flujo de trabajo de github CI.
Banderas disponibles
Puede encontrar las banderas disponibles para el scan Mando:
banderaBandera completadescripción-h–helpAsistente de ayuda-v–verbosityNivel de registro detallado-c–signatureRuta del archivo de firma personalizado-k–insecureDesactivar la verificación SSL-u–url-fileRuta a un archivo especificado con URL que se probarán-b–max-severityBloquear la canalización de CI si la gravedad es mayor o igual que la marca especificada-e–exportTipo de exportación de la salida (csv y / o json)–export-filenameIngrese el nombre del archivo para los archivos de exportación-t–timeoutTiempo de espera para las solicitudes HTTP–severity-filterFiltrar complementos por gravedad–plugin-filterFiltrar complementos por nombre del complemento–threadsNúmero de hilos simultáneos
Uso extendido
Aquí hay una lista de usos avanzados que pueden interesarle. Nota: redirecciona como > se puede utilizar para el posprocesamiento.
- Posibilidad de escanear y deshabilitar la verificación SSL
$ ./gochopchop scan https://foobar.com --insecure
- Posibilidad de escanear con un archivo de configuración personalizado (incluidos complementos personalizados)
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
- Posibilidad de enumerar todos los complementos o por gravedad: plugins o plugins –severity High
$ ./gochopchop plugins --severity High
- Posibilidad de especificar el número de subprocesos simultáneos: –threads 4 para 4 trabajadores
$ ./gochopchop plugins --threads 4
- Capacidad para bloquear la canalización de CI por gravedad (igual o superior a la gravedad especificada): –max-severity Medium
$ ./gochopchop scan https://foobar.com --max-severity Medium
- Posibilidad de especificar firmas específicas para verificar.
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
- Posibilidad de enumerar todos los complementos
- Lista de complementos de alta gravedad
$ ./gochopchop plugins --severity High
- Definir una lista o URL que están en un archivo
$ ./gochopchop scan --url-file url_file.txt
- Exportar resultados de GoChopChop en formatos CSV y JSON
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
Crear un nuevo cheque
Escribir un nuevo cheque es tan fácil como:
- endpoint: "/.git/config"checks:- name: Git exposedmatch:- "[branch"remediation: Do not deploy .git folder on production serversdescription: Verifies that the GIT repository is accessible from the siteseverity: "High"
An endpoint (eg. /.git/config) is mapped to multiple checks which avoids sending X requests for X checks. Multiple checks can be done through a single HTTP request.
Each check needs those fields:
AttributeTypeDescriptionOptional ?ExamplenamestringName of the checkNoGit exposeddescriptionstringA small description for the checkNoEnsure .git repository is not accessible from the webrootremediationstringGive a remediation for this specific «issue»NoDo not deploy .git folder on production serversseverityEnum(«High», «Medium», «Low», «Informational»)Rate the criticity if it triggers in your environmentNoHighstatus_codeintegerThe HTTP status code that should be returnedYes200headersList of stringList of headers there should be in the HTTP responseYesN/Ano_headersList of stringList of headers there should NOT be in the HTTP responseYesN/AmatchList of stringList the strings there should be in the HTTP responseYes«[branch»no_matchList of stringList the strings there should NOT be in the HTTP responseYesN/Aquery_stringGET parameters that have to be passed to the endpointStringYesquery_string: «id=FOO-chopchoptest»
External Libraries
Please, refer to the third-party.txt file for further information.
Talks
License
ChopChop has been released under Apache License 2.0.
Please, refer to the LICENSE file for further information.
Authors
- Paul A.
- David R. (For the Python version)
- Stanislas M. (For the Golang version)