GitHub AI & ML

GitHub의 시크릿 탐지 모델: 더 적은 노이즈로 더 많은 시크릿 찾기

GitHub의 컨텍스트 인식 시크릿 분류기는 탐지 품질을 개선하여 가중 수용률을 11.5% 높이고, 중간 스캔 실행 시간을 86% 단축했습니다. GitHub의 시크릿 탐지 모델: 더 적은 노이즈로 더 많은 시크릿 찾기 게시물은 The GitHub Blog 에서 먼저 게재되었습니다.

GitHub Copilot app for Beginners: Teach Copilot your codebase
이미지 출처 · GitHub AI & ML
11.5%

더 높은 수용률

소유자 가중 알림 정밀도

86%

더 낮은 중간 스캔 실행 시간

푸시 후 스캔

98%

더 낮은 서빙 비용

컴팩트 모델 vs. 원격 LLM 호출

시크릿 스캐닝은 개발자가 탐지 결과를 신뢰할 때 가장 효과적입니다. 너무 적게 탐지하면 실제 자격 증명이 저장소에 남아 있을 수 있습니다. 너무 자주 알림을 보내면 개발자가 시크릿이 아닌 문자열을 조사하는 데 시간을 소모하게 됩니다.

일반(generic) 시크릿은 이러한 균형을 특히 어렵게 만듭니다. 동일한 문자열이 실제 자격 증명일 수도 있고 문서화용 플레이스홀더일 수도 있기 때문에, 이를 탐지하려면 주변 코드와 텍스트에 대한 이해가 필요합니다.

이 과제를 해결하기 위해 우리는 GitHub의 제품 요구 사항에 맞춘 시크릿 분류기를 학습시켰습니다. 즉, 대규모 스캐닝의 속도와 효율성 요구 사항을 충족하면서 실제 자격 증명과 유사 항목을 구분하는 것입니다.

우리의 동반 게시물인 시크릿 보호는 소프트웨어와 함께 확장되어야 합니다에서는 시크릿 보호가 AI 가속 개발 속도를 따라잡아야 하는 이유를 설명했습니다. 이번 글에서는 그 노력을 뒷받침하는 컨텍스트 인식 분류기의 이면을 공개합니다. 더 적은 노이즈로 더 많은 실제 시크릿을 찾기 위해 이를 어떻게 설계, 학습, 평가했는지 소개합니다.

우리가 활성화한 것들

GitHub 시크릿 스캐닝은 두 가지 핵심 시점에 작동합니다:

  • 푸시 보호 는 푸시가 수락되기 전에 변경 사항을 스캔하여 시크릿이 저장소에 들어가는 것을 방지하고, 개발자가 탐지 결과를 처리할 기회를 제공합니다.
  • 푸시 후 스캔 은 코드가 커밋된 후에 작동하며, 저장소 콘텐츠를 지속적으로 스캔하고 잠재적 시크릿이 탐지되면 알림을 생성하여 개발자와 보안 팀이 이를 조사하고 해결할 수 있도록 합니다.

우리는 이전의 LLM 기반 파이프라인에 비해 중간 푸시 후 스캔 실행 시간을 86% 단축하는 빠른 분류기를 개발했습니다. 이러한 효율성 덕분에 일반 시크릿 탐지를 푸시 보호로 확장하는 것이 실용적으로 가능해졌으며, 코드가 커밋된 후에만이 아니라 개발자가 변경 사항을 푸시하기 전에 결과를 반환할 수 있게 되었습니다.

모델이 파일의 5번째 줄에서 시크릿을 탐지한 후 푸시 보호 모델이 파일의 5번째 줄에서 시크릿을 탐지한 후 푸시 보호가 이를 차단하는 모습

시크릿 탐지가 어려운 이유

구조화된 자격 증명은 종종 고유한 접두사, 길이, 알파벳 또는 체크섬을 포함합니다. 일반 시크릿은 그렇지 않을 수 있습니다. 이들의 구문은 빌드 식별자, 체크섬, 에셋 해시, 샘플 값 및 기타 민감하지 않은 문자열과 겹칩니다. 컨텍스트가 결정적인 신호입니다.

실제 자격 증명일 가능성 높음무해한 유사 항목일 가능성 높음
프로덕션 데이터베이스 URL 옆에 할당된 비밀번호테스트 픽스처에 있는 동일한 비밀번호 형태의 값
배포 구성에 있는 연결 문자열설정 가이드에 있는 localhost 연결 문자열
API 자격 증명에 바인딩된 고엔트로피 값고엔트로피 체크섬, 빌드 ID 또는 애셋 해시

