
Un repositorio para generar automáticamente y mantener actualizada una serie de imágenes Docker a través de GitHub Actions.
RAUDI (Regularly and Automatically Updated Docker Images) genera y mantiene actualizadas automáticamente una serie de imágenes Docker mediante GitHub Actions para herramientas que no son proporcionadas por los desarrolladores.
RAUDI es lo que te ahorrará la tarea de crear y gestionar muchas imágenes Docker manualmente. Cada vez que un software se actualiza, necesitas actualizar la imagen Docker si quieres usar las últimas funciones, las dependencias ya no funcionan.
Esto es desordenado y consume mucho tiempo.
No te preocupes más, nosotros te cubrimos.
Puedes hacer un fork de este repositorio y usar el flujo de trabajo de GitHub tú mismo, o usarlo localmente (y gestionar su ejecución como prefieras).
Si deseas hacer un fork de este repositorio, también debes configurar algunos secretos para poder subir tus imágenes a tu cuenta personal de Docker Hub. Dos secretos de GitHub deben configurarse:
Después de configurar esos secretos, debes editar la variable organization establecida en el archivo tools/main.py, ya que está configurada para subir a Docker Hub para SecSI.
Eso es todo: ve a Action, actívalo para tu repositorio bifurcado, espera hasta la medianoche, ¡y el flujo de trabajo hará el trabajo pesado!
Este repositorio también se puede ejecutar localmente. Los requisitos que se deben cumplir son los siguientes:
Aquí está la documentación para trabajar con BuildX: https://docs.docker.com/buildx/working-with-buildx/
La fase de configuración es bastante sencilla, solo necesitas los siguientes comandos:
git clone https://github.com/cybersecsi/RAUDI
cd RAUDI
pip install -r requirements.txt
¡Estás listo para empezar!
Para ejecutar la prueba necesitas instalar pytest con el comando pip install pytest (no está en requirements.txt ya que solo se necesita con fines de prueba) y luego puedes ejecutar:
pytest -s
o
python -m pytest -s
para ejecutar las pruebas.
RAUDI puede construir y subir todas las herramientas que se colocan en el directorio tools. Hay diferentes opciones que se pueden usar al ejecutarlo. Antes de usarlo localmente, debes crear un archivo .env (puedes copiar el archivo .env.sample) y agregar tu token de acceso personal de GitHub para evitar la limitación de tasa. Para usuarios no autenticados, GitHub permite hasta 60 solicitudes por hora, mientras que los usuarios autenticados pueden realizar hasta 15.000 solicitudes por hora. ¡Por esta razón te recomendamos que lo agregues! También puedes crear un token de acceso personal sin ningún ámbito, ya que todo lo que hacemos es leer información de cada repositorio de GitHub.
En este modo, RAUDI intenta construir todas las herramientas si es necesario. El comando para ejecutarlo es simplemente:
python3 ./raudi.py --all
En este modo, RAUDI intenta construir solo la herramienta especificada. El comando en este caso es:
python3 ./raudi.py --single <tool_name>
tool_name DEBE ser el nombre del directorio dentro de la carpeta tools.
Dado que el parámetro tests se ha añadido a la estructura de configuración de la herramienta, puede ser útil para probar si los comandos insertados devuelven un código de estado 0. El comando para probar una herramienta específica es:
python3 ./raudi.py --test <tool_name>
tool_name DEBE ser el nombre del directorio dentro de la carpeta tools.
Si quieres conocer las herramientas disponibles, puedes ejecutar este comando:
python3 ./raudi.py --list
Si quieres agregar rápidamente una nueva carpeta de herramienta a partir de una de las plantillas disponibles, puedes ejecutar este comando:
python3 ./raudi.py --bootstrap <new_tool_name>
| Opción | Descripción | Valor predeterminado |
|---|---|---|
| --push | Si se sube automáticamente a Docker Hub | False |
| --remote | Si se verifica en Docker Hub en lugar de Docker local antes de construir | False |
Esta es la lista actual de herramientas que se han añadido. Son todas aquellas herramientas que no tienen una imagen Docker oficial proporcionada por el desarrollador:
Cada herramienta en el directorio tools contiene al menos dos archivos:
Si deseas agregar una nueva herramienta, solo tienes que crear una carpeta para esa herramienta específica dentro del directorio tools. En esta carpeta debes insertar el Dockerfile con argumentos de construcción definidos para personalizar y automatizar la construcción. Una vez que hayas creado el Dockerfile, debes crear un config.py en el mismo directorio con una función llamada get_config(organization, common_args). Ten cuidado: la función DEBE llamarse así y DEBE tener esos dos parámetros (incluso si no los usas). El valor de retorno es la configuración para esa herramienta específica y tiene la siguiente estructura:
config = {
'name': organization+'/<name_of_the_image>',
'version': '', # Should be an helper function
'buildargs': {
},
'tests': []
}
Las cuatro claves son:
Después de hacerlo, ¡estás listo! Solo ten cuidado de que el nombre de la herramienta DEBE SER EL MISMO que el directorio en el que colocaste su Dockerfile.
Hay una CONVENCIÓN DE NOMBRES para las versiones: usa solo PUNTOS y DÍGITOS; por favor, elimina cualquier 'v' al final de la versión en el config.py específico (para un ejemplo funcional, consulta tools/dirsearch/config.py).
Para obtener las últimas versiones e información sobre herramientas e imágenes base, se ha implementado un conjunto de ayudantes. Si deseas agregar una nueva herramienta, debes usar estos ayudantes para tener una imagen Docker que se actualice automáticamente mediante RAUDI.
get_latest_pip_versionEste ayudante se usa para obtener la última versión de un paquete pip. Solo necesita el nombre del paquete y devuelve el número de versión. Ejemplo:
VERSION = helper.get_latest_pip_version(package_name)
get_latest_npm_registry_versionEste ayudante se usa para obtener la última versión de un paquete npm. Solo necesita el nombre del paquete y devuelve el número de versión. Ejemplo:
VERSION = helper.get_latest_npm_registry_version(package_name)
get_latest_github_releaseEste ayudante se usa para obtener información sobre un repositorio de GitHub que usa Releases y tiene varios tipos de activos (p. ej., ejecutables para diferentes sistemas operativos). Este ayudante toma el repositorio (en el formato user/repo) y una cadena objetivo para poder identificar el activo correcto a descargar. Devuelve un diccionario con dos claves (url y version). Ejemplo:
VERSION = helper.get_latest_github_release("user/repo", "linux_amd64")
get_latest_github_release_no_browser_downloadEste ayudante se usa para obtener información sobre un repositorio de GitHub que usa Releases y solo tiene el código fuente (lo que significa que hay un zipball y un tarball). Este ayudante toma el repositorio (en el formato user/repo) y devuelve un diccionario con dos claves (url y version). Ejemplo:
VERSION = helper.get_latest_github_release_no_browser_download("user/repo")
get_latest_github_tag_no_browser_downloadEste ayudante se usa para obtener información sobre un repositorio de GitHub que usa Tags y solo tiene el código fuente (lo que significa que hay un zipball y un tarball). Este ayudante toma el repositorio (en el formato user/repo) y devuelve un diccionario con dos claves (url y version). Ejemplo:
VERSION = helper.get_latest_github_tag_no_browser_download("user/repo")
get_latest_github_commitEste ayudante se usa para obtener información sobre un repositorio de GitHub que no usa Tags ni Releases. En este caso, el objetivo es obtener el último commit. Este ayudante toma el repositorio (en el formato user/repo) y devuelve una cadena que representa la fecha del último commit en el formato YYYYYMMDD.
VERSION = helper.get_latest_github_commit("user/repo")
Esta sección proporciona ejemplos para las herramientas de seguridad de red actualmente añadidas. Como puedes ver, las imágenes solo proporcionan la herramienta, por lo que si necesitas usar una wordlist, necesitas montarla.
docker run -it --rm secsi/<tool> <command>
docker run -it --rm -v <wordlist_src_dir>:<wordlist_container_dir> secsi/dirb <url> <wordlist_container_dir>/<wordlist_file>
Somos italianos, por lo que probablemente lo pronunciamos de manera diferente a la tuya. La pronunciación correcta (usando la transcripción fonética) es la siguiente:
/ˈraʊdi/
De lo contrario, piensa en el perro de peluche del famoso programa de televisión Scrubs: Rowdy
¡Todos están invitados a contribuir! Hemos creado un documento muy detallado que describe cómo contribuir a RAUDI.
RAUDI es desarrollado con orgullo por @SecSI:
Otros contribuyentes:
RAUDI es un software de código abierto y gratuito publicado bajo la GNU GPL v3.
| --force | Si se construye o no si se ha encontrado una imagen con el mismo nombre de etiqueta | False |
| Nombre | Imagen Docker | Origen |
|---|