Riferimento dei nodi (Pro)

Nota: Rules Engine 2.0 è una funzionalità disponibile solo in DefectDojo Pro.

Rules Engine 2.0 include 25 nodi suddivisi in quattro categorie. Questa pagina li documenta tutti.

Salvo diversa indicazione, un nodo accetta un input, produce un output chiamato out e passa a quell’output ogni elemento ricevuto. Questo è rilevante quando si concatenano i nodi: un nodo sui Riscontri modifica il Riscontro e poi passa l’elemento avanti, quindi più nodi in sequenza vengono applicati tutti.

Trigger

Ogni grafo ha esattamente un trigger, e solo un trigger può avviare un’esecuzione. Tutti e tre producono elementi Riscontro e tutti e tre accettano un Ambito che restringe quali Riscontri producono. Vedere Creazione delle regole per il funzionamento dell’ambito.

Al verificarsi di un evento sul Riscontro

trigger.finding

Viene eseguito quando i Riscontri vengono creati, aggiornati, chiusi o riaperti.

ImpostazionePredefinitoNote
EventocreatedQuale modifica al Riscontro attiva questa regola: created, updated, closed, reopened, oppure any per tutte e quattro.
AmbitovuotoQuali Riscontri considera questa regola. Vuoto significa ogni Riscontro visibile al proprietario della regola.

I Riscontri indicati dall’evento vengono confrontati con l’ambito prima di entrare nel grafo, quindi l’evento decide quando e l’ambito decide quali.

Su pianificazione

trigger.schedule

Scansiona tutti i Riscontri nell’ambito secondo una pianificazione. La pianificazione viene configurata sulla regola ed è limitata a intervalli di un quarto d’ora.

ImpostazionePredefinitoNote
AmbitovuotoQuali Riscontri considera questa regola.

Esecuzione manuale

trigger.manual

Scansiona tutti i Riscontri nell’ambito quando si preme Esegui sulla regola.

ImpostazionePredefinitoNote
AmbitovuotoQuali Riscontri considera questa regola.

Logica

Se / Filtro

filter.if

Instrada ogni elemento lungo il ramo true o false, in base a delle condizioni. È l’unico nodo con due output, ed è il modo in cui un grafo si dirama.

ImpostazionePredefinitoNote
CondizionivuotoOgni riga è un percorso, un operatore e un valore. Vedere Condizioni.
CorrispondenzaallSe tutte le condizioni devono essere vere (all), oppure solo una di esse (any).

Un elenco di condizioni vuoto fa passare tutto lungo il ramo true. Entrambi i rami sono opzionali: lasciare il ramo false non collegato scarta semplicemente gli elementi che non hanno soddisfatto la condizione.

Limite

flow.limit

Fa passare i primi N elementi e scarta il resto. Utile come valvola di sicurezza durante il test di una regola, e per limitare quanti ticket o messaggi può produrre una singola esecuzione.

ImpostazionePredefinitoNote
Mantieni i primi100Quanti elementi far passare.

Deduplica all’interno dell’esecuzione

flow.dedupe_batch

Mantiene il primo elemento per ogni chiave e scarta quelli successivi con la stessa chiave. Limitato all’esecuzione corrente, quindi deduplica all’interno di una singola esecuzione e non tra esecuzioni diverse.

ImpostazionePredefinitoNote
Percorso chiavefinding.hash_codeIl percorso dell’elemento il cui valore identifica un duplicato.

Un uso comune è finding.component_name, per notificare una volta per ogni componente interessato invece che una volta per Riscontro.

Riscontri

Questi nodi modificano i Riscontri. Ogni modifica viene attribuita alla regola, all’esecuzione e al nodo che l’ha effettuata, e compare nella cronologia di provenienza del Riscontro.

Imposta gravità

finding.set_severity

Imposta la gravità e ricalcola di conseguenza la data SLA e la priorità.

ImpostazioneOpzioni
GravitàCritical, High, Medium, Low, Info