이러한 사례들은 하드 네거티브(hard negatives)입니다: 자격 증명 패턴과 일치하지만 실제로 사용 가능한 자격 증명은 아닌 문자열들입니다. 규칙을 더 추가하면 일부를 억제할 수 있지만, 예외가 하나씩 늘어날 때마다 진짜 시크릿을 놓칠 위험이 커집니다. 대신 학습된 분류기는 파일 경로, 시크릿 유형, 변수 이름, 그리고 주변의 코드나 텍스트와 같은 신호를 활용할 수 있습니다.

그래서 우리는 2단계 파이프라인을 사용하는 새로운 스캐너를 출시했습니다:

  1. 후보 생성: 정규식 필터가 높은 재현율(recall)로 콘텐츠에서 잠재적 시크릿을 검사합니다. 이 단계는 자격 증명과 유사한 패턴들의 광범위한 계열을 빠르고 결정론적으로 잡아내는 데 최적화되어 있습니다.
  2. 컨텍스트 인식 분류(Context-aware classification): 파인튜닝된 ModernBERT 분류기가 각 후보와 그 주변 컨텍스트를 평가합니다. 이 모델은 플레이스홀더 값, 예제, 문서 스니펫, 생성된 콘텐츠, 비민감 식별자를 포함하여 실제 시크릿과 오탐을 구분하는 신호를 인식하도록 훈련되었습니다. 모델이 작고 우리 추론 인프라에서 효율적으로 실행되기 때문에, LLM 기반 파이프라인보다 서빙 비용이 훨씬 적게 들고 확장도 더 간단합니다.

효과:

  • 사용자 수용률 11.5% 향상으로 오탐 감소.
  • 푸시 후 시크릿 탐지 실행 시간 86% 단축.
  • LLM 기반 파이프라인 대비 98% 이상의 비용 절감.

우리 파이프라인의 작동 방식

콘텐츠를 스캔할 때 정규식 패턴이 넓은 그물을 던져 자격 증명처럼 보이는 모든 것에 플래그를 지정하므로, 초기 단계에서 실제 시크릿이 놓치지 않습니다. 그런 다음 각 후보는 파인튜닝된 ModernBERT 분류기로 전달되며, 분류기는 값을 파일 경로, 변수명, 주변 코드와 함께 읽습니다. 분류기는 실제 시크릿일 가능성을 추정합니다. 높은 확신도의 발견 항목은 알림으로 전환되고, 플레이스홀더, 테스트 픽스처, 체크섬과 같은 유사 항목은 개발자에게 도달하기 전에 걸러집니다.

STEP 1

스캔

저장소 콘텐츠, 커밋, 풀 리퀘스트 및 기타 스캔 대상.

STEP 2

후보 생성

정규식 패턴이 가능한 토큰, 키, 자격 증명 유사 문자열을 식별합니다.

STEP 3

분류

파인튜닝된 ModernBERT가 후보 + 컨텍스트를 평가하고 실제 시크릿일 가능성을 부여합니다.

STEP 4

알림 또는 억제

높은 확신도의 발견 항목은 다음 단계로 진행되고, 오탐으로 보이는 항목은 필터링됩니다.

중요한 설계 선택은 모델이 결정론적 스캐닝을 대체하지 않는다는 점입니다. 대신 그것을 보완합니다. 후보 문자열을 빠르게 찾는 도구로는 정규식이 여전히 적합합니다. 분류기는 머신 러닝이 가장 큰 효과를 발휘하는 지점, 즉 "시크릿처럼 보임"과 "실제 시크릿일 가능성이 높음"을 구분하는 데 사용됩니다.

분류기 모델은 "시크릿처럼 보임"과 "실제 시크릿일 가능성이 높음"을 구분하기 위해 최선을 다합니다.

하드 네거티브 문제: 거의 진짜처럼 보이는 시크릿

대부분의 오탐은 무작위가 아닙니다. 그것들은 하드 네거티브(hard negatives), 즉 자격 증명 패턴과 일치하지만 사용 가능한 자격 증명이 아닌 문자열입니다. 예로는 문서 플레이스홀더, 테스트의 장난감 예제, 삭제(redacted)된 값, 비민감 ID, 생성된 픽스처가 있습니다. 이러한 사례는 정규식이 일치시키기 쉽지만, 순수 규칙 기반 시스템이 실제 시크릿을 실수로 잃지 않고 억제하기는 어렵습니다.

