GitHub Secret Protection (1) - 시크릿
GitHub 를 분석한 글
GitHub Secret Protection (1) - 시크릿
이 내용은 Github 공식문서를 참고하여 정리한 글 입니다.
https://docs.github.com/ko/code-security/concepts/secret-security/secret-leakage-risks
1. 시크릿
- 시크릿은 중요한 시스템, 데이터에 대한 접근 권한을 부여할 수 있는 자격증명을 뜻한다.
- 외부 서비스를 사용할 때 인증이 필요한 API Key, 토큰
- 데이터베이스 접속 정보(아이디, 패스워드, 연결URL)
- 클라우드 공급자 자격 증명, 서비스 계정 토큰 정보
- 인증서 및 암호화키
- 시크릿이 리포지토리에 커밋되면 Git 히스토리의 일부가 되어 하드 코딩된 자격증명이 된다. 즉시 자격 증명을 폐기(revoke)하고 교체(rotate)해야 한다.
2. 시크릿이 유출되는 경로
- 비밀 스프롤(secret sprawl): 관리·모니터링 없이 자격 증명이 리포지토리·팀·시스템 전반으로 확산되면 존재·사용처·노출 여부 추적 불가하다.
1) 개발 작업
- 로컬 테스트 도중 하드 코딩된 자격 증명이 소스코드에 추가되고 커밋되어 노출된다.
- 파일 또는 인프라 템플릿과 같은
.env설정 파일이 커밋되어 노출된다. - 리드미 파일, 위키, 기술문서의 시크릿을 포함하는 자격 증명 예제가 노출된다.
2) 리포지토리 관리
- 방치된 레거시 리포지토리에 남아있는, 잊혀졌지만 여전히 유효한 시크릿이 노출될 수 있다.
- GitHub 이슈, 풀리퀘스트, 토론, 코드 조각(gist)에 시크릿이 노출될 수 있다.
- 외부 기여자나 계약자가 커밋해 들여온 시크릿은 노출될 수 있다.
3) 버전 관리
- 시크릿은 코드에 커밋된 후, 제거되어도 Git 히스토리에 유지된다.
- 자격 증명은 포크된 리포지토리, 백업 시스템, CI/CD 로그로 외부에 전파/복제될 수 있다.
- 퍼블릭 리포지토리에는 검색 엔진과 전문 스캐닝 서비스에 인덱싱되어 노출된 시크릿은 항상 노출될 위험이 존재한다.
3. 유출 시 보안 위험
1) 무단 접근
- 권한이 없는 사용자가 시스템에 직접 액세스할 수 있다.
- 유출된 시크릿을 통하여 내 계정에 인프라·서비스를 프로비저닝할 수 있고
- 중요한 데이터에 접근할 수 있고
- 실제 운영중인 시스템에 접근할 수 있다.
2) 데이터 유출/침해
- 권한이 없는 사용자가 데이터에 직접 접근하여 데이터를 유출하고, 무결성을 훼손하거나 손상시킬 수 있다.
3) 공급망 공격
- 노출된 패키지 레지스트리 토큰으로 악성 버전을 게시해 다운스트림 사용자에게 배포할 수 있다.
4) 재정적 영향
- 유출된 시크릿을 통하여 무단으로 리소스를 사용하여 많은 요금을 발생시킬 수 있다.
- 사고 발생시 사고 대응과 법적 비용으로 상당한 시간과 리소스가 필요하다.
- 많은 고객이 이탈하고, 많은 비즈니스 기회를 잃게 된다.
4. GitHub의 시크릿 보안
1) 푸시 보호
- GitHub은 애초에 리포지토리에 노출되지 않도록 시크릿이 포함된 커밋을 푸시하지 못하도록 사고를 미연에 방지한다.
- 위험 시점에 개발자에게 실시간 피드백을 제공한다.
- 알려진 서비스에 대한 공급자 패턴과, 비밀키, 일반 API 키 같은 일반 패턴을 모두 다룬다.
1 2 3 4
AKIA3F7K2M9QPLXV8N4T ← AWS (AKIA로 시작, 20자) ghp_a8Kd92mZx1QpLv... ← GitHub PAT (ghp_ 접두어) sk-ant-api03-... ← Anthropic xoxb-... ← Slack bot token
- 모든 시크릿 유형이 기본적으로 푸시 보호되지는 않으며, 위험과 노이즈에 대한 허용 범위에 따라 조직이 직접 구성해야 한다.
2) 기존 시크릿 검색
- 시크릿 검색을 통하여 지속적으로 모니터링한다.
- 만약, 노출이 확인되었을 경우 신속하게 폐기하고 교체할 수 있다.
- 시크릿 사용자 지정 패턴을 정의할 수 있으며, 조직 전반에 걸쳐 시크릿을 검색할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.