다음을 통해 공유


코드 검사

Azure DevOps용 GitHub Advanced Security의 코드 검색을 사용하면 Azure DevOps 리포지토리의 코드를 분석하여 보안 취약성 및 코딩 오류를 찾을 수 있습니다. 분석으로 식별되는 모든 문제는 경고로 발생합니다. 코드 검색은 CodeQL을 사용하여 취약성을 식별합니다.

CodeQL은 보안 확인을 자동화하기 위해 GitHub가 개발한 코드 분석 엔진입니다. CodeQL을 사용하여 코드를 분석하고 결과를 코드 검사 경고로 표시할 수 있습니다. CodeQL에 대한 자세한 설명서는 CodeQL 설명서를 참조 하세요.

Azure DevOps용 GitHub Advanced Security는 Azure Repos에서 작동합니다. GitHub 리포지토리에서 GitHub Advanced Security를 사용하려면 GitHub Advanced Security를 참조하세요.

코드 검색을 위한 추가 구성

언어 및 쿼리 지원

GitHub 전문가, 보안 연구원 및 커뮤니티 기여자는 코드 검사에 사용되는 기본 CodeQL 쿼리를 작성하고 유지 관리합니다. 쿼리는 분석을 개선하고 가양성 결과를 줄이기 위해 정기적으로 업데이트됩니다. 쿼리는 오픈 소스이므로 github/codeql 리포지토리에서 쿼리를 보고 기여할 수 있습니다.

CodeQL은 다음 언어 식별자를 지원하고 사용합니다.

언어 식별자 선택적 얼터너티브 식별자(있는 경우)
C/C++ c-cpp c 또는 cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

  • C, C++ 또는 둘 다로 작성된 코드를 분석하는 데 사용합니다 c-cpp .
  • Java, Kotlin 또는 둘 다로 작성된 코드를 분석하는 데 사용합니다 java-kotlin .
  • JavaScript, TypeScript 또는 둘 다로 작성된 코드를 분석하는 데 javascript을(를) 사용합니다.

자세한 내용은 지원되는 언어 및 프레임워크를 참조 하세요.

빌드 로그에서 CodeQL에서 실행한 특정 쿼리 및 작업 세부 정보를 볼 수 있습니다.

결과 게시 태스크를 검색하는 코드 스크린샷

코드 검사 빌드 모드 사용자 지정

