Udostępnij przez


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. Będziesz potrzebować GitHub Advanced Security dla Azure DevOps lub, jeśli korzystasz z funkcji autonomicznej, musisz mieć włączone GitHub Code Security dla Azure DevOps. 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 Administratorzy Kolekcji Projektów lub uprawnienie Zarządzanie ustawieniami zabezpieczeń zaawansowanych ustawione na Zezwalaj.

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
C/C++ cpp
C# csharp
Go go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Wskazówka

  • Służy cpp do analizowania kodu napisanego w języku C, C++ lub obu tych językach.
  • Użyj java do analizowania kodu napisanego w językach Java, Kotlin lub w obu.
  • Użyj javascript do analizy kodu napisanego w językach JavaScript, TypeScript lub obu.

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 przy konfigurowaniu potoku 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 systemach cpp, javai csharp).
  • 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.

Wskazówka

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 kodu 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 kliknij na niego.
  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 prośbie o ściągnięcie, alert jest zgłaszany jako adnotacja w sekcji komentarzy na karcie Przegląd prośby o ściągnięcie i jako alert na karcie Zaawansowane zabezpieczenia w repozytorium. Dodano nową pozycję w selektorze gałęzi dla gałęzi prośby o ściągnięcie.

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 związane z żądaniem wciągnięcia, musisz przejść do widoku szczegółów alertu, aby zamknąć alert i usunąć 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.

Wskazówka

Adnotacje są tworzone tylko wtedy, gdy linie kodu, które dotyczą różnic, są całkowicie unikatowe dla pull requestu w porównaniu z jego docelową gałęzią.