비밀 검사
엔지니어링 시스템에서 노출된 자격 증명은 공격자에게 쉽게 악용할 수 있는 기회를 제공합니다. 이 위협을 방어하기 위해 Azure DevOps용 GitHub Advanced Security는 소스 코드에서 자격 증명 및 기타 중요한 콘텐츠를 검색합니다. 또한 푸시 보호는 자격 증명이 처음에 유출되는 것을 방지합니다.
리포지토리에 대한 비밀 검사는 기록 및 푸시 보호에서 소스 코드에 이미 존재할 수 있는 비밀을 검색하여 새 비밀이 소스 코드에 노출되지 않도록 방지합니다.
Azure DevOps용 GitHub Advanced Security는 Azure Repos에서 작동합니다. GitHub 리포지토리에서 GitHub Advanced Security를 사용하려면 GitHub Advanced Security를 참조하세요.
비밀 검사 경고 정보
고급 보안을 사용하도록 설정하면 리포지토리에서 다양한 서비스 공급자가 발급한 비밀을 검색하고 비밀 검사 경고를 생성합니다.
리소스에 대한 액세스에 쌍을 이루는 자격 증명이 필요한 경우 비밀 검색은 쌍의 두 부분이 동일한 파일에서 검색된 경우에만 경고를 만들 수 있습니다. 페어링을 통해 가장 중요한 누수는 부분 누출에 대한 정보 뒤에 숨겨지지 않습니다. 쌍 일치는 공급자의 리소스에 액세스하기 위해 쌍의 두 요소를 함께 사용해야 하기 때문에 가양성도 줄이는 데 도움이 됩니다.
Azure DevOps의 Repos>Advanced Security의 고급 보안 탭은 보안 경고를 볼 수 있는 허브입니다. 비밀 검색 경고를 보려면 비밀 탭을 선택합니다. 상태 및 비밀 유형별로 필터링할 수 있습니다. 수정 지침을 포함하여 자세한 내용은 경고로 이동할 수 있습니다. Advanced Security를 사용하도록 설정하면 모든 기록 커밋을 포함하여 선택한 리포지토리에 대한 검사가 시작됩니다. 시간이 지남에 따라 검색이 진행됨에 따라 경고가 나타나기 시작합니다.
분기 이름이 바뀌면 결과에 영향을 주지 않습니다. 새 이름이 표시되기까지 최대 24시간이 걸릴 수 있습니다.
노출된 비밀을 수정하려면 노출된 자격 증명을 무효화하고 그 자리에 새 자격 증명을 만듭니다. 새로 만든 비밀은 코드에 직접 푸시하지 않는 방식으로 안전하게 저장되어야 합니다. 예를 들어 비밀을 Azure Key Vault에 저장할 수 있습니다. 대부분의 리소스에는 기본 자격 증명과 보조 자격 증명이 모두 있습니다. 다른 설명이 없는 한 기본 자격 증명과 보조 자격 증명을 롤오버하는 메서드는 동일합니다.
비밀 검사 경고 관리
리포지토리에 대한 경고 보기
리포지토리에 대한 기여자 권한이 있는 사용자는 리포지토리 아래의 고급 보안 탭에서 리포지토리에 대한 모든 경고의 요약을 볼 수 있습니다. 비밀 탭에서 모든 비밀 검사 경고를 보려면 선택합니다.
최근에 리포지토리에 대해 Advanced Security를 사용하도록 설정한 경우 고급 보안이 리포지토리를 검사하고 있음을 나타내는 카드가 표시될 수 있습니다.
검사가 완료되면 모든 결과가 표시됩니다. 검색된 각 고유 자격 증명에 대해 리포지토리의 모든 분기 및 기록에 대해 단일 경고가 생성됩니다. 분기 필터는 하나의 경고로 롤업되므로 없습니다.
비 공급자 비밀은 비밀 검색 탭의 신뢰도 드롭다운에서 "기타"를 선택하여 볼 수 있습니다.
경고 세부 정보
경고로 이동하면 자세한 경고 보기가 나타나고 찾기에 대한 자세한 정보를 표시하고 경고를 해결하기 위한 특정 수정 지침을 제공합니다.
섹션 | 설명 |
---|---|
위치 | 위치 섹션에서는 비밀 검사에서 유출된 자격 증명을 발견한 경로를 자세히 설명합니다. 기록에서 유출된 자격 증명을 포함하는 여러 위치 또는 여러 커밋이 있을 수 있습니다. 이러한 모든 위치와 커밋은 코드 조각에 대한 직접 링크와 함께 위치 아래에 표시되고, 해당 위치가 식별된 커밋됩니다. |
추천 | 권장 사항 섹션에는 수정 지침 또는 식별된 자격 증명에 대한 타사 문서 수정 지침에 대한 링크가 포함되어 있습니다. |
경고 알림 닫기 | 비밀 검색 경고에 대한 자동 접두사 동작은 없습니다. 모든 비밀 검사 경고는 경고 세부 정보 페이지를 통해 수정된 대로 수동으로 증명해야 합니다. 닫기 단추를 선택하여 비밀이 해지되었는지 확인합니다. |
심각도 | 모든 비밀 검사 경고는 위험으로 설정됩니다. 노출된 자격 증명은 악의적인 행위자를 위한 기회일 수 있습니다. |
세부 정보 찾기 | 자격 증명을 찾는 데 사용되는 자격 증명 및 규칙 유형은 경고 세부 정보 페이지의 사이드바에 있는 찾기 세부 정보 아래에 나열됩니다. |
공급자가 아닌 비밀을 사용하면 신뢰도: 다른 태그도 경고 세부 정보 보기의 심각도 배지로 표시됩니다.
비밀 검색 경고 수정
각 비밀에는 해당 위치에서 새 비밀을 해지하고 다시 생성하는 방법을 안내하는 고유한 수정 단계가 있습니다. 경고 세부 정보는 각 경고에 대한 특정 단계 또는 설명서를 공유합니다.
비밀 검색 경고는 닫을 때까지 열려 있습니다. 비밀 검색 경고가 수정되었다는 것을 증명하려면 다음을 수행합니다.
- 닫을 경고로 이동하고 경고를 선택합니다.
- 경고 닫기 드롭다운을 선택합니다.
- 아직 선택하지 않은 경우 [수정]을 선택합니다.
- 닫기를 선택하여 경고를 제출하고 닫습니다.
비밀 검색 경고 해제
고급 보안에서 경고를 해제하려면 적절한 권한이 필요합니다. 기본적으로 프로젝트 관리자만 고급 보안 경고를 해제할 수 있습니다. 고급 보안 권한에 대한 자세한 내용은 고급 보안 권한 관리를 참조 하세요.
경고를 해제하려면 다음을 수행합니다.
- 닫을 경고로 이동하고 경고에서 선택합니다.
- 경고 닫기 드롭다운을 선택합니다.
- 아직 선택하지 않은 경우 닫는 이유로 허용된 위험 또는 가양성을 선택합니다.
- 메모 텍스트 상자에 선택적 주석을 추가합니다.
- 닫기를 선택하여 경고를 제출하고 닫습니다.
- 경고 상태가 열기에서 닫힘으로 변경되고 해고 이유가 표시됩니다.
이전에 해제된 모든 경고를 수동으로 다시 열 수 있습니다.
손상된 비밀 보안
비밀이 리포지토리에 커밋되면 비밀이 손상됩니다. 손상된 비밀에 대해 다음 작업을 권장합니다.
- 손상된 Azure DevOps 개인용 액세스 토큰의 경우 손상된 토큰을 삭제하고, 새 토큰을 만들고, 이전 토큰을 사용하는 모든 서비스를 업데이트합니다.
- 다른 모든 비밀의 경우 먼저 Azure Repos에 커밋된 비밀이 유효한지 확인합니다. 그렇다면 새 비밀을 만들고 이전 비밀을 사용하는 모든 서비스를 업데이트한 후 이전 비밀을 삭제합니다.
- 는 엔터프라이즈 리소스에서 손상된 토큰이 수행한 작업을 식별합니다.
비밀을 업데이트할 때는 새 비밀을 안전하게 저장하고 항상 액세스하고 일반 텍스트로 저장되지 않도록 해야 합니다. 한 가지 가능성은 Azure Keyvault 또는 다른 비밀 관리 솔루션을 통해 수행할 수 있습니다.
비밀 푸시 보호
푸시 보호는 들어오는 푸시에서 신뢰도가 높은 비밀을 확인하고 푸시가 진행되지 않도록 방지합니다. 오류 메시지는 식별된 모든 비밀을 제거하거나 필요한 경우 비밀을 계속 푸시하도록 표시합니다.
푸시 보호 경고 정보
푸시 보호 경고는 푸시 보호에서 보고한 사용자 경고입니다. 푸시 보호로 비밀 검색은 현재 일부 서비스 공급자가 발급한 비밀에 대한 리포지토리를 검색합니다.
리소스에 대한 액세스에 쌍을 이루는 자격 증명이 필요한 경우 비밀 검색은 쌍의 두 부분이 동일한 파일에서 검색된 경우에만 경고를 만들 수 있습니다. 페어링을 통해 가장 중요한 누수는 부분 누출에 대한 정보 뒤에 숨겨지지 않습니다. 쌍의 두 요소를 함께 사용하여 공급자의 리소스에 액세스해야 하기 때문에 쌍 일치는 가양성(false positive) 감소에 도움이 됩니다.
푸시 보호는 이전 버전의 특정 토큰을 차단하지 못할 수 있습니다. 이러한 토큰은 최신 버전보다 더 많은 가양성 수를 생성할 수 있기 때문에 차단할 수 있습니다. 푸시 보호는 레거시 토큰을 차단하지 않을 수도 있습니다. Azure Storage 키와 같은 토큰의 경우 Advanced Security는 레거시 패턴과 일치하는 토큰이 아니라 최근에 만든 토큰만 지원합니다.
명령줄에서 보호 푸시
푸시 보호는 기본적으로 Azure DevOps Git에 빌드됩니다. 커밋에 식별된 비밀이 포함된 경우 푸시가 거부되었다는 오류가 표시됩니다.
웹 인터페이스에서 보호 푸시
푸시 보호는 웹 인터페이스에서도 작동합니다. 커밋에서 비밀이 식별되면 변경 내용을 푸시하지 못하게 하는 다음 오류 블록이 표시됩니다.
푸시가 차단된 경우 수행할 일
푸시 보호는 일반적으로 소스 코드 또는 JSON 구성 파일과 같은 텍스트 파일(제한되지 않음)인 일반 텍스트 파일에 있는 비밀을 차단합니다. 이러한 비밀은 일반 텍스트로 저장됩니다. 악의적인 행위자가 파일에 대한 액세스 권한을 얻고 퍼블릭 리포지토리 게시되는 경우 비밀은 누구나 사용할 수 있습니다.
플래그가 지정된 파일에서 비밀을 제거한 다음 커밋 기록에서 비밀을 제거하는 것이 좋습니다. 플래그가 지정된 비밀이 자리 표시자 또는 예제 비밀인 경우 가짜 비밀 앞에 문자열 Placeholder
을 추가하도록 가짜 비밀을 업데이트하는 것이 좋습니다.
비밀이 바로 이전 커밋에 추가된 경우 커밋을 수정하고 새 커밋을 만듭니다.
- 코드에서 비밀을 제거합니다.
- 를 사용하여 변경 내용 커밋
git commit --amend
- 변경 내용을 다시 푸시합니다.
비밀이 다시 기록에 추가된 경우 대화형 재베이스를 사용하여 커밋을 편집합니다.
git log
를 사용하여 비밀을 처음 커밋한 커밋을 확인합니다.- 대화형 다시베이스를 수행합니다.
git rebase -i [commit ID before credential introduction]~1
- 편집기에 표시되는 텍스트의 첫 줄에서
pick
을edit
로 변경하여 편집할 커밋을 식별합니다. - 코드에서 비밀을 제거합니다.
git commit --amend
를 사용하여 변경 사항을 커밋합니다.- 를 실행
git rebase --continue
하여 다시베이스를 완료합니다.
차단된 비밀 푸시
우회하면 회사의 보안이 위험할 수 있으므로 플래그가 지정된 비밀을 우회하는 것은 권장되지 않습니다. 식별된 비밀이 거짓 긍정이 아님을 확인하는 경우 변경 내용을 다시 푸시하기 전에 전체 분기 기록에서 비밀을 제거해야 합니다.
차단된 비밀이 가양성이거나 푸시하기에 안전하다고 생각되면 푸시 보호를 무시할 수 있습니다. 커밋 메시지 문자열 skip-secret-scanning:true
을 포함합니다. 푸시 보호를 무시하더라도 비밀이 푸시되면 경고 UX에서 비밀 검색 경고가 생성됩니다.