IBM Cloud Docs
Configuración de exploraciones ZAP

Configuración de exploraciones ZAP

Zed Attack Proxy (ZAP) es una herramienta de pruebas de penetración de código abierto (PEN) que se mantiene bajo el paraguas de OWASP. ZAP es un proxy "man-in-the-middle" que se encuentra entre el navegador web del verificador y un servidor web. ZAP intercepta paquetes, modifica el contenido si es necesario y reenvía esos paquetes al servidor web.

Parámetros disponibles para exploraciones ZAP

Cree un archivo trigger_zap_scans dentro del repositorio de aplicaciones, en una ubicación de su elección, por ejemplo, dentro de un directorio scripts.

Establezca los valores para los parámetros correspondientes añadiendo estas líneas a trigger_zap_scans como se indica a continuación- set_env <parameter name> <value>. Para obtener más información sobre una implementación de referencia, consulte hello-compliance-app.

Puede establecer y personalizar los parámetros siguientes para configurar exploraciones ZAP para ejecutar pruebas de penetración en la app en ejecución.

Tabla 1. Parámetros de configuración de exploración de ZAP
Nombre Tipo Descripción Obligatoria u opcional
cluster-name Serie El nombre del clúster donde desea que se despliegue y se ejecute el explorador zap, si no se ejecuta en DinD. Necesario si no se ejecuta en DinD, es decir, zap-dind se establece en false.
ibmcloud-api Serie Especifica el entorno de nube para el clúster ZAP. El valor predeterminado es https://cloud.ibm.com Necesario si no se ejecuta en DinD, es decir, zap-dind se establece en false.
ibmcloud-api-key Serie Clave de API para desplegar ZAP en un clúster. Necesario si no se ejecuta en DinD, es decir, zap-dind se establece en false.
iam-token-endpoint Serie El punto final para recuperar la señal para la autenticación de IAM. El valor predeterminado es https://iam.cloud.ibm.com/identity/token Opcional, pero si se proporciona, también se debe proporcionar target-api-key.
target-api-key Serie Clave de API para la autenticación de IAM. Opcional, pero si se proporciona, también se debe proporcionar iam-token-endpoint.
target-application-server-url Serie El URL base del servidor de aplicaciones para que zap escanee. Puede ser el mismo que el URL de la aplicación desplegada. Obligatorio
filter-options Serie Establézcalo para filtrar las alertas en función de la gravedad. Valores posibles: Critical, High, Medium, Low, Informational. El valor predeterminado es Informational, puede ser una lista separada por comas. Opcional
zap-custom-api-policy-file-path Serie Vía de acceso relativa en el repositorio al archivo de políticas personalizadas (formato XML) para exploraciones de API de ZAP. Si no se establece, se utilizará la política predeterminada API-Minimal.policy. Opcional
zap-custom-ui-policy-file-path Serie Vía de acceso relativa en el repositorio para el archivo de políticas personalizadas (formato XML) utilizado en las exploraciones de interfaz de usuario de ZAP. Si no se establece esta vía de acceso, se utilizará la política predeterminada default.policy. Opcional
zap-ui-scan Serie Distintivo para determinar si la exploración es la exploración de interfaz de usuario o la exploración de API. Valores posibles: true, false. Si se establece este distintivo en true se ejecuta la exploración de interfaz de usuario, si se establece en false se ejecuta la exploración de API. Este parámetro funciona con los parámetros opt-in-dynamic-api-scan y opt-in-dynamic-ui-scan. Obligatorio
zap_dind Serie Distintivo para conmutar entre desplegar ZAP en un clúster o ejecutar DinD. Valor predeterminado: true. Valores posibles: true, false. Si se establece en true ejecuta ZAP como DinD, si se establece en false despliega ZAP en un clúster para el que se deben establecer cluster-name, ibmcloud-api y ibmcloud-api-key. Opcional
zap-dind-localhost Serie Nombre de host para exploradores ZAP cuando se ejecuta en DinD, valor predeterminado: localhost. Opcional
zap-namespace Serie Espacio de nombres para desplegar exploradores de interfaz de usuario y API de ZAP en el clúster, valor predeterminado: zap. Opcional para ejecutar ZAP en clúster, Not required para ZAP que se ejecuta en DinD.
zap-polling-interval Serie Intervalo para que los exploradores sondeen ZAP para la finalización de la exploración, valor predeterminado: 120s. Opcional
zap-artifact Serie La clave de activo para el artefacto que se va a explorar en zap y para el que se va a invocar la prueba de recopilación. El valor predeterminado es app-image. Opcional
zap_evidence_type Serie El tipo de pruebas para la recopilación de pruebas para los escaneos realizados por ZAP, valor predeterminado: com.ibm.dynamic_scan. Opcional
show-container-log Serie Distintivo para habilitar o inhabilitar la capacidad de registro de contenedor para los exploradores ZAP cuando se ejecuta en DinD, valor predeterminado: false. Opcional
show-zap-log Serie Distintivo para habilitar o inhabilitar la capacidad de registro del servidor ZAP, valor predeterminado: false. Opcional

