IBM Cloud Docs
Configurazione delle scansioni ZAP

Configurazione delle scansioni ZAP

Zed Attack Proxy (ZAP) è uno strumento di penetrazione (PEN) gratuito e open source che viene mantenuto sotto l'ombrello di OWASP. ZAP è un proxy "uomo - in - the - middle" che si snoda tra il browser web del tester e un web server. ZAP intercetta i pacchetti, modifica il contenuto se necessario e inoltra quei pacchetti al web server.

Parametri disponibili per le scansioni ZAP

Creare un file trigger_zap_scans all'interno del repository delle applicazioni, in una posizione della scelta, ad esempio, all'interno di una directory scripts.

Impostare i valori per i parametri corrispondenti aggiungendo queste righe al trigger_zap_scans come segue - set_env <parameter name> <value>. Per ulteriori informazioni su un'implementazione di riferimento, consultare hello - compliance - app.

È possibile impostare e personalizzare i seguenti parametri per configurare le scansioni ZAP per eseguire i test di penetrazione sulla propria app di esecuzione.

Tabella 1. Parametri di configurazione della scansione ZAP
Nome Immettere Descrizione Obbligatoria o facoltativa
cluster-name Stringa Il nome del cluster da cui si desidera distribuire ed eseguire lo scanner zap, se non in esecuzione in DinD. Obbligatorio se non è in esecuzione in DinD, ovvero, zap-dind è impostato su false.
ibmcloud-api Stringa Specifica l'ambiente cloud per il cluster ZAP. Il valore predefinito è https://cloud.ibm.com Obbligatorio se non è in esecuzione in DinD, ovvero, zap-dind è impostato su false.
ibmcloud-api-key Stringa Chiave API per distribuire ZAP su un cluster. Obbligatorio se non è in esecuzione in DinD, ovvero, zap-dind è impostato su false.
iam-token-endpoint Stringa L'endpoint per richiamare il token per l'autenticazione IAM. Il valore predefinito è https://iam.cloud.ibm.com/identity/token Opzionale, ma se fornito, target-api-key deve essere fornito anche.
target-api-key Stringa Chiave API per l'autenticazione IAM. Opzionale, ma se fornito, iam-token-endpoint deve essere fornito anche.
target-application-server-url Stringa L' URL di base del server delle applicazioni per lo zap da sottoporre a scansione. Può essere uguale all' URL dell'applicazione distribuita. Obbligatorio
filter-options Stringa Impostarlo per filtrare gli avvisi in base alla gravità. Valori possibili: Critical, High, Medium, Low, Informational. Default su Informational, può essere un elenco separato da virgola. Facoltativo
zap-custom-api-policy-file-path Stringa Percorso relativo nel repository al file di politica personalizzato (formato XML) per le scansioni ZAP API. Se non è impostato, verrà utilizzata la politica predefinita API-Minimal.policy. Facoltativo
zap-custom-ui-policy-file-path Stringa Percorso relativo nel repository per il file di politica personalizzato (formato XML) utilizzato nelle scansioni ZAP UI. Se questo percorso non è impostato, verrà utilizzata la politica predefinita default.policy. Facoltativo
zap-ui-scan Stringa Flag per determinare se la scansione è la scansione dell'UI o la scansione dell'API. Valori possibili: true, false. Impostando questo flag su true esegue la scansione dell'UI, impostandola su false esegue la scansione dell'API. Questo parametro funziona con i parametri opt-in-dynamic-api-scan e opt-in-dynamic-ui-scan. Obbligatorio
zap_dind Stringa Indicatore per passare dalla distribuzione di ZAP a un cluster o l'esecuzione di DinD. Valore predefinito: true. Valori possibili: true, false. L'impostazione su true esegue ZAP come DinD, l'impostazione su false distribuisce ZAP in un cluster per cui è necessario impostare cluster-name, ibmcloud-api e ibmcloud-api-key. Facoltativo
zap-dind-localhost Stringa Nome host per gli scanner ZAP durante l'esecuzione in DinD, valore predefinito: localhost. Facoltativo
zap-namespace Stringa Namespace per distribuire gli scanner ZAP API e UI nel cluster, default: zap. Facoltativo per l'esecuzione di ZAP nel cluster, Not required per ZAP in esecuzione in DinD.
zap-polling-interval Stringa Intervallo per gli scanner per effettuare il sondaggio ZAP per il completamento della scansione, predefinita: 120s. Facoltativo
zap-artifact Stringa La chiave dell'asset per la risorsa utente che deve essere sottoposta a scansione zap e per cui deve essere richiamata la raccolta - prova. Il valore predefinito è app-image. Facoltativo
zap_evidence_type Stringa Il tipo di prova per la raccolta delle prove per le scansioni eseguite da ZAP, default: com.ibm.dynamic_scan. Facoltativo
show-container-log Stringa Indicatore per abilitare o disabilitare la funzionalità di registrazione del contenitore per i programmi di scansione ZAP quando in esecuzione in DinD, valore predefinito: false. Facoltativo
show-zap-log Stringa Flag per abilitare o disabilitare la funzionalità di registrazione del server ZAP, predefinita: false. Facoltativo

