
패키지 관리 시스템을 더 안전하게 만드는 것을 목표로 하는 문서화 및 추적 프로젝트입니다.
패키지 관리 시스템을 더 안전하게 만들기 위한 목적을 가진 문서화 및 추적 프로젝트입니다. 우리가 본 관련 문제 몇 가지의 대략적인 목록은 issues를 참조하세요.
| 언어 | 이름 | 등급 | 통제 | Packman 담당자 | Packman 페이지 |
|---|---|---|---|---|---|
| JavaScript | npm | 1 | npm | ||
| Ruby | RubyGems | 1 | rubygems | ||
| Python | PyPi | 1 | pip/pypi | ||
| Java | Maven Central | 2 | maven central | ||
| Java | Android Central | ? | |||
| .Net | NuGet | 2 | nuget | ||
| Docker Hub | Docker | 1 | |||
| Golang | go get | 1 | golang | ||
| PHP | Composer | ? | |||
| Cocoa | Cocoa Pods | ? | |||
| Swift | Swift Package Manager | 1 | swiftpm | ||
| Rust | Cargo | 2? | rustcargo |
| 통제 | Tier 1 | Tier 2 | Tier 3 |
|---|---|---|---|
| 강력한 인증 | ☐ | ☑ | ☑ |
| 아티팩트 푸시를 위한 MFA | ☐ | ☑ | ☑ |
| 보안 연락처 | ☐ | ☑ | ☑ |
| 패키지가 보안 문제를 알릴 수 있음 | ☐ | ☑ | ☑ |
| 소스 코드에 연결된 코드 패키지 | ☐ | ☑ | ☑ |
| 자격 증명이 게시되는 것 방지 | ☐ | ☑ | ☑ |
| 업데이트 알림 | ☐ | ☑ | ☑ |
| 코드 서명 | ☐ | ☐ | ☑ |
| 무결성 검증 | ☐ | ☐ | ☑ |
| 코드 분석 (정적) | ☐ | ☐ | ☑ |
| 코드 종속성 분석 | ☐ | ☐ | ☑ |
| 패키지 관리자가 코드를 실행하지 않음 | ☐ | ☐ | ☑ |
| 패키지 관리자가 정보를 수집하지 않음 | ☐ | ☐ | ☑ |
| 프로젝트 역할 안내 | ☐ | ☐ | ☑ |
| 프로젝트 역할 검토 | ☐ | ☐ | ☑ |
| 계정 수준 라이브러리 태깅 | ☐ | ☐ | ☐ |
위 표에 언급된 각 컨트롤에 대해 다음 섹션에서 자세히 설명합니다.
강력한 인증은 시스템이 다음을 요구함을 의미합니다:
패키지 관리자에게 새 코드를 푸시할 수 있는 것은 강력한 기능이므로, 관리자의 비밀번호를 추측하여 쉽게 수행될 수 없음을 아는 것이 중요합니다. MFA 구현
이 요구 사항을 충족하려면 패키지 관리자가 커뮤니티로부터 보안 정보를 받을 수 있는 방법과 그러한 피드백을 처리하는 프로세스를 갖추어야 합니다. security@와 같은 공개된 이메일과 피드백이 포착되고 응답되도록 하는 메커니즘이 함께 있다면 이 요구 사항을 충족할 수 있습니다.
패키지는 스스로 문제를 식별하거나 문제를 통지받을 수 있습니다. 플랫폼은 패키지 관리자가 보안 문제가 있는 릴리스를 보고하고 다음을 수행할 수 있는 방법을 지원해야 합니다:
패키지는 잘 알려진 공개 저장소(bitbucket.org, github.com)의 명시적 코드 버전(태그?)과 어떤 방식으로든 연결되어야 합니다.
패키지가 업데이트되면 해당 패키지의 모든 관리자에게 알림이 전송되어야 합니다.
패키지에서 보안 문제가 식별되면 소비자가 이를 확인할 수 있는 방법이 있어야 합니다. 이는 소비자가 알려진 문제를 확인할 수 있는 명령이 될 수 있습니다.
개발자가 자신의 코드에 서명할 수 있어야 합니다. 서명하는 경우 패키지 관리자는 서명을 검증하고 패키지 소비자에게 배포할 수 있는 방법을 제공해야 합니다.
패키지 관리자는 다운로드한 패키지의 무결성을 검증하는 방법을 제공합니다.
없음 - 무결성 검증이 수행되지 않음 부분적 - 취약한 방법으로 무결성 검증이 수행됨* 예 - 충분히 안전한 방법으로 검증이 수행됨
플랫폼은 중요한 라이브러리의 잠재적 문제를 사전에 식별하기 위해 정적 코드 분석을 제공할 수 있습니다.
플랫폼은 패키지가 의존하는 라이브러리(업스트림 패키지)의 취약점을 추적하고 해당 경우 관리자에게 알릴 수 있습니다.
패키지 관리자는 패키지 설치 시 코드를 실행하지 않아야 합니다.
패키지 관리자는 해당 종속성을 사용하는 프로젝트에 대한 정보를 수집하지 않아야 합니다.
패키지 관리 시스템에는 프로젝트의 역할에 대한 안내가 있어야 하며, 여기에는 후임 계획과 적극적인 참여 조건이 포함되어야 합니다.
패키지 관리 시스템 관리자는 관리자가 활발히 활동하는지 확인하기 위해 프로젝트의 역할을 검토하는 프로세스를 갖추어야 합니다.
라이브러리 소비자는 특정 라이브러리에 대한 관심이나 승인을 태그할 수 있어야 합니다. 그래야 빌드가 특정 방식으로 태그한 라이브러리만 사용하도록 보장할 수 있습니다. 예: 코드 검토 완료로 표시.
패키지 관리자는 인증 자격 증명 / 토큰 / 세션이 패키지 내용의 일부로 유출되는 것을 방지하기 위한 일부 통제를 제공합니다.
없음 - 통제가 없으며 사용자가 스스로 보호해야 함 부분적 - 주석 삽입 예 - 자격 증명 / 토큰은 게시가 차단되거나 패키지 게시에 의해 트리거되는 자동화된 방식으로 폐기됩니다. 사용자는 조치가 취해졌다는 사실을 어떤 방식으로든 통지받아야 합니다.