Configuración de exploraciones de API de ZAP

Dentro del repositorio de aplicaciones, debe tener al menos un archivo de definición de API presente, en formato json. Este archivo de definición de API debe ser una definición swagger o openapi válida. Estos archivos pueden estar presentes en cualquier ubicación dentro del repositorio de aplicaciones, por ejemplo, dentro de un directorio definitions. Para mayor claridad, se hace referencia a estos archivos como se indica a continuación: definitions1.json, definitions2.json, etc.

Se necesitan más parámetros para configurar las exploraciones de API de ZAP. Estos parámetros se pueden establecer añadiendo las líneas siguientes a trigger_zap_scans como se indica a continuación- set_env <parameter name> <value>.

Tabla 2. Parámetros de configuración de la API de ZAP
Nombre Tipo Descripción Obligatoria u opcional
zap-api-custom-script Serie Vía de acceso al archivo que contiene la lógica de transformación de solicitud antes de iniciar la exploración de la API de ZAP. Obligatorio
swagger-definition-files Serie Vía de acceso a los archivos que contienen las definiciones de Swagger. Puede ser una lista separada por comas. Obligatorio
zap-api-port Serie Puerto para ejecutar el explorador de API de ZAP cuando se despliega en un clúster, valor predeterminado: 9086. Opcional
zap_api_deployment_name Serie Nombre del despliegue del explorador de API de ZAP, valor predeterminado: zap-api-deployment. Opcional
zap-api-image Serie Establezca este parámetro para utilizar una imagen de escáner de API ZAP personalizada. De lo contrario, se utiliza el valor predeterminado de IBM. Opcional
flatten-zap-api-scan-report Serie Establezca este parámetro en true para aplanar los resultados de exploración de la API ZAP en un único archivo html y json. false predeterminado. Opcional

Cree un archivo custom-api-script dentro del repositorio de aplicaciones, en una ubicación de su elección, por ejemplo, dentro del directorio scripts/zap-custom-scripts. Este archivo también se puede denominar de forma diferente y establecer la vía de acceso a este archivo en el parámetro zap-api-custom-script.

Utilice el archivo custom-api-script para modificar la solicitud que entra en el explorador ZAP. Los parámetros que se pueden utilizar en la carga útil de solicitud son los siguientes:

Tabla 3. Parámetros en la carga útil de solicitud
Nombre Tipo Descripción Obligatoria u opcional
excludeScanTypes Matriz Lista de exploraciones que el usuario desea excluir. Lista completa de exploraciones entre las que elegir: 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 y, HtAccessScanRule. Opcional
apisToScan Matriz Lista de las API a explorar junto con los parámetros necesarios. Si se menciona "apisToScan": ["all"], todas las API mencionadas en la definición de swagger se exploran con datos simulados para parámetros/cuerpo obligatorios. Para personalizar esta matriz para que las API selectivas se exploren, utilice esta subestructura apisToScan: [ { "path": "/path/to/endpoint", method: "get" } ]. Obligatorio
globalExcludeUrls Matriz Matriz de expresiones URL para indicar a ZAP que no explore estas rutas. Por ejemplo, "globalExcludeUrls": [ "^http://foo.bar$", "^http://john.doe$" ]. Opcional
authenticationType Serie Mecanismo de autenticación para cabeceras de solicitud. Los mecanismos de autenticación soportados son Bearer, Basic o ApiKey. Opcional
apiKey Serie Si no se envía authenticationType, esta clave de API se utiliza para la autenticación de IAM que se envía en la cabecera de autorización para todas las solicitudes. Si authenticationType se establece en Bearer, la cabecera que se forma es Authorization: Bearer <apiKey>. Si authenticationType se establece en ApiKey, la cabecera que se forma es Authorization: <apiKey>. El campo se ignora para authenticationType como Basic. Opcional
username Serie Nombre de usuario que se utilizará para authenticationType Basic. Necesario si authenticationType como Basic
password Serie Contraseña que se utilizará para authenticationType Basic. Necesario si authenticationType como Basic

Para información confidencial como las credenciales, debe leer estos valores de una caja fuerte o un almacén de secretos.

Configuración de exploraciones de IU de ZAP

De forma similar a la configuración de exploraciones de API de ZAP, cree o actualice el archivo trigger_zap_scans dentro del repositorio de aplicaciones, en una ubicación de su elección, por ejemplo, dentro de un directorio scripts.

Establezca los valores para los parámetros correspondientes añadiendo estas líneas a trigger_zap_scans como se indica a continuación- set_env <parameter name> <value>. Para obtener más información sobre una implementación de referencia, consulte hello-compliance-app.

Establezca el parámetro zap-ui-scan en true para que se ejecute la exploración de la interfaz de usuario de ZAP.

Los parámetros necesarios para configurar las exploraciones de interfaz de usuario de ZAP son los siguientes.

Tabla 4. Parámetros de configuración de la interfaz de usuario de ZAP
Nombre Tipo Descripción Obligatoria u opcional
zap-ui-custom-script Serie Vía de acceso al archivo que contiene la lógica de modificación para la carga útil de exploración de IU, si es necesario, antes de que se inicie la exploración de IU de ZAP. Opcional
zap-ui-script-directory Serie Vía de acceso al directorio que contiene las pruebas de interfaz de usuario y los archivos necesarios para ejecutar el escaneo de interfaz de usuario. Obligatorio
context-file Serie Vía de acceso a un archivo de contexto personalizado para exploraciones de interfaz de usuario proporcionadas a ZAP. Opcional
zap-ui-port Serie Puerto para ejecutar el explorador de interfaz de usuario ZAP cuando se despliega en un clúster, valor predeterminado: 9085. Opcional
zap_ui_deployment_name Serie Nombre del despliegue del explorador de interfaz de usuario de ZAP, valor predeterminado: zap-ui-deployment. Opcional
zap-proxy-service Serie Nombre del servicio de proxy ZAP necesario para el explorador de interfaz de usuario, valor predeterminado: zap-proxy-service. Opcional
zap-ui-image Serie Establezca este parámetro para utilizar una imagen de escáner de interfaz de usuario ZAP personalizada. De lo contrario, se utiliza el valor predeterminado de IBM. Opcional
zap-proxy-image Serie Establézcalo para utilizar una imagen de proxy ZAP personalizada. De lo contrario, se utiliza el valor predeterminado de IBM. Opcional

Cree una carpeta uiscripts dentro del directorio scripts/zap dentro del repositorio de aplicaciones. Establezca también esta vía de acceso de carpeta en zap-ui-script-directory en el archivo trigger_zap_scans. Esta carpeta también se puede crear en cualquier otro lugar. La vía de acceso se debe ajustar para zap-ui-script-directory.

Cree un archivo run.sh dentro del directorio uiscripts. run.sh controla las pruebas de interfaz de usuario. Podemos configurar pruebas basadas en Protractor o cualquier otra infraestructura adecuada.

Cree un archivo export.sh dentro del directorio uiscripts. Este archivo contiene todas las variables de entorno diferentes que son necesarias para que las utilice la infraestructura de prueba. Establezca estos valores de entorno añadiendo export <VARIABLE_NAME>=<VALUE>.

