Uwaga
Od 31 grudnia 2022 r. rozszerzenie Microsoft Security Code Analysis (MSCA) zostało wycofane. Narzędzie MSCA jest zastępowane przez rozszerzenie DevOps usługi Azure DevOps firmy Microsoft. Postępuj zgodnie z instrukcjami w temacie Konfigurowanie , aby zainstalować i skonfigurować rozszerzenie.
Ogólne często zadawane pytania
Czy mogę zainstalować rozszerzenie na moim wystąpieniu Azure DevOps Server (dawniej Visual Studio Team Foundation Server) zamiast w wystąpieniu usługi Azure DevOps?
Nie. Rozszerzenie nie jest dostępne do pobierania i instalacji dla Azure DevOps Server (dawniej Visual Studio Team Foundation Server).
Czy muszę uruchomić analizę kodu zabezpieczeń firmy Microsoft przy użyciu mojej kompilacji?
Być może. Zależy to od typu narzędzia do analizy. Kod źródłowy może być jedyną rzeczą wymaganą lub może być wymagane dane wyjściowe kompilacji.
Na przykład skaner poświadczeń (CredScan) analizuje pliki w strukturze folderów repozytorium kodu. Ze względu na tę analizę można uruchomić zadania kompilacji CredScan i Publish Security Analysis Logs w autonomicznej kompilacji, aby uzyskać wyniki.
W przypadku innych narzędzi, takich jak BinSkim, które analizują artefakty po kompilacji, kompilacja jest wymagana najpierw.
Czy mogę przerwać kompilację po znalezieniu wyników?
Tak. Możesz wprowadzić przerwę kompilacji, gdy dowolne narzędzie zgłasza problem lub problem w pliku dziennika. Dodaj zadanie kompilacji Post-Analysis i zaznacz pole wyboru dla dowolnego narzędzia, dla którego chcesz przerwać kompilację.
W interfejsie użytkownika zadania Post-Analysis można przerwać kompilację, gdy dowolne narzędzie zgłasza tylko błędy lub zarówno błędy, jak i ostrzeżenia.
Jak argumenty wiersza polecenia w usłudze Azure DevOps różnią się od tych argumentów w autonomicznych narzędziach klasycznych?
Zazwyczaj zadania kompilacji usługi Azure DevOps są bezpośrednimi otokami wokół argumentów wiersza polecenia narzędzi zabezpieczeń. Argumenty można przekazać jako argumenty do zadania kompilacji, które zwykle przekazujesz do narzędzia wiersza polecenia.
Zauważalne różnice:
- Narzędzia są uruchamiane z folderu źródłowego agenta $(Build.SourcesDirectory) lub %BUILD_SOURCESDIRECTORY%. Przykładem jest C:\agent_work\1\s.
- Ścieżki w argumentach mogą być względne względem katalogu głównego katalogu źródłowego wymienionego wcześniej. Ścieżki mogą być również bezwzględne. Ścieżki bezwzględne można uzyskać przy użyciu zmiennych kompilacji usługi Azure DevOps lub uruchamiając agenta lokalnego ze znanymi lokalizacjami wdrażania zasobów lokalnych.
- Narzędzia automatycznie udostępniają ścieżkę lub folder pliku wyjściowego. Jeśli podasz lokalizację wyjściową zadania kompilacji, ta lokalizacja zostanie zastąpiona ścieżką do naszej dobrze znanej lokalizacji dzienników w agencie kompilacji
- Niektóre inne argumenty wiersza polecenia są zmieniane dla niektórych narzędzi. Jednym z przykładów jest dodanie lub usunięcie opcji, które zapewniają, że nie zostanie uruchomiony żaden graficzny interfejs użytkownika.
Czy mogę uruchomić zadanie kompilacji, takie jak skaner poświadczeń w wielu repozytoriach w kompilacji usługi Azure DevOps?
Nie. Uruchamianie bezpiecznych narzędzi programistycznych w wielu repozytoriach w jednym potoku nie jest obsługiwane.
Określony plik wyjściowy nie jest tworzony lub nie mogę znaleźć określonego pliku wyjściowego
Zadania kompilacji filtrują dane wejściowe użytkownika. W przypadku tego pytania aktualizują lokalizację wygenerowanego pliku wyjściowego, aby był wspólną lokalizacją agenta kompilacji. Aby uzyskać więcej informacji na temat tej lokalizacji, zobacz następujące pytania.
Gdzie są zapisywane pliki wyjściowe?
Zadania kompilacji automatycznie dodają ścieżki wyjściowe do tej dobrze znanej lokalizacji na agencie kompilacji: $(Agent.BuildDirectory)_sdt\logs. Ponieważ ustandaryzujemy tę lokalizację, wszystkie zespoły tworzące lub zużywające dzienniki analizy kodu mają dostęp do danych wyjściowych.
Czy mogę utworzyć kompilację w kolejce, aby uruchamiać te zadania na hostowanym agencie kompilacji?
Tak. Wszystkie zadania i narzędzia w rozszerzeniu można wykonać na hostowanym agencie kompilacji.
Uwaga
Zadanie kompilacji skanera chroniącego przed złośliwym oprogramowaniem wymaga agenta kompilacji z włączonym Windows Defender. Hostowany program Visual Studio 2017 lub nowszy udostępnia taki agent. Zadanie kompilacji nie zostanie uruchomione na hostowanym agencie programu Visual Studio 2015.
Chociaż sygnatury nie mogą być aktualizowane na tych agentach, podpisy powinny być zawsze mniejsze niż trzy godziny.
Czy można uruchamiać te zadania kompilacji w ramach potoku wydania, a nie potoku kompilacji?
W większości przypadków tak.
Jednak usługa Azure DevOps nie obsługuje uruchamiania zadań w potokach wydania, gdy te zadania publikują artefakty. Ten brak obsługi uniemożliwia pomyślne uruchomienie zadania Publikowanie dzienników analizy zabezpieczeń w potoku wydania. Zadanie zamiast tego kończy się niepowodzeniem z opisowym komunikatem o błędzie.
Skąd zadania kompilacji pobierają narzędzia?
Zadania kompilacji mogą pobierać pakiety NuGet narzędzi z kanału informacyjnego zarządzania pakietami DevOps platformy Azure. Zadania kompilacji mogą również używać Menedżera pakietów węzła, który musi być wstępnie zainstalowany na agencie kompilacji. Przykładem takiej instalacji jest polecenie npm install tslint.
Jaki wpływ ma instalowanie rozszerzenia w mojej organizacji usługi Azure DevOps?
Po ich instalacji zadania kompilacji zabezpieczeń udostępniane przez rozszerzenie stają się dostępne dla wszystkich użytkowników w organizacji. Podczas tworzenia lub edytowania usługi Azure Pipeline te zadania są dostępne z listy kolekcji zadań kompilacji. W przeciwnym razie zainstalowanie rozszerzenia w organizacji usługi Azure DevOps nie ma wpływu. Instalacja nie modyfikuje żadnych ustawień konta, ustawień projektu ani potoków.
Czy zainstalowanie rozszerzenia modyfikuje istniejące usługi Azure Pipelines?
Nie. Zainstalowanie rozszerzenia sprawia, że zadania kompilacji zabezpieczeń są dostępne do dodawania potoków. Nadal musisz dodawać lub aktualizować definicje kompilacji, aby narzędzia mogły pracować z procesem kompilacji.
Często zadawane pytania dotyczące zadań
Pytania specyficzne dla zadań kompilacji znajdują się w tej sekcji.
Skaner poświadczeń
Co to są typowe scenariusze i przykłady pomijania?
Poniżej przedstawiono szczegóły dwóch najbardziej typowych scenariuszy pomijania.
Aby pominąć wszystkie wystąpienia danego wpisu tajnego w określonej ścieżce
Klucz skrótu wpisu tajnego z pliku wyjściowego CredScan jest wymagany, jak pokazano w poniższym przykładzie.
{
"tool": "Credential Scanner",
"suppressions": [
{
"hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
"_justification": "Secret used by MSDN sample, it is fake."
}
]
}
Ostrzeżenie
Klucz skrótu jest generowany przez część pasującej wartości lub zawartości pliku. Każda poprawka kodu źródłowego może zmienić klucz skrótu i wyłączyć regułę pomijania.
Aby pominąć wszystkie wpisy tajne w określonym pliku lub pominąć sam plik wpisów tajnych
Wyrażenie pliku może być nazwą pliku. Może być również częścią nazwy bazowej pełnej ścieżki pliku lub nazwy pliku. Symbole wieloznaczne nie są obsługiwane.
W poniższych przykładach pokazano, jak pominąć plik <InputPath>\src\JS\lib\angular.js
Przykłady prawidłowych reguł pomijania:
- <InputPath>\src\JS\lib\angular.js — pomija plik w określonej ścieżce
- \src\JS\lib\angular.js
- \JS\lib\angular.js
- \lib\angular.js
- angular.js — pomija wszystkie pliki o tej samej nazwie
{
"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"
}
]
}
Ostrzeżenie
Wszystkie przyszłe wpisy tajne dodane do pliku również zostaną automatycznie pominięte.
Jakie są zalecane wskazówki dotyczące zarządzania wpisami tajnymi?
Następujące zasoby ułatwiają bezpieczne zarządzanie wpisami tajnymi i uzyskiwanie dostępu do poufnych informacji z aplikacji:
- Usługa Azure Key Vault
- Azure Active Directory (Azure AD)
- tożsamość usługi zarządzanej (MSI) Azure AD
- Tożsamości zarządzane dla zasobów platformy Azure
- Tożsamości zarządzane w Azure App Service i Azure Functions
- Biblioteka AppAuthentication
Aby uzyskać więcej informacji, zobacz wpis w blogu Managing Secrets Securely in the Cloud (Zarządzanie wpisami tajnymi bezpiecznie w chmurze).
Czy mogę napisać własne niestandardowe wyszukiwania?
Skaner poświadczeń opiera się na zestawie wyszukiwaczy zawartości, które są często zdefiniowane w pliku buildsearchers.xml. Plik zawiera tablicę obiektów serializowanych XML reprezentujących obiekt ContentSearcher . Program jest dystrybuowany za pomocą zestawu dobrze przetestowanych wyszukiwaczy. Możesz jednak również zaimplementować własne niestandardowe wyszukiwania.
Element wyszukiwania zawartości jest zdefiniowany w następujący sposób:
Nazwa: opisowa nazwa wyszukiwania, która ma być używana w plikach wyjściowych skanera poświadczeń. Zalecamy użycie konwencji nazewnictwa camel-case dla nazw wyszukiwanych.
RuleId: stabilny nieprzezroczystych identyfikatorów wyszukiwania:
- Domyślny element wyszukiwania skanera poświadczeń ma przypisaną wartość RuleId , na przykład CSCAN0010, CSCAN0020 lub CSCAN0030. Ostatnia cyfra jest zarezerwowana dla potencjalnie scalania lub dzielenia grup wyszukiwania za pomocą wyrażeń regularnych (regex).
- Wartość RuleId dla dostosowanego wyszukiwania powinna mieć własną przestrzeń nazw. Przykłady obejmują CSCAN-Namespace<> 0010, CSCAN-Namespace< 0020 i CSCAN-Namespace><> 0030.
- W pełni kwalifikowana nazwa wyszukiwania jest kombinacją wartości RuleId i nazwy wyszukiwania. Przykłady obejmują CSCAN0010. KeyStoreFiles i CSCAN0020. Base64EncodedCertificate.
ResourceMatchPattern: wyrażeń regularnych rozszerzeń plików do sprawdzania względem wyszukiwania.
ContentSearchPatterns: tablica ciągów zawierających instrukcje wyrażeń regularnych, które mają być zgodne. Jeśli nie zdefiniowano wzorców wyszukiwania, zwracane są wszystkie pliki pasujące do wartości ResourceMatchPattern .
ContentSearchFilters: tablica ciągów zawierających instrukcje wyrażenia regularne do filtrowania wyników fałszywie dodatnich specyficznych dla wyszukiwania.
MatchDetails: opisowy komunikat, instrukcje ograniczania ryzyka lub oba, które mają zostać dodane dla każdego dopasowania wyszukiwania.
Zalecenie: zawartość pola sugestii dla dopasowania przy użyciu formatu raportu PREfast.
Ważność: liczba całkowita, która odzwierciedla poziom ważności problemu. Najwyższy poziom ważności ma wartość 1.
Analizatory Roslyn
Jakie są typowe błędy podczas korzystania z zadania Analizatory Roslyn?
Projekt został przywrócony przy użyciu nieprawidłowej wersji Microsoft.NETCore.App
Pełny komunikat o błędzie:
"Błąd: Projekt został przywrócony przy użyciu Microsoft.NETCore.App wersji x.x.x, ale z bieżącymi ustawieniami zamiast tego będzie używana wersja y.y.y.y . Aby rozwiązać ten problem, upewnij się, że te same ustawienia są używane do przywracania i kolejnych operacji, takich jak kompilacja lub publikowanie. Zazwyczaj ten problem może wystąpić, jeśli właściwość RuntimeIdentifier jest ustawiona podczas kompilacji lub publikowania, ale nie podczas przywracania.
Ponieważ zadania narzędzia Roslyn Analyzers są uruchamiane w ramach kompilacji, drzewo źródłowe na maszynie kompilacji musi być w stanie umożliwiającym kompilację.
Krok między główną kompilacją a krokami narzędzia Roslyn Analyzers może spowodować umieszczenie drzewa źródłowego w stanie uniemożliwiającym kompilowanie. Ten dodatkowy krok jest prawdopodobnie dotnet.exe publikowania. Spróbuj zduplikować krok, który wykonuje przywracanie NuGet tuż przed krokiem Roslyn Analyzers. Ten zduplikowany krok może przywrócić drzewo źródłowe w stanie umożliwiającym kompilację.
csc.exe nie można utworzyć wystąpienia analizatora
Pełny komunikat o błędzie:
"'csc.exe' zakończył działanie z kodem błędu 1 — nie można utworzyć wystąpienia analizatora AAAA z katalogu C:\BBBB.dll: Nie można załadować pliku lub zestawu "Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad36ad364e35" lub jednej z jego zależności. System nie może odnaleźć określonego pliku.
Upewnij się, że kompilator obsługuje analizatory Roslyn. Uruchomienie polecenia csc.exe /version powinno zgłosić wartość wersji 2.6 lub nowszej.
Czasami plik csproj może zastąpić instalację programu Visual Studio maszyny kompilacji, odwołując się do pakietu z microsoft.Net.Compilers. Jeśli nie zamierzasz używać określonej wersji kompilatora, usuń odwołania do microsoft.Net.Compilers. W przeciwnym razie upewnij się, że wersja przywoływnego pakietu jest również w wersji 2.6 lub nowszej.
Spróbuj uzyskać ścieżkę dziennika błędów, która jest określona w opcji csc.exe /errorlog . Opcja i ścieżka są wyświetlane w dzienniku zadania kompilacji Roslyn Analyzers. Mogą one wyglądać mniej więcej tak : /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif
Wersja kompilatora języka C# nie jest wystarczająco ostatnia
Aby uzyskać najnowsze wersje kompilatora języka C#, przejdź do pozycji Microsoft.Net.Compilers. Aby pobrać zainstalowaną wersję, uruchom polecenie csc.exe /version w wierszu polecenia. Upewnij się, że odwołujesz się do pakietu NuGet Microsoft.Net.Compilers w wersji 2.6 lub nowszej.
Nie można odnaleźć dzienników programu MSBuild i programu VSBuild
Zadanie kompilacji Roslyn Analyzers musi wykonać zapytanie względem usługi Azure DevOps dla dziennika MSBuild z zadania kompilacji PROGRAMU MSBuild. Jeśli zadanie analizatora zostanie uruchomione natychmiast po zadaniu programu MSBuild, dziennik nie będzie jeszcze dostępny. Umieść inne zadania między zadaniem PROGRAMU MSBuild a zadaniem Roslyn Analyzers. Przykłady innych zadań to BinSkim i Skaner chroniący przed złośliwym oprogramowaniem.
Następne kroki
Jeśli potrzebujesz dodatkowej pomocy, pomoc techniczna ds. analizy kodu zabezpieczeń firmy Microsoft jest dostępna od poniedziałku do piątku od 9:00 do 15:00 czasu standardowego Pacyfik.
Dołączanie: zapoznaj się z naszą dokumentacją dołączania
Pomoc techniczna: Email nasz zespół w pomocy technicznej ds. analizy kodu zabezpieczeń firmy Microsoft