Contenedores de etapa dos
Estos contenedores se inician dinámicamente según la configuración del usuario Build (Job) proporcionada a la CLI de purpleteam, específicamente el número de testSessions que definas.
Las siguientes configuraciones son relevantes si tienes la intención de ejecutar el backend de purpleteam en el entorno local. En la nube (cloud) todo esto se hace por ti.
Clona este repositorio.
Usamos un archivo .env directamente en el directorio app-slave para las pruebas.
ZAP_API_KEY
Asegúrate de haber asignado un valor a la variable de entorno ZAP_API_KEY.
La ZAP_API_KEY puede ser la que elijas, solo asegúrate de que, además de definirla para app-slave, también la agregues a la configuración del proyecto app-scanner. El proyecto app-scanner requiere que la clave API de Zap esté configurada para autenticarse en Zap que se ejecuta en el contenedor de la Etapa Dos. Para el proyecto app-scanner, esto debe configurarse en lo siguiente:
{ "slave": { "apiKey": <zap-api-key-here> } }
HOST_ZAP_LOG4J_PROPERTIES_PATH y ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET
Si/cuando necesites registros de depuración de Zap, también necesitarás agregar las variables de entorno para la configuración de depuración de LOG4J.
Archivo .env
Si eliges usar un archivo .env, agregar todas estas variables de entorno se vería similar a lo siguiente:
ZAP_API_KEY=<zap-api-key-here>
HOST_ZAP_LOG4J_PROPERTIES_PATH=<ruta-absoluta-hacia/purpleteam-s2-containers/app-slave/log4j.properties>
ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET=/home/zap/.ZAP/log4j.properties
Siempre que hayas establecido las variables de entorno discutidas anteriormente:
Para activar el registro de depuración para los contenedores app-slave (Zap) que se ejecutan en el entorno local, descomenta el arreglo volumes y el elemento que contiene la clave source con la variable de entorno HOST_ZAP_LOG4J_PROPERTIES_PATH.
Los detalles a continuación para ver realmente los registros.
Puedes interactuar con Zap (consultar la interfaz de usuario de Zap) mientras se ejecutan tus pruebas. Esto ha sido útil en el pasado para verificar el estado de Zap mientras se depura el app-scanner.
docker stats
docker container ls
8080-8091 inclusive, según lo definido en docker-compose.yml.
zap:8080/*
http://zap:8080/zap en el contenedor especificado por el puerto del host en tu configuración de FoxyProxyPara activar el registro de depuración para los contenedores Selenium que se ejecutan en el entorno local, descomenta el arreglo environment y el elemento SE_OPTS=-debug para chrome y/o firefox.
Los detalles a continuación para ver realmente los registros.
Lo siguiente describe lo que necesitarás hacer para ver el navegador dentro de cualquiera de los contenedores Selenium ejecutados desde este proyecto.
-debug. Las imágenes -debug pueden estar comentadas, así que simplemente comenta la imagen habitual y descomenta la imagen con -debug agregado al final debería funcionar5900. Al especificar un rango como puerto externo (Ej: 5900-5901) podrás conectarte por VNC a más de un contenedor a la vez; en el ejemplo hemos permitido abrir dos sesiones concurrentemente. Si necesitas conectarte por VNC a más de dos, simplemente amplía el rango de puertos externosNecesitarás un cliente VNC para abrir una conexión al servidor VNC dentro del contenedor. Hemos tenido éxito usando el Cliente de Escritorio Remoto Remmina en Linux Mint. Instala el complemento Remmina-plugin-vnc a través del Gestor de Software
Ejecuta tu Cliente de Escritorio Remoto Remmina
Crea nuevas entradas. Si tienes la intención de conectarte por VNC a un par de contenedores Selenium concurrentemente, puedes configurar cada uno como lo siguiente:
| Clave | Valor |
|---|---|
| Nombre | seleniumstandalone_chrome_1 |
| Protocolo | VNC - Computación en Red Virtual |
| En la pestaña Básico | |
| Servidor | 127.0.0.1:5900 |
| Contraseña | secret |
| Profundidad de color | Color verdadero (24 bits) # Esta fue la única que funcionó para nosotros |
| Calidad | Pobre (más rápida) |
Más detalles en el github de SeleniumHQ
Una vez que los contenedores Selenium estén en ejecución (mantener docker stats ejecutándose en una terminal es conveniente para ver esto), puedes confirmar qué contenedor Selenium está usando qué puerto externo con docker container ls, ya que Docker no tiene idea de qué puertos has asignado a cuáles de tus entradas de cliente VNC, por lo que el nombre de una entrada de cliente VNC dada puede no coincidir necesariamente con el contenedor Selenium del mismo nombre. Por esta razón, es buena idea confirmar las asignaciones de puertos con docker container ls.
Para correlacionar qué contenedor Selenium se está utilizando para qué Sesión de Prueba cuando tienes múltiples Sesiones de Prueba, es posible que necesites revisar el registro del app-scanner en ejecución. También es posible que necesites asegurarte de que el app-scanner esté configurado en el nivel de registro debug para poder ver algunos o más de los siguientes mensajes de registro:
[app.parallel] cucCli process with PID "28" has been spawned for test session with Id "lowPrivUser"
[app.parallel] cucCli process with PID "34" has been spawned for test session with Id "adminUser"
[pid-28,world] seleniumContainerName is: seleniumstandalone_chrome_1
[pid-34,world] seleniumContainerName is: seleniumstandalone_chrome_2
En este ejemplo, tenemos dos Sesiones de Prueba configuradas en nuestra configuración de Usuario Build (Job). Una tiene un id de lowPrivUser y la otra tiene un id de adminUser. En este ejemplo, la Sesión de Prueba lowPrivUser tiene un proceso con PID 28 y la Sesión de Prueba adminUser tiene un proceso con PID 34.
En los dos mensajes de registro siguientes después de eso, vemos al correlacionar los PID que la Sesión de Prueba lowPrivUser está ejecutando un contenedor llamado seleniumstandalone_chrome_1 y la Sesión de Prueba adminUser está ejecutando un contenedor llamado seleniumstandalone_chrome_2.
No hay garantías sobre qué Sesión de Prueba ejecutará cuál de los contenedores seleniumstandalone_chrome_[n], así que si necesitas estar seguro, usa esta técnica de correlación.
Para conectarte por VNC a los contenedores Selenium, una vez que tengas Remmina ejecutándose, simplemente haz doble clic en una o más de las entradas VNC que creaste anteriormente y deberías poder ver el navegador siendo interactuado... siempre que los pasos de prueba de Cucumber en el app-scanner estén realmente en ese punto.
Por supuesto, puedes ralentizar tus pruebas, pausarlas, avanzar paso a paso con un depurador. Estos detalles están en la wiki de purpleteam en la página de flujo de trabajo
Localmente puedes mantener docker stats ejecutándose si lo deseas para poder ver qué contenedores se están ejecutando, cuándo se inician y detienen. Esto también te dará sus nombres para los siguientes comandos.
Para ver los registros del contenedor de la Etapa Dos, sigue stdout (y stderr, ya que Docker combina stdout y stderr) de un contenedor:
docker logs --follow [nombre-del-contenedor]
Si deseas enviar esos registros a un archivo también:
docker logs --follow [nombre-del-contenedor] |tee output.log$(date '+%Y-%m-%d_%T')
Si deseas enviar esos registros a un archivo sin verlos a través de tu terminal:
docker logs --follow [nombre-del-contenedor] > output.log$(date '+%Y-%m-%d_%T')
| Clave | Valor |
|---|
| Nombre | seleniumstandalone_chrome_2 |
| Protocolo | VNC - Computación en Red Virtual |
| En la pestaña Básico | |
| Servidor | 127.0.0.1:5901 |
| Contraseña | secret |
| Profundidad de color | Color verdadero (24 bits) # Esta fue la única que funcionó para nosotros |
| Calidad | Pobre (más rápida) |