다음을 통해 공유


질문과 대답 | 하늘빛

비고

2022년 12월 31일부터 MSCA(Microsoft 보안 코드 분석) 확장이 사용 중지됩니다. MSCA는 microsoft Security DevOps Azure DevOps 확장 대체됩니다. 구성 지침에 따라 확장을 설치하고 구성합니다.

일반 FAQ

Azure DevOps 인스턴스 대신 내 Azure DevOps Server(이전의 Visual Studio Team Foundation Server) 인스턴스에 확장을 설치할 수 있나요?

아니요. 확장은 Azure DevOps Server(이전의 Visual Studio Team Foundation Server)에 대한 다운로드 및 설치에 사용할 수 없습니다.

빌드를 사용하여 Microsoft 보안 코드 분석을 실행해야 하나요?

아마도 그렇습니다. 분석 도구의 유형에 따라 달라집니다. 소스 코드가 필요한 유일한 코드이거나 빌드 출력이 필요할 수 있습니다.

예를 들어 CredScan(자격 증명 스캐너)은 코드 리포지토리의 폴더 구조 내에서 파일을 분석합니다. 이 분석으로 인해 CredScan 및 게시 보안 분석 로그 빌드 작업을 독립 실행형 빌드에서 실행하여 결과를 얻을 수 있습니다.

빌드 후 아티팩트를 분석하는 BinSkim과 같은 다른 도구의 경우 먼저 빌드가 필요합니다.

결과가 발견되면 빌드를 중단할 수 있나요?

예. 도구가 로그 파일에서 문제 또는 문제를 보고할 때 빌드 중단을 도입할 수 있습니다. 사후 분석 빌드 작업을 추가하고 빌드를 중단하려는 도구에 대한 확인란을 선택합니다.

분석 후 작업의 UI에서 모든 도구가 오류만 보고하거나 오류와 경고를 모두 보고할 때 빌드를 중단하도록 선택할 수 있습니다.

Azure DevOps의 명령줄 인수는 독립 실행형 데스크톱 도구의 인수와 어떻게 다른가요?

일반적으로 Azure DevOps 빌드 작업은 보안 도구의 명령줄 인수에 대한 직접 래퍼입니다. 일반적으로 명령줄 도구에 전달하는 모든 항목을 빌드 작업에 인수로 전달할 수 있습니다.

눈에 띄는 차이점:

  • 도구는 에이전트 $(Build.SourcesDirectory)의 원본 폴더 또는 %BUILD_SOURCESDIRECTORY%. 예를 들어 C:\agent_work\1\s입니다.
  • 인수의 경로는 이전에 나열된 원본 디렉터리의 루트를 기준으로 할 수 있습니다. 경로는 절대 경로일 수도 있습니다. Azure DevOps 빌드 변수를 사용하거나 로컬 리소스의 알려진 배포 위치가 있는 온-프레미스 에이전트를 실행하여 절대 경로를 가져옵니다.
  • 도구는 출력 파일 경로 또는 폴더를 자동으로 제공합니다. 빌드 작업에 대한 출력 위치를 제공하는 경우 해당 위치는 빌드 에이전트에서 잘 알려진 로그 위치의 경로로 바뀝니다.
  • 일부 다른 명령줄 인수는 일부 도구에 대해 변경됩니다. 한 가지 예는 GUI가 시작되지 않도록 하는 옵션을 추가하거나 제거하는 것입니다.

Azure DevOps Build의 여러 리포지토리에서 자격 증명 스캐너와 같은 빌드 작업을 실행할 수 있나요?

아니요. 단일 파이프라인의 여러 리포지토리에서 보안 개발 도구를 실행하는 것은 지원되지 않습니다.

지정한 출력 파일이 만들어지지 않거나 지정한 출력 파일을 찾을 수 없습니다.

빌드 작업은 일부 사용자 입력을 필터링합니다. 특히 이 질문의 경우 생성된 출력 파일의 위치를 빌드 에이전트의 공통 위치로 업데이트합니다. 이 위치에 대한 자세한 내용은 다음 질문을 참조하세요.

