Configurare GitHub Advanced Security per Azure DevOps (GHAzDO)

GitHub Advanced Security per Azure DevOps aggiunge la suite di funzionalità di sicurezza di GitHub Advanced Security ad Azure Repos.

GitHub Advanced Security per Azure include:

  • Protezione push dell'analisi dei segreti: verificare se i push di codice includono commit che espongono segreti come le credenziali
  • Analisi dei repository di analisi dei segreti: analizzare il repository e cercare segreti esposti di cui è stato eseguito il commit accidentalmente
  • Analisi delle dipendenze: cercare vulnerabilità note nelle dipendenze open source (dirette e transitive)
  • Analisi del codice: usare il motore di analisi statico codeQL per identificare le vulnerabilità dell'applicazione a livello di codice, ad esempio l'inserimento di SQL e il bypass dell'autenticazione

Al momento, GitHub Advanced Security for Azure DevOps è disponibile solo per Azure DevOps Services e non sono previsti piani per portare questo prodotto in Azure DevOps Server.

GitHub Advanced Security per Azure DevOps funziona con Azure Repos. Per usare GitHub Advanced Security con i repository GitHub, vedere GitHub Advanced Security.

Prerequisiti

È necessario disporre delle autorizzazioni allocate come membro del gruppo di Amministrazione istrators della raccolta di progetti. Per aggiungere membri al gruppo Amministrazione della raccolta di progetti o modificare un'autorizzazione a livello di raccolta di progetti, consultare la sezione Modificare le autorizzazioni a livello di raccolta del progetto.

Prerequisiti aggiuntivi per gli agenti self-hosted

Se l'organizzazione usa agenti self-hosted, sono previsti altri requisiti:

  • Aggiungere questi URL all'elenco Consenti per consentire all'attività di analisi delle dipendenze di recuperare i dati di avviso sulle vulnerabilità. Altre informazioni su Indirizzi IP consentiti e URL di dominio.
URL di dominio Descrizione
https://governance.dev.azure.com/{organization_name} Per le organizzazioni che usano il dominio dev.azure.com per accedere all'istanza di DevOps
https://dev.azure.com/{organization_name} Per le organizzazioni che usano il dominio dev.azure.com per accedere all'istanza di DevOps
https://advsec.dev.azure.com/{organization_name} Per le organizzazioni che usano il dominio dev.azure.com per accedere all'istanza di DevOps
https://{organization_name}.governance.visualstudio.com/ Per le organizzazioni che usano il dominio {organization_name}.visualstudio.com per accedere all'istanza di DevOps
https://{organization_name}.visualstudio.com  Per le organizzazioni che usano il dominio {organization_name}.visualstudio.com per accedere all'istanza di DevOps
https://{organization_name}.advsec.visualstudio.com/ Per le organizzazioni che usano il dominio {organization_name}.visualstudio.com per accedere all'istanza di DevOps
  • Eseguire una versione compatibile del runtime .NET (attualmente .NET 6.0.x). Se non è presente una versione compatibile nell'agente, l'attività di analisi delle dipendenze scarica .NET.

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

    1. Selezionare il bundle di versione codeQL più recente da GitHub.
    2. 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 della v2.16.0cartella sarà denominato ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/. Altre informazioni sulla directory degli strumenti dell'agente.
    3. 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 del x64.complete file deve essere ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete.

Abilitare GitHub Advanced Security

È possibile abilitare sicurezza avanzata a livello di organizzazione, progetto o repository. Per accedere a ognuno degli strumenti di analisi e dei risultati, è prima necessario abilitare Sicurezza avanzata. Dopo aver abilitato Sicurezza avanzata, tutti i push futuri contenenti segreti in un repository con questo criterio abilitato vengono bloccati e l'analisi dei segreti del repository viene eseguita in background.

Onboarding a livello di repository

  1. Passare alle impostazioni del progetto per il progetto Azure DevOps.
  2. Selezionare Repository repository>repository.
  3. Selezionare il repository per cui si vuole abilitare sicurezza avanzata.
  4. Selezionare Abilita e Inizia fatturazione per attivare Sicurezza avanzata. Viene ora visualizzata un'icona di schermata nella visualizzazione repository per qualsiasi repository con sicurezza avanzata abilitata.

Screenshot of enabling GitHub Advanced Security.

