Udostępnij za pośrednictwem


Skanowanie 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. Jeśli chcesz używać usługi GitHub Advanced Security z repozytoriami GitHub, zobacz Usługa GitHub Advanced Security.

Dodatkowe konfiguracje 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 .

Język CodeQL obsługuje i używa następujących identyfikatorów języka:

Język Identyfikator Opcjonalne identyfikatory alternatywne (jeśli istnieją)
C/C++ c-cpp c lub cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Napiwek

  • Służy c-cpp do analizowania kodu napisanego w języku C, C++ lub obu tych językach.
  • Służy java-kotlin do analizowania kodu napisanego w języku Java, Kotlin lub obu tych językach.
  • 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 przedstawiający zadanie skanowania kodu publikujące wyniki.

Dostosowywanie trybu kompilacji 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.

W przypadku uruchamiania analizy skanowania kodu za pomocą usługi GitHub Advanced Security dla usługi Azure DevOps autobuild tryb kompilacji jest zamiast tego oddzielnym zadaniem AdvancedSecurity-CodeQL-Autobuild@1kompilacji.

Napiwek

Tryb none kompilacji jest używany w połączeniu z innymi językami interpretowanymi (np. JavaScript, Python, Ruby). Jeśli dla języka C# lub Java określono tryb none kompilacji w połączeniu z innymi skompilowanymi językami, które nie obsługują trybu nonekompilacji, zadanie potoku zakończy się niepowodzeniem.

Oto przykład prawidł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# 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

Oto 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 Advanced Security w obszarze Repozytoria w usłudze Azure DevOps to centrum do wyświetlania alertów skanowania kodu. Wybierz kartę Skanowanie kodu, aby wyświetlić alerty skanowania. Można filtrować według gałęzi, stanu, potoku, typu reguły i ważności. Obecnie centrum alertów nie wyświetla alertów dotyczących skanowania ukończonego w gałęziach żądania ściągnięcia.

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 usługę Advanced Security dla repozytorium, utracisz dostęp do wyników na karcie Zabezpieczenia zaawansowane i zadaniu kompilacji. Zadanie kompilacji nie kończy się niepowodzeniem, ale żadne wyniki z kompilacji są uruchamiane z zadaniem, gdy zabezpieczenia zaawansowane są wyłączone, są ukryte i nie są zachowywane.

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 wskaźniku common vulnerability scoring System (CVSS) dla zidentyfikowanego wyliczenia wspólnej 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ę Skanowanie kodu, aby wyświetlić wszystkie alerty skanowania wpisów 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 domyślnej gałęzi i najnowszego potoku uruchamiania, nawet jeśli alert istnieje w innych gałęziach i potokach.

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 odrzuca tylko alert dla wybranej gałęzi. Inne gałęzie, które zawierają tę samą lukę w zabezpieczeniach, pozostają aktywne do czasu odrzucenia. Każdy alert, który został wcześniej odrzucony, można ręcznie otworzyć ponownie.

Zarządzanie alertami skanowania kodu w żądaniach ściągnięcia

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ć dotknięte wiersze kodu, wyświetlić podsumowanie znajdowania 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 żądania ściągnięcia, przejdź do obszaru Zabezpieczenia>zaawansowane repozytoriów i wybierz gałąź żądania ściągnięcia. Wybranie pozycji Pokaż więcej szczegółów (2) w adnotacji spowoduje przekierowanie do widoku szczegółów alertu na karcie Zabezpieczenia zaawansowane.

Napiwek

Adnotacje zostaną utworzone 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.