도구에서 생성한 출력 파일은 어디에 저장되었나요?

빌드 작업은 빌드 에이전트에서 잘 알려진 이 위치에 출력 경로를 자동으로 추가합니다. $(Agent.BuildDirectory)_sdt\logs. 이 위치를 표준화하기 때문에 코드 분석 로그를 생성하거나 사용하는 모든 팀은 출력에 액세스할 수 있습니다.

호스트된 빌드 에이전트에서 이러한 작업을 실행하기 위해 빌드를 큐에 대기할 수 있나요?

예. 확장의 모든 작업 및 도구는 호스트된 빌드 에이전트에서 실행할 수 있습니다.

비고

맬웨어 방지 스캐너 빌드 작업에는 Windows Defender를 사용하도록 설정된 빌드 에이전트가 필요합니다. 호스트된 Visual Studio 2017 이상에서는 이러한 에이전트를 제공합니다. 빌드 작업은 Visual Studio 2015 호스팅 에이전트에서 실행되지 않습니다.

이러한 에이전트에서 서명을 업데이트할 수는 없지만 서명은 항상 3시간 미만이어야 합니다.

빌드 파이프라인이 아닌 릴리스 파이프라인의 일부로 이러한 빌드 작업을 실행할 수 있나요?

대부분의 경우 그렇습니다.

그러나 Azure DevOps는 해당 태스크가 아티팩트 게시 시 릴리스 파이프라인 내에서 작업을 실행하는 것을 지원하지 않습니다. 이러한 지원 부족으로 인해 릴리스 파이프라인에서 보안 분석 로그 게시 작업이 성공적으로 실행되지 않습니다. 대신 설명 오류 메시지와 함께 작업이 실패합니다.

빌드 작업은 어디에서 도구를 다운로드합니까?

빌드 작업은 Azure DevOps 패키지 관리 피드도구의 NuGet 패키지를 다운로드할 수 있습니다. 빌드 작업은 빌드 에이전트에 미리 설치해야 하는 노드 패키지 관리자를 사용할 수도 있습니다. 이러한 설치의 예는 npm install tslint 명령입니다.

확장을 설치하면 Azure DevOps 조직에 어떤 영향이 있나요?

설치 시 확장에서 제공하는 보안 빌드 작업을 조직의 모든 사용자가 사용할 수 있게 됩니다. Azure Pipeline을 만들거나 편집할 때 이러한 작업은 빌드 작업 컬렉션 목록에서 사용할 수 있습니다. 그렇지 않으면 Azure DevOps 조직에 확장을 설치해도 효과가 없습니다. 설치는 계정 설정, 프로젝트 설정 또는 파이프라인을 수정하지 않습니다.

확장을 설치하면 기존 Azure Pipelines가 수정됩니까?

아니요. 확장을 설치하면 파이프라인에 추가하기 위해 보안 빌드 작업을 사용할 수 있습니다. 도구가 빌드 프로세스에서 작동할 수 있도록 빌드 정의를 추가하거나 업데이트해야 합니다.

작업별 FAQ

빌드 작업과 관련된 질문은 이 섹션에 나와 있습니다.

자격 증명 스캐너

일반적인 억제 시나리오 및 예제는 무엇인가요?

다음은 가장 일반적인 두 가지 억제 시나리오에 대한 세부 정보입니다.

지정된 경로 내에서 지정된 비밀이 발생하는 모든 항목을 표시하지 않는 경우

다음 샘플과 같이 CredScan 출력 파일에서 비밀의 해시 키가 필요합니다.

{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
        "_justification": "Secret used by MSDN sample, it is fake."
    }
  ]
}

경고

해시 키는 일치하는 값 또는 파일 콘텐츠의 일부에 의해 생성됩니다. 소스 코드 수정 버전에서는 해시 키를 변경하고 제거 규칙을 사용하지 않도록 설정할 수 있습니다.