Onboarding a livello di progetto

  1. Passare alle impostazioni del progetto per il progetto Azure DevOps.
  2. Selezionare Repository.
  3. Seleziona la scheda Impostazioni.
  4. Selezionare Abilita tutto e verrà visualizzata una stima per il numero di commit attivi per il progetto.
  5. Selezionare Inizia fatturazione per attivare Sicurezza avanzata per ogni repository esistente nel progetto.
  6. Facoltativamente, selezionare Abilita automaticamente la sicurezza avanzata per i nuovi repository in modo che tutti i nuovi repository creati abbiano la sicurezza avanzata abilitata al momento della creazione.

Screenshot of project-level enablement for Advanced Security.

Onboarding a livello di organizzazione

  1. Passare alle impostazioni dell'organizzazione per l'organizzazione Azure DevOps.
  2. Selezionare Archivi.
  3. Selezionare Abilita tutto e verrà visualizzata una stima per il numero di commit attivi per l'organizzazione.
  4. Selezionare Inizia fatturazione per attivare Sicurezza avanzata per ogni repository esistente in ogni progetto dell'organizzazione.
  5. Facoltativamente, selezionare Abilita automaticamente sicurezza avanzata per i nuovi repository in modo che tutti i progetti appena creati abbiano la sicurezza avanzata abilitata al momento della creazione.

Screenshot of org-level enablement for Advanced Security.

Configurare l'analisi dei segreti

La protezione push di analisi dei segreti e l'analisi dei repository vengono abilitate automaticamente quando si attiva Sicurezza avanzata. È possibile abilitare o disabilitare la protezione push dei segreti dalla pagina delle impostazioni del repository.

Screenshot of enabling push protection.

Come accennato, l'analisi del repository di analisi dei segreti viene avviata automaticamente quando si abilita Sicurezza avanzata per un repository selezionato.

Configurare l'analisi delle dipendenze

L'analisi delle dipendenze è uno strumento di analisi basato su pipeline. I risultati vengono aggregati per ogni repository. È consigliabile aggiungere l'attività di analisi delle dipendenze a tutte le pipeline da analizzare.

Suggerimento

Per ottenere risultati di analisi più accurati, assicurarsi di aggiungere l'attività di analisi delle dipendenze seguendo i passaggi di compilazione di una pipeline che compila il codice da analizzare.

Aggiungere l'attività Advanced Security Dependency Scanning (AdvancedSecurity-Dependency-Scanning@1) direttamente al file della pipeline YAML oppure selezionare l'attività Analisi dipendenze sicurezza avanzata dall'assistente attività.

Screenshot of dependency scanning pipeline setup for YAML.

Set up code scanning

L'analisi del codice è anche uno strumento di analisi basato su pipeline in cui i risultati vengono aggregati per ogni repository.

Suggerimento

È consigliabile aggiungere l'attività di analisi del codice a una pipeline separata clonata della pipeline di produzione principale o creare una nuova pipeline. Ciò è dovuto al fatto che l'analisi del codice può essere un'attività di compilazione con un utilizzo più intensivo del tempo.

Aggiungere le attività nell'ordine seguente:

  1. Inizializzazione avanzata di CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Passaggi di compilazione personalizzati
  3. Advanced Security Perform CodeQL Analysis (AdvancedSecurity-Codeql-Analyze@1)

Screenshot of code scanning pipeline setup for YAML.

Inoltre, è necessario specificare le lingue analizzate nell'attività Inizializza codiceQL. Un elenco delimitato da virgole può essere usato per analizzare più lingue contemporaneamente. Le lingue supportate sono csharp, cpp, go, java, javascript, python, ruby, swift.

Di seguito è riportato un esempio di pipeline di avvio:

trigger:
  - main

pool:
  # Additional hosted image options are available: https://learn.microsoft.com/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://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you are 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. 

# 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://learn.microsoft.com/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://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Suggerimento

L'analisi codeQL per Kotlin/Swift è attualmente in versione beta. Durante la beta, l'analisi di questi linguaggi sarà meno completa rispetto all'analisi codeQL di altri. 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 il linguaggio specificato è cpp, java, csharp o swift sono necessari passaggi di compilazione o AutoBuild personalizzati. Per altri linguaggi, se AutoBuild è incluso, il passaggio viene completato correttamente senza eseguire alcuna azione.

Se, per qualsiasi motivo, è necessario disabilitare sicurezza avanzata, tutti gli avvisi e lo stato degli avvisi verranno conservati per la successiva abilitazione della sicurezza avanzata per il repository.

Passaggi successivi