Condividi tramite


Configura l'analisi del codice

L'analisi del codice in GitHub Sicurezza avanzata per Azure DevOps consente di analizzare il codice in un repository Azure DevOps per individuare vulnerabilità di sicurezza ed errori di codifica. È necessario GitHub sicurezza avanzata per Azure DevOps oppure, se si usa l'esperienza autonoma, GitHub sicurezza del codice per Azure DevOps abilitata. 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 Sicurezza avanzata per Azure DevOps funziona con Azure Repos. Per utilizzare GitHub Sicurezza Avanzata con repository di GitHub, vedere GitHub Advanced Security.

Prerequisiti

Categoria Requisiti
Autorizzazioni - Per visualizzare un riepilogo di tutti gli avvisi per un repository: collaboratore autorizzazioni per il repository.
- Per ignorare gli avvisi in Sicurezza avanzata: delle autorizzazioni amministratore del progetto.
- Per gestire le autorizzazioni in Sicurezza avanzata: membro del gruppo Amministratori della raccolta di progetti o con l'autorizzazione Sicurezza avanzata: gestire le impostazioni impostata su Consenti.

Per altre informazioni sulle autorizzazioni di sicurezza avanzata, vedere Gestire le autorizzazioni di sicurezza avanzata.

Informazioni sui tipi di installazione dell'analisi del codice

Esistono due modi principali per configurare l'analisi del codice per il repository: configurazione predefinita e configurazione avanzata.

Impostazione predefinita Configurazione avanzata
Configuration Automatica, nessuna configurazione della pipeline necessaria Operazione manuale, richiede l'aggiunta di attività CodeQL a una pipeline
Rilevamento linguistico Rileva e analizza automaticamente i linguaggi supportati da CodeQL Devi specificare le lingue nell'attività della pipeline
Copertura dei rami Analizza solo ramo predefinito Analizza qualsiasi ramo che attiva la pipeline
Personalizzazione del build Nessuna procedura di compilazione personalizzata: usa la modalità di compilazione none Controllo completo sui passaggi di compilazione per i linguaggi compilati
Ideale per Abilitazione rapida, esigenze di analisi standard Analisi multi-branch, pool di agenti personalizzati o frequenza di analisi

La configurazione predefinita è il modo più rapido per abilitare l'analisi del codice. Crea una configurazione di analisi gestita in background e non richiede modifiche alla pipeline. È consigliabile iniziare con la configurazione predefinita per la maggior parte dei repository.

Advanced setup offre il controllo completo aggiungendo attività CodeQL direttamente al Azure Pipelines. Usare la configurazione avanzata quando è necessario:

  • Gestire pool di agenti specifici per lingue o esigenze di calcolo diverse
  • Personalizzare i passaggi di compilazione per i linguaggi compilati
  • Analizzare i rami oltre il ramo predefinito
  • Integrare l'analisi del codice in una pipeline CI/CD esistente
  • Usare una suite di query CodeQL specifica o query personalizzate

Suggerimento

È possibile iniziare con l'installazione predefinita e passare alla configurazione avanzata in un secondo momento se è necessario un maggiore controllo o usare entrambi. Per informazioni sulla configurazione dell'installazione predefinita, vedere Configurare GitHub funzionalità di sicurezza avanzata.

Configurare le opzioni di installazione predefinite

Dopo aver abilitato la configurazione predefinita di CodeQL, è possibile configurare il pool di agenti e analizzare la pianificazione dalle impostazioni dell'organizzazione. Queste opzioni si applicano a tutti i repository dell'organizzazione che usano la configurazione predefinita.

Per accedere alle opzioni configurabili, passare aRepository> dell'organizzazione ed espandere l'elenco a discesa Opzioni configurabili per l'installazione predefinita di CodeQL.

Screenshot delle opzioni configurabili espanse dell'installazione predefinita di CodeQL che mostrano le impostazioni del pool di agenti e della pianificazione dell'analisi.

Pool di agenti

