requirements.txt - pip install requirements.txt - pip freeze requirements.txt

requirements.txt의 숨겨진 위험: 의존성 고정을 통해 문제를 해결하는 방법

requirements.txt: 핵심 도구인가, 숨겨진 위협인가?

모든 파이썬 프로젝트에는 그것이 있습니다. 겉보기에는 아무 문제 없어 보이는 그것이죠. requirements.txt 저장소의 루트에 위치한 파일 pip install requirements.txt `consumes`는 종속성 목록인 것은 맞지만, 주의하지 않으면 불안정한 빌드, 취약한 패키지, 심각한 보안 문제로 이어질 수 있는 위험한 도구가 될 수도 있습니다.

그 핵심에서, requirements.txt 애플리케이션이 어떤 타사 패키지를 가져올지 제어합니다. 실행할 때 pip install -r requirements.txt파이썬 패키지 관리자는 나열된 모든 종속성을 설치합니다. 하지만 여기서 중요한 점은 정확한 버전을 지정하지 않으면 문제가 발생한다는 것입니다. PyPI를 신뢰합니다 항상 안전하고 호환되며 수정되지 않은 버전을 제공하는 것. 그것은 현대적인 애플리케이션 보안 방식이 아닙니다.

버전 고정을 하지 않으면 빌드가 실패할 수 있습니다. 더 심각한 것은 애플리케이션이 자신도 모르게 악성 패키지를 사용할 수 있다는 것입니다. 개방형 버전 관리(Flask >=1.0, 예를 들면) 또는 느슨한 버전 제약 조건(장고~=3.2이러한 환경은 보안에 취약한 코드를 주입하기에 매우 유리한 환경을 제공합니다. 따라서 적절하게 관리하는 것이 중요합니다. requirements.txt 이는 핵심적인 보안 과제입니다.

pip freeze와 pip install requirements.txt의 차이점 분석

피프 동결 편리하지만, 무엇을 캡처하는지 이해하지 않고 사용하면 위험할 수도 있습니다. 개발자는 종종 다음을 생성합니다. requirements.txt 사용 pip freeze requirements.txt환경을 안전하게 보호해 줄 거라고 기대하면서 freeze 명령어를 사용했지만, freeze는 종속성의 보안이나 출처를 검증하지 않고, 현재 설치된 모든 패키지(전이적으로 설치되거나 오래된 패키지 포함)를 삭제해 버립니다.

이제 팀원이나 CI 담당자가 아무런 정보 없이 실행한다고 상상해 보세요. pip install -r requirements.txt만약 해당 파일에 더 이상 사용되지 않는 내용, 취약한 내용 또는 심지어 typo-squated 패키지방금 보안 사고를 자동화하셨군요.

간단한 예:

⚠️ 보안에 취약한 예시이므로 실제 운영 환경에서 사용하지 마십시오.

이제 이것을 CI에 추가하세요. pipeline:

여러분은 환경이 재현 가능하고, PyPI에 아무런 변경 사항이 없으며, 모든 종속성 여전히 안전합니다. 에 의존하는 것은 엄청난 가정입니다. pip freeze requirements.txt 워크 플로우.

실제 앱 보안 위협: requirements.txt 파일의 타이포스쿼팅 및 종속성 혼동

공격자들은 오픈소스 생태계를 좋아합니다. 왜냐하면 개발자들이 기본 설정과 암묵적인 신뢰에 의존하는 경우가 많기 때문입니다. 공격자들이 오픈소스를 이용해 공격하는 방법은 다음과 같습니다. requirements.txt:

  • 오타 스쿼팅악성 패키지를 다음과 같은 이름으로 업로드합니다. 요청 대신 요청캐릭터 하나만 틀려도 빌드는 망하는 겁니다.

요청 # ⚠️ 예시일 뿐이며, 실제로 설치할 패키지가 아닙니다.

  • 의존성 혼란내부 패키지가 고정되어 있지 않거나 비공개 범위로 설정되어 있지 않으면 공격자가 동일한 이름으로 악성 버전을 PyPI에 게시할 수 있습니다. CI에서 소스 코드를 검증하지 않으면 사용자의 패키지 대신 공격자의 패키지가 설치됩니다.

두 공격 모두 엄격한 고정 및 소스 제어가 부족하다는 점을 악용합니다. requirements.txt만약 당신의 것이라면 그냥 이렇게 말합니다 일부 내부 라이브러리그리고 당신은 달립니다 pip 설치 requirements.txt CI 환경에서는 잘못된 패키지를 잘못된 위치에서 가져올 수도 있습니다.

requirements.txt 파일을 안전하게 보호합니다. CI/CD Pipeline해시 및 고정 기능이 있는 s

단단하게 만드는 방법은 다음과 같습니다. requirements.txt 현실 세계의 위협에 맞서:

  • 핀 정확한 버전: 항상 사용 == 귀하의 모든 패키지에 대해 requirements.txt와일드카드 및 범위는 사용할 수 없습니다.
  • –require-hashes: 이것은 pip install -r requirements.txt 다운로드한 모든 패키지의 무결성을 확인합니다.

예:

⚠️ 예시 이미지이며, 실제 프로젝트에서는 실제 해시 값으로 대체해야 합니다.

  • 빌드를 격리하세요빌드는 항상 깔끔하고 최소한의 컨테이너에서 진행하세요. 기본 이미지를 맹목적으로 신뢰하지 마세요.
  • 비공개 PyPI 인덱스를 사용하세요: 자체 프록시/캐시를 호스팅하고 신뢰할 수 있는 패키지만 미러링하세요.

종속성 검사를 실행하세요: 다음과 같은 도구를 통합하세요 pip-감사 또는 사용 SBOM귀사의 -기반 분석 pipelines.

GitHub Actions 예시 코드 조각:

⚠️ 교육용 pipeline 예를 들어, 환경에 적응하세요.

엄격한 처리 pip install -r requirements.txt in CI/CD 오픈소스 관련 위험을 줄이는 가장 쉬운 방법 중 하나입니다.

재현 가능한 빌드: 다양한 환경에서 안정성 유지

앱이 로컬 환경에서는 정상적으로 작동하지만 스테이징 또는 프로덕션 환경에서 오류가 발생하는 경우, 종속성 불일치가 원인일 수 있습니다. requirements.txt 흔히 용의자로 지목되는 것들입니다. 작은 버전 차이조차도 큰 문제를 일으킵니다.

다음 전략을 사용하세요:

  • 핍 도구: 사용 pip-compile 생성하는 requirements.txt 에서 요구 사항.in적절한 고정을 통해 종속성 문제를 해결합니다.
  • 환경 지표운영체제별 패키지 또는 파이썬 버전별 종속성의 경우 다음과 같은 마커를 사용하세요. platform_system == 'Linux'.
  • 도커 캐싱CI 환경에서 종속성 설치 후 Docker 레이어를 캐시하세요. requirements.txt 제작 과정의 변동성을 줄이기 위해.

pip-tools를 사용한 예시:

⚠️ 예시 이미지이며, 실제 출력 결과는 사용 환경에 따라 다를 수 있습니다.

출력은 완전히 고정되어 있습니다. requirements.txt.

같은 도구 피프 동결, 와 결합하면 pip install -r requirements.txt 건설 과정 중에는 규율과 추가적인 안전장치가 필요합니다.

결론: 요구사항을 확실하게 확정하세요

잘못된 관리 requirements.txt 이는 단순히 잘못된 관행일 뿐만 아니라, 심각한 보안 위험을 초래합니다. 느슨한 레지스트리 고정, 검증되지 않은 설치, 그리고 개방형 레지스트리에 대한 맹목적인 신뢰는 공격자들이 악용하는 방식입니다. CI/CD pipeline이것들은 이론적인 결함이 아닙니다. 매일같이 악용되고 있는 문제입니다.

의존성 고정은 단순한 모범 사례 그 이상입니다. 파이썬에서 공급망 공격에 대한 첫 번째 방어선입니다. 여기에 다음을 결합하세요. –require-hashes격리된 환경을 구축하고 재현 가능한 도구를 사용하는 것 등이 포함됩니다. 핍 도구, 그리고 당신은 pipeline 그건 타협하기가 더 어렵죠.

사용 여부 pip 설치 requirements.txt 로컬 환경이든 CI 환경이든, 빌드에 포함되는 내용을 항상 검증하고 모니터링하세요. 다음과 같은 도구를 활용하세요. 제니 파이썬 공급망을 안전하게 보호하기 위해 가시성, 정책 시행 및 자동화된 검사를 제공합니다. pip freeze requirements.txt 제작 전 과정에 걸쳐.

sca-tools-software-composition-analysis-tools
소프트웨어 위험을 우선순위화하고, 해결하고, 보호하십시오.
무료 계정을 만드세요.
신용 카드가 필요하지 않습니다.

소프트웨어 개발 및 제공을 안전하게 보호하세요

Xygeni 제품군과 함께