Configuration des balayages ZAP
Zed Attack Proxy (ZAP) est un outil de test de pénétration (PEN) libre et gratuit qui est maintenu sous l'égide de l'OWASP.ZAP est un proxy "man-in-the-middle" qui s'intercale entre le navigateur web du testeur et un serveur web. ZAP intercepte les paquets, modifie le contenu si nécessaire et transmet ces paquets au serveur web.
Exécution des balayages ZAP
Vous pouvez créer un script spécifique pour lancer les scans ZAP, comme trigger_zap_scans dans votre référentiel d'applications, à l'emplacement de votre choix, par exemple, dans un répertoire scripts et invoquer ce
script dans l'étape dynamic-scan du fichier pipeline-config.
Vous pouvez personnaliser le fichier script trigger_zap_scans pour invoquer le scan zap approprié (api ou ui) comme décrit ici et vous appuyer
sur le script d'exécution du scan zap commun pour exécuter un scan ZAP (ui ou api) afin d'effectuer des tests de pénétration sur votre
application en cours d'exécution.
Une autre solution consiste à exécuter le(s) scan(s) zap dans une sous-pipeline telle que définie dans l'implémentation de référence, voir hello-compliance-app.
Avec cette configuration dans le fichier de configuration du pipeline, l'étape dynamic-scan invoquera le script trigger-async-zap.sh pour déclencher l'étape owasp-zap afin de lancer l'analyse de l'outil
Zed Attack Proxy (ZAP) dans un sous-pipeline dédié. Il s'appuie également sur le script d'exécution Common zap scan pour exécuter un ZAP scan (ui ou
api) afin de réaliser des tests de pénétration sur votre application en cours d'exécution.
Paramètres disponibles pour les balayages ZAP
Vous pouvez définir et personnaliser les paramètres suivants pour configurer les scans ZAP afin qu'ils effectuent des tests de pénétration sur votre application en cours d'exécution.
| Nom | Type | Description | Requise ou facultative |
|---|---|---|---|
cluster-name |
Chaîne | Le nom du cluster dans lequel vous souhaitez que le scanner zap soit déployé et exécuté, s'il n'est pas exécuté dans DinD. | Requis s'il n'est pas exécuté dans DinD,, c'est-à-dire si zap-dind est configuré pour false. |
ibmcloud-api |
Chaîne | Spécifie l'environnement en nuage pour le cluster ZAP. La valeur par défaut est https://cloud.ibm.com |
Requis s'il n'est pas exécuté dans DinD,, c'est-à-dire si zap-dind est configuré pour false. |
ibmcloud-api-key |
Chaîne | Clé API pour déployer ZAP sur un cluster. | Requis s'il n'est pas exécuté dans DinD,, c'est-à-dire si zap-dind est configuré pour false. |
iam-token-endpoint |
Chaîne | Le point de terminaison pour récupérer 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 l'être. |
target-api-key |
Chaîne | Clé API pour l'authentification IAM. | Facultatif, mais s'il est fourni, iam-token-endpoint doit également l'être. |
target-application-server-url |
Chaîne | La base URL du serveur d'application que zap doit analyser. Il peut être identique au site URL de l'application déployée. | Obligatoire |
filter-options |
Chaîne | Configurez-le pour qu'il filtre les alertes en fonction de leur gravité. Valeurs possibles : Critical, High, Medium, Low, Informational. La valeur par défaut est Informational,
qui peut être une liste séparée par des virgules. |
Facultatif |
zap-custom-api-policy-file-path |
Chaîne | Chemin relatif dans le référentiel vers le fichier de politique personnalisée (format XML) pour les analyses de l'API ZAP. Si ce paramètre n'est pas défini, la politique par défaut API-Minimal.policy sera utilisée. |
Facultatif |
zap-custom-ui-policy-file-path |
Chaîne | Chemin relatif dans le référentiel pour le fichier de politique personnalisée (format XML) utilisé dans les analyses de l'interface utilisateur ZAP. Si ce chemin n'est pas défini, la politique par défaut default.policy sera
utilisée. |
Facultatif |
zap-ui-scan |
Chaîne | Indicateur permettant de déterminer s'il s'agit d'une analyse de l'interface utilisateur ou de l'API. Valeurs possibles : true, false. La valeur true permet d'exécuter l'analyse de l'interface utilisateur,
la valeur false permet d'exécuter l'analyse de l'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 | Drapeau pour 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. La valeur true exécute ZAP en tant
que DinD,. La valeur 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 pour les scanners ZAP lorsqu'ils sont exécutés dans DinD, default : localhost. |
Facultatif |
zap-namespace |
Chaîne | Espace de noms pour déployer les scanners ZAP API et UI dans le cluster, par défaut : zap. |
Facultatif pour l'exécution de ZAP dans un cluster, Not required pour l'exécution de ZAP dans DinD. |
zap-polling-interval |
Chaîne | Intervalle entre les interrogations du ZAP par les scanners à la fin de la numérisation, valeur par défaut : 120s. |
Facultatif |
zap-artifact |
Chaîne | La clé de l'artefact qui doit être analysé par zap et pour lequel collect-evidence doit être invoqué. La valeur par défaut est app-image. |
Facultatif |
zap_evidence_type |
Chaîne | Le type de preuve pour la collecte de preuves pour les scans effectués par ZAP, par défaut : com.ibm.dynamic_scan. |
Facultatif |
show-container-log |
Chaîne | Indicateur permettant d'activer ou de désactiver la capacité de journalisation des conteneurs pour les scanners ZAP lorsqu'ils fonctionnent à l'adresse DinD, default : false. |
Facultatif |
show-zap-log |
Chaîne | Indicateur permettant d'activer ou de désactiver la capacité de journalisation du serveur ZAP, valeur par défaut : false. |
Facultatif |
Configuration des analyses de l'API ZAP
Dans votre référentiel d'applications, vous devez avoir au moins un fichier de définition d'API présent, au format json. Ce fichier de définition de l'API doit être une définition valide de swagger ou openapi.
Ces fichiers peuvent se trouver à n'importe quel endroit du référentiel d'application, par exemple dans un répertoire definitions. Par souci de clarté, ces fichiers sont désignés comme suit : definitions1.json, definitions2.json,
et ainsi de suite.
| 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 de lancer l'analyse de l'API ZAP. | Obligatoire |
swagger-definition-files |
Chaîne | Chemin d'accès aux fichiers contenant les définitions Swagger. Peut être une liste séparée par des virgules. | Obligatoire |
zap-api-port |
Chaîne | Port d'exécution de l'analyseur de l'API ZAP lors du déploiement dans un cluster, par défaut : 9086. |
Facultatif |
zap_api_deployment_name |
Chaîne | Nom du déploiement du scanner ZAP API, par défaut : zap-api-deployment. |
Facultatif |
zap-api-image |
Chaîne | Définissez ce paramètre pour utiliser une image personnalisée du scanner de l'API ZAP. Dans le cas contraire, c'est la valeur par défaut de IBM qui est utilisée. | Facultatif |
flatten-zap-api-scan-report |
Chaîne | Définissez ce paramètre sur true pour aplatir les résultats de l'analyse de l'API ZAP dans un seul fichier html et json. Défaut false. |
Facultatif |
Créez un fichier custom-api-script dans le référentiel de votre 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 le chemin d'accès à ce fichier doit être indiqué dans le paramètre zap-api-custom-script.
Utilisez le fichier custom-api-script pour modifier la requête qui entre dans le scanner ZAP. Les paramètres qui peuvent être utilisés dans la charge utile de la demande sont les suivants :
| Nom | Type | Description | Requise ou facultative |
|---|---|---|---|
excludeScanTypes |
Tableau | Liste des analyses que l'utilisateur souhaite exclure. Liste complète des scans à choisir parmi : 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
obligatoires/le corps. Pour personnaliser ce tableau afin d'avoir des API sélectives à analyser, utilisez la sous-structure apisToScan: [ { "path": "/path/to/endpoint", method: "get" } ]. |
Obligatoire |
globalExcludeUrls |
Tableau | Tableau de URL regexes pour indiquer à ZAP de ne pas rechercher ces itinéraires. Par exemple, "globalExcludeUrls": [ "^http://foo.bar$", "^http://john.doe$" ]. |
Facultatif |
authenticationType |
Chaîne | Mécanisme d'authentification pour les en-têtes de requête. 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é API est utilisée pour l'authentification IAM qui est envoyée dans l'en-tête Authorization 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>. Le champ est ignoré pour authenticationType comme Basic. |
Facultatif |
username |
Chaîne | Nom d'utilisateur à utiliser pour authenticationType Basic. |
Obligatoire si authenticationType comme Basic |
password |
Chaîne | Mot de passe à utiliser pour authenticationType Basic. |
Obligatoire si authenticationType comme Basic |
Pour les informations sensibles telles que les informations d'identification, vous devez lire ces valeurs à partir d'un coffre-fort ou d'une réserve secrète.
Configuration des balayages de l'interface utilisateur ZAP
Réglez le paramètre zap-ui-scan sur true pour que le balayage de l'interface utilisateur ZAP s'exécute.
Les paramètres nécessaires à la configuration des analyses de l'interface utilisateur ZAP sont les suivants.
| Nom | Type | Description | Requise ou facultative |
|---|---|---|---|
zap-ui-custom-script |
Chaîne | Chemin d'accès au fichier contenant la logique de modification de la charge utile de l'analyse de l'interface utilisateur, si nécessaire, avant que l'analyse de l'interface utilisateur ZAP ne soit lancée. | Facultatif |
zap-ui-script-directory |
Chaîne | Chemin d'accès au répertoire contenant les tests de l'interface utilisateur et les fichiers nécessaires à l'exécution de l'analyse de l'interface utilisateur. | Obligatoire |
context-file |
Chaîne | Chemin d'accès à un fichier de contexte personnalisé pour les analyses d'interface utilisateur fournies à ZAP. | Facultatif |
zap-ui-auth-user |
Chaîne | Nom d'utilisateur à utiliser pour autoriser et exécuter le scan zap ui. Pour ce faire, il faut fournir context-file, qui doit également contenir des informations sur la manière d'authentifier l'utilisateur. |
Facultatif |
zap-ui-port |
Chaîne | Port d'exécution de l'analyseur de l'interface utilisateur ZAP lors du déploiement dans un cluster, par défaut : 9085. |
Facultatif |
zap_ui_deployment_name |
Chaîne | Nom du déploiement du scanner ZAP UI, par défaut : zap-ui-deployment. |
Facultatif |
zap-proxy-service |
Chaîne | Nom du service ZAP Proxy requis par le scanner de l'interface utilisateur, par défaut : zap-proxy-service. |
Facultatif |
zap-ui-image |
Chaîne | Réglez ce paramètre pour utiliser une image personnalisée du scanner ZAP UI. Dans le cas contraire, c'est la valeur par défaut de IBM qui est utilisée. | Facultatif |
zap-proxy-image |
Chaîne | Ce paramètre permet d'utiliser une image ZAP Proxy personnalisée. Dans le cas contraire, c'est la valeur par défaut de IBM qui est utilisée. | Facultatif |
Créez un dossier uiscripts dans le répertoire scripts/zap de votre référentiel d'applications. Ce chemin d'accès au dossier est également défini par rapport à 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 de l'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 nécessaires à l'utilisation du cadre de test. Définissez ces valeurs d'environnement en ajoutant export <VARIABLE_NAME>=<VALUE>.
Pour contenir les informations de configuration du cadre de test, créez un dossier conf à l'intérieur du répertoire uiscripts pour contenir les informations de configuration du cadre de test.
Pour une implémentation de référence qui utilise Protractor comme cadre de test, voir hello-compliance-app.
Gestion des résultats du ZAP Scan
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 sélectivement soit l'analyse de l'API, soit l'analyse de l'interface utilisateur, soit les deux.
Par exemple, dans le fichier trigger_zap_scans, il est possible de déclencher des analyses individuelles en fonction des paramètres d'acceptation 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
Le site COMMONS_PATH fait référence à un emplacement qui contient les scripts de construction et les scripts d'exécution pour divers outils qui font partie du pipeline DevSecOps. Pour plus d'informations, voir Scripts communs.
Vous pouvez calculer le succès de l'analyse ZAP en définissant un code de sortie en fonction de l'exécution de l'analyse API ou de l'analyse UI. Toutes les vulnérabilités trouvées sont également signalées. Ceci peut être vérifié en utilisant
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
Configuration de l'analyse ZAP pour le pipeline CC
Le tableau suivant répertorie les paramètres supplémentaires nécessaires pour exécuter des analyses 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'analyse 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 repo d'application. |
Configurer les scans d'interface utilisateur de Zap pour utiliser des images de test d'interface utilisateur personnalisées sans zipper les tests d'interface utilisateur
Le tableau suivant répertorie les paramètres supplémentaires nécessaires pour configurer les analyses de l'interface utilisateur ZAP afin d'utiliser des images de test de l'interface utilisateur personnalisées.
| 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 | Docker paramètres d'exécution pour exécuter l'image personnalisée de l'interface utilisateur. | Facultatif |
zap-custom-ui-exit-code-ignored |
Chaîne | L'interface utilisateur Zap se termine avec le code de sortie de l'interface personnalisée, mais son code de sortie sera ignoré si cette variable est définie à true. |
Facultatif |
zap-custom-ui-image |
Chaîne | Image docker de l'interface utilisateur personnalisée qui exécute les 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 de lancer 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 ce délai. | Facultatif |
Cette étape de scan personnalisé de l'interface utilisateur permet d'utiliser les images docker de l'interface utilisateur personnalisée pour tester les scans de l'interface utilisateur de zap, au lieu de mettre les informations de l'image docker
dans le fichier zip, ce qui est le cas par défaut.
zap-custom-ui-image est une variable d'environnement nécessaire pour configurer les analyses de l'interface utilisateur de ZAP afin d'utiliser des images de test de l'interface utilisateur personnalisées.