이미 푸시된 커밋에 포함된 자격 증명은 이후 커밋에서 해당 내용이 제거되더라도 이미 유출된 상태입니다. 보안 기능은 변경 사항 및 이력에서 자격 증명을 찾아내되 이를 전혀 보관하지 않으며, 회전 또는 폐기되었음이 확인될 때까지 각 자격 증명을 열린 상태로 간주합니다.
검사 대상
- 모든 변경 사항: 각 pull request의 변경 사항으로, 이는
Coroid Security검사의 일부이며, Coroid 자체의 에이전트가 커밋하기 전에 만든 변경 사항도 포함됩니다. - 기본 브랜치: 매번 푸시될 때마다 그리고 전체 이력을 대상으로 한 번 검사됩니다. 이력 검사는 저장소가 연결되거나 유출된 비밀번호 기능이 활성화될 때 시작됩니다.
- 프로젝트 제안 브랜치: pull request 브랜치에 푸시된 자격 증명도 발견 항목으로 등록되는데, 이는 이미 저장소에 포함되어 있기 때문입니다.
pull request 없이 푸시된 브랜치는 검사 대상에서 제외됩니다.
이력 검사는 도달 가능한 모든 커밋을 가장 최신 순으로 읽으며, 각 파일 버전을 한 번씩 확인합니다. 검사는 조각 단위로 진행되며 중단된 지점에서 다시 시작됩니다. 각 저장소마다 읽을 수 있는 이력의 양(커밋 수, 바이트 수, 시간, 파일 크기)에 제한이 있으며, 이 제한을 초과하면 부분적인 결과만 제공됩니다.
감지 대상
알려진 형식의 제공업체 자격 증명(AWS 액세스 키, GitHub 및 GitLab 토큰, OpenAI 키 등), 인증 토큰, ""나 ""와 같은 이름으로 할당된 자격 증명,password또는api_key, 개인 키, URL 내에 포함된 자격 증명, 그리고 엔트로피가 높은 긴 문자열입니다. 코드 내에 할당된 자격 증명은 값이 리터럴인 경우에만 일치하며, 변수나 함수 호출인 경우는 제외됩니다.
Coroid는 절대 그 값을 보관하지 않습니다.
감지된 값은 감지기에서 곧바로 Coroid의 자격 증명 브로커로 전달되며, 여기서 키가 적용된 지문이 반환되고 값은 삭제됩니다. 지문만 저장되며, 이는 조직별로 키가 적용되므로 다른 조직과 비교하거나 오프라인에서 추측할 수 없습니다.
비밀번호가 표시되어야 할 위치(발견 항목, 검사 결과, 리뷰 댓글, 로그 등)에는 Coroid가 규칙, 길이, 위치만 표시하며, 예시로는[redacted secret: named_credential, 40 characters]입니다. 값의 일부도 표시되지 않으며, 처음 몇 글자조차도 보여주지 않습니다.
Coroid는 찾은 자격 증명을 실제로 작동하는지 확인하려고 시도하지 않습니다.
자격 증명 하나당 발견 항목 하나
여러 커밋에서 발견된 동일한 자격 증명은 발생 횟수가 많은 하나의 발견 항목으로 처리됩니다. 두 개의 저장소에 존재하는 동일한 자격 증명은 저장소별로 각각 하나의 발견 항목이 됩니다. 사용자가 하나를 확인하면 보안 기능이 동일한 자격 증명을 가진 다른 발견 항목들도 함께 표시하여 한 번에 확인할 수 있도록 해줍니다. 이는 자동으로 수행되지 않습니다.
비밀번호는 확인 절차를 거쳐야만 닫힙니다
코드에서 자격 증명을 제거하면 해당 항목은 사라지지만 발견 항목은 열린 상태로 남습니다. 이전에 저장소를 확인했던 사람이라면 해당 정보를 이미 알고 있을 수 있기 때문입니다. 소유자나 관리자가 다음과 같이 조치했음을 확인해야만 발견 항목이 닫힙니다:
- 회전됨또는폐기됨;
- 조치가 이루어진 날짜;
- 선택적 메모.
보안 기능은 누가 언제 확인했는지를 기록하여 발견 항목에 표시합니다: "10월 28일에 회전되었으며, 10월 29일에 Alex가 확인함". 그 후 발견 항목은회전 확인 완료.
유출된 비밀번호 해결 방법
체크리스트 작업 생성프로젝트에 다음 단계를 포함하는 작업을 등록합니다:
- 해당 제공업체에서 자격 증명을 회전하거나 폐기합니다.
- 프로젝트에서 비밀번호를 보관하는 위치로 옮깁니다.
- 코드에서 해당 자격 증명을 제거합니다.
- 보안 기능에서 회전 사실을 확인합니다.
이 작업은 반복되거나 자격 증명을 테스트하지 않습니다. Git 이력을 재작성하지도 않는데, 이력에서 자격 증명을 제거하는 것은 팀의 결정 사항이며, 이로 인해 유출된 자격 증명이 안전해지는 것은 아닙니다.
실제 자격 증명인지 또는 문제없는 항목인지
비밀번호 발견 항목에서 소유자와 관리자는 "이것이 실제 자격 증명입니까?
- 실제 자격 증명는 확인될 때까지 발견 항목을 열린 상태로 유지합니다.
- 문제없는 항목는 발견 항목을 숨기는 허위 양성 예외를 기록하며, 이는 테스트 픽스처의 경우와 같습니다.실제 자격 증명는 해당 예외를 다시 제거합니다.
이러한 답변은 감지기를 보정하는 데에도 도움이 됩니다.
차단
유출된 비밀번호 기능은 기본적으로 관찰 모드로 작동합니다. 감지기가 보정을 마치고 강제 적용이 활성화되어야만 차단이 시작됩니다. 자세한 내용은보호 및 강제 적용.
조직 정책에서 이전에 비밀번호 스캔 기능을 활성화했던 조직의 경우, 새로운 탐지기가 교정 과정을 통과할 때까지 해당 기능의 기존 탐지기 버전으로 인해 계속 차단됩니다. 이전 스캔은 발견 사항을 생성하지 않으므로 예외 처리나 증명서로도 차단된 항목을 우회할 수 없습니다.
조직 기본 설정에서는새로운 비밀번호 차단및 가장 큰 변경 사항이 스캔된 내용은 '유출된 비밀번호' 항목에 포함됩니다.
알림
비밀번호 관련 발견 사항은 아직 알림을 전송하지 않습니다. 해당 내용은 '보안' → '발견 사항' 및 '개요' 페이지에 표시됩니다.
GitHub 비밀번호 스캔
특정 저장소에 대해 GitHub 자체의 비밀번호 스캔 기능이 활성화되어 있으면, 보안 모듈이 해당 경고 내용을 가져올 수 있습니다. GitHub 비밀번호 스캔 경고는 GitHub에서 해당 문제가 해결될 때까지 열린 상태로 유지되므로, 수정 사항을 병합해도 해당 경고가 자동으로 닫히지는 않습니다. 자세한 내용은GitHub 보안 경고.