Konfigurowanie skanowania kodu
Skanowanie kodu w usłudze GitHub Advanced Security dla usługi Azure DevOps umożliwia analizowanie kodu w repozytorium usługi Azure DevOps w celu znalezienia luk w zabezpieczeniach i błędów kodowania. Wszelkie problemy zidentyfikowane przez analizę są zgłaszane jako alert. Skanowanie kodu używa języka CodeQL do identyfikowania luk w zabezpieczeniach.
CodeQL to aparat analizy kodu opracowany przez usługę GitHub w celu zautomatyzowania kontroli zabezpieczeń. Kod można analizować przy użyciu języka CodeQL i wyświetlać wyniki jako alerty skanowania kodu. Aby uzyskać bardziej szczegółową dokumentację dotyczącą języka CodeQL, zobacz dokumentację języka CodeQL.
Usługa GitHub Advanced Security dla usługi Azure DevOps współpracuje z usługą Azure Repos. Aby użyć GitHub Advanced Security z repozytoriami GitHub, zobacz GitHub Advanced Security.
Wymagania wstępne
Aby uzyskać więcej informacji na temat uprawnień zabezpieczeń zaawansowanych, zobacz Zarządzanie uprawnieniami zabezpieczeń zaawansowanych.
Więcej konfiguracji do skanowania kodu
Obsługa języka i zapytań
Eksperci z serwisu GitHub, badacze zabezpieczeń i współautorzy społeczności piszą i utrzymują domyślne zapytania CodeQL używane do skanowania kodu. Zapytania są regularnie aktualizowane, aby poprawić analizę i zmniejszyć wszelkie wyniki fałszywie dodatnie. Zapytania są typu open source, dzięki czemu można wyświetlać i współtworzyć zapytania w repozytorium github/codeql .
CodeQL obsługuje i wykorzystuje następujące identyfikatory języków:
Język | Identyfikator | Opcjonalne identyfikatory alternatywne (jeśli istnieją) |
---|---|---|
C/C++ | c-cpp |
c lub cpp |
C# | csharp |
|
Idź | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
Rubin | ruby |
|
Swift | swift |
Wskazówka
- Służy
c-cpp
do analizowania kodu napisanego w języku C, C++ lub obu tych językach. - Użyj
java-kotlin
do analizowania kodu napisanego w językach Java, Kotlin lub w obu. - Służy
javascript
do analizowania kodu napisanego w języku JavaScript, TypeScript lub obu tych językach.
Aby uzyskać więcej informacji, zobacz Obsługiwane języki i struktury.
W dzienniku kompilacji można wyświetlić określone zapytania i szczegóły zadania wykonywane przez bibliotekę CodeQL.
Dostosowywanie trybu kompilacji do skanowania kodu
Skanowanie kodu obsługuje dwa tryby kompilacji podczas konfigurowania potoku do skanowania:
-
none
— baza danych CodeQL jest tworzona bezpośrednio z bazy kodu bez kompilowania bazy kodu (obsługiwanej dla wszystkich języków interpretowanych i dodatkowo obsługiwanych w językach C# i Java). -
manual
— definiujesz kroki kompilacji do użycia dla bazy kodu w przepływie pracy (obsługiwane dla wszystkich skompilowanych języków).
Aby uzyskać więcej informacji na temat różnych trybów kompilacji, w tym porównania korzyści z poszczególnych trybów kompilacji, zobacz Skanowanie kodu CodeQL pod kątem skompilowanych języków.
Napiwek
Tryb kompilacji none
jest używany z innymi językami interpretowanymi, na przykład JavaScript, Python, Ruby.
Jeśli tryb kompilacji none
jest określony dla języka C# lub Java, wraz z innymi skompilowanymi językami, które nie obsługują trybu kompilacji none
, zadanie potoku kończy się niepowodzeniem.
Poniższy kod przedstawia przykład prawidłowej konfiguracji z obsługą wielu języków i trybem kompilacji none
.
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Poniższy kod przedstawia przykład nieprawidłowej konfiguracji z wieloma językami i none
trybem kompilacji.
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Alerty skanowania kodu
Alerty skanowania kodu w usłudze GitHub Advanced Security dla usługi Azure DevOps obejmują flagi skanowania kodu według repozytorium, które ostrzegają o lukach w zabezpieczeniach aplikacji na poziomie kodu.
Aby użyć skanowania kodu, należy najpierw skonfigurować usługę GitHub Advanced Security dla usługi Azure DevOps.
Karta Zaawansowane zabezpieczenia w obszarze Repozytoria w usłudze Azure DevOps to miejsce, gdzie można przeglądać alerty dotyczące skanowania kodu. Wybierz kartę Skanowanie kodu, aby zobaczyć alerty dotyczące skanowania. Można filtrować według gałęzi, stanu, strumienia, typu reguły i surowości. Obecnie centrum alertów nie wyświetla alertów dotyczących ukończenia skanowania w gałęziach pull request.
Nie ma wpływu na wyniki, jeśli nazwy potoków lub gałęzi zostaną zmienione — wyświetlenie nowej nazwy może potrwać do 24 godzin.
Jeśli zdecydujesz się uruchamiać niestandardowe zapytania CodeQL, nie ma domyślnie oddzielnego filtru dla alertów generowanych z różnych pakietów zapytań. Można filtrować według reguły, która jest odrębna dla każdego zapytania.
Jeśli wyłączysz Advanced Security dla repozytorium, utracisz dostęp do wyników w karcie Advanced Security i zadaniu kompilacji. Zadanie kompilacji nie kończy się niepowodzeniem, ale żadne wyniki z kompilacji uruchomionych z tym zadaniem, podczas gdy zabezpieczenia zaawansowane są wyłączone, nie są zachowywane i są ukrywane.
Szczegóły alertu
Wybierz alert, aby uzyskać więcej szczegółów, w tym wskazówki dotyczące korygowania. Każdy alert zawiera lokalizację, opis, przykład i ważność.
Sekcja | Wyjaśnienie |
---|---|
Lokalizacja | Sekcja Lokalizacje zawiera szczegółowe informacje o konkretnym wystąpieniu, w którym kodQL wykrył lukę w zabezpieczeniach. Jeśli istnieje wiele wystąpień kodu naruszających tę samą regułę, dla każdej odrębnej lokalizacji zostanie wygenerowany nowy alert. Karta Lokalizacje zawiera bezpośredni link do fragmentu kodu, którego dotyczy problem, dzięki czemu możesz wybrać fragment kodu, który ma zostać skierowany do internetowego interfejsu użytkownika usługi Azure DevOps do edycji. |
opis | Opis jest dostarczany przez narzędzie CodeQL na podstawie problemu. |
Zalecenie | Zaleceniem jest sugerowana poprawka dla danego alertu skanowania kodu. |
Przykład | W przykładowej sekcji przedstawiono uproszczony przykład zidentyfikowanej słabości kodu. |
Ważność | Poziomy ważności mogą być niskie, średnie, wysokie lub krytyczne. Wynik ważności jest oparty na danym wyniku Wspólnego Systemu Oceny Podatności (CVSS) dla zidentyfikowanego Wspólnego Wykazu Słabości (CWE). Dowiedz się więcej o tym, jak ważność jest oceniana w tym wpisie w blogu usługi GitHub. |
Wyświetlanie alertów dla repozytorium
Każda osoba z uprawnieniami współautora dla repozytorium może wyświetlić podsumowanie wszystkich alertów dla repozytorium na karcie Zabezpieczenia zaawansowane w obszarze Repozytoria. Wybierz kartę Skany kodu, aby wyświetlić wszystkie alerty skanowania tajnych.
Aby wyświetlić wyniki, należy najpierw uruchomić zadania skanowania kodu. Po zakończeniu pierwszego skanowania wszystkie wykryte luki w zabezpieczeniach zostaną wyświetlone na karcie Zabezpieczenia zaawansowane.
Domyślnie na stronie alertów są wyświetlane wyniki skanowania zależności dla domyślnej gałęzi repozytorium.
Stan danego alertu odzwierciedla stan na domyślnej gałęzi i najnowszego przebiegu rurociągu, nawet jeśli alert istnieje w innych gałęziach i rurociągach.
Odrzucanie alertów skanowania kodu
Aby odrzucić alerty, potrzebne są odpowiednie uprawnienia. Domyślnie tylko administratorzy projektu mogą odrzucać alerty usługi Advanced Security.
Aby odrzucić alert:
- Przejdź do alertu, który chcesz zamknąć, i wybierz alert.
- Wybierz listę rozwijaną Zamknij alert .
- Jeśli jeszcze nie wybrano, wybierz opcję Ryzyko zaakceptowane lub Fałszywie dodatnie jako przyczynę zamknięcia.
- Dodaj opcjonalny komentarz do pola tekstowego Komentarz .
- Wybierz pozycję Zamknij , aby przesłać i zamknąć alert.
- Stan alertu zmienia się z Otwórz na Zamknięty , a przyczyna odrzucenia jest wyświetlana.
Ta akcja usuwa alert we wszystkich oddziałach. Inne gałęzie, które zawierają tę samą lukę w zabezpieczeniach, również zostaną odrzucone. Każdy alert, który został wcześniej odrzucony, można ręcznie otworzyć ponownie.
Zarządzanie alertami skanowania kodu w pull requestach
Jeśli alerty są tworzone dla nowych zmian kodu w żądaniu ściągnięcia, alert jest zgłaszany jako adnotacja w sekcji Komentarz karty Przegląd żądania ściągnięcia i jako alert na karcie Repozytorium zabezpieczeń zaawansowanych. Istnieje nowy wpis selektora gałęzi dla gałęzi żądania ściągnięcia.
Możesz przejrzeć zmienione wiersze kodu, wyświetlić podsumowanie wyników i rozwiązać adnotację w sekcji przegląd.
Aby odrzucić alerty żądania ściągnięcia, musisz przejść do widoku szczegółów alertu, aby zamknąć alert i rozwiązać adnotację. W przeciwnym razie po prostu zmiana stanu komentarza (1) rozwiązuje adnotację, ale nie zamyka ani nie naprawia alertu bazowego.
Aby wyświetlić cały zestaw wyników dla gałęzi pull requestu, przejdź do Repozytoriów>Zabezpieczenia zaawansowane i wybierz swoją gałąź pull requestu. Wybranie pozycji Pokaż więcej szczegółów (2) w adnotacji spowoduje przekierowanie do widoku szczegółów alertu na karcie Zabezpieczenia zaawansowane.
Napiwek
Adnotacje są tworzone tylko wtedy, gdy objęte wiersze kodu są całkowicie unikatowe dla różnicy żądania ściągnięcia w porównaniu z gałęzią docelową żądania ściągnięcia.