Selezionare il pool di agenti usato per eseguire analisi di configurazione predefinita di CodeQL in tutti i repository dell'organizzazione. È possibile scegliere tra:

  • Azure Pipelines: usa agenti ospitati Microsoft. L'utilizzo del pool di agenti di Azure Pipelines consuma la concorrenza della pipeline.
  • Pool di agenti self-hosted : usa i propri agenti. Selezionare un pool self-hosted se i repository richiedono l'accesso a reti private, strumenti di compilazione specifici o altre risorse non disponibili negli agenti ospitati.
  • Gestione dei pool DevOps: usa pool gestiti Azure con immagini di vm personalizzate.

Pianificazione scansione

Selezionare quando l'installazione predefinita di CodeQL esegue l'analisi per tutti i repository nell'organizzazione. È possibile scegliere un giorno specifico della settimana per le analisi settimanali. La data di esecuzione pianificata successiva viene visualizzata sotto l'elenco a discesa.

Annullare le scansioni in corso o in coda

Se è necessario arrestare eventuali analisi di installazione predefinite in esecuzione o in coda, è possibile annullarle manualmente tramite Impostazioni dell'organizzazione>Repository. Gli utenti con sicurezza avanzata: l'autorizzazione di gestione delle impostazioni nel repository può annullare le esecuzioni di installazione predefinite in esecuzione o in coda.

Configurazione avanzata per l'analisi del codice

CodeQL è uno strumento basato su pipeline, in cui i risultati vengono aggregati per ogni repository.

Suggerimento

L'analisi del codice può essere un'attività di compilazione con un utilizzo più intensivo del tempo, pertanto è consigliabile aggiungere l'attività di analisi del codice a una pipeline separata clonata della pipeline di produzione principale o creare una nuova pipeline.

Aggiungere le attività nell'ordine seguente:

  1. Inizializzazione di sicurezza avanzata di CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Istruzioni di compilazione personalizzate
  3. Analisi di sicurezza avanzata con CodeQL (AdvancedSecurity-Codeql-Analyze@1)

Screenshot della configurazione della pipeline di analisi del codice per YAML.

Specificare anche la lingua che si sta analizzando nell'attività Initialize CodeQL . È possibile usare un elenco delimitato da virgole per analizzare più lingue contemporaneamente. Le lingue supportate sono csharp, cpp, go, java, javascript, python, ruby, swift. Se si usano agenti self-hosted, è anche possibile aggiungere la enableAutomaticCodeQLInstall: true variabile per installare automaticamente i bit CodeQL più recenti per l'agente.

Di seguito è riportato un esempio di pipeline di avvio:

trigger:
  - main

pool:
  # Additional hosted image options are available: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/agents/hosted#software
  vmImage: ubuntu-latest

steps:

  - task: AdvancedSecurity-Codeql-Init@1
    inputs:
      languages: "java"
      # Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
      # You can customize the initialize task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
      # If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
      enableAutomaticCodeQLInstall: true

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.

# If you had a Maven app:
#   - task: Maven@4
#     inputs:
#       mavenPomFile: 'pom.xml'
#       goals: 'clean package'
#       publishJUnitResults: true
#       testResultsFiles: '**/TEST-*.xml'
#       javaHomeOption: 'JDKVersion'
#       jdkVersionOption: '1.17'
#       mavenVersionOption: 'Default'

# Or a general script:
#   - script: |
#       echo "Run, Build Application using script"
#       ./location_of_script_within_repo/buildscript.sh

  - task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines

  - task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Specificare anche la lingua che si sta analizzando nell'attività Initialize CodeQL . Se il linguaggio specificato è swift, sono necessari passaggi di compilazione personalizzati.

Suggerimento

  • Usare java per analizzare il codice scritto in Java, Kotlin o entrambi.
  • Usare javascript per analizzare il codice scritto in JavaScript, TypeScript o entrambi.

Se si esegue su un agente self-hosted, selezionare Enable automatic CodeQL detection and installation per utilizzare automaticamente i componenti più recenti di CodeQL sul tuo agente, se non hai installato manualmente l'ultima versione del pacchetto CodeQL nella cache degli strumenti dell'agente.

Per generare avvisi, eseguire la prima analisi con una pipeline con le attività di analisi del codice incluse.

Altre configurazioni per l'analisi del codice

Supporto per la lingua e le query

GitHub esperti, ricercatori della sicurezza e 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 vengono open source, quindi è possibile visualizzare e contribuire alle query nel repository github/codeql.

