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.
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>
.
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:
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.
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.
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.
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.