ModernBERT가 도움이 되는 이유는 자연어 출력 생성의 지연 및 연산 오버헤드 없이 LLM에 필적하는 맥락적 이해를 제공하면서 후보와 주변 코드 및 텍스트를 함께 읽을 수 있기 때문입니다. 예를 들어, "example", "dummy", "fake", "replace-me" 같은 단어로 둘러싸인 후보는 배포 파일의 환경 변수에 할당된 후보보다 위험이 낮을 수 있습니다. 분류기는 엔지니어가 모든 예외를 또 다른 규칙으로 인코딩하도록 요구하는 대신, 레이블이 지정된 예제로부터 이러한 맥락적 차이를 학습합니다.

우리가 ModernBERT를 선택한 이유는 이 워크로드에 매우 적합하기 때문입니다. 컴팩트하고 효율적이며 코드 인접 텍스트에 대한 분류에 잘 맞습니다. 시크릿 스캐닝을 위해 모델은 높은 처리량과 낮은 지연으로 짧은 후보 윈도우에 대해 보정된(calibrated) 결정을 내려야 합니다.

그렇기 때문에 파이프라인의 이 단계에서는 범용 LLM보다 파인튜닝된 인코더 분류기가 더 나은 서빙 형태입니다. 모델은 우리의 결정 경계에서 직접 훈련될 수 있으며, 시크릿 스캐닝 품질에 중요한 동일한 재현율(recall)과 정밀도(precision) 지표로 평가될 수 있습니다.

훈련 방법

과제는 구문만으로는 오해를 일으키는 사례에 대한 대표적인 데이터를 찾는 것이었습니다. 훈련 및 평가 전략은 세 가지 소스를 결합합니다:

  • GitHub 저장소에서 파생된 제품 예제로, 시크릿 탐지 경험의 피드백과 추가적인 사람 검증을 사용합니다.
  • GitHub 저장소 데이터에서 추출한 높은 재현율의 정규식 후보로, 사람이 주석을 단 예제와 커버리지를 확장하는 데 사용된 약한 레이블(weak labels)을 포함합니다.
  • 문서 시크릿, 테스트 픽스처, 공개 키, 체크섬, 구조화된 유사 항목, 근접 미스(near-miss) 쌍과 같은 희소하고 어려운 사례를 대상으로 한 합성 예제.

합성 데이터 행은 포함되기 전에 결정론적 검증과 모델 기반 품질 검토를 통과합니다. 학습은 실제 시크릿, 사실적인 오탐, 그리고 정규식 전용 접근 방식을 자주 혼동시키는 어려운 부정 샘플(hard negatives)을 중점적으로 다룹니다. 각 모델 입력에는 후보 값, 파일 경로, 시크릿 유형, 그리고 제한된 양의 주변 맥락이 포함됩니다. 우리는 오프라인 평가를 통해 임계값을 선택한 후, 보다 광범위한 배포에 앞서 프로덕션 유사 트래픽에서 동작을 검증합니다.

데이터를 분할하기 전에, 동일한 저장소, 후보 값 또는 예제를 공유하는 행들을 그룹화하여 거의 중복되는 항목이 학습 데이터와 평가 데이터 양쪽에 나타나지 않도록 했습니다.

알림 품질에 가장 중요한 사례들에 초점을 맞춘 훈련이 이루어졌습니다: 실제 시크릿, 사실적인 오탐(false positive), 그리고 정규식이 자주 일치시키는 어려운 미스매치(hard negative) 사례들입니다. 입력 표현에는 후보 시크릿 문자열, 파일 경로, 유형 그리고 제한된 양의 주변 맥락이 포함됩니다. 출력은 스캐너가 후보를 계속 진행할지 여부를 결정하는 데 사용하는 분류 점수입니다.

우리는 제품 트레이드오프에 맞춰 최적화했습니다: 재현율을 유지하거나 개선하면서 오탐(false positive)과 서빙 비용을 줄이는 것입니다. 실제로는 분류기 임계값을 오프라인 평가를 통해 선택한 후, 배포 전에 프로덕션과 유사한 트래픽으로 검증한다는 의미입니다.

가장 중요한 학습 원칙은 모델이 혼란을 주는 예시들을 보게 만드는 것이었습니다. 우리는 실제 시크릿과 구문상 유사하지만 의미상 다른 후보들을 포함시켰고, 이를 통해 모델은 시크릿이 어떤 모습인지뿐만 아니라 문맥에서 오탐(false positive)이 어떤 모습인지도 학습하게 됩니다.

