종속성
pip-audit
pip-audit은 Python 종속성에서 알려진 취약점이 있는 패키지를 스캔합니다. Python Packaging Authority에서 만들었으며, 환경, requirements 파일, 프로젝트 파일에서 작동합니다. pip에는 npm audit에 해당하는 기능이 내장되어 있지 않으므로, 이것이 그런 기능을 얻는 표준 방법입니다.
업데이트
pip-audit 실행 방법
pip install pip-audit
pip-audit # the current environment
pip-audit -r requirements.txt # a requirements file
pip-audit . # a local project
pip-audit --fix --dry-run # show what would be upgraded
pip-audit --fix # upgrade vulnerable packages
pip-audit -s osv # use OSV instead of PyPI
pip-audit -f cyclonedx-json # write a CycloneDX SBOM
기본적으로 Python Packaging Advisory Database를 바탕으로 하는 PyPI의 JSON API로 패키지를 조회하며, 대신 OSV를 사용할 수도 있습니다. 전체 옵션 목록은 프로젝트 페이지를 참조하세요.
무엇을 감사하는지 주의하세요
많은 사람이 놀라는 부분입니다. requirements 파일을 감사하면 그 종속성을 확정(resolve)하게 되며, 프로젝트는
pip-audit -r INPUT이 기능적으로 pip install -r INPUT과 같다고 경고합니다. 패키지 설치는
코드를 실행할 수 있으므로, 감사 중에 악성 패키지가 실행될 수 있습니다. 프로젝트 자체의 규칙은 간단합니다.
pip install하지 않을 것이라면 pip audit하지 마세요.
이는 또한 새로운 타이포스쿼팅 패키지나 슬롭스쿼팅 패키지처럼 아직 권고가 없는 패키지로부터는 이 검사가 보호해 주지 못한다는 뜻입니다.
CI에서 pip-audit 실행하기
공식 GitHub Action인 pypa/gh-action-pip-audit을 쓰거나, 명령을 직접 실행할 수 있습니다. 취약점을 발견하면
0이 아닌 종료 코드를 반환하므로, 새 권고 하나로 코드 변경 없이도 빌드가 실패할 수 있습니다.
- run: pip install -r requirements.txt pip-audit
- run: pip-audit
출시하는 것과 같은 종속성 집합을 감사하세요. 정확한 버전과 해시가 지정된 requirements를 쓰면 안정적인 결과를 얻을 수 있습니다. 다른 검사와의 관계는 SCA 스캔을 어디에서 실행할지를 참조하세요.
pip-audit이 다루지 않는 것
- 여러분의 코드. 소스 코드가 아니라 종속성 트리를 분석합니다. 소스 코드 분석은 SAST vs SCA를 참조하세요.
- 네이티브 라이브러리. Python wheel에는 C 라이브러리가 함께 들어 있는 경우가 많은데, 프로젝트는 Python이 아닌 공유 라이브러리의 전이적 취약점은 탐지하지 않는다고 밝힙니다.
- 빌드의 나머지 모든 것. 베이스 이미지, 시스템 패키지, CI 액션은 시야 밖에 있습니다.
- 새로운 악성 패키지. 알려진 권고와 대조할 뿐입니다.
- 실제로 출시된 빌드. Python의 종속성 확정은 환경에 따라 달라지므로, 다른 머신에서 감사하면 릴리스와 다른 버전을 볼 수 있습니다. 잠금 파일이 없으면 확정 순서도 달라질 수 있습니다.
pip-audit vs 다른 Python 스캐너
| 도구 | 적합한 용도 | 참고 |
|---|---|---|
| pip-audit | Python 종속성을 무료로 검사 | Python 전용 |
| Trivy, Grype | 컨테이너 이미지 안의 Python 패키지 | 운영체제 패키지도 다룸 |
| 상용 SCA 도구 | 여러 언어와 팀에 걸친 정책과 워크플로 | 최고의 SCA 도구 참조 |
pip-audit과 CRACI
pip-audit은 풀 리퀘스트에서 쓰기에 합리적인 검사입니다. CRACI는 반대편에서 작동합니다. GitHub Actions 러너로서 작업이 PyPI와 그 밖의 모든 소스에서 가져온 모든 패키지를 트리의 모든 깊이까지 릴리스를 만든 빌드의 SBOM에 기록합니다. 그리고 새 취약점이 게시될 때마다 그 SBOM을 계속 검사하므로, 작년 릴리스가 영향을 받는지 알 수 있습니다. 빌드 시점 SBOM과 빌드 시점 SBOM 생성을 참조하세요.
pip-audit: 자주 묻는 질문
pip-audit이란 무엇입니까?
Python 환경, requirements 파일, 프로젝트에서 알려진 취약점이 있는 패키지를 스캔하는 Python Packaging Authority의 도구입니다.
Python용 npm audit이 있습니까?
pip-audit이 가장 가까운 대응 도구이지만, pip 명령이 아니라 별도의 도구이므로 직접 설치해야 합니다.
pip-audit이 찾은 취약점은 어떻게 고칩니까?
pip-audit --fix를 실행해 취약한 패키지를 업그레이드하거나, 먼저 --fix --dry-run으로 무엇이 바뀔지 확인하세요. 그런 다음 테스트를 실행하고 고정된 requirements를 업데이트하세요.
신뢰할 수 없는 코드에 pip-audit을 실행해도 안전합니까?
안전하지 않습니다. requirements 파일을 감사하는 것은 기능적으로 설치하는 것과 같으며, 설치는 코드를 실행할 수 있습니다. 설치하지 않을 패키지라면 감사하지 마세요.
pip-audit으로 SBOM을 생성할 수 있습니까?
예. JSON 또는 XML 형식의 CycloneDX를 작성할 수 있습니다. 이 SBOM은 pip-audit이 확정한 Python 종속성을 설명할 뿐, 빌드의 나머지 부분은 설명하지 않습니다.
pip-audit은 어떤 취약점 데이터베이스를 사용합니까?
기본적으로 Python Packaging Advisory Database를 바탕으로 하는 PyPI의 JSON API를 사용합니다. OSV도 사용할 수 있습니다.
Python 빌드가 가져온 것을 확인하세요
GitHub Actions 워크플로 하나를 CRACI에서 실행하고, 작업이 실제로 가져온 모든 패키지의 SBOM을 받아 보세요.
데모 예약