Notitie
Vanaf 31 december 2022 wordt de extensie Microsoft Security Code Analysis (MSCA) 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 te configureren.
Algemene veelgestelde 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 is niet beschikbaar voor het downloaden en installeren van 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 wat vereist is, of de build-uitvoer is mogelijk vereist.
Referentiescanner (CredScan) analyseert bijvoorbeeld bestanden in de mapstructuur van de codeopslagplaats. Vanwege deze analyse kunt u de buildtaken CredScan uitvoeren en beveiligingsanalyselogboeken publiceren in een zelfstandige build om resultaten te verkrijgen.
Voor andere hulpprogramma's zoals BinSkim die post-build-artefacten analyseren, is de build eerst vereist.
Kan ik mijn build breken wanneer er resultaten worden gevonden?
Ja. U kunt een build-einde introduceren wanneer elk 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 verbreken.
In de gebruikersinterface van de taak Na analyse kunt u ervoor kiezen om de build te verbreken wanneer elk hulpprogramma alleen fouten of fouten en waarschuwingen rapporteert.
Hoe verschillen de opdrachtregelargumenten in Azure DevOps van die argumenten in de zelfstandige bureaubladhulpprogramma's?
Meestal zijn de Build-taken van Azure DevOps 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 eerder vermelde bronmap. Paden kunnen ook absoluut zijn. U krijgt absolute paden met behulp van Azure DevOps Build Variables of door een on-premises agent uit te voeren met bekende implementatielocaties van lokale resources.
- Hulpprogramma's bieden automatisch een pad of map naar het uitvoerbestand. Als u een uitvoerlocatie voor een build-taak opgeeft, 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 hiervan is het toevoegen of verwijderen van opties die ervoor zorgen dat er geen GUI wordt gestart.
Kan ik een buildtaak uitvoeren, zoals Referentiescanner 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 uitvoerbestand dat ik heb opgegeven niet vinden
De buildtaken filteren wat gebruikersinvoer. Voor deze vraag werken ze de locatie van het gegenereerde uitvoerbestand bij als een algemene locatie op de buildagent. Zie de volgende vragen voor meer informatie over deze locatie.
Waar worden de uitvoerbestanden gegenereerd door de hulpprogramma's die zijn 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 logboeken voor codeanalyse 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 buildtaak 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 gehoste Visual Studio 2015-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 in release-pijplijnen wanneer deze taken artefacten publiceren. Dit gebrek aan ondersteuning voorkomt dat de taak Logboeken voor beveiligingsanalyse publiceren met succes wordt uitgevoerd in een release-pijplijn. De taak mislukt in plaats daarvan met een beschrijvend foutbericht.
Vanaf 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 Node Package Manager gebruiken, die vooraf moeten worden 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 zijn 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 met verzamelingen build-taken. 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 Pipelines?
Nee. Als u de extensie installeert, zijn de beveiligingsbuildtaken beschikbaar voor aanvulling op uw pijplijnen. U moet nog steeds builddefinities toevoegen of bijwerken, zodat de hulpprogramma's kunnen werken met uw buildproces.
Veelgestelde vragen over taken
Vragen die specifiek zijn voor het bouwen van taken, worden in deze sectie vermeld.
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 in 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 hash-sleutel 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 onderdrukt
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?
Met de volgende bronnen kunt u geheimen veilig beheren en toegang krijgen 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 cloudvoor meer informatie.
Kan ik mijn eigen aangepaste zoekers schrijven?
Referentiescanner is afhankelijk van een set inhoudzoekers 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 inhoudszoeker wordt als volgt gedefinieerd:
name: de beschrijvende zoekernaam die moet worden gebruikt in uitvoerbestanden van de referentiescanner. We raden u aan de naamconventie van kamelen te gebruiken voor zoekernamen.
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 zoekergroepen via reguliere expressies (regex).
- De RuleId-waarde voor een aangepaste zoekfunctie moet een eigen naamruimte hebben. Voorbeelden hiervan zijn CSCAN-<naamruimte>0010, CSCAN-<naamruimte>0020 en CSCAN-<naamruimte>0030.
- Een volledig gekwalificeerde zoekernaam is de combinatie van een RuleId-waarde en een zoekfunctienaam. Voorbeelden zijn CSCAN0010. KeyStoreFiles en CSCAN0020. Base64EncodedCertificate.
ResourceMatchPattern: Regex van bestandsextensies om te controleren op de zoekfunctie.
ContentSearchPatterns: een matrix met tekenreeksen die regex-instructies bevatten die overeenkomen. Als er geen zoekpatronen zijn gedefinieerd, worden alle bestanden die overeenkomen met de ResourceMatchPattern waarde geretourneerd.
ContentSearchFilters: een matrix met tekenreeksen die regex-instructies bevatten om zoekactiespecifieke fout-positieven te filteren.
MatchDetails: een beschrijvend bericht, mitigatie-instructies 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 taak Roslyn Analyzers?
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 versie y.y.y.y gebruikt. Om dit probleem op te lossen, moet u ervoor 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 belangrijkste build en Roslyn Analyzers-stappen heeft de bronstructuur mogelijk in een status geplaatst die het bouwen voorkomt. Deze extra stap is waarschijnlijk dotnet.exepubliceren. Probeer de stap te dupliceren die een NuGet-herstel uitvoert vlak vóór de Roslyn Analyzers-stap. Met deze gedupliceerde stap kan de bronstructuur weer in een bouwbare status worden geplaatst.
csc.exe kan geen analyse-exemplaar maken
Het volledige foutbericht:
"'csc.exe' afgesloten met foutcode 1 - Een exemplaar van analyzer AAAA- kan niet worden gemaakt op basis van C:\BBBB-.dll: Kan bestand of assembly 'Microsoft.CodeAnalysis niet laden, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' of een van de afhankelijkheden. Het systeem kan het opgegeven bestand niet vinden.
Zorg ervoor dat uw compiler Roslyn Analyzers ondersteunt. Als u de opdracht csc.exe /version uitvoert, moet u een versiewaarde van 2.6 of hoger rapporteren.
Soms kan een .csproj-bestand de Visual Studio-installatie van de buildcomputer overschrijven door te verwijzen naar een pakket van Microsoft.Net.Compilers. Als u geen specifieke versie van de compiler wilt 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 optie csc.exe /errorlog. De optie en het pad worden weergegeven in het logboek voor de buildtaak 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 u csc.exe /version uit bij een opdrachtprompt. Zorg ervoor dat u verwijst naar een Microsoft.Net.Compilers NuGet-pakket dat versie 2.6 of hoger is.
MSBuild- en VSBuild-logboeken zijn niet gevonden
De buildtaak Roslyn Analyzers 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 Antimalwarescanner.
Volgende stappen
Als u extra 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 Standard Time.
Ondersteuning: Stuur ons team een e-mail naar Ondersteuning voor Microsoft Security Code Analysis