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