Avvio rapido: Creare un flusso di lavoro GitHub per l'analisi di sicurezza

In questo avvio rapido si apprenderà come creare un flusso di lavoro GitHub CodeQL per automatizzare l'individuazione delle vulnerabilità nella codebase .NET.

In CodeQL il codice viene trattato come dati. Vulnerabilità, bug e altri errori di sicurezza vengono modellati come query che possono essere eseguite nei database estratti dal codice.

Prerequisiti

  • Un account GitHub.
  • Un repository di codice sorgente .NET.

Creare un file di flusso di lavoro

Nel repository GitHub, aggiungere un nuovo file YAML alla directory .github/workflows. Scegliere un nome di file significativo, qualcosa che indichi chiaramente lo scopo del flusso di lavoro. Per altre informazioni, vedere File di flusso di lavoro.

Importante

GitHub richiede che i file di composizione del flusso di lavoro vengano inseriti nella directory .github/workflows.

I file di flusso di lavoro definiscono in genere una composizione di una o più azioni GitHub tramite jobs.<job_id>/steps[*]. Per maggiori informazioni, vedere Sintassi del flusso di lavoro per GitHub Actions.

Creare un nuovo file denominato codeql-analysis.yml, quindi copiare e incollare al suo interno i seguenti contenuti YML:

name: "CodeQL"

on:
  push:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  pull_request:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  schedule:
    - cron: '0 8 * * 4'

jobs:
  analyze:

    name: analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 2

    - run: git checkout HEAD^2
      if: ${{ github.event_name == 'pull_request' }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

Nella precedente composizione del flusso di lavoro:

  • name: CodeQL definisce il nome, "CodeQL" verrà visualizzato nelle notifiche di stato del flusso di lavoro.

    name: "CodeQL"
    
  • Il nodo on indica gli eventi che attivano il flusso di lavoro:

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • Attivato quando un push o pull_request si verifica nel ramo main in cui tutti i file modificati terminano con le estensioni di file .cs o .csproj.
    • Come processo cron (secondo un programma) da eseguire alle 8:00 UTC ogni giovedì.
  • Il nodo jobs compila i passaggi da eseguire per il flusso di lavoro.

    jobs:
      analyze:
    
        name: analyze
        runs-on: ubuntu-latest
    
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp']
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v3
          with:
            fetch-depth: 2
    
        - run: git checkout HEAD^2
          if: ${{ github.event_name == 'pull_request' }}
    
        - name: Initialize CodeQL
          uses: github/codeql-action/init@v1
          with:
            languages: ${{ matrix.language }}
    
        - name: Autobuild
          uses: github/codeql-action/autobuild@v1
    
        - name: Perform CodeQL Analysis
          uses: github/codeql-action/analyze@v1
    
    • Esiste un unico processo denominato analyze che verrà eseguito sulla versione più recente di Ubuntu.
    • strategy definisce C# come language.
    • L'azione GitHub github/codeql-action/init@v1 viene usata per inizializzare CodeQL.
    • L'azione GitHub github/codeql-action/autobuild@v1 compila il progetto .NET.
    • L'azione GitHub github/codeql-action/analyze@v1 esegue l'analisi CodeQL.

Per altre informazioni, vedere GitHub Actions: Configurare l'analisi del codice.

Creare una notifica di stato del flusso di lavoro

È nella terminologia comune dei repository GitHub avere un file README.md nella radice della directory del repository. Analogamente, è utile poter segnalare lo stato più recente per vari flussi di lavoro. Tutti i flussi di lavoro possono generare una notifica di stato visivamente accattivante all'interno del file README.md. Per aggiungere la notifica di stato del flusso di lavoro:

  1. Dal repository GitHub selezionare l'opzione di navigazione Azioni.

  2. Tutti i flussi di lavoro del repository vengono visualizzati sul lato sinistro; selezionare il flusso di lavoro desiderato e il pulsante puntini di sospensione (...).

    • Il pulsante puntini di sospensione (...) espande le opzioni di menu per il flusso di lavoro selezionato.
  3. Selezionare l'opzione di menu Crea notifica di stato.

    GitHub: Create status badge

  4. Selezionare il pulsante Copia Markdown notifica di stato.

    GitHub: Copy status badge Markdown

  5. Incollare il Markdown nel file README.md, salvare il file ed eseguire il commit e il push delle modifiche.

Per altre informazioni, vedere Aggiunta di una notifica di stato del flusso di lavoro.

Notifica di stato del flusso di lavoro CodeQL di esempio

Superamento Fallito Nessuno stato
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

Vedi anche

Passaggi successivi