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.
Ejecución de escaneos ZAP
Puede crear un script específico para iniciar los escaneos ZAP, como trigger_zap_scans dentro del repositorio de su aplicación, en la ubicación que elija, por ejemplo, dentro de un scripts directorio, e invocar este
script en la dynamic-scan etapa del archivo pipeline-config.
Puede personalizar el trigger_zap_scans archivo de script para invocar el escaneo zap adecuado (api o ui) tal y como se describe aquí y confiar
en el script de ejecución de escaneo zap común para ejecutar un escaneo ZAP (ui o api) y realizar pruebas de penetración en su aplicación
en ejecución.
Una forma alternativa es ejecutar escaneos zap en una subtubería, tal y como se define en la implementación de referencia; véase hello-compliance-app.
Con esta configuración en el archivo de configuración del pipeline, la dynamic-scan etapa invocará trigger-async-zap.sh el script para activar owasp-zap la etapa e iniciar el escaneo de la herramienta Zed
Attack Proxy (ZAP) en un sub-pipeline dedicado. También se basa en el script de ejecución de escaneo Common zap para ejecutar un escaneo ZAP (ui o api)
y realizar pruebas de penetración en su aplicación en ejecución.
Parámetros disponibles para exploraciones ZAP
Puede establecer y personalizar los parámetros siguientes para configurar exploraciones ZAP para ejecutar pruebas de penetración en la app en ejecución.
| 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. | Obligatorio 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 |
Obligatorio 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. | Obligatorio 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 | URL o base del servidor de aplicaciones para que zap lo escanee. Puede ser el mismo que el URL de la aplicación implementada. | 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. Establecerlo a ' true ejecuta ZAP como DinD,
establecerlo a ' false despliega ZAP a un cluster para el cual ' cluster-name, ' ibmcloud-api, y ' ibmcloud-api-key deben ser establecidos. |
Opcional |
zap-dind-localhost |
Serie | Nombre de host para los escáneres ZAP cuando se ejecutan en DinD, por defecto: ' 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 | Bandera para activar o desactivar la capacidad de registro de contenedores para los escáneres ZAP cuando se ejecutan en DinD, por defecto: ' 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.
| 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. Predeterminado false. |
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:
| 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 | Conjunto de expresiones regulares ( URL ) para indicar a ZAP que no busque esas 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
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.
| 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-auth-user |
Serie | Nombre de usuario que se utilizará para autorizar y ejecutar zap ui scan como. Esto requiere que se proporcione context-file que también debe contener la información de la forma de autenticar a este usuario. |
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.
Por ejemplo, dentro del trigger_zap_scans archivo, se pueden activar escaneos individuales basados en los parámetros de participación de la siguiente manera.
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
El " COMMONS_PATH " se refiere a una ubicación que contiene los scripts de compilación y los scripts de ejecución de varias herramientas que forman parte del proceso 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
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.
| Nombre | Tipo | Descripción | Obligatoria u opcional |
|---|---|---|---|
app-url |
Serie | URL de la aplicación desplegada en la que se ejecuta el escaneo ZAP. Utilice el URL staging de la aplicación. |
Obligatorio |
repo-url |
Serie | URL del repositorio de la aplicación implementada. | 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.
| 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.