CodeQL supporta e usa gli identificatori di lingua seguenti:

Lingua Identificatore
C/C++ cpp
C# csharp
Vai go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
rubino ruby
Veloce swift

Suggerimento

  • Usare cpp per analizzare il codice scritto in C, C++ o entrambi.
  • Usare java 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.

Screenshot dell'attività di pubblicazione dei risultati dell'analisi del codice.

Personalizzazione della modalità di compilazione per la scansione 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 cpp, javae csharp).
  • 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.

Suggerimento

La modalità di compilazione none è utilizzabile con altri linguaggi interpretati, ad esempio JavaScript, Python, Ruby. Se la modalità di compilazione none viene specificata per C# o Java con altri linguaggi compilati che non supportano la modalità di compilazione none, l'attività della pipeline ha esito negativo.

Il codice seguente illustra 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

Il codice seguente mostra 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

GitHub Sicurezza avanzata per Azure DevOps gli avvisi di analisi del codice includono flag di analisi del codice da parte del repository che segnalano vulnerabilità dell'applicazione a livello di codice.

Per usare l'analisi del codice, è prima necessario configurare GitHub Sicurezza avanzata per Azure DevOps.

La scheda Sicurezza avanzata in Repos in Azure DevOps è l'hub per visualizzare gli avvisi di analisi del codice. Selezionare la scheda Scansione codice per visualizzare gli avvisi di scansione. È 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 sulle branche PR.

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.

Screenshot degli avvisi di scansione del codice per un repository.

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 eseguite con l'attività quando la funzionalità di Sicurezza Avanzata è disattivata sono nascosti e non vengono mantenuti.

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

Schermata dei dettagli dell'avviso di analisi del codice.

Sezione Spiegazione
Posizione 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, consentendo di selezionare il frammento e accedere direttamente all'interfaccia utente web di Azure DevOps per modificarlo.
Descrizione La descrizione viene fornita dallo strumento CodeQL in base al problema.
Raccomandazione 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 fornito dal Common Vulnerability Scoring System (CVSS) per il Common Weakness Enumeration (CWE) identificato. Per altre informazioni sul punteggio della gravità, vedere questo post di blog 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 Repos. Selezionare la scheda Scansione del codice per visualizzare tutti gli avvisi di scansione 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 del codice per il ramo predefinito del repository.

Lo stato di un avviso specifico riflette la situazione per il ramo predefinito e la pipeline di esecuzione più recente, anche se l'avviso è presente 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:

  1. Vai all'avviso che desideri chiudere e fai clic su di esso.
  2. Selezionare il menu a discesa Chiudi avviso.
  3. Se non è già selezionata, selezionare Rischio accettato o Falso positivo come motivo di chiusura.
  4. Aggiungere un commento facoltativo nella casella di testo Commento .
  5. Selezionare Chiudi per inviare e chiudere l'avviso.
  6. Lo stato dell'avviso passa da Apri a Chiuso e viene visualizzato il motivo di rifiuto.

Screenshot di come ignorare un avviso di analisi del codice.

Questa azione ignora l'avviso in tutti i rami. Verranno ignorati anche altri rami che contengono la stessa vulnerabilità. 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 commenti della scheda Panoramica della richiesta pull e come avviso nella scheda Sicurezza avanzata del repository. È disponibile una nuova opzione di selezione del ramo per il ramo della richiesta pull.

È possibile esaminare le righe di codice interessate, visualizzare un riepilogo della ricerca e risolvere l'annotazione nella sezione Panoramica.

Screenshot dell'annotazione della richiesta pull del codice attivo.

Per eliminare gli avvisi relativi alle richieste di pull, è necessario passare alla visualizzazione dettagliata dell'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.

Screenshot dell'annotazione di una pull request di codice chiuso.

Per visualizzare l'intero set di risultati per il ramo di richiesta pull, passare a Repos>Advanced Security e selezionare il ramo di richiesta pull. Selezionando Mostra altri dettagli (2) nell'annotazione si accede alla visualizzazione dei dettagli dell'avviso nella scheda Sicurezza avanzata.

Suggerimento

Le annotazioni vengono create solo quando le righe di codice interessate sono completamente uniche rispetto alle differenze del pull request rispetto al ramo di destinazione.