Nota
A partire dal 31 dicembre 2022, l'estensione Microsoft Security Code Analysis (MSCA) viene ritirata. MSCA viene sostituito dall'estensione Microsoft Security DevOps azure DevOps. Seguire le istruzioni in Configurare per installare e configurare l'estensione.
Domande frequenti di carattere generale
È 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 Microsoft Security Code Analysis con la propria compilazione?
È possibile. Dipende dal tipo di strumento di analisi. Il codice sorgente potrebbe essere l'unico elemento necessario oppure potrebbe essere necessario l'output di compilazione.
Credential Scanner (CredScan), ad esempio, analizza i file all'interno della struttura di cartelle del repository di codice. Grazie a 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 di post-compilazione, è necessaria prima la compilazione.
È possibile interrompere la compilazione quando vengono trovati i risultati?
Sì. È possibile introdurre un'interruzione della compilazione quando uno strumento segnala un problema nel file di log. Aggiungere l'attività di compilazione Post-Analysis e selezionare la casella di controllo per qualsiasi strumento per cui si vuole interrompere la compilazione.
Nell'interfaccia utente dell'attività Post-Analysis è 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 sono diversi dagli 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 tutto ciò che si passa normalmente a uno strumento da riga di comando.
Differenze significative:
- 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 essere anche assoluti. Per ottenere percorsi assoluti, usare le variabili di compilazione di Azure DevOps o eseguire un agente locale con le posizioni di distribuzione note delle risorse locali.
- Gli strumenti forniscono automaticamente un percorso o una cartella del file di output. Se si specifica una posizione di output per un'attività di compilazione, tale posizione viene sostituita con un percorso alla posizione nota 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 che non venga avviata alcuna interfaccia utente grafica.
È possibile eseguire un'attività di compilazione come Credential Scanner in più repository in una compilazione 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 o non è possibile trovare il file di output specificato
Le attività di compilazione filtrano alcuni input utente. Per rispondere a questa domanda, aggiornano la posizione del file di output generato in modo che la posizione sia comune nell'agente di compilazione. Per altre informazioni su questa posizione, 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é questa posizione viene usata come standard, 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 e versioni successive ospitato fornisce tale agente. L'attività di compilazione non verrà eseguita nell'agente ospitato di Visual Studio 2015.
Le firme, anche se non possono essere aggiornate in questi agenti, devono sempre essere state create da meno di tre ore.
È possibile eseguire queste attività di compilazione come parte di una pipeline di versione invece che di una pipeline di compilazione?
Nella maggior parte dei casi, sì.
Azure DevOps, tuttavia, non supporta l'esecuzione di attività all'interno delle pipeline di versione quando tali attività pubblicano artefatti. Questa mancanza di supporto impedisce la corretta esecuzione dell'attività Publish Security Analysis Logs 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 Gestione pacchetti del nodo, che deve essere preinstallato nell'agente di compilazione. Un esempio di tale installazione è il comando npm install tslint.
Che effetto ha sull'organizzazione di Azure DevOps l'installazione dell'estensione?
Al momento dell'installazione, le attività di compilazione per la 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 le pipeline di Azure esistenti?
No. L'installazione dell'estensione rende le attività di compilazione per la sicurezza disponibili per l'aggiunta alle pipeline. È però necessario aggiungere o aggiornare le definizioni di compilazione, in modo che gli strumenti possano usare il processo di compilazione.
Domande frequenti specifiche delle attività
In questa sezione sono elencate le domande specifiche delle attività di compilazione.
Credential Scanner
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 dal file di output CredScan è obbligatoria, come illustrato nell'esempio seguente.
{
"tool": "Credential Scanner",
"suppressions": [
{
"hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
"_justification": "Secret used by MSDN sample, it is fake."
}
]
}
Avviso
La chiave hash viene generata da una parte del valore corrispondente o del contenuto del file. 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
L'espressione di file può essere un nome file. Può anche essere la parte basename di un percorso di file o di un nome di file completo. 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:
- <InputPath>\src\JS\lib\angular.js : elimina il file nel percorso specificato
- \src\JS\lib\angular.js
- \JS\lib\angular.js
- \lib\angular.js
- angular.js - elimina i 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"
}
]
}
Avviso
Anche tutti i segreti futuri aggiunti al file verranno eliminati automaticamente.
Quali sono le linee guida consigliate per gestire i segreti?
Le risorse seguenti consentono di gestire in modo sicuro i segreti e di accedere alle informazioni sensibili dalle applicazioni:
- Azure Key Vault
- Azure Active Directory (Azure AD)
- Identità del servizio gestita di Azure AD
- Identità gestite per le risorse di Azure
- Identità gestite in Servizio app di Azure e in Funzioni di Azure
- Libreria AppAuthentication
Per altre informazioni, vedere il post di blog Managing Secrets Securely in the Cloud (Gestione sicura dei segreti nel cloud).
È possibile scrivere utilità di ricerca personalizzate?
Credential Scanner si basa su un set di utilità di ricerca di contenuto comunemente definite nel file buildsearchers.xml. Il file contiene una matrice di oggetti XML serializzati che rappresentano un oggetto ContentSearcher. Il programma viene distribuito con un set di utilità di ricerca testate, ma è anche possibile implementare utilità di ricerca personalizzate.
Un'utilità di ricerca di contenuto è definita come segue:
Name: nome descrittivo dell'utilità di ricerca da usare nei file di output di Credential Scanner. È consigliabile usare la convenzione di denominazione con le maiuscole/minuscole camel per i nomi delle utilità di ricerca.
RuleId: ID opaco stabile dell'utilità di ricerca:
- A un'utilità di ricerca predefinita di Credential Scanner è assegnato un valore RuleId come CSCAN0010, CSCAN0020 o CSCAN0030. L'ultima cifra è riservata per l'eventuale merge o divisione dei gruppi di utilità di ricerca tramite espressioni regolari (regex).
- Il valore RuleId per un'utilità di ricerca personalizzata deve avere il proprio spazio dei nomi, Gli esempi includono CSCAN-Namespace 0010, CSCAN-Namespace 0020 e CSCAN-Namespace<>>< 0030.<>
- Un nome di utilità di ricerca completo è la combinazione di un valore RuleId e di un nome di utilità di ricerca, ad esempio CSCAN0010.KeyStoreFiles e CSCAN0020.Base64EncodedCertificate.
ResourceMatchPattern: espressione regolare delle estensioni di file da confrontare con l'utilità di ricerca.
ContentSearchPatterns: matrice di stringhe contenenti le istruzioni regex da usare per la corrispondenza. Se non vengono definiti criteri di ricerca, vengono restituiti tutti i file corrispondenti al valore ResourceMatchPattern.
ContentSearchFilters: matrice di stringhe contenenti le istruzioni regex per filtrare i falsi positivi specifici dell'utilità di ricerca.
MatchDetails: messaggio descrittivo, istruzioni di mitigazione o entrambi da aggiungere per ogni corrispondenza dell'utilità di ricerca.
Recommendation: contenuto del campo dei suggerimenti per una corrispondenza che usa il formato di report PREfast.
Severity: numero intero che riflette il livello di gravità di un problema. Il livello di gravità massimo ha il valore 1.
Analizzatori di Roslyn
Quali sono gli errori comuni quando si usa l'attività Roslyn Analyzers?
Per il ripristino del progetto è stata usata una versione non corretta di Microsoft.NETCore.App
Messaggio di errore completo:
"Errore: per il ripristino del progetto è stato usato Microsoft.NETCore.App versione x.x.x, ma con le impostazioni correnti viene usata la versione y.y.y. To resolve this issue, make sure the same settings are used for restore and for subsequent operations such as build or publish. Typically this issue can occur if the RuntimeIdentifier property is set during build or publish but not during restore" (Il progetto è stato ripristinato tramite Microsoft.NETCore.App versione 2.0.0, ma con le impostazioni correnti avrebbe dovuto essere usata la versione 2.0.6. Per risolvere il problema, assicurarsi che vengano usate le stesse impostazioni per il comando restore e per operazioni successive, quali build o publish. Questo problema si presenta, in genere, se la proprietà RuntimeIdentifier viene impostata durante l'operazione build o publish ma non durante restore).
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 posto l'albero di origine in uno stato che impedisce la compilazione. Questo passaggio aggiuntivo è probabilmente dotnet.exe publish. Provare a duplicare il passaggio che esegue un ripristino di NuGet subito prima del passaggio di Roslyn Analyzers. Questo passaggio duplicato potrebbe porre nuovamente l'albero di origine in uno stato compilabile.
csc.exe non può creare un'istanza dell'analizzatore
Messaggio di errore completo:
"'csc.exe' chiuso con codice di errore 1 - Non è possibile creare un'istanza dell'analizzatore AAAA da C:\BBBB.dll : Impossibile caricare file o assembly 'Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' o una delle relative dipendenze. The system cannot find the file specified" (Valore 'cwd' '/src' non valido. Impossibile trovare il file specificato)
Assicurarsi che il compilatore supporti Roslyn Analyzers. Eseguendo il comando csc.exe /version il valore della versione restituito sarà 2.6 o successivo.
In alcuni casi 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 vuole usare una versione specifica del compilatore, rimuovere i riferimenti a Microsoft.Net.Compilers. In caso contrario, assicurarsi che la versione del pacchetto a cui si fa riferimento sia anche 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 a un prompt dei comandi. Assicurarsi di fare riferimento a un pacchetto NuGet Microsoft.Net.Compilers versione 2.6 o successiva.
Non è possibile trovare i log MSBuild e VSBuild
L'attività di compilazione roslyn Analyzers deve eseguire query su Azure DevOps per il log di MSBuild dall'attività di compilazione DI MSBuild. Se l'attività di analisi viene eseguita immediatamente dopo l'attività MSBuild, il log non sarà ancora disponibile. Eseguire altre attività tra l'attività MSBuild e l'attività Roslyn Analyzers, ad esempio BinSkim e Anti-Malware Scanner.
Passaggi successivi
Se serve assistenza aggiuntiva, il supporto per Microsoft Security Code Analysis è disponibile dal lunedì al venerdì, dalle 9:00 alle 17:00 (Ora solare Pacifico).
Onboarding: vedere la documentazione sull'onboarding
Supporto: inviare un messaggio di posta elettronica al team di supporto di Microsoft Security Code Analysis