GitHub 전반의 오픈 소스 공급망 보안 강화 (새 탭에서 열림)
공격자들은 GitHub Actions 워크플로를 침해해 API 키 같은 비밀을 탈취한 뒤, 악성 패키지를 배포하고 더 많은 프로젝트로 공격을 확산시키고 있다. 이에 대응하려면 Actions 워크플로를 CodeQL로 점검하고, 서드파티 액션을 커밋 SHA로 고정하며, 장기 비밀 대신 OIDC 기반 인증과 trusted publishing을 사용해야 한다. GitHub는 npm 악성코드 탐지와 Actions·npm 보안 로드맵을 강화하고 있지만, 오픈소스 생태계 전반의 지속적인 협력이 필요하다고 강조한다.
GitHub Actions 워크플로가 공격의 출발점
- 최근 오픈소스 공급망 공격은 GitHub Actions 워크플로의 취약점을 찾는 방식으로 시작되는 경우가 많다.
- 공격자는 워크플로에서 API 키, 토큰, 배포 자격 증명 등의 비밀을 탈취한다.
- 탈취한 자격 증명으로:
- 공격자가 통제하는 환경에서 악성 패키지를 배포하고
- 해당 패키지를 이용해 다른 프로젝트와 계정으로 공격을 확산한다.
지금 적용할 수 있는 Actions 보안 조치
- 공개 저장소에서 무료로 사용할 수 있는 CodeQL의 GitHub Actions 분석 기능을 활성화한다.
- 워크플로 구현상의 보안 취약점과 보안 모범 사례 위반을 점검할 수 있다.
pull_request_target을 사용하지 않는다.- 외부 기여자의 코드가 높은 권한의 워크플로 컨텍스트에서 실행될 위험이 있다.
- 서드파티 GitHub Actions를 전체 길이의 커밋 SHA로 고정한다.
- 태그나 브랜치는 이후 다른 코드로 변경될 수 있지만, SHA 고정은 특정 코드 버전을 보장한다.
- 이 변경은 저장소 관리자나 Dependabot이 수행해야 하며, 외부 Pull Request가 액션 버전 고정을 바꾸려 하면 주의해야 한다.
- 사용자 입력을 셸 명령이나 스크립트에 직접 삽입하지 않는다.
- 이 방식은 스크립트 인젝션으로 이어질 수 있다.
- 침해된 의존성은 GitHub Advisory Database에서 확인한다.
- Dependabot을 사용해 악성 또는 취약한 의존성에 대한 알림을 받는다.
비밀 대신 OIDC와 trusted publishing 사용
- 워크플로에 장기 보관되는 비밀을 넣는 대신, OpenID Connect(OIDC) 토큰을 사용할 수 있다.
- OIDC 토큰에는 실행 중인 워크로드의 신원이 포함되므로, 클라우드 제공업체·패키지 저장소·호스팅 서비스가 해당 워크플로를 검증하고 권한을 부여할 수 있다.
- GitHub와 OpenSSF는 이를 패키지 저장소의 trusted publishing으로 확산하고 있다.
- 현재 npm, PyPI, NuGet, RubyGems, Crates 등 여러 저장소에서 지원된다.
- trusted publishing의 장점:
- 빌드 파이프라인에서 장기 비밀을 제거한다.
- 패키지가 어떤 신뢰된 워크플로에서 배포됐는지 확인할 수 있다.
- 패키지가 갑자기 trusted publishing을 중단하면, 탈취된 자격 증명을 이용한 공격 가능성을 조사하는 신호가 된다.
npm의 악성 패키지 탐지
- npm에서는 매일 3만 개가 넘는 패키지가 배포된다.
- GitHub는 모든 npm 패키지 버전을 악성코드 관점에서 검사한다.
- 탐지 규칙은 공격 방식의 변화에 맞춰 지속적으로 개선된다.
- 매일 수백 개의 신규 배포 패키지에서 악성 코드가 발견될 수 있으며, 실제 조치 전에는 사람이 양성 여부를 검토한다.
- 오탐률이 1%만 되어도 매일 수백 개의 정상 패키지 배포가 중단될 수 있으므로, 자동 탐지와 사람의 검증 사이 균형이 중요하다.
Shai-Hulud 이후의 보안 로드맵
- 2025년 말 발생한 Shai-Hulud 공격은 npm 보안 로드맵을 재정비하는 계기가 됐다.
- GitHub는 다음 작업을 가속했다.
- npm trusted publishing 확대
- 악성코드 탐지 및 제거 기능 강화
- 오픈소스 유지관리자와의 보안 요구사항 논의
- 보안 변경은 기존 워크플로를 수정하게 만들거나 하위 호환성을 깨뜨릴 수 있으므로, GitHub는 생태계가 원활하게 전환할 수 있도록 지원할 계획이다.
- 최근 공격을 계기로 GitHub Actions 보안 로드맵도 재검토하고, 이미 진행 중인 보안 기능의 출시를 앞당기고 있다.
오픈소스 생태계의 공동 대응
- 오픈소스는 전 세계가 공유하는 공공재인 만큼 공격이 앞으로도 계속될 가능성이 높다.
- GitHub는 npm과 GitHub Actions를 비롯해 향후 등장할 새로운 공격 경로까지 방어 범위를 확대하겠다고 밝혔다.
- 효과적인 보안 기능을 만들기 위해 유지관리자와 커뮤니티의 피드백이 중요하다.
실무적으로는 먼저 CodeQL로 Actions를 검사하고, pull_request_target 제거·커밋 SHA 고정·스크립트 인젝션 점검을 진행하는 것이 좋다. 이후 가능하면 OIDC와 trusted publishing으로 배포 인증을 전환해, 탈취 가능한 장기 비밀 자체를 줄여야 한다.