Configurazione delle scansioni API ZAP

All'interno del repository dell'applicazione è necessario disporre di almeno un file di definizione API presente, in formato json. Questo file di definizione delle API deve essere una definizione swagger o openapi valida. Questi file possono essere presenti in qualsiasi posizione all'interno del repository di applicazioni, ad esempio, all'interno di una directory definitions. Per chiarezza, questi file sono indicati come segue: definitions1.json, definitions2.json e così via.

Sono necessari più parametri per la configurazione delle scansioni API ZAP. Questi parametri possono essere impostati aggiungendo le seguenti righe al trigger_zap_scans come segue - set_env <parameter name> <value>.

Tabella 2. Parametri di configurazione delle API ZAP
Nome Immettere Descrizione Obbligatoria o facoltativa
zap-api-custom-script Stringa Percorso al file che contiene la logica di trasformazione della richiesta prima di avviare la scansione delle API ZAP. Obbligatorio
swagger-definition-files Stringa Percorso verso i file che contengono le definizioni Swagger. Può essere un elenco separato da virgole. Obbligatorio
zap-api-port Stringa Porta per eseguire lo scanner API ZAP quando distribuito in un cluster, default: 9086. Facoltativo
zap_api_deployment_name Stringa Nome della distribuzione dello scanner API ZAP, predefinito: zap-api-deployment. Facoltativo
zap-api-image Stringa Impostare questo parametro per utilizzare un'immagine ZAP API Scanner personalizzata. In caso contrario, viene utilizzato il default IBM. Facoltativo
flatten-zap-api-scan-report Stringa Impostare questo parametro su true per eseguire il flattening dei risultati di scansione API ZAP in un singolo file html e json. Valore predefinito false. Facoltativo

Creare un file custom-api-script all'interno del repository delle applicazioni, in una posizione della scelta, ad esempio, all'interno della directory scripts/zap-custom-scripts. Anche questo file può essere denominato in modo diverso e impostare il percorso su questo file rispetto al parametro zap-api-custom-script.

Utilizzare il file custom-api-script per modificare la richiesta che va nello scanner ZAP. I parametri che possono essere utilizzati nel payload di richiesta sono i seguenti:

Tabella 3. Parametri nel payload di richiesta
Nome Immettere Descrizione Obbligatoria o facoltativa
excludeScanTypes Array Elenco di scansioni che l'utente vuole escludere. Complete list of scans to choose from: 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 and, HtAccessScanRule. Facoltativo
apisToScan Array Elenco delle API da scansare insieme a param richiesti. Se viene menzionato "apisToScan": ["all"], allora tutte le API citate nella definizione del swagger vengono scansionate con i dati mock per i parametri obbligatori / body. Per personalizzare questa schiera per avere API selettive da scansionare, utilizzare questa sottostruttura apisToScan: [ { "path": "/path/to/endpoint", method: "get" } ]. Obbligatorio
globalExcludeUrls Array Array di regex URL per indicare a ZAP di non eseguire la scansione di tali instradamenti. Ad esempio, "globalExcludeUrls": [ "^http://foo.bar$", "^http://john.doe$" ]. Facoltativo
authenticationType Stringa Meccanismo di autenticazione per le intestazioni di richiesta. I meccanismi di auth supportati sono Bearer, Basic o ApiKey. Facoltativo
apiKey Stringa Se authenticationType non viene inviato, questa chiave API viene utilizzata per l'autenticazione IAM che viene inviata in intestazione Autorizzazione per tutte le richieste. Se authenticationType è impostato su Bearer, l'intestazione che si forma è Authorization: Bearer <apiKey>. Se authenticationType è impostato su ApiKey, l'intestazione che si forma è Authorization: <apiKey>. Il campo viene ignorato per authenticationType come Basic. Facoltativo
username Stringa Username da utilizzare per authenticationType Basic. Obbligatorio se authenticationType come Basic
password Stringa Password da utilizzare per authenticationType Basic. Obbligatorio se authenticationType come Basic

Per informazioni sensibili come le credenziali è necessario leggere questi valori da un deposito o da un negozio segreto.

Configurazione delle scansioni UI ZAP

Simile alla configurazione delle scansioni API ZAP, creare o aggiornare il file trigger_zap_scans all'interno del proprio repository di applicazioni, in una posizione della propria scelta, ad esempio all'interno di una directory scripts.

Impostare i valori per i parametri corrispondenti aggiungendo queste righe al trigger_zap_scans come segue - set_env <parameter name> <value>. Per ulteriori informazioni su un'implementazione di riferimento, consultare hello - compliance - app.

Impostare il parametro zap-ui-scan su true per la scansione di ZAP UI da eseguire.

I parametri richiesti per la configurazione delle scansioni UI ZAP sono i seguenti.

Tabella 4. Parametri di configurazione UI ZAP
Nome Immettere Descrizione Obbligatoria o facoltativa
zap-ui-custom-script Stringa Percorso al file che contiene la logica di modifica per il payload della scansione UI, se richiesto, prima che venga avviata la scansione dell'UI ZAP. Facoltativo
zap-ui-script-directory Stringa Percorso alla directory che contiene i test UI e i file richiesti per eseguire la scansione dell'UI. Obbligatorio
context-file Stringa Percorso ad un file di contesto personalizzato per le scansioni UI fornite a ZAP. Facoltativo
zap-ui-port Stringa Porta per eseguire lo scanner ZAP UI quando distribuito in un cluster, default: 9085. Facoltativo
zap_ui_deployment_name Stringa Nome della distribuzione scanner UI ZAP, predefinita: zap-ui-deployment. Facoltativo
zap-proxy-service Stringa Nome per il servizio ZAP Proxy richiesto dallo scanner UI, predefinito: zap-proxy-service. Facoltativo
zap-ui-image Stringa Impostare questo parametro per utilizzare un'immagine ZAP UI Scanner personalizzata. In caso contrario, viene utilizzato il default IBM. Facoltativo
zap-proxy-image Stringa Impostare questo per utilizzare un'immagine ZAP Proxy personalizzata. In caso contrario, viene utilizzato il default IBM. Facoltativo

Creare una cartella uiscripts all'interno della directory scripts/zap all'interno del repository delle applicazioni. Impostare anche questo percorso di cartella contro zap-ui-script-directory nel file trigger_zap_scans. Questa cartella può essere creata ovunque anche altrove. Il percorso deve essere regolato per zap-ui-script-directory.

Creare un file run.sh all'interno della directory uiscripts. run.sh guida i test dell'UI. Possiamo configurare test basati su Protractor o qualsiasi altro quadro adatto.

Creare un file export.sh all'interno della directory uiscripts. Questo file trattiene tutte le diverse variabili di ambiente che sono richieste per il quadro di prova da utilizzare. Impostare quei valori di ambiente aggiungendo export <VARIABLE_NAME>=<VALUE>.

