[보안 권고] 클라우드 자격증명(Credential) 및 GitHub Personal Access Token(PAT) 노출 대응 권고
1. 개요
클라우드 서비스와 DevOps 기반 개발 환경이 확대됨에 따라 Access Key, API Key, Personal Access Token(PAT) 등 다양한 자격증명(Credential)이 소스코드 저장소, 협업 도구 또는 개발자 단말을 통해 노출·탈취되어 주요 정보자원시스템이 침해되는 사례가 지속적으로 증가하고 있습니다.
특히 최근 경찰청 수사를 통해 GitHub의 유효한 개인 액세스 토큰(Personal Access Token, PAT)이 다수 유출된 사실이 확인되었습니다. 자격증명이 공격자에게 노출될 경우 내부 서버, 데이터베이스(DB), 클라우드 콘솔, 코드 저장소, CI/CD 파이프라인 등 핵심 시스템에 대한 무단 접근이 가능해질 수 있으며, 소스코드 탈취, 권한 상승, 공급망 공격(Supply Chain Attack) 등 연쇄적인 2차 피해로 이어질 가능성이 매우 높습니다.
이에 GitHub 저장소 및 클라우드 환경을 운영 중인 조직에서는 자격증명 관리 현황을 즉시 점검하고, 아래 권고사항을 우선적으로 수행하시기 바랍니다.
2. 주요 위협 경로 및 침해 시나리오
1) 주요 노출 및 탈취 경로
공격자는 다음과 같은 경로를 통해 자격증명을 획득할 수 있습니다.
- 소스코드에 Access Key, API Key, PAT 등을 직접 입력(하드코딩)한 경우
- 환경설정 파일(.env), 인증서, Secret 파일 등을 GitHub 저장소에 업로드한 경우
- 메신저, 이메일, Jira, Wiki 등 협업 도구를 통해 자격증명을 공유한 경우
- 개발자 단말이 악성코드에 감염되거나 IDE 확장 프로그램을 통해 자격증명이 탈취된 경우
2) 예상되는 침해 시나리오
자격증명이 노출되면 공격자는 이를 이용하여 GitHub 저장소 또는 클라우드 환경에 접근한 후 소스코드와 설정 정보를 확보할 수 있습니다. 이후 추가 자격증명을 수집하거나 권한을 확대하여 내부 시스템으로 횡적 이동(Lateral Movement)을 수행할 수 있으며, 최종적으로는 CI/CD 환경을 장악하여 악성코드를 배포하는 공급망 공격으로 이어질 가능성이 있습니다.
특히 GitHub 저장소에 자격증명이 포함된 파일을 실수로 업로드한 후 해당 파일을 삭제하거나 새로운 커밋으로 덮어쓰더라도 Git의 형상관리 이력(Commit History)에는 해당 정보가 그대로 남아 있습니다. 또한 Git Filter-Repo 또는 BFG Repo-Cleaner 등을 이용하여 저장소 이력을 정리하더라도 이미 외부에서 저장소를 복제(Clone)한 경우에는 정보가 회수되지 않을 수 있습니다.
따라서 자격증명이 노출된 사실이 확인되었거나 노출이 의심되는 경우에는 저장소 수정만으로 대응을 완료해서는 안 되며, 해당 자격증명을 즉시 무효화(Revoke)하고 새로운 자격증명으로 재발급하는 것이 가장 우선되어야 합니다.
3. 긴급 대응 및 침해 여부 점검(Action Item)
현재 GitHub 및 클라우드 환경을 운영 중인 조직은 다음 사항을 우선적으로 점검하시기 바랍니다.
1) 무단 접근 여부 점검
GitHub 계정 및 조직(Organization)의 Audit Log와 Security Log를 검토하여 최근 1~3개월 동안 비정상적인 접근이나 관리 행위가 있었는지 확인하시기 바랍니다.
다음과 같은 행위가 확인되는 경우 침해 가능성을 의심해야 합니다.
- 평소 접속하지 않던 국가 또는 IP 주소에서 로그인한 기록
- 단시간 내 다수 저장소를 조회하거나 Clone한 기록
- 업무 시간 외(심야·주말)에 대량의 Push 또는 다운로드가 수행된 기록
- Personal Access Token(PAT) 생성 또는 재생성 기록
- OAuth App 승인 또는 GitHub App 설치 기록
- Deploy Key 또는 Repository Secret 변경 기록
또한 AWS CloudTrail, Azure Monitor, Google Cloud Audit Logs 등 클라우드 감사 로그를 분석하여 다음과 같은 이상 행위가 있었는지 확인하시기 바랍니다.
- IAM 사용자 또는 Access Key 생성
- 역할(Role) 생성 또는 권한 정책 변경
- STS AssumeRole 호출 증가
- Secrets Manager 또는 Key Vault 접근 증가
- 대량의 클라우드 리소스 생성
- 보안 정책(Security Group, Firewall 등) 변경
2) 노출 의심 자격증명 즉시 폐기 및 재발급
유출 또는 노출이 의심되는 GitHub Personal Access Token(PAT)은 즉시 폐기(Revoke)하고 새로운 토큰을 발급하시기 바랍니다.
또한 소스코드에 포함되어 있던 다음과 같은 자격증명도 모두 새로운 값으로 교체하여야 합니다.
- 데이터베이스(DB) 계정 및 비밀번호
- AWS Access Key
- Azure Service Principal
- Google Cloud Service Account Key
- API Key
- SSH Key
- 인증서 및 기타 서비스 계정
단순히 비밀번호만 변경하는 것이 아니라 기존 자격증명을 완전히 무효화한 후 새로운 자격증명을 발급하는 것을 권장합니다.
4. 재발 방지를 위한 보안 권고사항
1) 자격증명 관리 체계 강화
소스코드 내 자격증명 하드코딩을 금지하고 Secret Manager 기반의 관리 체계를 적용하시기 바랍니다.
AWS Secrets Manager, Azure Key Vault, Google Secret Manager 또는 HashiCorp Vault와 같은 비밀정보 관리 솔루션을 활용하여 실행 시점(Runtime)에 필요한 자격증명을 안전하게 주입하는 방식을 권장합니다.
또한 .gitignore 설정을 통해 환경설정 파일(.env), 인증서, 개인키 등이 저장소에 업로드되지 않도록 관리하여야 합니다.
GitHub Secret Scanning 및 Push Protection 기능을 활성화하고, Private 및 Internal Repository에도 해당 기능이 적용되는지 반드시 확인하시기 바랍니다.
아울러 메신저, 이메일, Jira, Wiki 등 협업 도구를 통한 자격증명 공유를 금지하고 기존 공유 이력도 함께 점검하시기 바랍니다.
2) 임시 자격증명 및 최소 권한 원칙 적용
장기간 사용되는(Long-lived) Access Key 사용을 최소화하고 IAM Role, OIDC Federation, Workload Identity 등 자동 만료되는 임시 자격증명 사용을 권장합니다.
또한 클라우드 콘솔, GitHub, 데이터베이스, CI/CD 시스템 등 주요 정보자원에는 다중인증(MFA)을 반드시 적용하여 계정 탈취 위험을 최소화하여야 합니다.
Personal Access Token(PAT)은 필요한 저장소와 권한(Scope)에 한하여 최소한으로 발급하고, Full Repository 권한을 가진 토큰 사용은 지양하시기 바랍니다.
3) 접근통제 및 개발 환경 보안 강화
GitHub 조직 및 클라우드 관리 콘솔에는 가능한 경우 IP Allow List 또는 VPN 기반 접근통제를 적용하여 허용된 네트워크에서만 접근할 수 있도록 구성하시기 바랍니다.
개발자 단말에는 최신 보안 패치를 유지하고, VS Code 등 IDE 확장 프로그램 및 오픈소스 패키지는 신뢰할 수 있는 배포처를 통해 설치하며 버전을 관리하여 사용하시기 바랍니다.
또한 개발자 단말에 대한 악성코드 감염 및 정보 탈취를 방지하기 위해 안랩 V3, EDR, MDS, XDR 등 엔드포인트 보안 솔루션을 운영하고 지속적인 이상 행위 모니터링을 수행하시기 바랍니다.
4) 개발 및 운영 프로세스 개선
코드 리뷰(Code Review) 과정에서 자격증명이 포함되어 있는지 확인하는 절차를 운영하고, Secret Scanning 도구를 활용하여 저장소를 주기적으로 점검하시기 바랍니다.
장기간 사용 중인 Access Key, API Key, PAT 등에 대해서는 정기적인 교체(Rotation) 정책을 수립하고, 더 이상 사용하지 않는 자격증명은 즉시 폐기하여 관리하시기 바랍니다.
또한 오픈소스 의존성 및 CI/CD 파이프라인에 대한 보안 점검을 정기적으로 수행하여 공급망 공격 가능성을 최소화하고, 개발자를 대상으로 자격증명 관리 및 안전한 개발보안(Secure Coding)에 대한 교육을 지속적으로 실시하시기 바랍니다.
5. 결론
클라우드 환경에서는 하나의 자격증명 노출만으로도 소스코드 저장소, 클라우드 인프라, 데이터베이스, 배포 시스템 등 조직의 핵심 자산이 연쇄적으로 침해될 수 있습니다. 특히 GitHub Personal Access Token(PAT)과 클라우드 Access Key는 공격자가 내부 환경으로 진입하기 위한 주요 표적이 되고 있습니다.
따라서 조직에서는 자격증명의 노출을 사전에 방지할 수 있는 관리 체계를 구축하고, 최소 권한 원칙과 임시 자격증명 사용을 확대하며, 감사 로그 모니터링과 정기적인 자격증명 교체 정책을 운영하는 등 자격증명 중심(Credential-Centric)의 보안 관리 체계를 강화하여야 합니다.
■ 침해사고 발생 또는 의심 시
침해사고가 확인되거나 의심되는 경우, 신속한 대응을 위해
한국인터넷진흥원 인터넷침해대응센터(KrCERT) 또는 관할 기관을 통해 신고해 주시기 바랍니다.
- 한국인터넷진흥원 인터넷침해대응센터 종합상황실: 02-405-4911~5, certgen@krcert.or.kr
- ['KISA 인터넷보호나라&KrCERT' 홈페이지] → 침해사고 신고