2011-09-22 2 views
2

현재 상황을 상상해보십시오.Maven : 저장소 및 pluginRepositories의 보안 문제가 pom에 정의되어 있습니까?

귀하는 개발자이며 새로운 (오픈 소스) 프로젝트에 참여하고 싶습니다. 프로젝트는 다른 방법으로 빌드 할 수 있습니다. 그 중 하나는 Maven입니다.

지금 소스 코드 저장소를 다운로드하여 시스템에 대한 이해에서 여러 보안 위험에 노출되는 빌드 프로세스를 시작하는 경우 :

  1. 메이븐 [아니라 플러그인] 저장소가 HTTP를 통해 액세스되는 기본 -을 통해 중간자 공격 (Man-in-the-Middle attack)으로 누군가가 당신에게 조작 된 패키지를 보낼 수 있습니다. 도청 된 플러그인 저장소의 경우 빌드 프로세스의 일부로 주입 된 코드로 이어질 수 있습니다.

  2. 파일 pom.xml에서 제 3 자 저장소 및 플러그인 저장소를 추가 할 수 있습니다. 공격자가 자신의 플러그인 저장소를 (예 : 오픈 소스 프로젝트의) 프로젝트 pom.xml에 추가 관리하고 다른 플러그인을 공격 할 수있는 경우 타사 저장소의 경우 확실하지 않습니다 - 프로젝트 pom.xml에 정의 된 저장소가 사용자 또는 시스템 수준에서 정의 된 저장소를 대체 할 수 있습니까? 내 관점에서

이 심각한 보안 문제입니다 - 또는 실수 설명이있다?

Maven 기반 프로젝트가있는 경우 - Maven을 실행하는 것이 안전한지 어떻게 확인할 수 있습니까? 신뢰할 수있는 리포지토리 목록이 있습니까 (실행되는 컴퓨터에 해를 끼치 지 않는 코드 만 포함)?

답변

2

첫눈에 당신의 주장은 정확합니다. 그러나 잠재적 인 공격자를 위해 해결해야 할 몇 가지 문제점이 있습니다.

대다수의 경우 사용되는 저장소는 Sonatype (내가 알고있는 한)의 통제하에있는 Maven Central입니다. 이는 해당 컴퓨터에 액세스하여 저장소 자체의 내용을 수정하거나 체크섬에 따라 단순하지 않은 내용을 주입하는 것을 의미하지만 물론 불가능하지는 않습니다. 또한 인터넷에서 이슈를 다운로드하는 경우 최신 바이러스 스캐너가 활성화되어있어 하드 드라이브에 저장되기 전에 모든 것을 먼저 제어합니다. 이것은 물론 100 % 안전하지 않습니다.

두 번째 부분으로 간다 : "Best Practice"가 아닌 POM 내부에 리파지토리를 정의하는 프로젝트를 사용하는 경우 ... Ok ... 가정 해 봅시다. 따라서이 "감염된"프로젝트를 사용할 것입니다. 그러나 어떻게 프로젝트에 투입 할 수 있을까요? 이것은 공격자가 프로젝트에 대한 커밋 액세스 권한을 가져야한다는 것을 의미합니다. 즉, 오랫동안 프로젝트를 공유했음을 의미합니다. 게다가 프로젝트의 다른 사람들은 커밋을 검토했을 것입니다 ... 그래서 그렇게 간단하지는 않지만 불가능하지는 않을 것입니다.

내가 전에 작성한 것들을 토대로 누군가가 저장소에 오직 "안전한"유물 만 포함된다는 보증을 어떻게 줄 수 있습니까? 누구를 통제해야 하는가? 그리고 저장소에 아티팩트를 가져 오는 데 얼마나 걸릴까요?

간단한 대답은 다음과 같습니다. 아니요. Maven을 사용하는 것이 100 % 안전하지는 않지만 인터넷이 100 % 안전하지는 않다고 생각하면됩니다. 제 의견으로는 인터넷을 통한 위험은 Maven 저장소보다 훨씬 높지만, 물론 이것을 무시해야합니다.

유일하게 가능한 솔루션은 아티팩트를 다운로드하는 유일한 소스 인 저장소 관리자를 사용하는 것인데, 이는이 항목 만 사용하도록 settings.xml을 구성하는 것을 의미합니다.그리고 그 저장소에있는 모든 유물을 통제하고 그 저장소에 대한 "보안"검사를하는 것이 매우 중요합니다. 그러나 누가 이것을 할 것이며, 그런 것들을 위해 시간/돈/자원을 갖고있는 사람은 누구입니까?

+0

저장소 감염에 대해 언급 한 적이 없습니다. DNS 스푸핑이나 Man-in-the-middle을 통해 감염된 저장소로 리디렉션하는 방법에 대해 이야기했습니다. POM에 대해 이미 Maven을 사용하지 않는 프로젝트가 누군가에 의해 "mavenized"된 경우가있었습니다. 그 사람이 패치를 보내고 패치가 저장소에 통합되었습니다. 패치가 커밋하는 데 가치가 있는지 여부를 프로젝트 관리자 (누가 잘 모르는 사람)가 결정해야합니까? – Robert

관련 문제