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.
GitHub Advanced Security per Azure DevOps funziona con Azure Repos. Per usare GitHub Advanced Security con i repository GitHub, vedere GitHub Advanced Security.
Avvisi codeQL
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 .
Per una documentazione più specifica su CodeQL, vedere la documentazione di CodeQL su GitHub.
CodeQL supporta linguaggi compilati e interpretati e può trovare vulnerabilità ed errori nel codice scritto nei linguaggi supportati.
- C/C++
- C#
- Go
- Java
- JavaScript/TypeScript
- Kotlin (beta)
- Python
- Ruby
- Swift
Per altre informazioni, vedere la documentazione sul sito Web CodeQL in Linguaggi e framework supportati.
È possibile visualizzare le query e i dettagli dell'attività specifici usati da CodeQL esaminando il log di compilazione, in modo analogo all'analisi delle dipendenze.
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. |
Gestire gli avvisi di analisi del codice
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.
Uso di query personalizzate con CodeQL
Per impostazione predefinita, se non è stato specificato un file di configurazione personalizzato nella configurazione della pipeline, CodeQL esegue il security-extended
pacchetto di query per analizzare il codice. È possibile usare query CodeQL personalizzate per scrivere query personalizzate per individuare vulnerabilità ed errori specifici. È anche necessario creare un file di configurazione personalizzato per modificare l'analisi predefinita di CodeQL.
Per trovare query personalizzate esistenti o per contribuire alla propria query personalizzata, vedere Contributi a CodeQL.
Analisi con query personalizzate
Il modo più rapido per iniziare con una query personalizzata consiste nel scrivere una query e salvarla nel repository DevOps di Azure locale. È possibile personalizzare i dettagli di una query personalizzata in base alle esigenze, ma deve avere almeno un ID regola. Per altre informazioni su come scrivere una query CodeQL personalizzata, vedere Scrittura di query CodeQL. È anche possibile raggruppare più query in un gruppo di query o utilizzare pacchetti pubblicati da altri utenti. Per altre informazioni, vedere Pubblicazione e uso di pacchetti CodeQL.
Utilizzo di un file di configurazione personalizzato
Un file di configurazione personalizzato è un modo per gestire le query eseguite durante l'analisi di CodeQL sul codice. È possibile specificare più query o query pack da eseguire e modificare o disabilitare le query CodeQL predefinite.
Per includere una query specifica da includere, specificare la query con un nome e un percorso per il percorso del file di query (con estensione ql) nel repository.
Per includere un pacchetto specifico da includere, specificare il nome del pacchetto. È possibile specificare un numero qualsiasi di Query Pack codeQL da eseguire nel file di configurazione.
Il passaggio successivo consiste nel creare un qlpack.yml
file. Questo file dichiara il pacchetto CodeQL e le informazioni su di esso. Tutti i *.ql
file nella stessa directory (o sottodirectory) di un qlpack.yml
vengono considerati parte del pacchetto.
Suggerimento
Il filtro packs
dal file di configurazione supporta il download dei pacchetti dai repository ospitati in GitHub, anche se il filtro queries
non lo fa.
Se il pacchetto è privato in GitHub, è necessario fornire un token di accesso GitHub tramite l'attività AdvancedSecurity-Codeql-Init@1
come variabile di ambiente e nome di variabile come GITHUB_TOKEN
, con l'ambito del token come read:packages
.
Di seguito è riportato un esempio di file di configurazione.
name: "Run custom queries"
# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
- name: Use security-extended query suite
uses: security-extended
- name: Use local custom query (single query)
uses: ./customQueries/javascript/FindTestFunctions.ql
- name: Use local custom query (directory of queries)
uses: ./customQueries/javascript/MemoryLeakQueries
packs:
- mygithuborg/mypackname
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
query-filters:
- include:
kind: problem
- include:
precision: medium
- exclude:
id:
- js/angular/disabling-sce
- js/angular/insecure-url-allowlist
Suggerimento
Le specifiche dei file di configurazione ignorano e hanno la precedenza sulle configurazioni a livello di pipeline per l'attività AdvancedSecurity-Codeql-Init@1
.
includepaths
/ ignorepaths
verrà ignorato o, se paths
/paths-ignore
presenti, sovrascritto con i valori di paths
/paths-ignore
.
querysuite
verrà sovrascritto con i valori specificati in queries
o packs
nel file di configurazione.
Se si usa una query personalizzata, di seguito è riportato un esempio qlpack.yml
inserito nella directory delle query personalizzate:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
La dependencies
variabile contiene tutte le dipendenze di questo pacchetto e i relativi intervalli di versioni compatibili. A ogni dipendenza viene fatto riferimento come di scope/name
un pacchetto di libreria CodeQL. Quando si definisce dependencies
, dipende qlpack.yml
esattamente da uno dei Language Pack principali (ad esempio, JavaScript, C#, Ruby e così via), che determina il linguaggio che la query può analizzare.
Per consigli e opzioni di configurazione più specifici con il file di configurazione, vedere Personalizzazione dell'installazione avanzata per l'analisi del codice o per qlpack.yml
l'installazione, vedere Struttura del pacchetto CodeQL.
Dopo aver creato il file di configurazione, è necessario personalizzare la pipeline che esegue l'analisi CodeQL per usare il nuovo file. Ecco una pipeline di esempio che punta a un file di configurazione:
trigger: none
pool:
vmImage: windows-latest
# You can either specify your CodeQL variables in a variable block...
variables:
# `configfilepath` must be an absolute file path relative to the repository root
advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# Or you can specify variables as variables for the task. You do not need both definitions.
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
languages: 'javascript'
loglevel: '2'
configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
env:
GITHUB_TOKEN: $(githubtoken)
- task: AdvancedSecurity-Codeql-Autobuild@1
displayName: AutoBuild
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Risoluzione dei problemi di analisi del codice
In genere, se si verificano errori con l'esecuzione di CodeQL, l'interfaccia della riga di comando codeQL segnala lo stato di ogni comando eseguito come codice di uscita. Il codice di uscita fornisce informazioni per i comandi successivi o per altri strumenti che si basano sull'interfaccia della riga di comando codeQL. Per altre informazioni sui dettagli del codice di uscita, vedere Codici di uscita.
Errore: comando CodeQL 'database finalize' (32)
Questo errore indica un problema con la finalizzazione della creazione del database CodeQL, potenzialmente a causa di errori di estrazione o passaggi di compilazione mancanti.
Passaggi per la risoluzione dei problemi:
- Verificare che il codice esista e che sia compilato
- Per i linguaggi compilati, verificare che il processo di compilazione stia compilando il codice e che si stia verificando tra le
AdvancedSecurity-Codeql-Init
attività eAdvancedSecurity-Codeql-Analyze
. I comandi di compilazione comuni e i flag obbligatori ,ad esempio clean no-cache/no-daemon, sono disponibili qui in Specifica dei comandi di compilazione. - Per le lingue interpretate, verificare che nel progetto sia presente un codice sorgente per la lingua specificata.
- Per i linguaggi compilati, verificare che il processo di compilazione stia compilando il codice e che si stia verificando tra le
- Controllare gli errori di estrazione
- Verificare se gli errori di estrazione influiscono sull'integrità del database CodeQL.
- Esaminare il file di log per individuare gli errori di estrazione e gli avvisi per valutare l'integrità complessiva del database.
- Analizzare gli errori travolgenti
- Se la maggior parte dei file rileva errori dell'estrattore, esaminare ulteriormente per comprendere la causa radice dell'estrazione non corretta.
Errore: script di compilazione automatica (1)
Questo errore descrive un errore di compilazione automatico, che suggerisce un problema relativo all'analisi del codice durante l'installazione o la configurazione.
Passaggi per la risoluzione dei problemi:
- Configurare i passaggi di compilazione
- Rimuovere il passaggio AutoBuild e configurare invece passaggi di compilazione specifici per i linguaggi compilati nelle pipeline.
- Vedere le linee guida per la configurazione fornite in Configurare la sicurezza avanzata di GitHub per Azure DevOps.
Errore: Directory CodeQL non trovate nella cache degli strumenti agente
Questo errore indica un problema relativo all'installazione di CodeQL per gli agenti self-hosted.
Passaggi per la risoluzione dei problemi:
- Vedere linee guida per l'installazione o script di configurazione forniti in Configurare la sicurezza avanzata di GitHub per Azure DevOps.
Errore: variabile della pipeline di linguaggio non impostata
Questo errore si verifica quando si tenta di eseguire CodeQL senza impostare la variabile della pipeline che specifica le lingue da analizzare.
Passaggi per la risoluzione dei problemi:
- Impostare la variabile della pipeline del linguaggio
- Verificare che la variabile della pipeline del linguaggio sia configurata correttamente. Vedere le linee guida per la configurazione fornite in Configurare la sicurezza avanzata di GitHub per Azure DevOps.
- Le lingue supportate includono
csharp
,go
cpp
,java
,javascript
,python
,ruby
, eswift
.
CodeQL che non restituisce risultati
Questa sezione fornisce indicazioni per le situazioni in cui l'analisi CodeQL non produce risultati.
Passaggi per la risoluzione dei problemi:
- Verificare la presenza di vulnerabilità rilevate
- Considerare la possibilità che il codice non abbia effettivamente vulnerabilità. Se le vulnerabilità sono previste ma non rilevate, procedere con la verifica.
- Esaminare la configurazione del gruppo di query
- Confermare l'uso del gruppo di query e prendere in considerazione il passaggio a una suite più completa, se necessario.
- In alternativa, è possibile creare pacchetti di query personalizzati per l'analisi personalizzata.
- Modificare le autorizzazioni per la visualizzazione dei risultati
- Assicurarsi che le autorizzazioni appropriate, almeno a livello di collaboratore, vengano concesse per accedere ai risultati dell'analisi. Per altre informazioni, vedere Autorizzazioni di sicurezza avanzata.
Timeout codeQL
Se l'attività AdvancedSecurity-Codeql-Analyze@1
viene visualizzata This job was abandoned ... we lost contact with the agent
e si usa un agente Microsoft ospitato, l'attività raggiunge il timeout predefinito di sei ore per gli agenti ospitati a pagamento. In alternativa, è possibile tentare di eseguire l'analisi su un agente self-hosted.
Autorizzazioni per le attività di analisi del codice
L'attività di compilazione di analisi del codice usa l'identità della pipeline per chiamare le API REST di sicurezza avanzata. Per impostazione predefinita, le pipeline nello stesso progetto hanno accesso per caricare il file SARIF generato eseguendo l'analisi CodeQL. Se queste autorizzazioni vengono rimosse dall'account del servizio di compilazione o se si dispone di un'installazione personalizzata , ad esempio una pipeline ospitata in un progetto diverso dal repository, è necessario concedere queste autorizzazioni manualmente.
Passaggi per la risoluzione dei problemi:
- Concedere
Advanced Security: View alerts
eAdvanced Security: Manage and dismiss alerts
l'autorizzazione all'account del servizio di compilazione usato nella pipeline, che per le pipeline con ambito progetto è[Project Name] Build Service ([Organization Name])
e per le pipeline con ambito raccolta èProject Collection Build Service ([Organization Name])
.
Installazione manuale del bundle CodeQL nell'agente self-hosted
Installare il bundle CodeQL nella cache degli strumenti dell'agente usando lo script di installazione per l'architettura, disponibile in GitHub. Questi script richiedono che la $AGENT_TOOLSDIRECTORY
variabile di ambiente sia impostata sul percorso della directory degli strumenti dell'agente nell'agente, ad esempio C:/agent/_work/_tool
. In alternativa, è possibile implementare manualmente i passaggi seguenti:
- Selezionare il bundle di versione codeQL più recente da GitHub.
- Scaricare e decomprimere il bundle nella directory seguente all'interno della directory degli strumenti dell'agente, in genere disponibile in
_work/_tool
:./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/
. Usando la versione corrente di , il nome dellav2.16.0
cartella sarà denominato./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/
. Altre informazioni sulla directory degli strumenti dell'agente. - Creare un file vuoto denominato
x64.complete
all'interno della./CodeQL/0.0.0-[codeql-release-bundle-tag]
cartella . Usando l'esempio precedente, il percorso del file finale delx64.complete
file deve essere./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete
.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per