
Escanea los archivos seleccionados en busca de patrones establecidos en las reglas. Se utiliza para encontrar secretos que puedas haber escrito accidentalmente en un archivo. Este escáner se utiliza para mostrar cómo el [informe de vulnerabilidades](https://docs.gitlab.com/ee/user/application_security/vulnerability_report/) de GitLab puede ser poblado por un escáner personalizado. Puedes ver una demostración en acción siguiendo la documentación en el proyecto [Secret List](https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/secret-list).
Bienvenido al Escáner de Patrones de Fern. Este escáner examina los archivos sugeridos y encuentra cualquier patrón indicado en el rules/rules.yaml usando regex. Luego se genera un informe con todos los hallazgos. Este proyecto se utiliza para demostrar cómo se puede integrar un escáner de seguridad personalizado en GitLab para poblar la Pestaña de Seguridad del Pipeline, los informes de vulnerabilidades y el widget de merge request.
Nota: Acceder a los informes de vulnerabilidades requiere una suscripción a GitLab Ultimate
Puedes activar este escáner de seguridad agregando lo siguiente a tu .gitlab-ci.yml:
include:
- remote: "https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner/-/blob/main/jobs/.fern-pattern-scanner.gitlab-ci.yml"
Puedes ver el escáner ejecutándose en el proyecto Secret List. Una vez que el escáner finaliza, genera un informe llamado gl-secret-detection-report.json. Ese informe se valida y se carga en el informe de vulnerabilidades y en el widget de merge request.
Si deseas ignorar el escaneo de ciertas rutas en el proyecto donde se ejecuta el escáner, puedes establecer la siguiente variable con valores separados por comas:
variables:
FERN_ANALYZER_EXCLUDED_PATHS: "docs, tests"
Si deseas ejecutar tu propio conjunto de reglas de patrones regex en GitLab, debes hacer lo siguiente:
patterns:
- name: 'PATTERN NAME 1'
pattern: 'REGEX 1'
- name: 'PATTERN NAME 2'
pattern: 'REGEX 2'
fern_secret_detection:
script:
- /app/fern-pattern-scanner scan --rules "/path/to/rules.yaml" --report
Sube tu código y el escáner debería comenzar a ejecutarse con el nuevo conjunto de reglas. Este escáner no escanea diferencias de commits. Busca patrones en todo el proyecto.
Cuando el pipeline se complete, puedes hacer clic en la pestaña de Seguridad para ver todos los problemas detectados. Si tienes GitLab Ultimate, estos problemas también se pueden ver en el Informe de Vulnerabilidades.
Puedes usar este escáner para detectar patrones en tipos de archivo seleccionados en tu máquina local. Para ejecutar este escáner en tu máquina local, sigue los pasos a continuación:
$ go install gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner
Nota: Esto descargará el archivo a tu $GOBIN. Si eres nuevo en Go, este playground repasa la instalación de Go
$ wget https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner/-/raw/main/rules/rules.yaml
...
Resolving gitlab.com (gitlab.com)... 2606:4700:90:0:f22e:fbec:5bed:a9b9, 172.65.251.78
Connecting to gitlab.com (gitlab.com)|2606:4700:90:0:f22e:fbec:5bed:a9b9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 283 [text/plain]
Saving to: ‘rules.yaml’
rules.yaml 100%[===================>] 283 --.-KB/s in 0s
2023-05-20 16:02:46 (22.5 MB/s) - ‘rules.yaml’ saved [283/283]
Nota: También puedes descargar el archivo directamente desde el proyecto
$ fern-pattern-scanner scan --rules path/to/rules.yaml
INFO[0000] The scanner is starting
INFO[0000] Skipping the following directories: []
INFO[0000] Possible Vulnerability Detected: {Id:139999 Name:password variation 1 Message:The pattern in rule: password variation 1 was found in a file Description:The pattern in rule: password variation 1 was found in a file. Examine the file, remove and rotate your secret. Location:/Users/fern/Desktop/secret-list/.git/index Line:3}
...
INFO[0000] The scanner completed successfully
Creado y mantenido por Fern🌿