Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/nccgroup/cowcloud
Seguridad de Infraestructura en la NubeFrameworks de Pruebas de PenetraciónEscáneres de VulnerabilidadesScripting y AutomatizaciónRecopilación de InformaciónSeguridad en la NubeDevSecOpsUtilidades y Frameworks
GitHubnccgroup/cowcloud

cowcloud

Solución serverless de AWS para distribuir cargas de trabajo de reconocimiento y escaneo de vulnerabilidades. Envía tareas a través de la interfaz web; los workers de EC2 ejecutan scripts de Python personalizados con herramientas como Nmap.

602hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

CowCloud

una solución serverless para distribuir cargas de trabajo en AWS

CowCloud se creó originalmente para ejecutar herramientas de reconocimiento y escaneos de vulnerabilidades de forma distribuida; por ejemplo, un caso de uso podría ser el de los cazadores de recompensas por vulnerabilidades (bug bounty). Esta solución pretende abstraer a los usuarios finales del trabajo subyacente necesario para distribuir cargas de trabajo en AWS. CowCloud proporciona a los usuarios una interfaz web amigable para ver y crear nuevas tareas que posteriormente son consumidas por código Python que se ejecuta en los nodos trabajadores (instancias EC2). Se pretende que tanto el código Python como las AMIs de EC2 sean personalizados. Como ejemplo, supongamos que quieres ejecutar escaneos con Nmap. En ese caso, puedes simplemente elegir una AMI del Catálogo de AMIs y actualizar el campo image_id en Terraform/ec2_module/ec2_module.tf. Después, habría que actualizar el archivo ec2py/template.py para personalizar los argumentos del escaneo con Nmap (-Pn, -p 443, etc.). Por último, habría que actualizar el campo user_data en el archivo de configuración Terraform/ec2_module/ec2_module.tf para instalar Nmap y sus dependencias.

Otra opción es instalar y ejecutar varias herramientas comerciales; en ese caso, es posible que quieras crear tu propia instancia EC2 o snapshot. En este caso, instalarías todas las dependencias y activarías las licencias para poder usar esa AMI como imagen dorada (gold image) para tus trabajadores

Captura de pantalla

CowCloud se puede dividir en tres componentes principales:

  • una configuración de Terraform
  • un front-end en React JS
  • una aplicación Python que se ejecuta en los nodos trabajadores

Estas son las características clave:

  • La solución utiliza Amazon Cognito (con un grupo de usuarios) para que los usuarios puedan registrarse e iniciar sesión en la webapp
  • Aplicación React JS como aplicación front-end. El front-end muestra las tareas y los trabajadores y permite añadir nuevas tareas
  • API Gateway con integración de Lambda para gestionar el CORS e interactuar con algunas de las funciones Lambda para crear y obtener información de DynamoDB
  • CloudFront para gestionar SSL y la caché
  • WAF con reglas y condiciones de direcciones IP para restringir el acceso a la webapp (opcional)
  • Buckets de S3 para almacenar los resultados de la ejecución y la aplicación front-end; se utiliza un bucket de S3 separado como repositorio de código para la aplicación Python.
  • Una aplicación Python como núcleo para ejecutar tareas en las instancias EC2 (trabajadores). Las acciones de la herramienta se pueden desglosar en varios pasos:
    • La aplicación Python consume mensajes
    • ejecuta escaneos
    • comprime la salida
    • y cifra la salida con AES256-CBC y una contraseña
    • luego sube el resultado a un bucket de S3
  • Cada vez que se crea un nuevo trabajador, el repositorio Python se descarga de un bucket de S3 y luego se ejecuta el archivo ec2py incluido en él.
  • Cada vez que se crea un nuevo trabajador, se le puede asignar automáticamente una EIP a la instancia (opcional)
  • Grupos de registros (logging groups) de CloudWatch para almacenar los registros de diversas fuentes, como errores de Lambda, excepciones que ocurren en la herramienta Python ec2app, API Gateway, registros de Docker y mucho más
  • Lifecycle hooks para cambiar el estado de los trabajadores en DynamoDB y evitar que los trabajadores se eliminen mientras una tarea siga en ejecución
  • Estrategia de autoscaling basada en el número de tareas en cola y la configuración establecida (puedes encontrar más información sobre cómo funciona el algoritmo en autoscalingStrategy.py)
  • Mapeo de fuentes de eventos de Lambda vinculado a la tabla de tareas en DynamoDB; esto es para gestionar las acciones de autoscaling cuando los elementos de la base de datos aumentan o disminuyen
  • SNS para enviar nuevos mensajes (tareas) a un SQS; estos mensajes son leídos posteriormente por los nodos trabajadores
  • El servicio Step Functions se utiliza para crear una cuenta atrás y eliminar los grupos de registros de CloudWatch cuando expira retention_time

