Analisi del codice
L'analisi del codice in GitHub Advanced Security per Azure DevOps consente di analizzare il codice in un repository Azure DevOps per individuare vulnerabilità di sicurezza ed errori di codifica. Eventuali problemi identificati dall'analisi vengono generati come avviso. L'analisi del codice usa CodeQL per identificare le vulnerabilità.
CodeQL è il motore di analisi del codice sviluppato da GitHub per automatizzare i controlli di sicurezza. È possibile analizzare il codice usando CodeQL e visualizzare i risultati come avvisi di analisi del codice. Per una documentazione più specifica su CodeQL, vedere la documentazione di CodeQL.
GitHub Advanced Security per Azure DevOps funziona con Azure Repos. Per usare GitHub Advanced Security con i repository GitHub, vedere GitHub Advanced Security.
Configurazioni aggiuntive per l'analisi del codice
Supporto di linguaggio e query
Gli esperti di GitHub, i ricercatori della sicurezza e i collaboratori della community scrivono e mantengono le query CodeQL predefinite usate per l'analisi del codice. Le query vengono aggiornate regolarmente per migliorare l'analisi e ridurre eventuali risultati falsi positivi. Le query sono open source, quindi è possibile visualizzare e contribuire alle query nel repository github/codeql .
CodeQL supporta e usa gli identificatori di lingua seguenti:
Lingua | Identifier | Identificatori alternativi facoltativi (se presenti) |
---|---|---|
C/C++ | c-cpp |
c oppure cpp |
C# | csharp |
|
Go | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
Ruby | ruby |
|
Swift | swift |
Suggerimento
- Usare
c-cpp
per analizzare il codice scritto in C, C++ o entrambi. - Usare
java-kotlin
per analizzare il codice scritto in Java, Kotlin o entrambi. - Usare
javascript
per analizzare il codice scritto in JavaScript, TypeScript o entrambi.
Per altre informazioni, vedere Linguaggi e framework supportati.
È possibile visualizzare le query specifiche e i dettagli dell'attività eseguiti da CodeQL nel log di compilazione.
Personalizzazione della modalità di compilazione per l'analisi del codice
L'analisi del codice supporta due modalità di compilazione durante la configurazione di una pipeline per l'analisi:
none
- Il database CodeQL viene creato direttamente dalla codebase senza compilare la codebase (supportata per tutti i linguaggi interpretati e supportata anche per C# e Java).manual
: si definiscono i passaggi di compilazione da usare per la codebase nel flusso di lavoro (supportato per tutti i linguaggi compilati).
Per altre informazioni sulle diverse modalità di compilazione, incluso un confronto sui vantaggi di ogni modalità di compilazione, vedere Analisi del codice CodeQL per i linguaggi compilati.
Per eseguire l'analisi dell'analisi del codice tramite GitHub Advanced Security per Azure DevOps, la autobuild
modalità di compilazione è invece un'attività di compilazione separata, AdvancedSecurity-CodeQL-Autobuild@1
.
Suggerimento
La modalità none
di compilazione è utilizzabile insieme ad altri linguaggi interpretati (ad esempio, JavaScript, Python, Ruby).
Se la modalità none
di compilazione è specificata per C# o Java insieme ad altri linguaggi compilati che non supportano la modalità none
di compilazione , l'attività della pipeline avrà esito negativo.
Di seguito è riportato un esempio di configurazione valida con più linguaggi e none
modalità di compilazione:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Di seguito è riportato un esempio di configurazione non valida con più linguaggi e none
modalità di compilazione:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Avvisi di analisi del codice
Gli avvisi di analisi del codice di GitHub Advanced Security per Azure DevOps includono flag di analisi del codice per repository che avvisano le vulnerabilità dell'applicazione a livello di codice.
Per usare l'analisi del codice, è prima necessario configurare GitHub Advanced Security per Azure DevOps.
La scheda Sicurezza avanzata in Repository in Azure DevOps è l'hub per visualizzare gli avvisi di analisi del codice. Selezionare la scheda Analisi codice per visualizzare gli avvisi di analisi. È possibile filtrare per ramo, stato, pipeline, tipo di regola e gravità. Al momento, l'hub degli avvisi non visualizza gli avvisi per l'analisi completata nei rami delle richieste pull.
Non esiste alcun effetto sui risultati se le pipeline o i rami vengono rinominati. Potrebbero essere necessarie fino a 24 ore prima che venga visualizzato il nuovo nome.
Se si sceglie di eseguire query CodeQL personalizzate, non esiste per impostazione predefinita un filtro separato per gli avvisi generati da query pack diversi. È possibile filtrare in base alla regola, che è distinta per ogni query.
Se si disattiva Sicurezza avanzata per il repository, si perde l'accesso ai risultati nella scheda Sicurezza avanzata e nell'attività di compilazione. L'attività di compilazione non ha esito negativo, ma i risultati delle compilazioni vengono eseguiti con l'attività mentre la sicurezza avanzata è disabilitata sono nascoste e non mantenute.
Dettagli dell'avviso
Selezionare un avviso per altri dettagli, incluse le indicazioni sulla correzione. Ogni avviso include una posizione, una descrizione, un esempio e una gravità.
Sezione | Spiegazione |
---|---|
Ufficio | La sezione Locations descrive in dettaglio un'istanza specifica in cui CodeQL ha rilevato una vulnerabilità. Se sono presenti più istanze del codice che violano la stessa regola, viene generato un nuovo avviso per ogni posizione distinta. La scheda Percorsi contiene un collegamento diretto al frammento di codice interessato, in modo da poter selezionare il frammento da indirizzare all'interfaccia utente Web di Azure DevOps per la modifica. |
Descrizione | La descrizione viene fornita dallo strumento CodeQL in base al problema. |
Elemento consigliato | La raccomandazione è la correzione consigliata per un determinato avviso di analisi del codice. |
Esempio | La sezione di esempio mostra un esempio semplificato della debolezza identificata nel codice. |
Gravità | I livelli di gravità possono essere bassi, medi, alti o critici. Il punteggio di gravità è basato sul punteggio cvSS (Common Vulnerability Scoring System) specificato per l'enumerazione CWE (Common Weakness Enumeration). Altre informazioni sul punteggio della gravità sono disponibili in questo post di blog di GitHub. |
Visualizzazione degli avvisi per un repository
Chiunque disponga delle autorizzazioni di collaboratore per un repository può visualizzare un riepilogo di tutti gli avvisi per un repository nella scheda Sicurezza avanzata in Repository. Selezionare la scheda Analisi codice per visualizzare tutti gli avvisi di analisi dei segreti.
Per visualizzare i risultati, è necessario eseguire prima le attività di analisi del codice. Al termine della prima analisi, tutte le vulnerabilità rilevate vengono visualizzate nella scheda Sicurezza avanzata.
Per impostazione predefinita, nella pagina degli avvisi vengono visualizzati i risultati dell'analisi delle dipendenze per il ramo predefinito del repository.
Lo stato di un determinato avviso riflette lo stato per il ramo predefinito e la pipeline di esecuzione più recente, anche se l'avviso esiste in altri rami e pipeline.
Ignorare gli avvisi di analisi del codice
Per ignorare gli avvisi, sono necessarie autorizzazioni appropriate. Per impostazione predefinita, solo gli amministratori del progetto possono ignorare gli avvisi di sicurezza avanzata.
Per ignorare un avviso:
- Passare all'avviso da chiudere e selezionare l'avviso.
- Selezionare l'elenco a discesa Chiudi avviso .
- Se non è già selezionata, selezionare Rischio accettato o Falso positivo come motivo di chiusura.
- Aggiungere un commento facoltativo nella casella di testo Commento .
- Selezionare Chiudi per inviare e chiudere l'avviso.
- Lo stato dell'avviso passa da Apri a Chiuso e viene visualizzato il motivo di chiusura.
Questa azione ignora solo l'avviso per il ramo selezionato. Altri rami che contengono la stessa vulnerabilità rimangono attivi fino a quando non vengono ignorati. Qualsiasi avviso ignorato in precedenza può essere riaperto manualmente.
Gestione degli avvisi di analisi del codice nelle richieste pull
Se vengono creati avvisi per le nuove modifiche al codice in una richiesta pull, l'avviso viene segnalato come annotazione nella sezione commento della scheda Panoramica della richiesta pull e come avviso nella scheda Repository sicurezza avanzata. È disponibile una nuova voce di selezione ramo per il ramo di richiesta pull.
È possibile esaminare le righe di codice interessate, visualizzare un riepilogo della ricerca e risolvere l'annotazione nella sezione Panoramica.
Per ignorare gli avvisi delle richieste pull, è necessario passare alla visualizzazione dettagli avviso per chiudere l'avviso e risolvere l'annotazione. In caso contrario, la semplice modifica dello stato del commento (1) risolve l'annotazione, ma non chiude o corregge l'avviso sottostante.
Per visualizzare l'intero set di risultati per il ramo di richiesta pull, passare a Sicurezza avanzata Repos>e selezionare il ramo di richiesta pull. Selezionando Mostra altri dettagli (2) nell'annotazione viene visualizzata la visualizzazione dettagli avviso nella scheda Sicurezza avanzata.
Suggerimento
Le annotazioni verranno create solo quando le righe di codice interessate sono interamente univoche rispetto al ramo di destinazione della richiesta pull della richiesta pull.