Condividi tramite


Domande frequenti | Azzurro

Nota

A partire dal 31 dicembre 2022, l'estensione Microsoft Security Code Analysis (MSCA) viene ritirata. MSCA viene sostituito dall'estensione Microsoft Security DevOps di Azure DevOps. Seguire le istruzioni in Configurare per installare e configurare l'estensione.

Domande frequenti generali

È possibile installare l'estensione nell'istanza di Azure DevOps Server (in precedenza Visual Studio Team Foundation Server) anziché in un'istanza di Azure DevOps?

No. L'estensione non è disponibile per il download e l'installazione per Azure DevOps Server (in precedenza Visual Studio Team Foundation Server).

È necessario eseguire l'analisi del codice di sicurezza Microsoft con la compilazione?

È possibile. Dipende dal tipo di strumento di analisi. Il codice sorgente potrebbe essere l'unico elemento necessario o potrebbe essere necessario l'output di compilazione.

Ad esempio, Credential Scanner (CredScan) analizza i file all'interno della struttura di cartelle del repository di codice. A causa di questa analisi, è possibile eseguire le attività di compilazione CredScan e Publish Security Analysis Logs in una compilazione autonoma per ottenere risultati.

Per altri strumenti come BinSkim che analizzano gli artefatti post-compilazione, la compilazione è necessaria per prima.

È possibile interrompere la compilazione quando vengono trovati i risultati?

Sì. È possibile introdurre un'interruzione di compilazione quando uno strumento segnala un problema o un problema nel file di log. Aggiungere l'attività di compilazione Post-Analisi e selezionare la casella di controllo per qualsiasi strumento per cui si vuole interrompere la compilazione.

Nell'interfaccia utente dell'attività Post-Analisi è possibile scegliere di interrompere la compilazione quando uno strumento segnala solo errori o sia errori che avvisi.

In che modo gli argomenti della riga di comando in Azure DevOps differiscono da questi argomenti negli strumenti desktop autonomi?

In genere, le attività di compilazione di Azure DevOps sono wrapper diretti intorno agli argomenti della riga di comando degli strumenti di sicurezza. È possibile passare come argomenti a un'attività di compilazione qualsiasi elemento passato normalmente a uno strumento da riga di comando.

Differenze evidenti:

  • Gli strumenti vengono eseguiti dalla cartella di origine dell'agente $(Build.SourcesDirectory) o da %BUILD_SOURCESDIRECTORY%. Un esempio è C:\agent_work\1\s.
  • I percorsi negli argomenti possono essere relativi alla radice della directory di origine elencata in precedenza. I percorsi possono anche essere assoluti. È possibile ottenere percorsi assoluti usando le variabili di compilazione di Azure DevOps o eseguendo un agente locale con percorsi di distribuzione noti delle risorse locali.
  • Gli strumenti forniscono automaticamente un percorso o una cartella del file di output. Se si specifica un percorso di output per un'attività di compilazione, tale posizione viene sostituita con un percorso del percorso noto dei log nell'agente di compilazione
  • Alcuni altri argomenti della riga di comando vengono modificati per alcuni strumenti. Un esempio è l'aggiunta o la rimozione di opzioni che assicurano l'avvio di nessuna GUI.

È possibile eseguire un'attività di compilazione come Credential Scanner in più repository in una build di Azure DevOps?

No. L'esecuzione degli strumenti di sviluppo sicuri in più repository in una singola pipeline non è supportata.

Il file di output specificato non viene creato oppure non è possibile trovare il file di output specificato

Le attività di compilazione filtrano alcuni input utente. Per questa domanda in particolare, aggiornano il percorso del file di output generato in modo che siano un percorso comune nell'agente di compilazione. Per altre informazioni su questo percorso, vedere le domande seguenti.

Dove vengono salvati i file di output generati dagli strumenti?

Le attività di compilazione aggiungono automaticamente percorsi di output a questo percorso noto nell'agente di compilazione: $(Agent.BuildDirectory)_sdt\logs. Poiché viene standardizzata in questa posizione, tutti i team che producono o utilizzano i log di analisi del codice hanno accesso all'output.

È possibile accodare una compilazione per eseguire queste attività in un agente di compilazione ospitato?

Sì. Tutte le attività e gli strumenti nell'estensione possono essere eseguiti in un agente di compilazione ospitato.

Nota

L'attività di compilazione Anti-Malware Scanner richiede un agente di compilazione con Windows Defender abilitato. Visual Studio 2017 ospitato e versioni successive forniscono un agente di questo tipo. L'attività di compilazione non verrà eseguita nell'agente ospitato di Visual Studio 2015.

Anche se le firme non possono essere aggiornate su questi agenti, le firme devono essere sempre inferiori a tre ore prima.

È possibile eseguire queste attività di compilazione come parte di una pipeline di versione anziché una pipeline di compilazione?