Para contener cualquier información de configuración para la infraestructura de prueba, cree una carpeta conf dentro del directorio uiscripts para alojar la información de configuración para la infraestructura de prueba.

Para obtener una implementación de referencia que utiliza Protractor como infraestructura de prueba, consulte hello-compliance-app.

Gestión de resultados de exploración de ZAP

En función del valor de los parámetros opt-in-dynamic-api-scan y opt-in-dynamic-ui-scan, podemos optar por ejecutar de forma selectiva la exploración de API o la exploración de IU o ambas.

Dentro del archivo trigger_zap_scans, podemos desencadenar exploraciones individuales basadas en los parámetros de participación como se indica a continuación.

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

COMMONS_PATH hace referencia a una ubicación que contiene los scripts de compilación y ejecuta scripts para diversas herramientas que forman parte de la interconexión de DevSecOps. Para obtener más información, consulte Scripts comunes.

Puede calcular el éxito de la exploración de ZAP estableciendo un código de salida basándose en si se ha ejecutado la exploración de API o la exploración de interfaz de usuario. También se informa de las vulnerabilidades encontradas. Esto se puede comprobar pulsando en las variables api-scan-result y ui-scan-result.

Los valores posibles que pueden tomar estos parámetros son success o failure y el valor predeterminado es 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

Se puede encontrar una implementación de ejemplo en el archivo trigger_zap_scans dentro del directorio scripts/zap dentro de este repositorio.

Configuración de la exploración de ZAP para la interconexión CC

En la tabla siguiente se listan los parámetros adicionales necesarios para ejecutar exploraciones ZAP dentro de la interconexión CC.

Tabla 5. Parámetros de ZAP en la interconexión CC
Nombre Tipo Descripción Obligatoria u opcional
app-url Serie URL de la aplicación desplegada en la que se ejecuta la exploración de ZAP. Utilice el URL staging de la aplicación. Obligatorio
repo-url Serie URL del repositorio de la aplicación desplegada. Opcional, si inventory repo tiene todos los artefactos de sólo un repositorio de aplicaciones.

Configuración de escaneos de interfaz de usuario de Zap para utilizar imágenes de prueba de interfaz de usuario personalizadas sin comprimir pruebas de interfaz de usuario

En la tabla siguiente se listan los parámetros adicionales necesarios para configurar exploraciones de interfaz de usuario ZAP para utilizar imágenes de prueba de interfaz de usuario personalizadas.

Tabla 6. Parámetros de ZAP en la interconexión CC
Nombre Tipo Descripción Obligatoria u opcional
zap-custom-ui-deployment-name Serie Nombre de contenedor de Docker de IU personalizado. Opcional
zap-custom-ui-docker-run-param Serie Parámetros de ejecución de Docker para ejecutar la imagen de interfaz de usuario personalizada. Opcional
zap-custom-ui-exit-code-ignored Serie Las salidas de IU de Zap con el código de salida de IU personalizado, pero el código de salida se ignorará si esta variable se establece en true. Opcional
zap-custom-ui-image Serie Imagen de Docker de IU personalizada que ejecuta pruebas. Obligatorio
zap-custom-ui-post-script Serie Script que se ejecutará después de ejecutar la imagen de interfaz de usuario personalizada. Opcional
zap-custom-ui-pre-script Serie Script que se ejecutará antes de ejecutar la imagen de interfaz de usuario personalizada. Opcional
zap-custom-ui-progress-script Serie Script que se ejecutará al ejecutar la imagen de interfaz de usuario personalizada. Opcional
zap-custom-ui-timeout-in-sec Serie La exploración de IU de Zap sale después de este tiempo. Opcional

Este paso de exploración de interfaz de usuario personalizada es utilizar las imágenes de docker de interfaz de usuario personalizadas del usuario para realizar exploraciones de interfaz de usuario de zap, en lugar de colocar la información de imagen de docker en el archivo zip, que es el caso predeterminado zap-custom-ui-image es una variable de entorno necesaria que se debe establecer para configurar las exploraciones de interfaz de usuario de ZAP para utilizar imágenes de prueba de interfaz de usuario personalizadas.