Per tenere qualsiasi informazione di configurazione per il framework di test, creare una cartella conf all'interno della directory uiscripts per ospitare le informazioni di configurazione per il framework di test.

Per un'implementazione di riferimento che utilizza Protractor come framework di test, consultare hello - compliance - app.

Gestione dei risultati di ZAP Scan

In base al valore dei parametri opt-in-dynamic-api-scan e opt-in-dynamic-ui-scan, possiamo scegliere di eseguire selettivamente la scansione dell'API o la scansione dell'UI o entrambe.

All'interno del file trigger_zap_scans possiamo attivare le singole scansioni in base ai parametri di opt-in come segue.

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 fa riferimento a un'ubicazione che contiene gli script di creazione ed esegue gli script per vari strumenti che fanno parte della pipeline DevSecOps. Per ulteriori informazioni, consultare Script comuni.

È possibile calcolare il successo della scansione ZAP impostando un codice di uscita in base al fatto che la scansione dell'API o la scansione dell'UI sia stata eseguita. Vengono riportate anche eventuali vulnerabilità rilevate. Questo può essere controllato tramite tapping nelle variabili api-scan-result e ui-scan-result.

I valori possibili che questi parametri possono assumere sono success o failure e default su 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'implementazione di esempio può essere trovata nel file trigger_zap_scans all'interno della directory scripts/zap all'interno di questo repository.

Configurazione della scansione ZAP per pipeline CC

La seguente tabella elenca i parametri aggiuntivi richiesti per eseguire le scansioni ZAP all'interno della pipeline CC.

Tabella 5. Parametri ZAP nella pipeline CC
Nome Immettere Descrizione Obbligatoria o facoltativa
app-url Stringa URL dell'applicazione distribuita su cui viene eseguita la scansione ZAP. Utilizzare l'url staging dell'applicazione. Obbligatorio
repo-url Stringa URL del repository dell'applicazione distribuita. Opzionale, se inventory repo ha tutti gli artefatti da un solo repo di applicazione.

Configurazione delle scansioni UI Zap per utilizzare le immagini di test UI personalizzate senza comprimere i test UI

La seguente tabella elenca i parametri aggiuntivi richiesti per configurare le scansioni IU ZAP per utilizzare le immagini di test IU personalizzate.

Tabella 6. Parametri ZAP nella pipeline CC
Nome Immettere Descrizione Obbligatoria o facoltativa
zap-custom-ui-deployment-name Stringa Nome contenitore docker IU personalizzato. Facoltativo
zap-custom-ui-docker-run-param Stringa Docker esegue i parametri per eseguire l'immagine IU personalizzata. Facoltativo
zap-custom-ui-exit-code-ignored Stringa L'interfaccia utente Zap termina con il codice di uscita dell'interfaccia utente personalizzato, ma verrà ignorato se questa variabile è impostata su true. Facoltativo
zap-custom-ui-image Stringa Immagine docker IU personalizzata che esegue i test. Obbligatorio
zap-custom-ui-post-script Stringa Script da eseguire dopo l'esecuzione dell'immagine IU personalizzata. Facoltativo
zap-custom-ui-pre-script Stringa Script da eseguire prima di eseguire l'immagine UI personalizzata. Facoltativo
zap-custom-ui-progress-script Stringa Script da eseguire durante l'esecuzione dell'immagine IU personalizzata. Facoltativo
zap-custom-ui-timeout-in-sec Stringa La scansione UI Zap termina dopo questo periodo di tempo. Facoltativo

Questo passo di scansione dell'IU personalizzata consiste nell'utilizzare le immagini docker dell'IU personalizzata dell'utente per tesing delle scansioni dell'IU zap, invece di inserire le informazioni sull'immagine docker nel file zip, che è il caso predefinito zap-custom-ui-image è una variabile di ambiente obbligatoria da impostare per la configurazione delle scansioni IU ZAP per utilizzare le immagini di test IU personalizzate.