Imposta un campo

finding.set_field

Imposta, aggiunge in coda, oppure antepone il testo a un campo testuale.

ImpostazionePredefinitoNote
CamponessunoUno tra component_name, component_version, cvssv3, cwe, description, file_path, impact, mitigation, service, title.
Modalitàsetset, append o prepend. Un vettore CVSSv3 può essere solo sostituito.
ValorenessunoIl testo da scrivere. Supporta segnaposto in stile {{finding.title}}.

Imposta stato

finding.set_status

Sposta il Riscontro in uno stato.

ImpostazionePredefinitoNote
Statonessunoactive, inactive, verified, unverified, false_positive, mitigated, reopen.
NotavuotoUna nota facoltativa registrata insieme alla modifica dello stato.

Aggiungi tag

finding.add_tags

Aggiunge tag al Riscontro. I tag esistenti vengono mantenuti.

ImpostazioneNote
TagSeparati da virgola. Supporta segnaposto in stile {{product.name}}, per taggare con dati provenienti dal Riscontro.

Aggiungi una nota

finding.add_note

Aggiunge una nota al Riscontro.

ImpostazioneNote
NotaIl testo della nota. Supporta i segnaposto.

Imposta proprietari

finding.set_owners

Rende un gruppo responsabile del Riscontro.

ImpostazioneNote
GruppoIl gruppo proprietario di questi Riscontri.

Imposta revisori

finding.set_reviewers

Sottopone il Riscontro alla revisione degli utenti selezionati.

ImpostazioneNote
RevisoriUno o più utenti che devono revisionare questi Riscontri.

Accetta rischio

finding.risk_accept

Applica l’accettazione semplice del rischio al Riscontro, oppure lo aggiunge a un record di accettazione del rischio.

ImpostazionePredefinitoNote
Comesimplesimple imposta l’accettazione semplice del rischio sul Riscontro. acceptance lo aggiunge a un record di accettazione del rischio.
AccettatoattivoVisibile per simple. Disattivare per annullare l’accettazione del rischio.
Accettazione del rischionessunoVisibile per acceptance. A quale accettazione del rischio aggiungere questi Riscontri.

Imposta policy di mitigazione

finding.set_mitigation_policy

Imposta la policy di mitigazione in base alla quale il Riscontro viene risolto.

ImpostazioneNote
Policy di mitigazioneLa policy da applicare.

Cambia priorità

finding.set_priority

Imposta la priorità, oppure la modifica aritmeticamente. Questo sovrascrive la priorità calcolata.

ImpostazionePredefinitoNote
Operazionesetset, add, subtract, multiply, divide.
ValorenessunoLa priorità da impostare, oppure la quantità di cui modificarla.

Imposta rischio

finding.set_risk

Imposta il rischio, sovrascrivendo quello calcolato.

ImpostazioneOpzioni
RischioLow, Medium, Needs Action, Urgent

Uscita

I nodi di uscita sono i nodi che escono da DefectDojo. Ognuno di essi registra una Consegna prima che venga inviato qualsiasi cosa, ed ognuno rispetta la modalità Simulazione o Live della regola.

Diversi di essi offrono la stessa opzione Un messaggio per Riscontro. Se disattivata, il nodo invia un unico messaggio che descrive l’intero batch, con una ripartizione per gravità e un elenco limitato di Riscontri. Se attivata, invia un messaggio per ogni Riscontro.

Un nodo che invia un messaggio per ogni Riscontro si ferma per impostazione predefinita dopo 1.000 invii in una singola esecuzione, e registra un salto visibile che indica per quanti Riscontri non ha inviato nulla. Vedere Configurazione.

Quando un canale non è disponibile