Nella maggior parte dei casi, sì.

Azure DevOps, tuttavia, non supporta l'esecuzione di attività all'interno di pipeline di versione quando tali attività pubblicano artefatti. Questa mancanza di supporto impedisce l'esecuzione corretta dell'attività Pubblica log di analisi della sicurezza in una pipeline di versione. L'attività ha invece esito negativo con un messaggio di errore descrittivo.

Da dove le attività di compilazione scaricano gli strumenti?

Le attività di compilazione possono scaricare i pacchetti NuGet degli strumenti dal feed di gestione pacchetti di Azure DevOps . Le attività di compilazione possono anche usare Node Package Manager, che deve essere preinstallato nell'agente di compilazione. Un esempio di tale installazione è il comando npm install tslint.

Quale effetto ha l'installazione dell'estensione nell'organizzazione di Azure DevOps?

Al momento dell'installazione, le attività di compilazione della sicurezza fornite dall'estensione diventano disponibili per tutti gli utenti dell'organizzazione. Quando si crea o si modifica una pipeline di Azure, queste attività sono disponibili nell'elenco di raccolte di attività di compilazione. In caso contrario, l'installazione dell'estensione nell'organizzazione di Azure DevOps non ha alcun effetto. L'installazione non modifica le impostazioni dell'account, le impostazioni del progetto o le pipeline.

L'installazione dell'estensione modifica azure Pipelines esistente?

No. L'installazione dell'estensione rende disponibili le attività di compilazione della sicurezza per l'aggiunta alle pipeline. È comunque necessario aggiungere o aggiornare le definizioni di compilazione, in modo che gli strumenti possano usare il processo di compilazione.

Domande frequenti specifiche dell'attività

Le domande specifiche per la compilazione delle attività sono elencate in questa sezione.

Scanner di credenziali

Quali sono gli scenari e gli esempi di eliminazione comuni?

Ecco i dettagli di due degli scenari di eliminazione più comuni.

Per eliminare tutte le occorrenze di un determinato segreto all'interno del percorso specificato

La chiave hash del segreto del file di output CredScan è necessaria come illustrato nell'esempio seguente.

{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
        "_justification": "Secret used by MSDN sample, it is fake."
    }
  ]
}

Avvertimento

La chiave hash viene generata da una parte del valore o del contenuto del file corrispondente. Qualsiasi revisione del codice sorgente può modificare la chiave hash e disabilitare la regola di eliminazione.

Per eliminare tutti i segreti in un file specificato o per eliminare il file dei segreti stesso

L'espressione di file può essere un nome di file. Può anche essere la parte basename di un percorso di file completo o di un nome file. I caratteri jolly non sono supportati.

Negli esempi seguenti viene illustrato come eliminare il file <InputPath>\src\JS\lib\angular.js

Esempi di regole di eliminazione valide:

  • < >\src\JS\lib\angular.js InputPath: elimina il file nel percorso specificato
  • \src\JS\lib\angular.js
  • \JS\lib\angular.js
  • \lib\angular.js
  • angular.js : elimina qualsiasi file con lo stesso nome
{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "file": "\\files\\AdditonalSearcher.xml", 
        "_justification": "Additional CredScan searcher specific to my team"
    },
    {
        "file": "\\files\\unittest.pfx", 
        "_justification": "Legitimate UT certificate file with private key"
    }
  ]
}

Avvertimento

Tutti i segreti futuri aggiunti al file verranno eliminati automaticamente.

Quali sono le linee guida consigliate per la gestione dei segreti?

Le risorse seguenti consentono di gestire in modo sicuro i segreti e accedere alle informazioni riservate dall'interno delle applicazioni:

Per altre informazioni, vedere il post di blog Managing Secrets Securely in the Cloud.

Posso scrivere i miei cercatori personalizzati?

Credential Scanner si basa su un set di cercatori di contenuto comunemente definiti nel file di buildsearchers.xml. Il file contiene una matrice di oggetti serializzati XML che rappresentano un oggetto ContentSearcher. Il programma viene distribuito con un set di cercatori ben testati. Ma è anche possibile implementare ricerche personalizzate.

