IBM Cloud Docs
Configuration des analyses ZAP

Configuration des analyses ZAP

Zed Attack Proxy (ZAP) est un outil de test de pénétration libre et open source (PEN) qui est maintenu sous l'égide d'OWASP. ZAP est un proxy "man-in-the-middle" qui se trouve entre le navigateur Web du testeur et un serveur Web. ZAP intercepte les paquets, modifie le contenu si nécessaire et les transmet au serveur Web.

Paramètres disponibles pour les analyses ZAP

Créez un fichier trigger_zap_scans dans votre référentiel d'application, à l'emplacement de votre choix, par exemple, dans un répertoire scripts.

Définissez les valeurs des paramètres correspondants en ajoutant ces lignes à trigger_zap_scans comme suit: set_env <parameter name> <value>. Pour plus d'informations sur une implémentation de référence, voir hello-compliance-app.

Vous pouvez définir et personnaliser les paramètres suivants pour configurer des examens ZAP afin d'exécuter des tests de pénétration sur votre application en cours d'exécution.

Tableau 1. Paramètres de configuration de l'analyse ZAP
Nom Type Description Requise ou facultative
cluster-name Chaîne Nom du cluster à partir duquel vous souhaitez que le scanner zap soit déployé et exécuté, s'il ne s'exécute pas dans DinD. Obligatoire s'il ne s'exécute pas dans DinD, c'est-à-dire que zap-dind est défini sur false.
ibmcloud-api Chaîne Indique l'environnement de cloud pour le cluster ZAP. La valeur par défaut est https://cloud.ibm.com Obligatoire s'il ne s'exécute pas dans DinD, c'est-à-dire que zap-dind est défini sur false.
ibmcloud-api-key Chaîne Clé d'API permettant de déployer ZAP sur un cluster. Obligatoire s'il ne s'exécute pas dans DinD, c'est-à-dire que zap-dind est défini sur false.
iam-token-endpoint Chaîne Noeud final permettant d'extraire le jeton pour l'authentification IAM. La valeur par défaut est https://iam.cloud.ibm.com/identity/token Facultatif, mais s'il est fourni, target-api-key doit également être fourni.
target-api-key Chaîne Clé d'API pour l'authentification IAM. Facultatif, mais s'il est fourni, iam-token-endpoint doit également être fourni.
target-application-server-url Chaîne URL de base du serveur d'applications pour le zap à examiner. Il peut être identique à l' URL de l'application déployée. Obligatoire
filter-options Chaîne Définissez-la pour filtrer les alertes en fonction de la gravité. Valeurs possibles: Critical, High, Medium, Low, Informational. La valeur par défaut est Informational. Il peut s'agir d'une liste séparée par des virgules. Facultatif
zap-custom-api-policy-file-path Chaîne Chemin d'accès relatif dans le référentiel au fichier de stratégie personnalisée (format XML) pour les analyses d'API ZAP. Si ce paramètre n'est pas défini, la règle par défaut API-Minimal.policy est utilisée. Facultatif
zap-custom-ui-policy-file-path Chaîne Chemin relatif dans le référentiel pour le fichier de règles personnalisé (format XML) utilisé dans les analyses de l'interface utilisateur ZAP. Si ce chemin n'est pas défini, la règle par défaut default.policy sera utilisée. Facultatif
zap-ui-scan Chaîne Indicateur permettant de déterminer si l'analyse est l'analyse d'interface utilisateur ou l'analyse d'API. Valeurs possibles: true, false. La définition de cet indicateur sur true permet d'exécuter l'analyse d'interface utilisateur et la définition sur false permet d'exécuter l'analyse d'API. Ce paramètre fonctionne avec les paramètres opt-in-dynamic-api-scan et opt-in-dynamic-ui-scan. Obligatoire
zap_dind Chaîne Indicateur permettant de basculer entre le déploiement de ZAP sur un cluster ou l'exécution de DinD. Valeur par défaut : true. Valeurs possibles: true, false. Sa définition sur true exécute ZAP en tant que DinD, la définition sur false déploie ZAP sur un cluster pour lequel cluster-name, ibmcloud-api et ibmcloud-api-key doivent être définis. Facultatif
zap-dind-localhost Chaîne Nom d'hôte des scanners ZAP lors de l'exécution dans DinD, par défaut: localhost. Facultatif
zap-namespace Chaîne Espace de nom permettant de déployer l'API ZAP et les scanners d'interface utilisateur dans le cluster, par défaut: zap. Facultatif pour l'exécution de ZAP dans le cluster, Not required pour l'exécution de ZAP dans DinD.
zap-polling-interval Chaîne Intervalle entre les scanners pour interroger ZAP sur la fin de l'analyse, par défaut: 120s. Facultatif
zap-artifact Chaîne Clé d'actif de l'artefact qui doit être analysé par zap et pour lequel la collecte d'informations collectées doit être appelée. La valeur par défaut est app-image. Facultatif
zap_evidence_type Chaîne Type d'informations collectées pour la collecte d'informations collectées pour les analyses effectuées par ZAP, par défaut: com.ibm.dynamic_scan. Facultatif
show-container-log Chaîne Indicateur permettant d'activer ou de désactiver la fonction de journalisation de conteneur pour les scanners ZAP lors de l'exécution dans DinD, par défaut: false. Facultatif
show-zap-log Chaîne Indicateur d'activation ou de désactivation de la fonction de journalisation du serveur ZAP, par défaut: false. Facultatif

