NPM/PyPI, 안전한가? 소스 코드 기반 빌드의 중요성

by DD
1개월 전
조회수 8

NPM 및 PyPI 패키지 생태계의 근본적인 문제점: 소스 코드 기반이 아닌, 개발자가 업로드한 번들 및 바이너리 기반

공급망 공격(Supply Chain Attacks) 위험 증가: 소스 코드 검증 부재로 인한 신뢰성 저하

소스 코드 기반 빌드(Source-Based Build)의 중요성: Git Submodule, Nix/Guix와 같은 시스템을 통한 종속성 관리 필요

SLSA 및 PEP 740과 같은 인증(Attestation) 도입: 소스 코드 수준의 공격 감지 용이성 확보

NPM/PyPI의 취약한 공급망 구조

게시된 패키지가 원래 소스에서 재현될 수 없다는 점이 NPM 및 PyPI의 가장 큰 문제점으로 지적된다. 특히, 출처 증명(Provenance Attestation)이 없는 패키지는 연결된 소스 저장소에서 빌드되었는지조차 확인할 수 없다. 이러한 구조는 공급망 공격의 주요 원인이 되며, 신뢰할 수 없는 종속성(Untrusted Dependencies)으로 인해 보안 사고 발생 위험을 높인다.

소스 코드 기반 빌드의 어려움

NPM은 소스 코드에서 직접 설치하는 방법을 제공하지 않으며, 종속성 관리가 복잡하여 NPM Slop이라는 용어로 비판받는다. 반면, PyPI는 소스 코드 기반 빌드를 지원하지만, 네이티브 바이너리를 포함하는 패키지(예: PyTorch, JAX)는 소스 코드를 PyPI에 게시하지 않는 경우가 많아 제약이 따른다. 이러한 문제는 빌드 환경(Build Environment)의 일관성을 저해하고, 보안 취약점을 발생시킬 수 있다.

공급망 보안 강화를 위한 노력

SLSA 및 PEP 740과 같은 인증(Attestation)은 패키지가 신뢰할 수 있는 공급자에 의해 특정 소스 커밋에서 빌드되었음을 보증한다. 하지만, 런너 이미지 및 빌드 시 다운로드되는 파일은 고정되지 않아, 여전히 취약점이 존재한다. Git Submodule을 사용하거나, Nix/Guix와 같은 시스템을 통해 빌드 환경 및 네이티브 런타임 종속성(Native Runtime Dependencies)을 고정하는 방법이 제안된다.

소스 코드 기반 빌드의 장점과 한계

소스 코드 기반 빌드는 공격 표면(Attack Surface)을 소스 코드 수준으로 제한하여, AI 코드 리뷰와 같은 자동화된 탐지를 가능하게 한다. 하지만, CUDA 라이브러리, MacOS 도구, 컴파일러 등 부트스트랩(Bootstrap)이 어려운 경우도 존재한다. pip install --no-binary :all: 명령어를 통해 소스 배포판을 사용하는 방법도 제시되었으며, Guix는 2023년에, Nix는 현재 풀 소스 부트스트랩(Full-Source Bootstrap)을 완료하는 단계에 있다.

Npm Slop & Wonky Software Supply Chains