Contenitori della fase due
Questi contenitori vengono avviati dinamicamente in base all'input di configurazione Build User (Job) fornito alla CLI di purpleteam, in particolare al numero di testSession che definisci.
Le seguenti configurazioni sono rilevanti se intendi eseguire il back-end di purpleteam nell'ambiente local. Nel cloud viene fatto tutto per te.
Clona questo repository.
Usiamo un file .env direttamente nella directory app-slave per i test.
ZAP_API_KEY
Assicurati di aver assegnato un valore alla variabile d'ambiente ZAP_API_KEY.
ZAP_API_KEY può essere qualsiasi cosa tu scelga, assicurati solo che, oltre a definirla per app-slave, la aggiunga anche alla configurazione del progetto app-scanner. Il progetto app-scanner richiede che la chiave API Zap sia configurata per autenticarsi a Zap in esecuzione nel contenitore Stage Two. Per il progetto app-scanner, deve essere impostata nel seguente modo:
{ "slave": { "apiKey": <zap-api-key-here> } }
HOST_ZAP_LOG4J_PROPERTIES_PATH e ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET
Se/quando hai bisogno dei log di debug di Zap, dovrai anche aggiungere le variabili d'ambiente per la configurazione di debug LOG4J.
File .env
Se scegli di utilizzare un file .env, l'aggiunta di tutte queste variabili d'ambiente sarebbe simile a quanto segue:
ZAP_API_KEY=<zap-api-key-here>
HOST_ZAP_LOG4J_PROPERTIES_PATH=<absolute-path-to/purpleteam-s2-containers/app-slave/log4j.properties>
ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET=/home/zap/.ZAP/log4j.properties
A patto che tu abbia impostato le variabili d'ambiente discusse sopra:
Per attivare il logging di debug per i contenitori app-slave (Zap) che vengono eseguiti nell'ambiente local, decommenta l'array volumes e l'elemento contenente la chiave source con la variabile d'ambiente HOST_ZAP_LOG4J_PROPERTIES_PATH.
Dettagli sotto per visualizzare effettivamente i log.
Puoi interagire con Zap (consultare l'interfaccia utente di Zap) mentre i tuoi test sono in esecuzione. In passato lo abbiamo trovato utile per verificare lo stato di Zap durante il debug di app-scanner.
docker stats
docker container ls
8080-8091 inclusi, come definito in docker-compose.yml.
zap:8080/*
http://zap:8080/zap nel contenitore specificato dalla porta host nella tua configurazione FoxyProxyPer attivare il logging di debug per i contenitori Selenium che vengono eseguiti nell'ambiente local, decommenta l'array environment e l'elemento SE_OPTS=-debug per chrome e/o firefox.
Dettagli sotto per visualizzare effettivamente i log.
Quanto segue delinea ciò che dovrai fare per visualizzare il browser all'interno di uno qualsiasi dei contenitori Selenium eseguiti da questo progetto.
-debug. Le immagini -debug potrebbero essere commentate, quindi è sufficiente commentare l'immagine normale e decommentare l'immagine con -debug aggiunto alla fine.5900. Specificando un intervallo come porta esterna (Es: 5900-5901) potrai connetterti in VNC a più di un contenitore contemporaneamente, nell'esempio abbiamo consentito l'apertura di due sessioni contemporaneamente. Se devi connetterti in VNC a più di due, allarga semplicemente l'intervallo di porte esterne.Avrai bisogno di un client VNC per aprire una connessione al server VNC all'interno del contenitore. Abbiamo avuto successo utilizzando Remmina Remote Desktop Client su Linux Mint. Installa Remmina-plugin-vnc tramite Software Manager.
Esegui il tuo Remmina Remote Desktop Client
Crea nuove voci. Se intendi connetterti in VNC a un paio di contenitori Selenium contemporaneamente, puoi configurarli come segue:
| Chiave | Valore |
|---|---|
| Name | seleniumstandalone_chrome_1 |
| Protocol | VNC - Virtual Network Computing |
| Nella scheda Base | |
| Server | 127.0.0.1:5900 |
| Password | secret |
| Profondità colore | True color (24 bit) # Questa è stata l'unica che ha funzionato per noi |
| Qualità | Poor (fastest) |
Ulteriori dettagli sul SeleniumHQ github
Una volta che i contenitori Selenium sono in esecuzione (tenere docker stats in esecuzione in un terminale è comodo per visualizzarlo), puoi confermare quale contenitore Selenium sta utilizzando quale porta esterna con docker container ls, poiché Docker non sa quali porte hai assegnato a quali voci del client VNC, quindi il nome di una determinata voce del client VNC potrebbe non corrispondere necessariamente al contenitore Selenium con lo stesso nome. Per questo motivo è una buona idea confermare i mapping delle porte con docker container ls.
Per correlare quale contenitore Selenium viene utilizzato per quale Test Session quando hai più Test Session, potrebbe essere necessario esaminare il log di app-scanner in esecuzione. Potrebbe anche essere necessario assicurarsi che app-scanner sia configurato con livello di log debug per vedere alcuni o più dei seguenti messaggi di log:
[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
In questo esempio abbiamo due Test Session configurate nel nostro Build User config (Job). Una ha un id di lowPrivUser e l'altra ha un id di adminUser. In questo esempio, la Test Session lowPrivUser ha un processo con PID 28 e la Test Session adminUser ha un processo con PID 34.
Nei due messaggi di log successivi vediamo, correlando i PID, che la Test Session lowPrivUser sta eseguendo un contenitore chiamato seleniumstandalone_chrome_1 e la Test Session adminUser sta eseguendo un contenitore chiamato seleniumstandalone_chrome_2.
Non ci sono garanzie su quale Test Session eseguirà quale dei contenitori seleniumstandalone_chrome_[n], quindi se hai bisogno di essere sicuro, usa questa tecnica di correlazione.
Per connetterti in VNC ai contenitori Selenium, una volta che Remmina è in esecuzione, fai semplicemente doppio clic su una o più delle voci VNC che hai creato sopra e dovresti essere in grado di vedere il browser mentre viene interagito... a condizione che i passaggi del test Cucumber in app-scanner siano effettivamente arrivati a quel punto.
Ovviamente puoi rallentare i tuoi test, metterli in pausa, eseguirli passo passo con un debugger. Questi dettagli si trovano nella wiki di purpleteam nella pagina del workflow
In locale, puoi tenere in esecuzione docker stats se vuoi, così puoi vedere quali contenitori sono in esecuzione, quando vengono avviati e arrestati. Questo ti darà anche i loro nomi per i comandi successivi.
Per visualizzare i log del contenitore Stage Two, segui stdout (e stderr, poiché Docker unisce stdout e stderr) di un contenitore:
docker logs --follow [container-name]
Se desideri anche inviare quei log a un file:
docker logs --follow [container-name] |tee output.log$(date '+%Y-%m-%d_%T')
Se desideri inviare quei log a un file senza visualizzarli tramite il tuo terminale:
docker logs --follow [container-name] > output.log$(date '+%Y-%m-%d_%T')
| Chiave | Valore |
|---|
| Name | seleniumstandalone_chrome_2 |
| Protocol | VNC - Virtual Network Computing |
| Nella scheda Base | |
| Server | 127.0.0.1:5901 |
| Password | secret |
| Profondità colore | True color (24 bit) # Questa è stata l'unica che ha funzionato per noi |
| Qualità | Poor (fastest) |