Skip to main content

비밀 유출 위험

리포지토리에 커밋된 API 키, 암호 및 토큰과 같은 비밀은 권한이 없는 사용자가 악용하여 조직에 보안, 규정 준수 및 재정적 위험을 초래할 수 있습니다.

비밀이란?

비밀은 중요한 시스템 및 데이터에 대한 액세스 권한을 부여하는 자격 증명입니다. 일반적인 예는 다음과 같습니다.

  • 외부 서비스를 사용하여 인증하는 데 사용되는 API 키 및 토큰
  • 데이터베이스 암호 및 연결 문자열
  • 클라우드 공급자 자격 증명 및 서비스 계정 토큰
  • 인증서 및 암호화 키

비밀이 리포지토리에 커밋되면 소스 코드 또는 구성 파일에 직접 포함된 하드 코딩된 자격 증명 이 됩니다. 이러한 하드 코딩된 비밀은 Git 기록의 일부가 되며 최신 커밋에서 제거된 후에도 계속 액세스할 수 있습니다. 즉, 자격 증명 누수 문제를 해결하려면 파일을 삭제하는 것 이상이 필요합니다. 또한 무단 액세스를 방지하려면 자격 증명을 해지하고 바꿔야 합니다.

비밀이 노출되는 방법

          **비밀 스프롤** 은 중앙 집중식 관리 또는 가시성 없이 리포지토리, 팀 및 시스템에서 자격 증명이 확산될 때 발생합니다. 이렇게 하면 존재하는 비밀, 사용되는 위치 및 노출 여부를 추적하기가 어렵습니다. 비밀은 보통 몇 가지 패턴을 통해 리포지토리에 유입됩니다.

개발 워크플로

  • 로컬 테스트 중에 하드 코딩된 자격 증명이 추가되고 실수로 커밋됨
  • 파일 또는 코드 기반 인프라 템플릿과 같은 .env 구성 파일의 비밀
  • 설명서, wiki 또는 README 파일의 실제 API 키 또는 토큰을 포함하는 자격 증명 예제

리포지토리 관리

  • 잊어버렸지만 여전히 활성 상태인 자격 증명을 포함하는 레거시 리포지토리
  • 문제, 끌어오기 요청 주석, 토론 또는 요지에서 GitHub 공유되는 비밀
  • 외부 기여자 또는 계약자가 도입한 자격 증명

버전 제어 전파

  • 비밀은 현재 코드에서 제거된 후에도 Git 기록에 유지됩니다.
  • 자격 증명은 포크된 리포지토리, 백업 시스템 및 CI/CD 로그에 전파됩니다.
  • 노출된 비밀이 있는 공용 리포지토리는 검색 엔진 및 특수 검사 서비스에 의해 인덱싱됩니다.

보안 위험

노출된 비밀은 여러 유형의 보안 인시던트로 이어질 수 있습니다.

무단 액세스

자격 증명 누수는 권한이 없는 사용자가 시스템에 직접 액세스할 수 있도록 합니다. 일단 노출되면 하드 코딩된 비밀을 악용하여 다음을 수행할 수 있습니다.

  • 유출된 클라우드 공급자 자격 증명을 사용하여 계정에 인프라 또는 서비스 프로비전
  • 손상된 데이터베이스 자격 증명을 통해 중요한 고객 또는 조직 데이터에 액세스
  • 노출된 서비스 계정 토큰을 통해 프로덕션 시스템에 접근하기

데이터 위반

자격 증명 누수는 권한이 없는 사용자에게 시스템에 직접 액세스하여 데이터 침해를 초래합니다. 공격자가 노출된 자격 증명을 사용하여 액세스 권한을 얻게 되면 중요한 데이터를 유출하고 중요한 정보를 수정하거나 삭제하며 고객 신뢰를 손상시킬 수 있습니다. 데이터 침해에는 자격 증명 해지, 시스템 수정 및 위반 범위 및 영향 평가를 비롯한 즉각적인 인시던트 대응이 필요합니다.

공급망 공격

노출된 패키지 레지스트리 토큰을 사용하여 악성 버전의 소프트웨어를 게시하여 패키지에 의존하는 다운스트림 사용자 및 조직에 영향을 줄 수 있습니다.

재정적 영향

노출된 비밀은 여러 가지 방법으로 조직의 비용을 절감할 수 있습니다.

  •         **예기치 않은 클라우드 청구서**: 유출된 API 키를 통해 공격자가 클라우드 리소스를 사용할 수 있습니다. 컴퓨팅 인스턴스를 실행하거나, 데이터를 저장하거나, 계정에서 암호화폐를 채굴하여 큰 대금 청구서를 발생시킬 수 있습니다.
    
  •         **인시던트 대응**: 위반 조사, 자격 증명 회전 및 감사 시스템에는 상당한 엔지니어링 시간과 리소스가 필요합니다.
    
  •         **법적 비용**: 데이터 위반으로 인해 벌금, 법적 수수료 및 알림 비용이 발생할 수 있습니다.
    
  •         **장기적인 손상**: 보안 사고가 공개된 후 고객 손실, 높은 보험 비용 및 비즈니스 기회를 놓쳤습니다.
    

비밀 보안을 유지하기 위한 GitHub

          GitHub 에서는 비밀 누출을 방지, 감지 및 수정하는 데 도움이 되는 도구를 제공합니다.

1. 새 비밀이 커밋되지 않도록 방지

          **푸시 보호를** 사용하도록 설정하여 작업 중에 `git push` 코드를 검색하고 검색된 비밀이 포함된 커밋을 차단한 후 리포지토리에 입력합니다. 이렇게 하면 하드 코딩된 자격 증명이 코드베이스에 추가되지 않도록 방지하고 위험 시점에 개발자에게 실시간 피드백을 제공하여 알려진 서비스에 대한 공급자 패턴과 프라이빗 키 및 일반 API 키와 같은 비 공급자 패턴을 모두 다룹니다.

개인 개발자가 조직 정책에 상관없이 자신의 계정에 대해 푸시 보호를 활성화하여 GitHub의 모든 푸시를 보호하도록 권장합니다. 이렇게 하면 리포지토리에 도달하기 전에 유출된 자격 증명을 catch하여 비밀 확산을 방지할 수 있습니다.

2. 기존 비밀 검색

          **
          secret scanning
          ** 디코딩된 비밀에 대한 리포지토리를 지속적으로 모니터링하고 자격 증명이 검색되면 경고를 생성하여 손상된 자격 증명을 신속하게 해지하고 회전할 수 있습니다. 공급자 패턴의 기본 검색 외에도 검색을 비 공급자 패턴으로 확장하고 조직별 비밀에 대한 사용자 지정 패턴을 정의할 수 있습니다. 이렇게 하면 조직 전반에 걸쳐 비밀 데이터 확산을 파악할 수 있습니다.

다음 단계

비밀 누출로부터 조직을 보호하려면 다음을 수행합니다.

  1. 무료 비밀 위험 평가를 실행하여 현재 노출을 이해합니다. 보안 위험 평가 실행

  2. 푸시 보호를 사용하도록 설정하여 새 비밀이 커밋되지 않도록 합니다.

  3.        secret scanning을(를) 사용하여 기존 비밀 누수를 탐지하기 시작하십시오.
    
  4. 개발 팀에 대한 보안 자격 증명 관리 사례를 설정합니다.

'의 비밀 보안 기능에 대한 GitHub개요는 GitHub 비밀 보안 정보을 참조하세요.