루비젬 공급망 공격의 위험성 및 유형
루비(Ruby) 젬(gem)을 통한 공급망 공격은 의존성 트리에 악성 코드를 주입하는 방식입니다. 공격자는 인기 젬을 모방하는 오타 스쿼팅(Typosquatting), 합법적인 계정을 해킹하는 의존성 하이재킹(Dependency hijacking), 내부 패키지 이름을 이용하는 의존성 혼동(Dependency confusion) 등으로 개발자의 신뢰를 악용합니다. 젬은 설치 시 임의 코드를 실행하여 자격 증명 탈취, 백도어 설치 등 심각한 피해를 유발할 수 있습니다. 경고 신호로는 갑작스러운 새 릴리스, 난독화된 코드, 불필요한 네트워크 접근, 투명성 없는 관리자 변경 등이 있습니다.
주요 실제 공격 사례
-
rest-client (2019): 관리자 계정 침해 후 악성 버전 배포, 프로덕션 환경에서 암호화폐 채굴.
-
strong_password (2020): 관리자 계정 침해, 감염 서버에서 원격 코드 실행 가능성 발견.
-
Fastlane CI/CD 플러그인 가장 (2025): 실제 플러그인을 가장하여 민감 데이터를 공격자 서버로 전송.
-
한국 그레이햇 마케터 타겟 (2025): 소셜 미디어 자동화 도구로 위장한 60개 이상 악성 젬이 자격 증명 탈취.
Rails 프로젝트 보호 방안
공급망 공격 위험을 줄이기 위해 다음 조치들을 권장합니다.
-
철저한 검토: 의존성 업그레이드 전 변경 로그(Changelog) 및 차이점(diff) 검토, 젬 이름과 소스 확인.
-
지속적인 모니터링:
bundler-audit활용, 젬 버전 고정, 업데이트 모니터링, 하위 의존성 감사 및 잠금. -
체크섬 검증 활성화: Bundler 2.6의 체크섬 검증 기능을 사용합니다.
bundle lock --add-checksums명령으로Gemfile.lock에 각 젬의 암호화 해시를 기록하고, 설치 시 이를 검증하여 젬 변조를 방지합니다.