Un nodo di uscita dipende da qualcosa esterno alla regola: un token Slack, un webhook Microsoft Teams, una configurazione JIRA, un connettore con licenza. Quando questo manca o è disattivato, il nodo non può funzionare, e Rules Engine 2.0 lo segnala in tre momenti diversi invece di fallire silenziosamente:

  • Nella tavolozza, un nodo non disponibile viene contrassegnato come tale, con il motivo, prima che venga trascinato sul canvas.
  • Al salvataggio, un grafo che contiene un nodo non disponibile viene rifiutato. È il momento in cui qualcuno è presente per sceglierne uno diverso.
  • In fase di esecuzione, la consegna viene saltata con il motivo allegato, non fallita. Una regola salvata mentre Slack era attivo non dovrebbe iniziare a generare errori il giorno in cui qualcuno disattiva Slack. Il resoconto corretto è una consegna saltata che indica che Slack è disattivato.

Crea un problema JIRA

ticket.jira

Crea o aggiorna il problema JIRA per il Riscontro.

ImpostazionePredefinitoNote
Salta i Riscontri che hanno già un problemaattivoLascia invariati i Riscontri che hanno già un problema JIRA.
Aggiorna un problema esistentedisattivoVisibile quando l’opzione precedente è disattivata. Invia i Riscontri che hanno già un problema, in modo da aggiornare JIRA.

Il riepilogo, la descrizione e la priorità provengono dalla configurazione JIRA del prodotto, non da questo nodo. Un ticket creato da una regola è quindi identico a uno creato tramite l’invio di tutti i problemi.

Crea un ticket downstream

ticket.downstream

Crea o aggiorna un ticket tramite un connettore downstream.

ImpostazionePredefinitoNote
Issue trackerautoauto utilizza gli issue tracker assegnati all’Engagement o al Prodotto. mapping punta a una mappatura specifica.
Mappatura issue trackernessunoVisibile per mapping. A quale mappatura inviare.
Operazionecreatecreate un ticket, oppure update quello esistente. Un update senza un ticket esistente lo crea.
Salta i Riscontri che hanno già un ticketattivoLascia invariati i Riscontri che hanno già un ticket nella mappatura di destinazione.

La regola sostituisce le impostazioni di invio automatico dell’assegnazione: i filtri per gravità e solo-attivi non vengono applicati una seconda volta qui. Un Riscontro il cui ticket esiste già viene saltato, indipendentemente da come quel ticket sia stato creato.

Invia un messaggio Slack

notify.slack

Pubblica su un canale Slack tramite un connettore di messaggistica. La connessione contiene il token del bot; le impostazioni Slack a livello di istanza in Impostazioni di sistema non vengono utilizzate e non fungono da fallback.

ImpostazionePredefinitoNote
ConnessionenessunoUn connettore di messaggistica di questo tipo. Obbligatorio.
DestinazionevuotoVisibile una volta scelta una connessione. I campi dipendono dal vendor della connessione.
Un messaggio per RiscontrodisattivoSe disattivata, invia un unico messaggio relativo al batch.
Messaggio{{finding.severity}}: {{finding.title}} ({{product.name}})Renderizzato per ogni Riscontro.
Riscontri elencati nel digest10Visibile per i messaggi in batch. Quanti Riscontri elenca il messaggio prima di indicare quanti altri ce ne sono.

Invia un messaggio Microsoft Teams

notify.msteams

Pubblica una scheda tramite un connettore di messaggistica. La connessione contiene l’URL del flusso di lavoro Power Automate; il webhook Teams a livello di istanza in Impostazioni di sistema non viene utilizzato e non funge da fallback.

ImpostazionePredefinitoNote
ConnessionenessunoUn connettore di messaggistica di questo tipo. Obbligatorio.
DestinazionevuotoVisibile una volta scelta una connessione. I campi dipendono dal vendor della connessione.
Un messaggio per RiscontrodisattivoSe disattivata, invia un’unica scheda relativa al batch.
Messaggio{{finding.severity}}: {{finding.title}} ({{product.name}})Renderizzato per ogni Riscontro.
Riscontri elencati nel digest10Visibile per i messaggi in batch.

Invia un’email

notify.email