Configuration des analyses d'API ZAP

Dans votre référentiel d'application, vous devez disposer d'au moins un fichier de définition d'API, au format json. Ce fichier de définition d'API doit être une définition swagger ou openapi valide. Ces fichiers peuvent être présents à n'importe quel emplacement dans le référentiel de l'application, par exemple, dans un répertoire definitions. Par souci de clarté, ces fichiers sont appelés definitions1.json, definitions2.json, etc.

Des paramètres supplémentaires sont requis pour la configuration des analyses d'API ZAP. Ces paramètres peuvent être définis en ajoutant les lignes suivantes à trigger_zap_scans comme suit: set_env <parameter name> <value>.

Tableau 2. Paramètres de configuration de l'API ZAP
Nom Type Description Requise ou facultative
zap-api-custom-script Chaîne Chemin d'accès au fichier qui contient la logique de transformation de la demande avant le lancement de l'analyse de l'API ZAP. Obligatoire
swagger-definition-files Chaîne Chemin d'accès aux fichiers qui contiennent les définitions Swagger. Peut être une liste séparée par des virgules. Obligatoire
zap-api-port Chaîne Port permettant d'exécuter le scanner d'API ZAP lorsqu'il est déployé sur un cluster, par défaut: 9086. Facultatif
zap_api_deployment_name Chaîne Nom du déploiement du scanner d'API ZAP, par défaut: zap-api-deployment. Facultatif
zap-api-image Chaîne Définissez ce paramètre pour utiliser une image de scanner d'API ZAP personnalisée. Sinon, la valeur par défaut IBM est utilisée. Facultatif
flatten-zap-api-scan-report Chaîne Définissez ce paramètre sur true pour mettre à plat les résultats de l'analyse de l'API ZAP dans un seul fichier HTML et json. Valeur par défaut: false. Facultatif

Créez un fichier custom-api-script dans votre référentiel d'application, à l'emplacement de votre choix, par exemple, dans le répertoire scripts/zap-custom-scripts. Ce fichier peut également être nommé différemment et définir le chemin d'accès à ce fichier en fonction du paramètre zap-api-custom-script.

Utilisez le fichier custom-api-script pour modifier la demande qui est envoyée au scanner ZAP. Les paramètres qui peuvent être utilisés dans le contenu de la demande sont les suivants:

Tableau 3. Paramètres du contenu de la demande
Nom Type Description Requise ou facultative
excludeScanTypes Tableau Liste des examens que l'utilisateur souhaite exclure. Liste complète des analyses à choisir: 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 et HtAccessScanRule. Facultatif
apisToScan Tableau Liste des API à analyser avec les paramètres requis. Si "apisToScan": ["all"] est mentionné, toutes les API mentionnées dans la définition swagger sont analysées avec des données fictives pour les paramètres / corps obligatoires. Pour personnaliser ce tableau afin d'avoir des API sélectives à analyser, utilisez cette sous-structure apisToScan: [ { "path": "/path/to/endpoint", method: "get" } ]. Obligatoire
globalExcludeUrls Tableau Tableau des regexes URL pour indiquer à ZAP de ne pas analyser ces routes. Par exemple, "globalExcludeUrls": [ "^http://foo.bar$", "^http://john.doe$" ]. Facultatif
authenticationType Chaîne Mécanisme d'authentification pour les en-têtes de demande. Les mécanismes d'authentification pris en charge sont Bearer, Basic ou ApiKey. Facultatif
apiKey Chaîne Si authenticationType n'est pas envoyé, cette clé d'API est utilisée pour l'authentification IAM qui est envoyée dans l'en-tête d'autorisation pour toutes les demandes. Si authenticationType est défini sur Bearer, l'en-tête formé est Authorization: Bearer <apiKey>. Si authenticationType est défini sur ApiKey, l'en-tête formé est Authorization: <apiKey>. La zone est ignorée pour authenticationType en tant que Basic. Facultatif
username Chaîne Nom d'utilisateur à utiliser pour authenticationType Basic. Obligatoire si authenticationType en tant que Basic
password Chaîne Mot de passe à utiliser pour authenticationType Basic. Obligatoire si authenticationType en tant que Basic

Pour les informations sensibles telles que les données d'identification, vous devez lire ces valeurs à partir d'un coffre ou d'un magasin de secrets.

Configuration des analyses d'interface utilisateur ZAP

Comme pour la configuration des analyses d'API ZAP, créez ou mettez à jour le fichier trigger_zap_scans dans votre référentiel d'application, à l'emplacement de votre choix, par exemple, dans un répertoire scripts.

Définissez les valeurs des paramètres correspondants en ajoutant ces lignes à trigger_zap_scans comme suit: set_env <parameter name> <value>. Pour plus d'informations sur une implémentation de référence, voir hello-compliance-app.

Définissez le paramètre zap-ui-scan sur true pour que l'analyse de l'interface utilisateur ZAP s'exécute.

Les paramètres requis pour la configuration des analyses d'interface utilisateur ZAP sont les suivants.

Tableau 4. Paramètres de configuration de l'interface utilisateur ZAP
Nom Type Description Requise ou facultative
zap-ui-custom-script Chaîne Chemin d'accès au fichier qui contient la logique de modification du contenu de l'analyse d'interface utilisateur, si nécessaire, avant le lancement de l'analyse d'interface utilisateur ZAP. Facultatif
zap-ui-script-directory Chaîne Chemin d'accès au répertoire qui contient les tests d'interface utilisateur et les fichiers requis pour exécuter l'analyse d'interface utilisateur. Obligatoire
context-file Chaîne Chemin d'accès à un fichier de contexte personnalisé pour les examens d'interface utilisateur fournis à ZAP. Facultatif
zap-ui-port Chaîne Port permettant d'exécuter le scanner d'interface utilisateur ZAP lorsqu'il est déployé sur un cluster, par défaut: 9085. Facultatif
zap_ui_deployment_name Chaîne Nom du déploiement du scanner d'interface utilisateur ZAP, par défaut: zap-ui-deployment. Facultatif
zap-proxy-service Chaîne Nom du service proxy ZAP requis par le scanner d'interface utilisateur, par défaut: zap-proxy-service. Facultatif
zap-ui-image Chaîne Définissez ce paramètre pour utiliser une image de scanner d'interface utilisateur ZAP personnalisée. Sinon, la valeur par défaut IBM est utilisée. Facultatif
zap-proxy-image Chaîne Définissez cette option pour utiliser une image de proxy ZAP personnalisée. Sinon, la valeur par défaut IBM est utilisée. Facultatif

Créez un dossier uiscripts dans le répertoire scripts/zap de votre référentiel d'application. Définissez également ce chemin de dossier sur zap-ui-script-directory dans le fichier trigger_zap_scans. Ce dossier peut également être créé n'importe où ailleurs. Le chemin doit être ajusté pour zap-ui-script-directory.

Créez un fichier run.sh dans le répertoire uiscripts. run.sh pilote les tests d'interface utilisateur. Nous pouvons configurer des tests basés sur Protractor ou tout autre cadre approprié.

Créez un fichier export.sh dans le répertoire uiscripts. Ce fichier contient toutes les variables d'environnement requises pour l'utilisation de l'infrastructure de test. Définissez ces valeurs d'environnement en ajoutant export <VARIABLE_NAME>=<VALUE>.