Diagrama:

Obsoleto

Las siguientes opciones están disponibles dentro de la configuración de Terraform:

Como resultado de ejecutar Terraform, se crea un nuevo archivo (config.js); este contiene la configuración necesaria para que la aplicación React JS se autentique contra el directorio del grupo de usuarios de Cognito. Después de haber desplegado la infraestructura, tienes que compilar la aplicación React y subir la carpeta build. Además, tienes que subir el código Python a un bucket de S3 que actúe como repositorio de código. Este proceso se ha automatizado en dos scripts setup.bat y setup.sh, por lo que no tienes que preocuparte por ello; esto es solo para resumir esta etapa.


Pasos de instalación:

La infraestructura se despliega en la región us-east-1 por defecto, aunque esto se puede cambiar en el archivo locals.tf dentro de la carpeta Terraform.

Pasos:

  • Debes crear un usuario con privilegios de administrador dentro de tu cuenta de AWS
  • (Opcional) Crear una AMI 'dorada' (golden) con las herramientas que quieras
  • Ve a la carpeta Terraform y actualiza variables.tf; la variable ami debe apuntar a una AMI EC2 existente, que podría ser tu AMI dorada o una del Catálogo EC2
  • Descarga e instala aws-cli, NPM, Yarn y Terraform en tu equipo
  • Configura aws-cli para usar tu cuenta de AWS en aws configure. Comprueba que lo has configurado correctamente ejecutando este comando: aws sts get-caller-identity; cuando esté bien configurado, no debería devolver un error
  • (Opcional) Genera un par de claves SSH para las instancias EC2. Si no tienes previsto acceder por SSH a los trabajadores, actualiza el módulo ec2_module en consecuencia aws ec2 create-key-pair –key-name cowCloud –query “cowCloud” –output text > ec2_module/cowCloud.pem
root@kitploit:~
git clone [email protected]:nccgroup/cowcloud.git
# Deploy the infra
cd cowcloud
cd Terraform
terraform init
terraform plan
terraform apply --auto-approve
  • Toma nota del valor (website) que se muestra en la salida de Terraform; esta es la URL para acceder al front-end
  • Una vez que la infraestructura se ha desplegado, solo tienes que ejecutar setup.sh o setup.bat para compilar y subir el código del front-end y de ec2py

¡Ya estás listo! ¡Regístrate, inicia sesión y crea una nueva tarea!

Flujo del usuario final

Una vez que todo está desplegado y el front-end es accesible, debes seguir estos pasos:

  • Visita el sitio web y haz clic en el botón de iniciar sesión (para registrarte se te pedirá que envíes un correo electrónico, nombre de usuario y contraseña válidos)
  • Valida el correo electrónico haciendo clic en el enlace que recibas en tu bandeja de entrada
  • Inicia sesión con el correo electrónico/nombre de usuario y la contraseña
  • Haz clic en la pestaña llamada “add a new task” y actualiza el documento JSON para especificar el dominio objetivo y envía el formulario; ahora recibirás un ID de tarea, un enlace y una contraseña que se mostrarán a continuación.
  • Vuelve al panel de control y espera a ver cómo se crea una nueva instancia EC2 y el nodo trabajador ejecuta la tarea
  • Si la tarea se ejecuta en un contenedor Docker, el stdout se puede ver a través de la interfaz web
  • Cuando la tarea se completa, se mueve a la tabla de archivo; ahora puedes visitar el enlace proporcionado, descargar el resultado, descifrarlo con la contraseña dada y descomprimir la salida o el resultado de la herramienta CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
  • El trabajador se termina automáticamente una vez que la tarea se ha completado

Captura de pantalla

