Configuração de varreduras ZAP
O Zed Attack Proxy (ZAP) é uma ferramenta de teste de penetração (PEN) gratuita e de código aberto mantida sob a égide da OWASP.O ZAP é um proxy "man-in-the-middle" que fica entre o navegador da Web do testador e um servidor da Web. O ZAP intercepta os pacotes, modifica o conteúdo, se necessário, e encaminha esses pacotes para o servidor da Web.
Execução de varreduras ZAP
Você pode criar um script específico para iniciar as varreduras do ZAP, como trigger_zap_scans dentro do repositório do aplicativo, em um local de sua escolha, por exemplo, dentro de um diretório scripts e invocar esse
script no estágio dynamic-scan do arquivo pipeline-config.
Você pode personalizar o arquivo de script trigger_zap_scans para invocar a varredura zap adequada (api ou ui), conforme descrito aqui, e confiar
no script de execução de varredura zap comum para executar uma varredura ZAP (ui ou api) para executar testes de penetração no seu aplicativo
em execução.
Uma maneira alternativa é executar a(s) varredura(s) do zap em um subpipeline, conforme definido na implementação de referência, consulte hello-compliance-app.
Com essa configuração no arquivo de configuração do pipeline, o estágio dynamic-scan invocará o script trigger-async-zap.sh para acionar o estágio owasp-zap para iniciar a varredura da ferramenta Zed Attack
Proxy (ZAP) em um subpipeline dedicado. Ele também conta com um script de execução de varredura de zap comum para executar uma varredura de ZAP (ui ou api) para executar testes de penetração em seu aplicativo em execução.
Parâmetros disponíveis para varreduras ZAP
Você pode definir e personalizar os seguintes parâmetros para configurar as varreduras do ZAP para executar testes de penetração em seu aplicativo em execução.
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
cluster-name |
Sequência | O nome do cluster no qual você deseja que o scanner zap seja implantado e executado, se não estiver sendo executado em DinD. | Necessário se não estiver sendo executado em DinD,, ou seja, zap-dind está definido como false. |
ibmcloud-api |
Sequência | Especifica o ambiente de nuvem para o cluster do ZAP. O padrão é https://cloud.ibm.com |
Necessário se não estiver sendo executado em DinD,, ou seja, zap-dind está definido como false. |
ibmcloud-api-key |
Sequência | Chave de API para implantar o ZAP em um cluster. | Necessário se não estiver sendo executado em DinD,, ou seja, zap-dind está definido como false. |
iam-token-endpoint |
Sequência | O ponto de extremidade para recuperar o token para autenticação do IAM. O padrão é https://iam.cloud.ibm.com/identity/token |
Opcional, mas se fornecido, target-api-key também deve ser fornecido. |
target-api-key |
Sequência | Chave de API para autenticação do IAM. | Opcional, mas se fornecido, iam-token-endpoint também deve ser fornecido. |
target-application-server-url |
Sequência | A base URL do servidor de aplicativos para que o zap faça a varredura. Ele pode ser o mesmo que o URL do aplicativo implantado. | Obrigatório |
filter-options |
Sequência | Configure-o para filtrar os alertas com base na gravidade. Valores possíveis: Critical, High, Medium, Low, Informational. O padrão é Informational, pode ser
uma lista separada por vírgulas. |
Opcional |
zap-custom-api-policy-file-path |
Sequência | Caminho relativo no repositório para o arquivo de política personalizado (formato XML) para varreduras da API ZAP. Se isso não for definido, a política padrão API-Minimal.policy será usada. |
Opcional |
zap-custom-ui-policy-file-path |
Sequência | Caminho relativo no repositório para o arquivo de política personalizado (formato XML) usado nas varreduras da UI do ZAP. Se esse caminho não for definido, será usada a política padrão default.policy. |
Opcional |
zap-ui-scan |
Sequência | Sinalizador para determinar se a varredura é a varredura da interface do usuário ou a varredura da API. Valores possíveis: true, false. Definir esse sinalizador como true executa a varredura da interface
do usuário e defini-lo como falso executa a varredura da API. Esse parâmetro funciona com os parâmetros opt-in-dynamic-api-scan e opt-in-dynamic-ui-scan. |
Obrigatório |
zap_dind |
Sequência | Sinalizador para alternar entre a implantação do ZAP em um cluster ou a execução do DinD. Padrão: true. Valores possíveis: true, false. Configurá-lo para true executa o ZAP como DinD,.
Configurá-lo para false implementa o ZAP em um cluster para o qual cluster-name, ibmcloud-api e ibmcloud-api-key devem ser definidos. |
Opcional |
zap-dind-localhost |
Sequência | Nome do host para os scanners ZAP quando executados em DinD, padrão: localhost. |
Opcional |
zap-namespace |
Sequência | Namespace para implantar a API ZAP e os scanners de UI no cluster, padrão: zap. |
Opcional para execução do ZAP em cluster, Not required para execução do ZAP em DinD. |
zap-polling-interval |
Sequência | Intervalo para os scanners pesquisarem o ZAP para a conclusão da varredura, padrão: 120s. |
Opcional |
zap-artifact |
Sequência | A chave do ativo para o artefato que deve ser escaneado por zapping e para o qual o collect-evidence deve ser chamado. O valor padrão é app-image. |
Opcional |
zap_evidence_type |
Sequência | O tipo de evidência para coleta de evidências para varreduras realizadas pelo ZAP, padrão: com.ibm.dynamic_scan. |
Opcional |
show-container-log |
Sequência | Sinalizador para ativar ou desativar o recurso de registro de contêineres para os scanners ZAP ao serem executados em DinD, padrão: false. |
Opcional |
show-zap-log |
Sequência | Sinalizador para ativar ou desativar o recurso de registro do servidor ZAP, padrão: false. |
Opcional |
Configuração de varreduras da API ZAP
No repositório do seu aplicativo, você deve ter pelo menos um arquivo de definição de API no formato json. Esse arquivo de definição de API precisa ser uma definição válida de swagger ou openapi. Esses
arquivos podem estar presentes em qualquer local dentro do repositório de aplicativos, por exemplo, em um diretório definitions. Para maior clareza, esses arquivos são mencionados da seguinte forma: definitions1.json,
definitions2.json, e assim por diante.
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
zap-api-custom-script |
Sequência | Caminho para o arquivo que contém a lógica de transformação da solicitação antes de iniciar a varredura da API ZAP. | Obrigatório |
swagger-definition-files |
Sequência | Caminho para os arquivos que contêm as definições do Swagger. Pode ser uma lista separada por vírgulas. | Obrigatório |
zap-api-port |
Sequência | Porta para executar o scanner da API do ZAP quando implantado em um cluster, padrão: 9086. |
Opcional |
zap_api_deployment_name |
Sequência | Nome da implantação do scanner de API ZAP, padrão: zap-api-deployment. |
Opcional |
zap-api-image |
Sequência | Defina esse parâmetro para usar uma imagem personalizada do scanner da API ZAP. Caso contrário, será usado o padrão IBM. | Opcional |
flatten-zap-api-scan-report |
Sequência | Defina esse parâmetro como true para nivelar os resultados da varredura da API ZAP em um único arquivo html e json. Padrão false. |
Opcional |
Crie um arquivo custom-api-script dentro do repositório do seu aplicativo, em um local de sua escolha, por exemplo, dentro do diretório scripts/zap-custom-scripts. Esse arquivo também pode ter um nome diferente e definir
o caminho para esse arquivo com o parâmetro zap-api-custom-script.
Use o arquivo custom-api-script para modificar a solicitação que vai para o scanner ZAP. Os parâmetros que podem ser usados na carga útil da solicitação são os seguintes:
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
excludeScanTypes |
Matriz | Lista de varreduras que o usuário deseja excluir. Lista completa de varreduras para você escolher: CRLF_Injection,Buffer_Overflow, Directory_Browsing, External_Redirect, Format_String_Error,
Parameter_Tampering, Remote_File_Inclusion, Script_Active_Scan, Server_Side_Code_Injection, Server_Side_Include, SQL_Injection, Xpath_Injection,
XXE_External_Entity, SOAP_Action_Spoofing, SOAP_XML_Injection, Relative_Path_Confusion, Remote_OS_Command_Injection, ElmahScanRule e HtAccessScanRule. |
Opcional |
apisToScan |
Matriz | Lista de APIs a serem examinadas juntamente com os parâmetros necessários. Se "apisToScan": ["all"] for mencionado, todas as APIs mencionadas na definição do swagger serão verificadas com dados simulados
para parâmetros/corpo obrigatórios. Para personalizar essa matriz para ter APIs seletivas a serem examinadas, use esta subestrutura apisToScan: [ { "path": "/path/to/endpoint", method: "get" } ]. |
Obrigatório |
globalExcludeUrls |
Matriz | Matriz de URL regexes para instruir o ZAP a não procurar essas rotas. Por exemplo, "globalExcludeUrls": [ "^http://foo.bar$", "^http://john.doe$" ]. |
Opcional |
authenticationType |
Sequência | Mecanismo de autenticação para cabeçalhos de solicitação. Os mecanismos de autenticação compatíveis são Bearer, Basic ou ApiKey. |
Opcional |
apiKey |
Sequência | Se authenticationType não for enviado, essa chave de API será usada para a autenticação do IAM que é enviada no cabeçalho Authorization para todas as solicitações. Se authenticationType for definido como Bearer,
o cabeçalho formado será Authorization: Bearer <apiKey>. Se authenticationType for definido como ApiKey, o cabeçalho formado será Authorization: <apiKey>. O campo é ignorado
para authenticationType como Basic. |
Opcional |
username |
Sequência | Nome de usuário a ser usado para authenticationType Basic. |
Obrigatório se authenticationType for Basic |
password |
Sequência | Senha a ser usada para authenticationType Basic. |
Obrigatório se authenticationType for Basic |
Para informações confidenciais, como credenciais, você deve ler esses valores em um cofre ou em um armazenamento secreto.
Configuração de varreduras da UI do ZAP
Defina o parâmetro zap-ui-scan como true para que a varredura da UI do ZAP seja executada.
Os parâmetros necessários para configurar as varreduras da interface do usuário do ZAP são os seguintes.
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
zap-ui-custom-script |
Sequência | Caminho para o arquivo que contém a lógica de modificação da carga útil da varredura da interface do usuário, se necessário, antes que a varredura da interface do usuário do ZAP seja iniciada. | Opcional |
zap-ui-script-directory |
Sequência | Caminho para o diretório que contém os testes da interface do usuário e os arquivos necessários para executar a varredura da interface do usuário. | Obrigatório |
context-file |
Sequência | Caminho para um arquivo de contexto personalizado para varreduras da interface do usuário fornecidas ao ZAP. | Opcional |
zap-ui-auth-user |
Sequência | Nome de usuário a ser usado para autorizar e executar o zap ui scan como. Isso requer o fornecimento do endereço context-file, que também deve conter as informações sobre a forma de autenticar esse usuário. |
Opcional |
zap-ui-port |
Sequência | Porta para executar o scanner da UI do ZAP quando implantado em um cluster, padrão: 9085. |
Opcional |
zap_ui_deployment_name |
Sequência | Nome da implantação do scanner da UI do ZAP, padrão: zap-ui-deployment. |
Opcional |
zap-proxy-service |
Sequência | Nome do serviço ZAP Proxy exigido pelo scanner da interface do usuário, padrão: zap-proxy-service. |
Opcional |
zap-ui-image |
Sequência | Defina esse parâmetro para usar uma imagem personalizada do scanner ZAP UI. Caso contrário, será usado o padrão IBM. | Opcional |
zap-proxy-image |
Sequência | Defina isso para usar uma imagem personalizada do ZAP Proxy. Caso contrário, será usado o padrão IBM. | Opcional |
Crie uma pasta uiscripts dentro do diretório scripts/zap em seu repositório de aplicativos. Defina também esse caminho de pasta em relação a zap-ui-script-directory no arquivo trigger_zap_scans.
Essa pasta também pode ser criada em qualquer outro lugar. O caminho deve ser ajustado para zap-ui-script-directory.
Crie um arquivo run.sh dentro do diretório uiscripts. O run.sh conduz os testes de interface do usuário. Podemos configurar testes baseados no Protractor ou em qualquer outra estrutura adequada.
Crie um arquivo export.sh dentro do diretório uiscripts. Esse arquivo contém todas as diferentes variáveis de ambiente que são necessárias para o uso da estrutura de teste. Defina esses valores de ambiente adicionando
export <VARIABLE_NAME>=<VALUE>.
Para manter todas as informações de configuração da estrutura de teste, crie uma pasta conf dentro do diretório uiscripts para abrigar as informações de configuração da estrutura de teste.
Para obter uma implementação de referência que usa o Protractor como estrutura de teste, consulte hello-compliance-app.
Gerenciamento dos resultados do ZAP Scan
Com base no valor dos parâmetros opt-in-dynamic-api-scan e opt-in-dynamic-ui-scan, podemos optar por executar seletivamente a varredura de API, a varredura de UI ou ambas.
Por exemplo, dentro do arquivo trigger_zap_scans, é possível acionar varreduras individuais com base nos parâmetros de adesão da seguinte forma.
if [ -n "$(get_env opt-in-dynamic-api-scan "")" ]; then
# start the api scan
set_env "zap-ui-scan" "false"
source "${COMMONS_PATH}"/owasp-zap/run_scan.sh
fi
if [ -n "$(get_env opt-in-dynamic-ui-scan "")" ]; then
# set for zap-ui-scans and start zap-ui-scan
set_env "zap-ui-scan" "true"
source "${COMMONS_PATH}"/owasp-zap/run_scan.sh
fi
O COMMONS_PATH refere-se a um local que contém os scripts de compilação e os scripts de execução de várias ferramentas que fazem parte do pipeline DevSecOps. Para obter mais informações, consulte Scripts comuns.
Você pode calcular o sucesso da varredura ZAP definindo um código de saída com base na execução da varredura de API ou da varredura de UI. Todas as vulnerabilidades encontradas também são relatadas. Isso pode ser verificado acessando as variáveis
api-scan-result e ui-scan-result.
Os valores possíveis que esses parâmetros podem assumir são success ou failure, e o padrão é notRun.
ZAP_API_RESULT=$(get_env api-scan-result "notRun")
ZAP_UI_RESULT=$(get_env ui-scan-result "notRun")
if [[ "${ZAP_API_RESULT}" =~ ^(success|notRun)$ && "${ZAP_UI_RESULT}" =~ ^(success|notRun)$ ]]; then
exit 0
else
exit 1
fi
Configuração do escaneamento ZAP para o pipeline CC
A tabela a seguir lista os parâmetros adicionais necessários para executar varreduras ZAP dentro do pipeline CC.
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
app-url |
Sequência | URL do aplicativo implantado no qual a varredura ZAP é executada. Use a url staging do aplicativo. |
Obrigatório |
repo-url |
Sequência | URL do repositório do aplicativo implantado. | Opcional, se o site inventory repo tiver todos os artefatos de apenas um repositório de aplicativos. |
Configuração de varreduras da interface do usuário do Zap para usar imagens de teste da interface do usuário personalizadas sem compactar os testes da interface do usuário
A tabela a seguir lista os parâmetros adicionais necessários para configurar as varreduras de UI do ZAP para usar imagens de teste de UI personalizadas.
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
zap-custom-ui-deployment-name |
Sequência | Nome personalizado do contêiner do docker da interface do usuário. | Opcional |
zap-custom-ui-docker-run-param |
Sequência | Docker executar parâmetros para executar a imagem de IU personalizada. | Opcional |
zap-custom-ui-exit-code-ignored |
Sequência | A interface do usuário do Zap é encerrada com o código de saída da interface do usuário personalizada, mas seu código de saída será ignorado se essa variável for definida como true. |
Opcional |
zap-custom-ui-image |
Sequência | Imagem da janela de encaixe da interface do usuário personalizada que executa testes. | Obrigatório |
zap-custom-ui-post-script |
Sequência | Script a ser executado após a execução da imagem da IU personalizada. | Opcional |
zap-custom-ui-pre-script |
Sequência | Script a ser executado antes de executar a imagem da IU personalizada. | Opcional |
zap-custom-ui-progress-script |
Sequência | Script a ser executado durante a execução da imagem da IU personalizada. | Opcional |
zap-custom-ui-timeout-in-sec |
Sequência | O escaneamento da interface do usuário do Zap é encerrado após esse tempo. | Opcional |
Essa etapa de varredura de UI personalizada serve para usar as imagens de docker de UI personalizadas do usuário para testar as varreduras de UI do zap, em vez de colocar as informações da imagem de docker no arquivo zip, que é o caso padrão.
zap-custom-ui-image é a variável de ambiente necessária a ser definida para configurar as varreduras de UI do ZAP para usar imagens de teste de UI personalizadas.