지정된 파일의 모든 비밀을 표시하지 않거나 비밀 파일 자체를 표시하지 않는 경우

파일 식은 파일 이름이 될 수 있습니다. 전체 파일 경로 또는 파일 이름의 기본 이름 부분일 수도 있습니다. 와일드카드는 지원되지 않습니다.

다음 예제에서는 InputPath>\src\JS\lib\angular.js <파일을 표시하지 않는 방법을 보여 줍니다.

유효한 표시 안 함 규칙의 예:

  • <InputPath>\src\JS\lib\angular.js - 지정된 경로의 파일을 표시하지 않습니다.
  • \src\JS\lib\angular.js
  • \JS\lib\angular.js
  • \lib\angular.js
  • angular.js - 이름이 같은 파일을 표시하지 않습니다.
{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "file": "\\files\\AdditonalSearcher.xml", 
        "_justification": "Additional CredScan searcher specific to my team"
    },
    {
        "file": "\\files\\unittest.pfx", 
        "_justification": "Legitimate UT certificate file with private key"
    }
  ]
}

경고

파일에 추가된 이후의 모든 비밀도 자동으로 표시되지 않습니다.

비밀 관리에 권장되는 지침은 무엇인가요?

다음 리소스는 비밀을 안전하게 관리하고 애플리케이션 내에서 중요한 정보에 액세스하는 데 도움이 됩니다.

자세한 내용은 클라우드 안전하게 비밀 관리를블로그 게시물을 참조하세요.

사용자 지정 검색자를 직접 작성할 수 있나요?

자격 증명 스캐너는 buildsearchers.xml 파일에 일반적으로 정의된 콘텐츠 검색기 집합을 사용합니다. 파일에는 ContentSearcher 개체를 나타내는 XML 직렬화된 개체 배열이 포함되어 있습니다. 프로그램은 잘 테스트된 검색자 집합으로 배포됩니다. 하지만 사용자 지정 검색자도 구현할 수 있습니다.

콘텐츠 검색기는 다음과 같이 정의됩니다.

  • 이름: 자격 증명 스캐너 출력 파일에 사용할 설명 검색자 이름입니다. 검색자 이름에 카멜 대/소문자 명명 규칙을 사용하는 것이 좋습니다.

  • RuleId: 검색자의 안정적인 불투명 ID입니다.

    • 자격 증명 스캐너 기본 검색자에는 CSCAN0010, CSCAN0020 또는 CSCAN0030 같은 RuleId 값이 할당됩니다. 마지막 숫자는 정규식(regex)을 통해 검색자 그룹을 병합하거나 분할하기 위해 예약됩니다.
    • 사용자 지정된 검색자의 RuleId 값에는 고유한 네임스페이스가 있어야 합니다. 예를 들어 CSCAN-<네임스페이스>0010, CSCAN<네임스페이스>0020 및 CSCAN<네임스페이스>0030이 있습니다.
    • 정규화된 검색자 이름은 RuleId 값과 검색자 이름의 조합입니다. 예를 들어 CSCAN0010. KeyStoreFiles 및 CSCAN0020. Base64EncodedCertificate.
  • ResourceMatchPattern: 검색자에 대해 확인할 파일 확장명 Regex입니다.

  • ContentSearchPatterns: 일치시킬 regex 문을 포함하는 문자열 배열입니다. 검색 패턴이 정의되지 않은 경우 ResourceMatchPattern 값과 일치하는 모든 파일이 반환됩니다.

  • ContentSearchFilters: 검색자별 가양성 필터링을 위한 regex 문을 포함하는 문자열 배열입니다.

  • MatchDetails: 검색자의 각 일치 항목에 대해 추가할 설명 메시지, 완화 명령 또는 둘 다입니다.

  • 권장 사항: PREfast 보고서 형식을 사용하는 일치 항목에 대한 제안 필드 콘텐츠입니다.

  • 심각도: 문제의 심각도 수준을 반영하는 정수입니다. 가장 높은 심각도 수준에는 값 1이 있습니다.

    자격 증명 스캐너 설정XML