Administrador/mantenedor

  • La persona encargada de desplegar la infraestructura y mantenerla debe sanear y validar adecuadamente las entradas de los usuarios finales proporcionadas a través de la webapp. En otras palabras, asegurarse de que el código en ec2py/template.py no sea vulnerable a la inyección de comandos del sistema operativo. Este punto se destaca porque es el aspecto más crítico del sistema. Se ha puesto especial cuidado en limitar el alcance de los permisos y la exposición del trabajador para reducir los riesgos asociados. No obstante, es responsabilidad del administrador cuidar este aspecto de la seguridad del sistema. Las políticas de rol adjuntas al perfil de las instancias EC2 se enumeran en el archivo readme.md dentro de la carpeta Terraform

    • Además, hay una función Lambda llamada workers_manager.py a la que llama la herramienta ec2py para realizar acciones más privilegiadas. Estas acciones se trasladaron a una función Lambda para limitar el riesgo en caso de que alguien comprometiera la clave de acceso del rol adjunto al perfil EC2. No obstante, funciona con IMDSv2. Las políticas de rol adjuntas a la función Lambda workers_manager.py se enumeran en el archivo readme.md dentro de la carpeta Terraform
  • Si quieres capturar el stdout y mostrarlo a través de la interfaz web mientras la tarea se está ejecutando, ve a ec2py/template.py y sigue estos pasos:

    • La variable extra_docker_params incluye la información necesaria para que tus contenedores Docker envíen el stdout a los grupos de registros de CloudWatch. Tendrás que incluir esta variable en la línea de comandos cuando quieras ver el stdout a través del front-end.
    root@kitploit:~
    cmd = f"docker run {extra_docker_params} --rm -v {tmp_folder}target.txt:/root/Tools/reconftw/target.txt -v {tmp_folder}reconftw.cfg:/root/Tools/reconftw/reconftw.cfg -v {tmp_folder}Recon/:/root/Tools/reconftw/Recon/ six2dez/reconftw:main -l target.txt -w".split(' ')
    

Desinstalación

Puedes destruir la infraestructura ejecutando este sencillo comando: terraform destroy --auto-approve; esto eliminará todos los recursos existentes. Nota: no interrumpas este proceso, ya que podría dejar algunos elementos residuales en la nube que luego tendrías que identificar y eliminar manualmente.


Flujo del usuario final

Captura de pantalla

Flujo principal

Captura de pantalla


Notas de desarrollo

  • Si haces un cambio en la aplicación ec2py, recuerda sincronizar los cambios con el repositorio S3; a continuación, debes terminar las instancias actuales y lanzar una nueva para obtener los últimos cambios
  • Cuando se cambia un componente del módulo gateway, es posible que necesites volver a desplegar la API REST; para hacerlo:
    • terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambda
    • terraform apply --auto-approve -target module.gateway_module

Agradecimientos especiales a:

  • Sabrina MM https://www.linkedin.com/in/sabrina-marisol-martinez-a4bb54181/
  • Ricardo Martinez Martin (NCC Group)
  • Conor McErlane (NCC Group)
  • Simon Harraghy (NCC Group)
Descargar herramienta
  • Si ec2py ejecuta herramientas (p. ej., Nmap) dentro de contenedores Docker, el stdout se puede registrar en CloudWatch y verse a través del front-end; consulta la variable extra_docker_params en el archivo template.py (esto se explica en la sección Administrador/mantenedor más abajo)
  • El front-end proporciona un botón para interrumpir las tareas durante su ejecución y otro botón para ver los registros de los contenedores Docker
  • Si quieres cambiar algo en el código del front-end o en las carpetas de ec2py, tendrás que propagar esos cambios a los buckets de S3 e invalidar la caché del front-end; puedes hacer todo eso simplemente ejecutando el setup.bat/sh
  • variablevalor por defectodescripción
    eipenablefalseSi es true, la solución asigna un pool de direcciones IP elásticas asociadas a los nodos trabajadores a medida que se crean. El número de EIP a reservar se calcula con esta fórmulasum([var.max_workers, var.maximum_number_of_terminating_machines])
    cidr_whitelist[]La lista blanca CIDR para permitir solo ciertos rangos de IP en el firewall. P. ej. ["195.95.131.0/24"]
    max_workers y max_queued_tasks_per_workermax_workers: 3, max_queued_tasks_per_worker: 10Estos dos ajustes determinan cuándo escalar hacia dentro o hacia fuera, p. ej., max_workers 3, max_queued_tasks_per_worker 10. Esto significa que si el número de tareas supera las diez, se creará una nueva instancia EC2. Si hay más de veinte tareas, habrá un máximo de tres instancias EC2 disponibles para distribuir las cargas de trabajo (consulta el algoritmo presente en este script Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py).
    maximum_number_of_terminating_machines2Define el número de instancias que están configuradas para terminarse pero que quedan en espera hasta que el proceso/escaneo complete la tarea.
    heartbeat_timeout900Define el tiempo que esos trabajadores permanecen en espera. Cuando este tiempo expira, el trabajador se termina de forma forzosa.
    instance_typet2.microhttps://aws.amazon.com/ec2/instance-types/
    aminullhttps://aws.amazon.com/es/amazon-linux-ami/
    retention_time7Establece el tiempo de retención (en días) para los registros y la expiración de los elementos de la tabla de archivo (tareas completadas).