Notitie
Met ingang van 31 december 2022 is de MSCA-extensie (Microsoft Security Code Analysis) buiten gebruik gesteld. MSCA wordt vervangen door de Microsoft Security DevOps Azure DevOps-extensie. Volg de instructies in Configureren om de extensie te installeren en configureren.
Veelgestelde algemene vragen
Kan ik de extensie installeren op mijn exemplaar van Azure DevOps Server (voorheen Visual Studio Team Foundation Server) in plaats van op een Azure DevOps-exemplaar?
Nee. De extensie kan niet worden gedownload en geïnstalleerd voor Azure DevOps Server (voorheen Visual Studio Team Foundation Server).
Moet ik Microsoft Security Code Analysis uitvoeren met mijn build?
Misschien. Dit is afhankelijk van het type analysehulpprogramma. De broncode is mogelijk het enige dat is vereist of de build-uitvoer is vereist.
Referentiescanner (CredScan) analyseert bijvoorbeeld bestanden in de mapstructuur van de codeopslagplaats. Vanwege deze analyse kunt u de buildtaken CredScan en Publish Security Analysis Logs uitvoeren in een zelfstandige build om resultaten te verkrijgen.
Voor andere hulpprogramma's, zoals BinSkim, die post-buildartefacten analyseren, is de build eerst vereist.
Kan ik mijn build onderbreken wanneer er resultaten worden gevonden?
Ja. U kunt een build-onderbreking introduceren wanneer een hulpprogramma een probleem of probleem rapporteert in het logboekbestand. Voeg de buildtaak Na analyse toe en schakel het selectievakje in voor elk hulpprogramma waarvoor u de build wilt onderbreken.
In de gebruikersinterface van de taak Na analyse kunt u ervoor kiezen om de build te onderbreken wanneer een hulpprogramma alleen fouten of zowel fouten als waarschuwingen rapporteert.
Hoe verschillen de opdrachtregelargumenten in Azure DevOps van die argumenten in de zelfstandige bureaubladhulpprogramma's?
Meestal zijn de Azure DevOps-buildtaken directe wrappers rond de opdrachtregelargumenten van de beveiligingshulpprogramma's. U kunt als argumenten doorgeven aan een build-taak alles wat u normaal gesproken doorgeeft aan een opdrachtregelprogramma.
Merkbare verschillen:
- Hulpprogramma's worden uitgevoerd vanuit de bronmap van de agent $(Build.SourcesDirectory) of vanuit %BUILD_SOURCESDIRECTORY%. Een voorbeeld is C:\agent_work\1\s.
- Paden in de argumenten kunnen relatief zijn ten opzichte van de hoofdmap van de bronmap die eerder is vermeld. Paden kunnen ook absoluut zijn. U krijgt absolute paden met behulp van Azure DevOps Build-variabelen of door een on-premises agent uit te voeren met bekende implementatielocaties van lokale resources.
- Hulpprogramma's bieden automatisch een uitvoerbestandspad of -map. Als u een uitvoerlocatie opgeeft voor een build-taak, wordt die locatie vervangen door een pad naar onze bekende locatie van logboeken op de buildagent
- Sommige andere opdrachtregelargumenten worden voor sommige hulpprogramma's gewijzigd. Een voorbeeld is het toevoegen of verwijderen van opties die ervoor zorgen dat er geen GUI wordt gestart.
Kan ik een buildtaak zoals Referentiescanner uitvoeren in meerdere opslagplaatsen in een Azure DevOps-build?
Nee. Het uitvoeren van de beveiligde ontwikkelhulpprogramma's in meerdere opslagplaatsen in één pijplijn wordt niet ondersteund.
Het uitvoerbestand dat ik heb opgegeven, wordt niet gemaakt of ik kan het opgegeven uitvoerbestand niet vinden
Met de buildtaken wordt gebruikersinvoer gefilterd. Voor deze vraag werken ze de locatie van het gegenereerde uitvoerbestand bij naar een gemeenschappelijke locatie op de buildagent. Zie de volgende vragen voor meer informatie over deze locatie.
Waar worden de uitvoerbestanden die door de hulpprogramma's worden gegenereerd, opgeslagen?
De buildtaken voegen automatisch uitvoerpaden toe aan deze bekende locatie op de buildagent: $(Agent.BuildDirectory)_sdt\logs. Omdat we op deze locatie standaardiseren, hebben alle teams die code-analyselogboeken produceren of gebruiken, toegang tot de uitvoer.
Kan ik een build in de wachtrij plaatsen om deze taken uit te voeren op een gehoste buildagent?
Ja. Alle taken en hulpprogramma's in de extensie kunnen worden uitgevoerd op een gehoste buildagent.
Notitie
Voor de build-taak antimalwarescanner is een buildagent vereist waarvoor Windows Defender is ingeschakeld. Gehoste Visual Studio 2017 en hoger bieden een dergelijke agent. De build-taak wordt niet uitgevoerd op de door Visual Studio 2015 gehoste agent.
Hoewel handtekeningen niet kunnen worden bijgewerkt op deze agents, moeten handtekeningen altijd minder dan drie uur oud zijn.
Kan ik deze buildtaken uitvoeren als onderdeel van een release-pijplijn in plaats van een build-pijplijn?
In de meeste gevallen, ja.
Azure DevOps biedt echter geen ondersteuning voor het uitvoeren van taken binnen release-pijplijnen wanneer deze taken artefacten publiceren. Dit gebrek aan ondersteuning voorkomt dat de taak Beveiligingsanalyselogboeken publiceren kan worden uitgevoerd in een release-pijplijn. De taak mislukt in plaats daarvan met een beschrijvend foutbericht.
Waar downloaden de buildtaken de hulpprogramma's?
Build-taken kunnen de NuGet-pakketten van de hulpprogramma's downloaden uit de Azure DevOps Package Management-feed. Build-taken kunnen ook gebruikmaken van Node Package Manager, dat vooraf moet zijn geïnstalleerd op de buildagent. Een voorbeeld van een dergelijke installatie is de opdracht npm install tslint.
Welk effect heeft het installeren van de extensie op mijn Azure DevOps-organisatie?
Na de installatie worden de beveiligingsbuildtaken die door de extensie worden geleverd, beschikbaar voor alle gebruikers in uw organisatie. Wanneer u een Azure-pijplijn maakt of bewerkt, zijn deze taken beschikbaar in de lijst build-task collection. Anders heeft het installeren van de extensie in uw Azure DevOps-organisatie geen effect. De installatie wijzigt geen accountinstellingen, projectinstellingen of pijplijnen.
Wijzigt het installeren van de extensie mijn bestaande Azure-pijplijnen?
Nee. Als u de extensie installeert, worden de beveiligingsbuildtaken beschikbaar voor toevoeging aan uw pijplijnen. U moet nog steeds builddefinities toevoegen of bijwerken, zodat de hulpprogramma's kunnen werken met uw buildproces.
Veelgestelde vragen over taken
In deze sectie vindt u specifieke vragen over buildtaken.
Referentiescanner
Wat zijn veelvoorkomende onderdrukkingsscenario's en voorbeelden?
Hier vindt u details van twee van de meest voorkomende onderdrukkingsscenario's.
Alle exemplaren van een bepaald geheim binnen het opgegeven pad onderdrukken
De hashsleutel van het geheim uit het CredScan-uitvoerbestand is vereist, zoals wordt weergegeven in het volgende voorbeeld.
{
"tool": "Credential Scanner",
"suppressions": [
{
"hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
"_justification": "Secret used by MSDN sample, it is fake."
}
]
}
Waarschuwing
De hashsleutel wordt gegenereerd door een deel van de overeenkomende waarde of bestandsinhoud. Elke broncoderevisie kan de hashsleutel wijzigen en de onderdrukkingsregel uitschakelen.
Alle geheimen in een opgegeven bestand onderdrukken of het geheimenbestand zelf onderdrukken
De bestandsexpressie kan een bestandsnaam zijn. Het kan ook het basisnaamgedeelte van een volledig bestandspad of een bestandsnaam zijn. Jokertekens worden niet ondersteund.
In de volgende voorbeelden ziet u hoe u het bestand <InputPath> -\src\JS\lib\angular.js
Voorbeelden van geldige onderdrukkingsregels:
- <InputPath> -\src\JS\lib\angular.js : onderdrukt het bestand in het opgegeven pad
- \src\JS\lib\angular.js
- \JS\lib\angular.js
- \lib\angular.js
- angular.js: onderdrukt elk bestand met dezelfde naam
{
"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"
}
]
}
Waarschuwing
Alle toekomstige geheimen die aan het bestand worden toegevoegd, worden ook automatisch onderdrukt.
Wat zijn aanbevolen richtlijnen voor het beheren van geheimen?
De volgende bronnen helpen u bij het veilig beheren van geheimen en toegang tot gevoelige informatie vanuit uw toepassingen:
- Azure Key Vault
- Azure Active Directory (Azure AD)
- Azure AD Managed Service Identity (MSI)
- Beheerde identiteiten voor Azure-resources
- Beheerde identiteiten in Azure App Service en Azure Functions
- AppAuthentication-bibliotheek
Zie het blogbericht Geheimen veilig beheren in de cloud voor meer informatie.
Kan ik mijn eigen aangepaste zoekfuncties schrijven?
Referentiescanner is afhankelijk van een set inhoudszoekers die vaak worden gedefinieerd in het buildsearchers.xml-bestand. Het bestand bevat een matrix met geserialiseerde XML-objecten die een ContentSearcher-object vertegenwoordigen. Het programma wordt gedistribueerd met een set goed geteste zoekers. Maar u kunt ook uw eigen aangepaste zoekfuncties implementeren.
Een inhoudszoekfunctie wordt als volgt gedefinieerd:
Naam: de beschrijvende naam van de zoekfunctie die moet worden gebruikt in de uitvoerbestanden van referentiescanner. We raden u aan de naamgevingsconventie voor zoekers te gebruiken.
RuleId: de stabiele ondoorzichtige id van de zoekfunctie:
- Aan een standaardzoekfunctie voor referentiescanners wordt een RuleId-waarde toegewezen, zoals CSCAN0010, CSCAN0020 of CSCAN0030. Het laatste cijfer is gereserveerd voor het samenvoegen of delen van zoekgroepen via reguliere expressies (regex).
- De waarde RuleId voor een aangepaste zoekfunctie moet een eigen naamruimte hebben. Voorbeelden zijn CSCAN-Namespace<> 0010, CSCAN-Namespace>< 0020 en CSCAN-Namespace<> 0030.
- Een volledig gekwalificeerde zoekernaam is de combinatie van een RuleId-waarde en een zoekfunctienaam. Voorbeelden hiervan zijn CSCAN0010. KeyStoreFiles en CSCAN0020. Base64EncodedCertificate.
ResourceMatchPattern: Regex van bestandsextensies die moeten worden gecontroleerd aan de hand van de zoekfunctie.
ContentSearchPatterns: een matrix van tekenreeksen met regex-instructies die moeten worden vergeleken. Als er geen zoekpatronen zijn gedefinieerd, worden alle bestanden geretourneerd die overeenkomen met de waarde ResourceMatchPattern .
ContentSearchFilters: een matrix van tekenreeksen met regex-instructies om zoekfunctiespecifieke fout-positieven te filteren.
MatchDetails: een beschrijvend bericht, risicobeperkingsinstructies of beide die moeten worden toegevoegd voor elke overeenkomst van de zoekfunctie.
Aanbeveling: de inhoud van het suggestieveld voor een overeenkomst met behulp van de PREfast-rapportindeling.
Ernst: een geheel getal dat het ernstniveau van een probleem weergeeft. Het hoogste ernstniveau heeft de waarde 1.
Roslyn Analyzers
Wat zijn veelvoorkomende fouten bij het gebruik van de Roslyn Analyzers-taak?
Het project is hersteld met een verkeerde Microsoft.NETCore.App versie
Het volledige foutbericht:
"Fout: het project is hersteld met Microsoft.NETCore.App versie x.x.x, maar met de huidige instellingen wordt in plaats daarvan versie y.y.y.y gebruikt. U kunt dit probleem oplossen door ervoor te zorgen dat dezelfde instellingen worden gebruikt voor herstel en voor volgende bewerkingen, zoals bouwen of publiceren. Dit probleem kan meestal optreden als de eigenschap RuntimeIdentifier is ingesteld tijdens het bouwen of publiceren, maar niet tijdens het herstellen.
Omdat Roslyn Analyzers-taken worden uitgevoerd als onderdeel van de compilatie, moet de bronstructuur op de buildmachine een buildbare status hebben.
Een stap tussen uw hoofdbuild en roslyn Analyzers-stappen heeft mogelijk de bronstructuur in een status geplaatst die het bouwen verhindert. Deze extra stap is waarschijnlijk dotnet.exe publiceren. Probeer de stap te dupliceren waarmee een NuGet-herstel wordt uitgevoerd net vóór de stap Roslyn Analyzers. Deze gedupliceerde stap kan de bronstructuur weer in een opbouwbare status plaatsen.
csc.exe kunt geen analyse-exemplaar maken
Het volledige foutbericht:
''csc.exe' is afgesloten met foutcode 1 -- Er kan geen exemplaar van analyzer AAAA worden gemaakt op basis van C:\BBBB.dll: kan bestand of assembly 'Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' of een van de bijbehorende afhankelijkheden niet laden. Het systeem kan het opgegeven bestand niet vinden.'
Zorg ervoor dat uw compiler Roslyn Analyzers ondersteunt. Als u de opdracht uitvoertcsc.exe /version een versiewaarde van 2.6 of hoger moet rapporteren.
Soms kan een .csproj-bestand de Visual Studio-installatie van de buildmachine overschrijven door te verwijzen naar een pakket van Microsoft.Net.Compilers. Als u niet van plan bent om een specifieke versie van de compiler te gebruiken, verwijdert u verwijzingen naar Microsoft.Net.Compilers. Zorg er anders voor dat de versie van het pakket waarnaar wordt verwezen ook 2.6 of hoger is.
Probeer het pad naar het foutenlogboek op te halen, dat is opgegeven in de optiecsc.exe /errorlog . De optie en het pad worden weergegeven in het logboek voor de buildtaak van Roslyn Analyzers. Ze kunnen er ongeveer uitzien als /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif
De C#-compilerversie is niet recent genoeg
Als u de nieuwste versies van de C#-compiler wilt downloaden, gaat u naar Microsoft.Net.Compilers. Als u de geïnstalleerde versie wilt ophalen, voert ucsc.exe /version uit bij een opdrachtprompt. Zorg ervoor dat u verwijst naar een Microsoft.Net.Compilers NuGet-pakket met versie 2.6 of hoger.
MSBuild- en VSBuild-logboeken zijn niet gevonden
De roslyn Analyzers-buildtaak moet een query uitvoeren op Azure DevOps voor het MSBuild-logboek van de MSBuild-buildtaak. Als de analysetaak direct na de MSBuild-taak wordt uitgevoerd, is het logboek nog niet beschikbaar. Plaats andere taken tussen de MSBuild-taak en de roslyn Analyzers-taak. Voorbeelden van andere taken zijn BinSkim en Anti-Malware Scanner.
Volgende stappen
Als u aanvullende hulp nodig hebt, is Ondersteuning voor Microsoft Security Code Analysis beschikbaar van maandag tot en met vrijdag van 9:00 tot 17:00 uur Pacific (standaardtijd).
Onboarding: raadpleeg onze documentatie voor onboarding
Ondersteuning: Email ons team op Microsoft Security Code Analysis Support