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