
Una herramienta de escaneo de seguridad/vulnerabilidades/riesgos de proyectos.
Existen opciones más modernas para ti y tu proyecto. Si deseas retomar el mantenimiento del proyecto, no dudes en contactarme. Encontrarás formas de contactarme en mi página personal.
.
.
.
.
.
.
El Hawkeye scanner-cli es una herramienta de seguridad de proyectos, vulnerabilidades y señalización general de riesgos. Está pensada para integrarse en tus hooks de pre-commit y en tus pipelines.
El Hawkeye scanner-cli asume que la estructura de tu directorio es tal que mantiene los archivos de la cadena de herramientas en el nivel superior. A grandes rasgos, esto es lo que implica:
package.json en el nivel superiorGemfile en el nivel superiorrequirements.txt en el nivel superiorcomposer.lock en el nivel superiorbuild (gradle) o target (maven), e incluirán archivos .java y .jarbuild (gradle) o target (maven), e incluirán archivos .kt y .jartarget (sbt con plugins sbt-native-packager o sbt-assembly), e incluirán archivos .scala y .jar. Consulta este repositorio para ver una demostración en funcionamiento.Cargo.toml en el nivel superiorEsto no es exhaustivo, ya que a veces las herramientas requieren que existan más archivos. Para entender cómo los módulos deciden si pueden manejar un proyecto, consulta la sección Cómo funciona y la carpeta módulos.
La imagen de docker es, sin duda, la forma más sencilla de usar el escáner. Ten en cuenta que la raíz de tu proyecto (por ejemplo, $PWD) debe montarse en /target.
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest
Si usas el escáner para escribir un JSON (mediante los flags -j y --json de la CLI y la configuración json en el .hawkeyerc), asegúrate de que utiliza el UID y GID correctos mediante docker run -u $(id -u):$(id -g). De lo contrario, podrías quedarte con archivos no eliminables, por ejemplo, al ejecutarlo en Jenkins.
La construcción de Docker también es la forma recomendada de ejecutar el escáner en tus pipelines de CI. Este es un ejemplo de ejecución de Hawkeye contra uno de tus proyectos en GoCD:
<pipeline name="security-scan">
<stage name="Hawkeye" cleanWorkingDir="true">
<jobs>
<job name="scan">
<tasks>
<exec command="docker">
<arg>pull</arg>
<arg>hawkeyesec/scanner-cli</arg>
<runif status="passed" />
</exec>
<exec command="bash">
<arg>-c</arg>
<arg>docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest</arg>
<runif status="passed" />
</exec>
</tasks>
</job>
</jobs>
</stage>
</pipeline>
Puedes instalar y ejecutar hawkeye en un proyecto Node.js mediante
npm install --save-dev @hawkeyesec/scanner-cli
npx hawkeye scan
Este método se recomienda en un proyecto Node.js, donde no se requieren las otras cadenas de herramientas (por ejemplo, python, ruby).
Con este método, también se recomienda invocar el escáner en un hook de git pre-commit (por ejemplo, mediante el paquete pre-commit) para que falle el commit si se encuentran problemas.
Puedes configurar el escáner mediante los archivos .hawkeyerc y .hawkeyeignore en la raíz de tu proyecto.
El archivo .hawkeyerc es un archivo JSON que te permite configurar...
{
"all": true|false,
"staged": true|false,
"modules": ["files-ccnumber", "java-owasp", "java-find-secbugs"],
"sumo": "http://your.sumologic.foobar/collector",
"http": "http://your.logger.foobar/collector",
"json": "log/results.json",
"failOn": "low"|"medium"|"high"|"critical",
"showCode": true|false
}
El archivo .hawkeyeignore es una colección de expresiones regulares que coinciden con rutas y códigos de error de módulos para excluir del escaneo, y es equivalente a usar el flag --exclude. Las líneas que comienzan con # se consideran comentarios.
¡Ten en cuenta que cualquier carácter especial reservado en expresiones regulares (-[]{}()*+?.,^$|#\s) debe escaparse cuando se use como literal!
Ten en cuenta también que los códigos de error de los módulos normalmente no se muestran, ya que no son principalmente relevantes para el usuario. Si deseas excluir un falso positivo en particular, puedes mostrar los códigos de error de los módulos con el flag --show-code o la propiedad showCode en el .hawkeyerc.
^test/
# esto es un comentario
^README.md
Usa hawkeye modules para listar los módulos disponibles y su estado.
> npx hawkeye modules
[info] Version: v1.4.0
[info] Module Status
[info] Enabled: files-ccnumber
[info] Scans for suspicious file contents that are likely to contain credit card numbers
[info] Enabled: files-contents
[info] Scans for suspicious file contents that are likely to contain secrets
[info] Disabled: files-entropy
[info] Scans files for strings with high entropy that are likely to contain passwords
[info] Enabled: files-secrets
[info] Scans for suspicious filenames that are likely to contain secrets
[info] Enabled: java-find-secbugs
[info] Finds common security issues in Java code with findsecbugs
[info] Enabled: java-owasp
[info] Scans Java projects for gradle/maven dependencies with known vulnerabilities with the OWASP dependency checker
[info] Enabled: node-npmaudit
[info] Checks node projects for dependencies with known vulnerabilities
[info] Enabled: node-npmoutdated
[info] Checks node projects for outdated npm modules
[info] Enabled: node-yarnaudit
[info] Checks yarn projects for dependencies with known vulnerabilities
[info] Enabled: node-yarnoutdated
[info] Checks node projects for outdated yarn modules
[info] Enabled: php-security-checker
[info] Checks whether the composer.lock contains dependencies with known vulnerabilities using security-checker
[info] Enabled: python-bandit
[info] Scans for common security issues in Python code with bandit.
[info] Enabled: python-piprot
[info] Scans python dependencies for out of date packages
[info] Enabled: python-safety
[info] Checks python dependencies for known security vulnerabilities with the safety tool.
[info] Enabled: ruby-brakeman
[info] Statically analyzes Rails code for security issues with Brakeman.
[info] Enabled: ruby-bundler-scan
[info] Scan for Ruby gems with known vulnerabilities using bundler
Usa hawkeye scan para iniciar un escaneo:
> npx hawkeye scan --help
[info] Version: v1.3.0
Usage: hawkeye-scan [options]
Options:
-a, --all Scan all files, regardless if a git repo is found. Defaults to tracked files in git repositories.
-t, --target [/path/to/project] The location to scan. Defaults to $PWD.
-f, --fail-on [low|medium|high|critical] Set the level at which hawkeye returns non-zero status codes. Defaults to low.
-m, --module [module name] Run specific module. Defaults to all applicable modules.
-e, --exclude [pattern] Specify one or more exclusion patterns (eg. test/*). Can be specified multiple times.
-j, --json [/path/to/file.json] Write findings to file.
-s, --sumo [https://sumologic-http-connector] Write findings to SumoLogic.
-H, --http [https://your-site.com/api/results] Write findings to a given url.
--show-code Shows the code the module uses for reporting, useful for ignoring certain false positives
-g, --staged Scan only git-staged files.
-h, --help output usage information
El scanner-cli responde con los siguientes códigos de salida:
Si deseas redirigir la salida del registrador de la consola, el método recomendado es engancharse a stdout. En este ejemplo, estamos haciendo uso tanto de los resultados JSON como de stdout:
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest -j hawkeye-results.json -f critical 2>&1 | tee hawkeye-results.txt
Por defecto, el escáner genera sus resultados en la consola en forma de tabla.
Los resultados pueden enviarse a un colector SumoLogic de tu elección. En este ejemplo, tenemos un colector con una única fuente HTTP.
hawkeye scan --sumo https://collectors.us2.sumologic.com/receiver/v1/http/your-http-collector-url
En SumoLogic, busca _collector="hawkeye" | json auto:

De manera similar al ejemplo de SumoLogic, el escáner puede enviar los resultados a cualquier endpoint HTTP que acepte mensajes POST.
hawkeye scan --http http://your.logging.foobar/endpoint
Los resultados se enviarán con User-Agent: hawkeye. De manera similar a la salida de la consola, se publicará el siguiente JSON para cada hallazgo:
{
"module": "files-contents",
"level": "critical",
"offender": "testfile3.yml",
"description": "Private key in file",
"mitigation": "Check line number: 3"
}
Hawkeye está diseñado para ser extensible añadiendo módulos y escritores.
Los módulos son básicamente pequeños fragmentos de código que implementan su propia lógica, o envuelven una herramienta de terceros y estandarizan la salida. Solo se ejecutan si se cumplen los criterios requeridos. Por ejemplo: el módulo npm outdated solo se ejecutaría si se detecta un package.json en el destino del escaneo; como resultado, no necesitas decirle a Hawkeye qué tipo de proyecto estás escaneando.
-m files-entropy.Cargo.lock contiene dependencias con vulnerabilidades conocidas usando cargo auditSi tienes una idea para un módulo, no dudes en abrir una solicitud de funcionalidad en la sección de issues. Si dispones de un poco de tiempo, considera enviarnos un pull request. Para ver cómo funcionan los módulos, dirígete a la carpeta módulos para descubrir cómo funcionan las cosas.