코드 검색은 검색을 위해 파이프라인을 설정할 때 두 가지 빌드 모드를 지원합니다.

  • none - CodeQL 데이터베이스는 코드베이스를 빌드하지 않고 코드베이스에서 직접 만들어집니다(해석된 모든 언어에 대해 지원되며 C# 및 Java에 추가로 지원됨).
  • manual - 워크플로의 코드베이스에 사용할 빌드 단계를 정의합니다(컴파일된 모든 언어에 대해 지원됨).

각 빌드 모드의 이점에 대한 비교를 포함하여 다양한 빌드 모드에 대한 자세한 내용은 컴파일된 언어에 대한 CodeQL 코드 검사를 참조 하세요.

Azure DevOps autobuild 용 GitHub Advanced Security를 통해 코드 검사 분석을 실행하기 위해 빌드 모드는 별도의 빌드 작업 AdvancedSecurity-CodeQL-Autobuild@1입니다.

빌드 모드 none 는 다른 해석된 언어(예: JavaScript, Python, Ruby)와 함께 사용할 수 있습니다. 빌드 모드 none 를 지원하지 않는 다른 컴파일된 언어와 함께 C# 또는 Java에 대해 빌드 모드 none를 지정하면 파이프라인 작업이 실패합니다.

다음은 여러 언어 및 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

다음은 여러 언어 및 none 빌드 모드를 사용하는 잘못된 구성의 예입니다.

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

코드 검사 경고

Azure DevOps 코드 검색 경고에 대한 GitHub 고급 보안에는 코드 수준 애플리케이션 취약성을 경고하는 리포지토리별 코드 검색 플래그가 포함됩니다.

코드 검색을 사용하려면 먼저 Azure DevOps용 GitHub Advanced Security를 구성 해야 합니다.

Azure DevOps의 리포지토리 아래에 있는 고급 보안 탭은 코드 검색 경고를 볼 수 있는 허브입니다. 코드 검색 탭을 선택하여 검색 경고를 봅니다. 분기, 상태, 파이프라인, 규칙 유형 및 심각도별로 필터링할 수 있습니다. 현재 경고 허브는 PR 분기에서 완료된 검사에 대한 경고를 표시하지 않습니다.

파이프라인 또는 분기의 이름이 바뀌면 결과에 영향을 주지 않습니다. 새 이름이 표시되기까지 최대 24시간이 걸릴 수 있습니다.

사용자 지정 CodeQL 쿼리를 실행하도록 선택하는 경우 기본적으로 다른 쿼리 팩에서 생성된 경고에 대한 별도의 필터가 없습니다. 각 쿼리에 대해 고유한 규칙별로 필터링할 수 있습니다.

리포지토리에 대한 코드 검색 경고의 스크린샷

리포지토리에 대한 고급 보안을 해제하면 고급 보안 탭 및 빌드 작업의 결과에 액세스할 수 없게 됩니다. 빌드 작업이 실패하지는 않지만 고급 보안을 사용하지 않도록 설정된 상태에서 빌드의 결과가 작업과 함께 실행되며 숨겨지고 유지되지 않습니다.

경고 세부 정보

수정 지침을 포함하여 자세한 내용을 보려면 경고를 선택합니다. 각 경고에는 위치, 설명, 예제 및 심각도가 포함됩니다.

경고 세부 정보를 검사하는 코드 스크린샷.

섹션 설명
위치 위치 섹션에서는 CodeQL이 취약성을 감지한 특정 인스턴스에 대해 자세히 설명합니다. 동일한 규칙을 위반하는 코드 인스턴스가 여러 개 있는 경우 각 고유 위치에 대해 새 경고가 생성됩니다. 위치 카드에는 영향을 받는 코드 조각에 대한 직접 링크가 포함되어 있으므로 편집을 위해 Azure DevOps 웹 UI로 보낼 코드 조각을 선택할 수 있습니다.
설명 설명은 문제를 기반으로 CodeQL 도구에서 제공됩니다.
추천 권장 사항은 지정된 코드 검사 경고에 대한 권장 수정 사항입니다.
예시 예제 섹션에서는 코드에서 식별된 약점의 간소화된 예제를 보여 줍니다.
심각도 심각도 수준은 낮음, 중간, 높음 또는 위험일 수 있습니다. 심각도 점수는 식별된 CWE(Common Weakness Enumeration)에 대해 지정된 CVSS(Common Vulnerability Scoring System) 점수를 기반으로 합니다. 이 GitHub 블로그 게시물에서 심각도 점수 매기기 방법에 대해 자세히 알아봅니다.

리포지토리에 대한 경고 보기

리포지토리에 대한 기여자 권한이 있는 사용자는 리포지토리 아래의 고급 보안 탭에서 리포지토리에 대한 모든 경고의 요약을 볼 수 있습니다. 코드 검색 탭을 선택하여 모든 비밀 검색 경고를 봅니다.

결과를 표시하려면 코드 검사 작업을 먼저 실행해야 합니다. 첫 번째 검사가 완료되면 검색된 취약성이 고급 보안 탭에 표시됩니다.

기본적으로 경고 페이지에는 리포지토리의 기본 분기 대한 종속성 검사 결과가 표시됩니다.

지정된 경고의 상태는 경고가 다른 분기 및 파이프라인에 있더라도 기본 분기 및 최신 실행 파이프라인의 상태를 반영합니다.

코드 검색 경고 해제

경고를 해제하려면 적절한 권한이 필요합니다. 기본적으로 프로젝트 관리자만 고급 보안 경고를 해제할 수 있습니다.

경고를 해제하려면 다음을 수행합니다.

  1. 닫을 경고로 이동하고 경고에서 선택합니다.
  2. 경고 닫기 드롭다운을 선택합니다.
  3. 아직 선택하지 않은 경우 닫는 이유로 허용된 위험 또는 가양성을 선택합니다.
  4. 메모 텍스트 상자에 선택적 주석추가합니다.
  5. 기를 선택하여 경고를 제출하고 닫습니다.
  6. 경고 상태가 열기에서 닫힘으로 변경되고 해고 사유가 표시됩니다.

코드 검색 경고를 해제하는 방법의 스크린샷.

이 작업은 선택한 분기에 대한 경고만 해제합니다. 동일한 취약성을 포함하는 다른 분기는 해제될 때까지 활성 상태로 유지됩니다. 이전에 해제된 모든 경고를 수동으로 다시 열 수 있습니다.

끌어오기 요청에 대한 코드 검사 경고 관리

끌어오기 요청의 새 코드 변경에 대한 경고가 생성되면 경고는 끌어오기 요청의 개요 탭 주석 섹션에 주석으로 보고되고 고급 보안 리포지토리 탭의 경고로 보고됩니다. 끌어오기 요청 분기에 대한 새 분기 선택 항목이 있습니다.

영향을 받는 코드 줄을 검토하고, 검색 요약을 참조하고, 개요 섹션에서 주석을 확인할 수 있습니다.

활성 코드 끌어오기 요청 주석의 스크린샷

끌어오기 요청 경고를 해제하려면 경고 세부 정보 보기로 이동하여 경고를 모두 닫고 주석을 해결해야 합니다. 그렇지 않으면 주석 상태(1)를 변경하기만 하면 주석이 해결되지만 기본 경고를 닫거나 수정하지는 않습니다.

닫힌 코드 끌어오기 요청 주석의 스크린샷.

끌어오기 요청 분기에 대한 전체 결과 집합을 보려면 Repos>고급 보안으로 이동하여 끌어오기 요청 분기를 선택합니다. 주석에서 자세한 정보 표시(2)를 선택하면 고급 보안 탭의 경고 세부 정보 보기로 이동합니다.

주석은 영향을 받는 코드 줄이 끌어오기 요청의 대상 분기와 비교하여 끌어오기 요청 차이에 완전히 고유한 경우에만 생성됩니다.