학습된 모델은 8비트 양자화와 함께 ONNX 형식으로 내보내져 빠른 추론이 가능합니다.

평가 결과

온라인 결과기존 LLM 파이프라인과의 비교측정 항목
저장소 소유자 가중 수락률11.5% 더 높음 탐지된 결과에 대한 고객 수락률
푸시 후 스캔 실행 시간 중앙값86% 더 낮음 프로덕션 스캔 실행 시간
서빙 비용98% 이상 더 낮음 원격 LLM 호출 대비 소형 분류기의 비용
이전 LLM 파이프라인과 비교한 우리 파인튜닝 모델의 고객 A/B 평가 결과.

우리는 새 파이프라인이 프로덕션에 미치는 영향을 두 단계로 평가했습니다. 먼저 동일한 공개 트래픽에서 프로덕션 베이스라인과 비교한 후, 고객 A/B 실험을 통해 평가했습니다.

  • 오프라인 평가: 푸시 후 스캔에서 새 파이프라인은 이전 LLM 파이프라인보다 정밀도가 13% 더 높고 재현율이 19% 더 높았으며 이는 동일한 공개 트래픽에서 평가했을 때의 결과입니다. 
  • 온라인 평가: 이어서 우리는 이러한 품질 개선이 고객 성과로 이어지는지를 이전 LLM 파이프라인과의 A/B 실험을 통해 검증했습니다. 저장소 소유자 가중 수락률은 11.5% 증가했습니다. 우리는 대량의 알림을 한꺼번에 일괄 처리하는 고객이 단순 평균을 왜곡할 수 있으므로, 그 영향을 줄이기 위해 수락률을 저장소 소유자 기준으로 가중치를 적용했습니다. 

함께 가져가세요

가장 좋은 보안 도구는 개발자가 충분히 신뢰하여 사용하는 도구입니다. 더 높은 정밀도는 주의를 산만하게 하는 알림이 줄어든다는 의미입니다. 더 높은 재현율은 더 많은 실제 시크릿이 잡힌다는 의미입니다. 더 낮은 비용은 스캔 비용이 감당할 수 없을 정도로 비싸지지 않으면서도 커버리지를 계속 개선할 수 있다는 의미입니다.

개발자와 보안 팀 입장에서는 이것이 더 적은 오탐, 그리고 시크릿이 도입될 가능성이 가장 높은 곳, 즉 커밋, 풀 리퀘스트, 일상적인 개발 워크플로에서 더 빠른 피드백으로 이어질 것입니다.

하이브리드 시스템은 강력합니다. Regex는 속도, 투명성, 폭넓은 후보 커버리지를 제공합니다. ModernBERT는 학습된 문맥 이해와 오탐 감소를 제공합니다. 이 제품의 제약 조건에서 이 조합은 어느 한쪽을 단독으로 사용하는 것보다 더 우수한 성능을 냅니다.

또한 모델 크기가 곧 모델의 유용성을 의미하지는 않는다는 점도 배웠습니다. 작업의 범위가 좁고, 결정 경계가 측정 가능하며, 서빙 효율성이 중요한 경우에는 더 작은 파인튜닝된 분류기가 올바른 해답이 될 수 있습니다.

이는 시크릿 스캐닝을 더 정확하고, 확장 가능하며, 사용하기 쉽게 만들기 위한 한 걸음입니다. 앞으로 우리는 두 가지 영역에 집중할 계획입니다:

  • 지속적인 개선 플라이휠 구축. 우리는 프로덕션 피드백 루프를 활용해 새로운 거짓 음성(false negative)과 거짓 양성(false positive)을 식별하고, 실제 환경의 신호를 더 높은 품질의 학습 및 평가 데이터로 전환할 것입니다.
  • 새로운 모델 아키텍처 탐색. 우리는 시크릿 탐지와 추출을 단일 단계로 수행할 수 있는 접근 방식을 연구하여, 정확성과 확장성을 유지하면서 파이프라인의 복잡성을 줄이고자 합니다.

감사의 글

이 새로운 시크릿 스캐너를 위한 학습 데이터, 평가 스위트, 서빙 스택, 그리고 배포 계획을 구축하는 데 도움을 준 GitHub과 Microsoft 전역의 엔지니어링, 과학, 제품 팀들에게 큰 감사를 전합니다.

이 게시물 GitHub의 시크릿 탐지 모델: 적은 노이즈로 더 많은 시크릿 찾기 는 다음에서 처음 게시되었습니다 The GitHub Blog.

원문 출처

GitHub AI & ML

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요