
Una forma de monitorear continuamente información sensible que podría estar expuesta en Github
Sé que hay muchas otras herramientas disponibles para encontrar información sensible actualmente filtrada en Github, yo mismo todavía uso algunas de ellas. Sin embargo, creo que aún carecen de algunas características como:
Otras herramientas se centran más en encontrar información sensible que existe en un repositorio al que se le ha pasado la dirección de Git. Solo hay un puñado de herramientas similares en el momento en que desarrollé GitMonitor enfocadas en encontrar primero los repositorios que necesitas considerar, encontrar todos los repositorios relevantes, luego verificar si existe información sensible entre ellos.
Además de las reglas para verificar información sensible, la herramienta también necesita reglas para buscar repositorios de interés. Los repositorios a considerar pueden ser aquellos que contengan palabras clave relacionadas con la empresa o el proyecto.
Si eres un cazador de bug bounty, solo te interesarán unos pocos objetivos a la vez. Sin embargo, si eres un ingeniero de seguridad de una empresa, necesitarás saber cuándo aparece un repositorio relacionado con tu empresa o proyecto y que pueda contener información sensible. Dichos repositorios pueden aparecer en cualquier parte de Github, con cualquier nombre y publicados por cualquier cuenta. También deberías recibir una alerta tan pronto como aparezca dicho repositorio (monitoreo continuo).
La herramienta tiene un mecanismo de reporte flexible.
Por eso creé esta herramienta - GitMonitor. GitMonitor utiliza dos conjuntos diferentes de reglas para encontrar lo que necesitas. El conjunto de reglas de búsqueda buscará repositorios que puedan estar relacionados con tu organización o proyectos internos, o cualquier otra cosa, clonará los repositorios que coincidan en local. Luego, el conjunto de reglas de filtrado sensible para verificar si esos repositorios contienen información sensible. Finalmente, la herramienta informará a través de Slack. Puedes usar esta herramienta con Cronjob para crear un sistema de monitoreo continuo para rastrear información sensible relacionada con tu organización que se haya filtrado en Github y recibir resultados a través de Slack.
Actualización 15 de junio de 2020: Hemos actualizado a la versión 1.0. Esta versión corrige algunos errores para que Gitmonitor funcione de manera estable. Recomendamos realizar un git pull si estás usando versiones anteriores.
Usa dos conjuntos diferentes de reglas, un conjunto de reglas de búsqueda (yaml) para buscar el repositorio de interés, y un conjunto de reglas de filtro (regex) para verificar si esos contenedores de interés contienen información sensible. Las reglas de búsqueda (yaml) y las reglas de filtro (regex) se definen por separado. Los usuarios pueden definir reglas yaml y regex de manera fácil e intuitiva.
Conjunto de reglas de búsqueda: Puedes crear muchas reglas diferentes usando diferentes archivos yaml. Las reglas te permiten definir de manera flexible cómo deseas buscar repositorios, puedes usar palabras clave, o palabras clave asociadas con el idioma, nombre de archivo y extensión, o también puedes definir excluir repositorios de la búsqueda basándote en el idioma, nombre de archivo o extensión. Las palabras clave se buscarán a través de los nombres de los repositorios, los códigos de los repositorios y también los commits.
Conjunto de reglas de filtro: Puedes agregar o modificar regex fácilmente para encontrar información sensible que pueda existir en los repositorios.
El primer repositorio que coincida con el conjunto de reglas de búsqueda se clonará localmente. Luego, el conjunto de reglas de filtro verificará si este repositorio contiene información sensible. Después de terminar de verificar información sensible, Gitmonitor registrará los resultados y eliminará automáticamente este repositorio localmente para ahorrar espacio antes de continuar repitiendo este proceso hasta que se hayan encontrado y verificado todos los repositorios relevantes.

> python3 -m pip install -r requirements.txt
Asegúrate de tener instalada la versión 5x o superior de Pyyaml (pip3 install --ignore-installed PyYAML)
La siguiente tabla explica el significado de cada clave en el archivo de configuración:
> export GIT_USERNAME=tu nombre de usuario de Github
> export GIT_PASSWORD=tu clave personal o contraseña de Github
O define la información de credenciales en el archivo de configuración (No recomendado):
Ejemplo de archivo de configuración cuando defines las credenciales en variables de entorno

Puedes crear muchos archivos yaml diferentes como la plantilla de regla para definir múltiples palabras clave. Un archivo de regla se verá como la imagen de abajo:

> python3 gitmonitor.py
Por ejemplo:

Muchas áreas de este proyecto podrían mejorarse y cambiar significativamente mientras se refactoriza el código actual y se implementan nuevas características. Los comentarios con mejoras y las solicitudes de extracción de la comunidad serán muy apreciados y aceptados.
En general, seguimos el flujo de trabajo Git de "fork-and-pull".
NOTA: ¡Asegúrate de fusionar lo último de "upstream" antes de hacer una pull request!
Reporte a través de Slack.
Esta herramienta puede programarse con Cronjob para monitoreo continuo.
| Clave | Descripción |
|---|
| user | Nombre de usuario de Github - Déjalo en blanco si has configurado las credenciales de Github mediante variables de entorno |
| pass | Contraseña de Github - Déjalo en blanco si has configurado las credenciales de Github mediante variables de entorno |
| webhooks | Token de Webhook entrante para enviar mensajes desde GitMonitor a Slack |
| rule | El directorio que contiene el conjunto de reglas de búsqueda |
| source | El directorio para descargar el repositorio |
| log | El directorio que contendrá el archivo JSON que registra el estado después de cada escaneo, este archivo JSON se utiliza para comparar resultados entre escaneos (Para identificar nuevos repositorios) |
| start | Define el banner para iniciar el escaneo y el banner para el resultado del escaneo del Conjunto de Reglas de Filtrado Sensible - Se mostrará en los resultados enviados a Slack |
| end | Define el banner para finalizar el escaneo y el banner para el resultado del escaneo del Conjunto de Reglas de Búsqueda - Se mostrará en los resultados enviados a Slack |
| all | Define el banner para mostrar todos los repositorios - Se mostrará en los resultados enviados a Slack |