Containers da segunda fase
Estes contêineres são iniciados dinamicamente com base na entrada do Build User config (Job) fornecida à CLI do purpleteam, especificamente o número de testSessions que você define.
As seguintes configurações são relevantes se você pretende executar o back-end do purpleteam no ambiente local. Na nuvem, tudo isso é feito para você.
Clone este repositório.
Usamos um arquivo .env diretamente no diretório app-slave para teste.
ZAP_API_KEY
Certifique-se de ter atribuído um valor à variável de ambiente ZAP_API_KEY.
A ZAP_API_KEY pode ser o que você escolher, apenas certifique-se de que, além de defini-la para o app-slave, você também a adicione à configuração do projeto app-scanner. O projeto app-scanner requer que a Chave de API do Zap seja configurada para autenticar no Zap em execução no contêiner do Estágio Dois. Para o projeto app-scanner, isso precisa ser definido da seguinte forma:
{ "slave": { "apiKey": <zap-api-key-aqui> } }
HOST_ZAP_LOG4J_PROPERTIES_PATH e ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET
Se/quando você precisar de logs de depuração do Zap, também precisará adicionar as variáveis de ambiente para a configuração de depuração do LOG4J.
Arquivo .env
Se você optar por usar um arquivo .env, adicionar todas essas variáveis de ambiente seria semelhante ao seguinte:
ZAP_API_KEY=<zap-api-key-aqui>
HOST_ZAP_LOG4J_PROPERTIES_PATH=<caminho-absoluto-para/purpleteam-s2-containers/app-slave/log4j.properties>
ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET=/home/zap/.ZAP/log4j.properties
Desde que você tenha estabelecido as variáveis de ambiente discutidas acima:
Para ativar o log de depuração para os contêineres app-slave (Zap) que são executados no ambiente local, descomente o array volumes e o elemento que contém a chave source com a variável de ambiente HOST_ZAP_LOG4J_PROPERTIES_PATH.
Detalhes abaixo para realmente visualizar os logs.
Você pode interagir com o Zap (consultar a interface do Zap) enquanto seus testes estão em execução. Já achamos isso útil no passado para verificar o estado do Zap durante a depuração do app-scanner.
docker stats
docker container ls
8080-8091 inclusive, conforme definido no docker-compose.yml.
zap:8080/*
http://zap:8080/zap no contêiner especificado pela porta do host na sua configuração do FoxyProxyPara ativar o log de depuração para os contêineres Selenium que são executados no ambiente local, descomente o array environment e o elemento SE_OPTS=-debug para chrome e/ou firefox.
Detalhes abaixo para realmente visualizar os logs.
O seguinte descreve o que você precisará fazer para visualizar o navegador dentro de qualquer um dos contêineres Selenium executados a partir deste projeto.
-debug. As imagens -debug podem estar comentadas, então basta comentar a imagem usual e descomentar a imagem com -debug anexado ao final5900. Ao especificar uma faixa como porta externa (Ex: 5900-5901), você poderá se conectar via VNC a mais de um contêiner ao mesmo tempo; no exemplo, permitimos a abertura de duas sessões simultaneamente. Se você precisar se conectar via VNC a mais de dois, basta ampliar a faixa de portas externasVocê precisará de um cliente VNC para abrir uma conexão com o servidor VNC dentro do contêiner. Tivemos sucesso com o Remmina Remote Desktop Client no Linux Mint. Instale o Remmina-plugin-vnc via Gerenciador de Software
Execute seu Remmina Remote Desktop Client
Crie novas entradas. Se você pretende se conectar via VNC a alguns contêineres Selenium simultaneamente, pode configurar cada um como o seguinte:
| Chave | Valor |
|---|---|
| Nome | seleniumstandalone_chrome_1 |
| Protocolo | VNC - Virtual Network Computing |
| Na aba Básico | |
| Servidor | 127.0.0.1:5900 |
| Senha | secret |
| Profundidade de cor | True color (24 bit) # Esta foi a única que funcionou para nós |
| Qualidade | Ruim (mais rápida) |
Mais detalhes no github do SeleniumHQ
Assim que os contêineres Selenium estiverem em execução (manter docker stats em execução em um terminal é conveniente para visualizar isso), você pode confirmar qual contêiner Selenium está usando qual porta externa com docker container ls, pois o Docker não tem ideia de quais portas você atribuiu a quais entradas do seu cliente VNC, então o nome de uma determinada entrada do cliente VNC pode não corresponder necessariamente ao contêiner Selenium com o mesmo nome. Por esse motivo, é uma boa ideia confirmar os mapeamentos de porta com docker container ls.
Para correlacionar qual contêiner Selenium está sendo usado para qual Sessão de Teste quando você tem várias Sessões de Teste, pode ser necessário revisar o log do app-scanner em execução. Você também pode precisar garantir que o app-scanner esteja configurado para o nível de log debug para ver algumas ou mais das seguintes mensagens de log:
[app.parallel] processo cucCli com PID "28" foi gerado para sessão de teste com Id "lowPrivUser"
[app.parallel] processo cucCli com PID "34" foi gerado para sessão de teste com Id "adminUser"
[pid-28,world] seleniumContainerName é: seleniumstandalone_chrome_1
[pid-34,world] seleniumContainerName é: seleniumstandalone_chrome_2
Neste exemplo, temos duas Sessões de Teste configuradas no nosso Build User config (Job). Uma tem um id de lowPrivUser e a outra tem um id de adminUser. Neste exemplo, a Sessão de Teste lowPrivUser tem um processo com PID 28 e a Sessão de Teste adminUser tem um processo com PID 34.
Nas duas mensagens de log seguintes, vemos ao correlacionar os PIDs que a Sessão de Teste lowPrivUser está executando um contêiner chamado seleniumstandalone_chrome_1 e a Sessão de Teste adminUser está executando um contêiner chamado seleniumstandalone_chrome_2.
Não há garantias sobre qual Sessão de Teste executará qual dos contêineres seleniumstandalone_chrome_[n], portanto, se você precisar ter certeza, use esta técnica de correlação.
Para se conectar por VNC aos contêineres Selenium, uma vez que você tenha o Remmina em execução, basta clicar duas vezes em uma ou mais entradas VNC que criou acima e você deverá ver o navegador sendo interagido... desde que as etapas do teste Cucumber no app-scanner estejam realmente nesse ponto.
Você pode, é claro, desacelerar seus testes, pausá-los, percorrê-los com um depurador. Esses detalhes estão na wiki do purpleteam na página de workflow
Localmente, você pode manter docker stats em execução se quiser para ver quais contêineres estão em execução, quando estão sendo iniciados e parados. Isso também fornecerá seus nomes para os comandos a seguir.
Para visualizar os logs do contêiner do Estágio Dois, monitore o stdout (e stderr, já que o Docker mescla stdout e stderr) de um contêiner:
docker logs --follow [nome-do-contêiner]
Se quiser enviar esses logs para um arquivo também:
docker logs --follow [nome-do-contêiner] |tee output.log$(date '+%Y-%m-%d_%T')
Se quiser enviar esses logs para um arquivo sem visualizá-los pelo terminal:
docker logs --follow [nome-do-contêiner] > output.log$(date '+%Y-%m-%d_%T')
| Chave | Valor |
|---|
| Nome | seleniumstandalone_chrome_2 |
| Protocolo | VNC - Virtual Network Computing |
| Na aba Básico | |
| Servidor | 127.0.0.1:5901 |
| Senha | secret |
| Profundidade de cor | True color (24 bit) # Esta foi a única que funcionou para nós |
| Qualidade | Ruim (mais rápida) |