Udostępnij za pośrednictwem


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

Kategoria Wymagania
uprawnienia — Aby wyświetlić podsumowanie wszystkich alertów dla repozytorium: Współautor uprawnienia dla repozytorium.
— Aby odrzucić alerty w usłudze Advanced Security, wymagane są uprawnienia administratora projektu.
— Aby zarządzać uprawnieniami w ramach zabezpieczeń zaawansowanych: członek grupy administratorów kolekcji projektów lub Advanced Security: zarządzanie ustawieniami ustawionymi na Zezwalaj na.

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.

Zrzut ekranu zadania publikowania wyników skanowania kodu.

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.

Zrzut ekranu przedstawiający alerty skanowania kodu dla repozytorium.

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ść.

Zrzut ekranu przedstawiający szczegóły alertu skanowania kodu.

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:

  1. Przejdź do alertu, który chcesz zamknąć, i wybierz alert.
  2. Wybierz listę rozwijaną Zamknij alert .
  3. Jeśli jeszcze nie wybrano, wybierz opcję Ryzyko zaakceptowane lub Fałszywie dodatnie jako przyczynę zamknięcia.
  4. Dodaj opcjonalny komentarz do pola tekstowego Komentarz .
  5. Wybierz pozycję Zamknij , aby przesłać i zamknąć alert.
  6. Stan alertu zmienia się z Otwórz na Zamknięty , a przyczyna odrzucenia jest wyświetlana.

Zrzut ekranu przedstawiający sposób odrzucania alertu skanowania kodu.

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.

Zrzut ekranu przedstawiający adnotację aktywnego żądania ściągnięcia kodu.

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.

Zrzut ekranu przedstawiający adnotację zamkniętego żądania ściągnięcia kodu.

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.