Pour conserver les informations de configuration de l'infrastructure de test, créez un dossier conf dans le répertoire uiscripts pour héberger les informations de configuration de l'infrastructure de test.

Pour une implémentation de référence qui utilise Protractor comme infrastructure de test, voir hello-compliance-app.

Gestion des résultats de l'analyse ZAP

En fonction de la valeur des paramètres opt-in-dynamic-api-scan et opt-in-dynamic-ui-scan, nous pouvons choisir d'exécuter de manière sélective l'analyse d'API et/ou l'analyse d'interface utilisateur.

Dans le fichier trigger_zap_scans, nous pouvons déclencher des analyses individuelles en fonction des paramètres de consentement comme suit.

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 fait référence à un emplacement qui contient les scripts de génération et les scripts d'exécution pour divers outils faisant partie du pipeline DevSecOps. Pour plus d'informations, voir Scripts communs.

Vous pouvez calculer la réussite de l'analyse ZAP en définissant un code d'exit en fonction de l'exécution de l'analyse d'API ou de l'analyse d'interface utilisateur. Toutes les vulnérabilités détectées sont également signalées. Cela peut être vérifié en tapant sur les variables api-scan-result et ui-scan-result.

Les valeurs possibles de ces paramètres sont success ou failure, et la valeur par défaut est 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

Un exemple d'implémentation est disponible dans le fichier trigger_zap_scans dans le répertoire scripts/zap dans ce référentiel.

Configuration de l'analyse ZAP pour le pipeline CC

Le tableau suivant répertorie les paramètres supplémentaires requis pour exécuter des analyses ZAP dans le pipeline CC.

Tableau 5. Paramètres ZAP dans le pipeline CC
Nom Type Description Requise ou facultative
app-url Chaîne URL de l'application déployée sur laquelle s'exécute l'examen ZAP. Utilisez l'URL staging de l'application. Obligatoire
repo-url Chaîne URL du référentiel de l'application déployée. Facultatif, si inventory repo possède tous les artefacts d'un seul référentiel d'application.

Configuration des examens d'interface utilisateur Zap pour utiliser des images de test d'interface utilisateur personnalisées sans compresser les tests d'interface utilisateur

Le tableau suivant répertorie les paramètres supplémentaires requis pour configurer les examens d'interface utilisateur ZAP afin d'utiliser des images de test d'interface utilisateur personnalisées.

Tableau 6. Paramètres ZAP dans le pipeline CC
Nom Type Description Requise ou facultative
zap-custom-ui-deployment-name Chaîne Nom du conteneur Docker de l'interface utilisateur personnalisée. Facultatif
zap-custom-ui-docker-run-param Chaîne Exécutez les paramètres Docker pour exécuter l'image d'interface utilisateur personnalisée. Facultatif
zap-custom-ui-exit-code-ignored Chaîne L'interface utilisateur Zap se ferme avec le code d'exit d'interface utilisateur personnalisé, mais le code d'exit est ignoré si cette variable est définie sur true. Facultatif
zap-custom-ui-image Chaîne Image Docker d'interface utilisateur personnalisée qui exécute des tests. Obligatoire
zap-custom-ui-post-script Chaîne Script à exécuter après l'exécution de l'image d'interface utilisateur personnalisée. Facultatif
zap-custom-ui-pre-script Chaîne Script à exécuter avant l'exécution de l'image d'interface utilisateur personnalisée. Facultatif
zap-custom-ui-progress-script Chaîne Script à exécuter lors de l'exécution de l'image d'interface utilisateur personnalisée. Facultatif
zap-custom-ui-timeout-in-sec Chaîne L'analyse de l'interface utilisateur Zap se termine après cette période. Facultatif

Cette étape d'analyse d'interface utilisateur personnalisée consiste à utiliser les images Docker d'interface utilisateur personnalisées de l'utilisateur pour tester les analyses d'interface utilisateur zap, au lieu de placer les informations d'image Docker dans le fichier zip, qui est le cas par défaut. zap-custom-ui-image est une variable d'environnement obligatoire à définir pour la configuration des examens d'interface utilisateur ZAP afin d'utiliser des images de test d'interface utilisateur personnalisées.