Roslyn 분석기

Roslyn 분석기 작업을 사용할 때 발생하는 일반적인 오류는 무엇인가요?

잘못된 Microsoft.NETCore.App 버전을 사용하여 프로젝트가 복원되었습니다.

전체 오류 메시지:

"오류: x.x.x Microsoft.NETCore.App 버전을 사용하여 프로젝트를 복원했지만 현재 설정에서는 버전 y.y.y 대신 사용됩니다. 이 문제를 해결하려면 복원 및 빌드 또는 게시와 같은 후속 작업에 동일한 설정이 사용되는지 확인합니다. 일반적으로 이 문제는 RuntimeIdentifier 속성이 빌드 또는 게시 중에 설정되었지만 복원 중에는 설정되지 않은 경우에 발생할 수 있습니다."

Roslyn 분석기 작업은 컴파일의 일부로 실행되므로 빌드 머신의 원본 트리는 빌드 가능한 상태여야 합니다.

기본 빌드와 Roslyn 분석기 단계 간의 단계에서는 원본 트리를 빌드를 방해하는 상태로 전환했을 수 있습니다. 이 추가 단계는 게시할dotnet.exe 있습니다. Roslyn 분석기 단계 바로 전에 NuGet 복원을 수행하는 단계를 복제해 봅니다. 이 중복된 단계에서는 원본 트리를 다시 빌드 가능한 상태로 만들 수 있습니다.

csc.exe 분석기 인스턴스를 만들 수 없습니다.

전체 오류 메시지:

"'csc.exe'오류 코드 1로 종료됨 - C:\BBBB.dll 분석기 AAAA 인스턴스를 만들 수 없습니다. 파일 또는 어셈블리 'Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 또는 해당 종속성 중 하나입니다. 시스템에서 지정된 파일을 찾을 수 없습니다."

컴파일러가 Roslyn 분석기를 지원하는지 확인합니다. 명령 csc.exe /version 실행하면 버전 값이 2.6 이상이어야 합니다.

경우에 따라 .csproj 파일은 Microsoft.Net.Compilers에서 패키지를 참조하여 빌드 머신의 Visual Studio 설치를 재정의할 수 있습니다. 특정 버전의 컴파일러를 사용하지 않으려면 Microsoft.Net.Compilers에 대한 참조를 제거합니다. 그렇지 않은 경우 참조된 패키지의 버전도 2.6 이상인지 확인합니다.

csc.exe /errorlog 옵션에 지정된 오류 로그 경로를 가져옵니다. Roslyn 분석기 빌드 작업의 로그에 옵션 및 경로가 표시됩니다. /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif

C# 컴파일러 버전이 최신 버전이 아닙니다.

최신 버전의 C# 컴파일러를 얻으려면 microsoft.Net.Compilers . 설치된 버전을 얻으려면 명령 프롬프트에서 csc.exe /version 실행합니다. 버전 2.6 이상인 Microsoft.Net.Compilers NuGet 패키지를 참조해야 합니다.

MSBuild 및 VSBuild 로그를 찾을 수 없음

Roslyn Analyzers 빌드 작업은 MSBuild 빌드 태스크에서 MSBuild 로그에 대한 Azure DevOps를 쿼리해야 합니다. MSBuild 작업 직후에 분석기 작업이 실행되면 로그를 아직 사용할 수 없습니다. MSBuild 작업과 Roslyn 분석기 작업 사이에 다른 작업을 배치합니다. 다른 작업의 예로는 BinSkim 및 맬웨어 방지 스캐너가 있습니다.

다음 단계

추가 지원이 필요한 경우 Microsoft 보안 코드 분석 지원은 월요일부터 금요일까지 오전 9시부터 오후 5:00까지 태평양 표준시로 제공됩니다.