Invia un’email a un elenco fisso di indirizzi tramite un connettore di messaggistica. I destinatari corrispondono alla destinazione della connessione.

ImpostazionePredefinitoNote
ConnessionenessunoUn connettore di messaggistica di questo tipo. Obbligatorio.
DestinazionevuotoVisibile una volta scelta una connessione. I campi dipendono dal vendor della connessione.

| Oggetto | [DefectDojo] {{ctx.count}} finding(s) from rule {{ctx.rule_name}} | Renderizzato una volta per messaggio. | | Corpo | un corpo HTML contenente {{ctx.findings_html}} | HTML. {{ctx.findings_html}} visualizza l’elenco dei Riscontri. | | Un messaggio per Riscontro | disattivo | Se disattivata, invia un’unica email relativa al batch. | | Riscontri elencati nel corpo | 25 | Quanti Riscontri elenca {{ctx.findings_html}} prima di indicare quanti altri ce ne sono. |

Chiama un webhook

notify.webhook

Invia una richiesta POST JSON a un endpoint webhook.

ImpostazionePredefinitoNote
Endpoint webhooknessunoUn webhook di notifica configurato. La sua intestazione personalizzata viene inviata con la richiesta.
URLvuotoVisibile quando non è selezionato alcun endpoint. Dove inviare la richiesta POST.
È obbligatorio uno dei due precedenti.
Segreto di firmavuotoFirma il corpo come X-DefectDojo-Signature: sha256=HMAC.
Un messaggio per RiscontrodisattivoSe disattivata, pubblica l’intero batch in un’unica richiesta.

Due cose da sapere. Un segreto di firma digitato qui viene memorizzato con la regola, quindi per qualsiasi dato sensibile è preferibile utilizzare un endpoint configurato con la propria intestazione. Inoltre, un webhook chiamato da una regola non modifica mai lo stato di salute di quell’endpoint, quindi una regola non può disabilitare i webhook di notifica fallendo.

Gli URL in testo libero vengono convalidati al salvataggio. Vedere Configurazione per sapere cosa viene rifiutato e come consentire indirizzi privati.

Genera un avviso in-app

notify.alert

Crea un avviso in-app relativo al batch.

ImpostazionePredefinitoNote
TitoloRules Engine 2.0: {{ctx.rule_name}}Renderizzato una volta per l’intero batch.
Descrizione{{ctx.count}} finding(s) matched the rule {{ctx.rule_name}}.Renderizzato una volta per l’intero batch.
DestinatarivuotoNomi utente separati da virgola. Se vuoto, avvisa gli amministratori.

I destinatari mantengono comunque il controllo su questo tramite la propria impostazione di notifica Corrispondenza Rules Engine, quindi un avviso non può aggirare le preferenze di notifica di un utente.

Genera un report

report.generate

Genera un report da un modello, limitato ai Riscontri che hanno raggiunto questo nodo, e può annunciare il link di download.

ImpostazionePredefinitoNote
Modello di reportnessunoDa quale modello generare. Obbligatorio.
Formatopdfpdf o html.
Riscontri inclusibatch_findingsbatch_findings limita il report ai Riscontri che hanno raggiunto questo nodo. template_default consente al modello di usare i propri filtri.
Annuncia tramitenessunoUn connettore di messaggistica su cui pubblicare il link di download una volta generato il report. Lasciare vuoto per non annunciare.
Annuncia avuotoVisibile una volta scelta una connessione. Dove invia quella connessione: un ID canale Slack, indirizzi email, e così via.
AnnuncioReport ready: {{ctx.report_url}}Visibile quando si annuncia. {{ctx.report_url}} è il link di download.

batch_findings è ciò che una regola può fare e un report pianificato no: creare un report esattamente sui Riscontri appena corrisposti.

L’annuncio viene registrato come una consegna a sé stante, separata dalla generazione del report, in modo da poter vedere il report riuscire e l’annuncio fallire in modo indipendente.