Un cercatore di contenuto è definito come segue:

  • Nome: nome descrittivo da usare nei file di output dello scanner di credenziali. È consigliabile usare la convenzione di denominazione camel-case per i nomi dei cercatore.

  • RuleId: ID opaco stabile del searcher:

    • A un searcher predefinito di Credential Scanner viene assegnato un valore RuleId come CSCAN0010, CSCAN0020 o CSCAN0030. L'ultima cifra è riservata per l'unione o la divisione dei gruppi di ricerca tramite espressioni regolari (regex).
    • Il valore RuleId per un searcher personalizzato deve avere uno spazio dei nomi specifico. Gli esempi includono CSCAN-<Namespace>0010, CSCAN-<Namespace>0020 e CSCAN-<Namespace>0030.
    • Un nome completo del searcher è la combinazione di un RuleId valore e un nome di ricerca. Gli esempi includono CSCAN0010. KeyStoreFiles e CSCAN0020. Base64EncodedCertificate.
  • ResourceMatchPattern: regex delle estensioni di file da controllare con il searcher.

  • ContentSearchPatterns: matrice di stringhe contenenti istruzioni regex da trovare. Se non vengono definiti criteri di ricerca, vengono restituiti tutti i file corrispondenti al valore ResourceMatchPattern.

  • ContentSearchFilters: matrice di stringhe contenenti istruzioni regex per filtrare i falsi positivi specifici del searcher.

  • MatchDetails: messaggio descrittivo, istruzioni di mitigazione o entrambi da aggiungere per ogni corrispondenza del cercatore.

  • raccomandazione: contenuto del campo dei suggerimenti per una corrispondenza usando il formato del report PREfast.

  • gravità: numero intero che riflette il livello di gravità di un problema. Il livello di gravità più alto ha il valore 1.

    XML che mostra l'installazione dello scanner di credenziali

Analizzatori Roslyn

Quali sono gli errori comuni quando si usa l'attività Analizzatori Roslyn?

Il progetto è stato ripristinato usando una versione di Microsoft.NETCore.App errata

Messaggio di errore completo:

"Errore: il progetto è stato ripristinato usando Microsoft.NETCore.App versione x.x.x, ma con le impostazioni correnti, la versione y.y.y verrebbe usata. Per risolvere questo problema, assicurarsi che vengano usate le stesse impostazioni per il ripristino e per le operazioni successive, ad esempio la compilazione o la pubblicazione. In genere questo problema può verificarsi se la proprietà RuntimeIdentifier viene impostata durante la compilazione o la pubblicazione, ma non durante il ripristino".

Poiché le attività di Roslyn Analyzers vengono eseguite come parte della compilazione, l'albero di origine nel computer di compilazione deve essere in uno stato compilabile.

Un passaggio tra la compilazione principale e i passaggi di Roslyn Analyzers potrebbe aver inserito l'albero di origine in uno stato che impedisce la compilazione. Questo passaggio aggiuntivo è probabilmente dotnet.exe pubblicare. Provare a duplicare il passaggio che esegue un ripristino NuGet subito prima del passaggio Analizzatori Roslyn. Questo passaggio duplicato potrebbe riportare l'albero di origine in uno stato compilabile.

csc.exe non è possibile creare un'istanza dell'analizzatore

Messaggio di errore completo:

"'csc.exe' chiuso con codice di errore 1 - Un'istanza dell'analizzatore AAAA non può essere creata da C:\BBBB.dll: Impossibile caricare il file o l'assembly 'Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' o una delle relative dipendenze. Il sistema non riesce a trovare il file specificato."

Assicurarsi che il compilatore supporti gli analizzatori Roslyn. L'esecuzione del comando csc.exe /version deve segnalare un valore di versione 2.6 o versione successiva.

A volte un file con estensione csproj può eseguire l'override dell'installazione di Visual Studio del computer di compilazione facendo riferimento a un pacchetto da Microsoft.Net.Compilers. Se non si intende usare una versione specifica del compilatore, rimuovere i riferimenti a Microsoft.Net.Compilers. In caso contrario, assicurarsi che anche la versione del pacchetto a cui si fa riferimento sia 2.6 o successiva.

Provare a ottenere il percorso del log degli errori, specificato nell'opzione csc.exe /errorlog. L'opzione e il percorso vengono visualizzati nel log per l'attività di compilazione Roslyn Analyzers. Potrebbero essere simili a /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif

La versione del compilatore C# non è abbastanza recente

Per ottenere le versioni più recenti del compilatore C#, passare a Microsoft.Net.Compilers. Per ottenere la versione installata, eseguire csc.exe /version al prompt dei comandi. Assicurarsi di fare riferimento a un pacchetto NuGet Microsoft.Net.Compilers versione 2.6 o successiva.

I log di MSBuild e VSBuild non vengono trovati

L'attività di compilazione Roslyn Analyzers deve eseguire query su Azure DevOps per il log di MSBuild dall'attività di compilazione MSBuild. Se l'attività analizzatore viene eseguita immediatamente dopo l'attività MSBuild, il log non sarà ancora disponibile. Inserire altre attività tra l'attività MSBuild e l'attività Analizzatori Roslyn. Esempi di altre attività includono BinSkim e Anti-Malware Scanner.

Passaggi successivi

Se è necessaria assistenza aggiuntiva, il supporto per l'analisi del codice di sicurezza Microsoft è disponibile da lunedì a venerdì dalle 9:00 alle 17:00 ora solare pacifico.