GitHub Actions 보안의 새로운 지평, Granite로 만나는 세밀한 권한 통제

GitHub Actions 보안의 새로운 지평, Granite로 만나는 세밀한 권한 통제
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

GitHub Actions의 기존 Job 수준 권한 모델은 너무 거칠어 권한 남용 공격에 취약합니다. 이 논문은 Step 수준에서 실시간으로 권한을 검사하고 제어하는 런타임 시스템 ‘Granite’를 소개합니다. Granite는 프록시 기반으로 동작하여, 오버프라이빌리지된 Job의 공격 표면을 크게 줄이고, 실제 워크플로우에서 평균 55%의 오버헤드로 효과적인 보안을 제공합니다.

상세 분석

이 논문이 제기하는 근본적인 문제는 GitHub Actions의 권한 모델이 ‘Job’이라는 단위로만 제어된다는 점입니다. 하나의 Job 내에 있는 모든 Step(단계)은 동일한 권한 집합을 공유합니다. 이는 최소 권한의 원칙을 심각하게 위반합니다. 예를 들어, 코드를 체크아웃하는 Step과 린팅을 수행하는 Step이 같은 Job에 있다면, 악의적이거나 취약한 린팅 액션이 코드 저장소에 대한 쓰기 권한까지 획득하게 되어 소프트웨어 공급망 공격으로 이어질 수 있습니다.

기존 해결 시도인 GitHub의 모니터/어드바이저 시스템이나 Step Security의 정적 분석 도구는 한계가 있습니다. 전자는 권한 사용을 사후에 제안할 뿐 실시간 차단이 불가능하며, 후자는 동적 컨텍스트(예: 입력 매개변수)를 고려하지 못해 정확한 최소 권한 집합을 추론하기 어렵습니다.

Granite의 기술적 혁신은 ‘런타임 시 Step 수준의 정책 집행’에 있습니다. 구현 방식은 액션 타입에 따라 다릅니다.

  1. JavaScript 액션: GitHub Runner와의 통신을 가로채는 프록시 기반 Shim 레이어를 도입합니다. 이 Shim은 액션이 GitHub API를 호출할 때마다 Step별로 미리 정의된 정책과 비교하여 권한 위반을 차단합니다.
  2. Composite 액션: 독립된 컨테이너 환경 내에 HTTP 프록시를 구축하여, 컨테이너 내부에서 발생하는 모든 외부 네트워크 요청을 가로채고 검사합니다.

이러한 설계는 기존 워크플로우의 구문을 변경할 필요 없이 투명하게 동작한다는 장점이 있습니다. 평가 결과, 분석된 12,916개 Job 중 52.7%가 Granite를 통해 보호될 수 있었으며, 실제 공격 시나리오에서 평균 83.3%의 공격 표면 감소 효과를 입증했습니다. 성능 오버헤드는 JavaScript 액션 평균 14%(2.42초), Composite 액션 평균 94%(4.92초)로, Composite 액션의 상대적으로 높은 오버헤드는 컨테이너 격리 및 프록시 설정 비용에서 기인합니다. 이는 보안 강화에 따른 합리적인 트레이드오프로 볼 수 있습니다.

Granite는 CI/CD 파이프라인 보안을 패치 수준이 아닌, 설계 단계에서부터 재고하도록 하는 중요한 계기를 제공합니다. 실용성과 효과를 입증함으로써, GitHub와 같은 플랫폼 제공자에게 더 세밀한 기본 권한 모델의 필요성을 제기하는 의미 있는 연구입니다.


댓글 및 학술 토론

Loading comments...

의견 남기기