이 질문은 빌드 아티팩트와 서명을 "신뢰할 수 있는 소스"(운영 체제 유지 관리 담당자)까지 추적하는 방법에 관한 것이 아닙니다. 나는 이런 질문을 한다Deepin Linux 배포판기억하세요, 이들 중 일부는사용자는 ISO 이미지 다운로드 및 설치에 대해 정당한 우려를 갖고 있습니다.중국 회사에서 제작 및 배포했습니다.
보안 전문가가 운영 체제 배포 코드의 방대한 부분을 검사하고 정리할 수 있더라도 신뢰할 수 있는 모든 업스트림 종속성을 무시하더라도유지관리자가 빌드 중에 공개 코드베이스 외부에서 뭔가 나쁜 일에 빠지지 않았는지 어떻게 확신할 수 있습니까?Ubuntu와 같이 잘 알려진 배포판의 경우에도 "신뢰하되 검증"하는 사고방식을 갖는 것이 좋습니다.
내가 본 전형적인 대답은 "직접 만들어보세요!소규모 오픈 소스 애플리케이션이나 라이브러리의 경우 어렵지 않을 수 있지만 완전한 Linux 배포판의 경우 이 프로세스는 Deepin OS를 대상으로 하는 Linux 초보자에게는 어려운 작업이 됩니다. 이는 절대 불가능합니다.
이상적으로는 중요한 오픈 소스 소프트웨어의 모든 릴리스가 동일한 커밋 및 후크된 종속성을 기반으로 구축됩니다.독립적인 당사자에 의해, 실행 파일의 명령 수준에서 이러한 빌드의 모든 아티팩트를 비교하여 실제로 "동일"한지 확인하는 도구가 있습니다(타임스탬프로 인한 차이 무시).
그렇다면 그러한 도구가 존재합니까?
답변1
불행하게도 현재 소스 코드에 대해 배포판을 자동으로 확인할 수 있는 방법은 없습니다. 그러나 어느 정도 사용할 수 있는 몇 가지 중간 결과가 있습니다.반복 가능한 빌드 프로젝트주된 원동력이다.
재현성은 동일한 입력을 사용하는 능력을 의미합니다.그리고 같은 도구, 동일한 출력 아티팩트를 생성합니다. 다양한 종류반복 가능한 작업을 구축하는 프로젝트에 참여하세요.이는 어느 정도의 재현성을 허용합니다. 예를 들면 다음과 같습니다.
- 많은 데비안 패키지는 재현 가능하므로 동일한 소스 패키지와 동일한 빌드 환경(컴파일러, 빌드 종속성 등)이 주어지면 완전히 동일한 패키지를 얻게 됩니다.
- 데비안의 공식 Docker 이미지반복 가능하다, 따라서 동일한 참조 패키지를 제공합니다(아니요소스 코드) 및 동일한 빌드 도구를 사용하면 정확히 동일한 루트 파일 시스템을 얻을 수 있습니다.
위에서 생성된 아티팩트에 대한 최종 사용자 확인은 아직 불가능합니다. 특히 빌드 환경을 문서화하는 파일이 아직 공개되지 않았기 때문입니다(제가 아는 한). 하지만 그것들은 보존되어 있으므로 어느 시점에서는 이것이 가능할 것입니다.
나는 어떤 "대규모" 배포판도 검증은커녕 소스 코드부터 배포 미디어(ISO 등)까지의 재현성을 지원하지 않는다고 생각합니다. 도로에는 많은 장애물이 있습니다.
- 그러나 모든 소프트웨어를 반복적으로 구축할 수 있는 것은 아닙니다.
- 재현 가능한 아티팩트는 빌드 환경에 대한 "지식"을 포함하고 릴리스 준비 중에 변경 가능합니다(따라서 릴리스 유효성 검사에는 기록 재구성이 포함됩니다).
지금 당장은 생각하지 못한 다른 사람들도 있을 수 있습니다.꼬리완전히 재현 가능한 배포 매체를 출시하므로 이는 기술적으로 가능하지만분배하다재현 가능. 릴리스가 재현 가능한 방식으로 출시되지 않으면 외부 당사자가 이를 확인할 수 없습니다. (이는 외부 감사가 존재하는 것을 방해하지 않으며 때로는 유용합니다.)
다양한거 보세요프로젝트Reproducible Builds 웹사이트에서 인용한 내용 중 일부는 이를 더 쉽게 만드는 데 중점을 두고 있습니다.전반적인. Reproducible Builds 프로젝트 자체는 많은 것을 릴리스합니다.도구이는 재현 가능한 아티팩트를 생성하고 분석하는 데 도움이 될 수 있습니다.
재현성과 검증 가능성이 없더라도 귀하의 질문 중 한 가지 사항은 대체로 해결되었습니다.
유지관리자가 빌드 중에 공개 코드베이스 외부에서 뭔가 나쁜 일에 빠지지 않았는지 어떻게 확신할 수 있습니까?
대부분의 배포판(Deepin에 대해서는 잘 모릅니다)은 자체 빌드 인프라에 구축된 바이너리 아티팩트만 릴리스하므로 유지 관리 담당자는 공개 코드베이스(아티팩트가 문서화되어 있는 곳) 외부에 아무것도 넣을 수 없습니다. 이는 여기서 주요 관심사인 배포 자체에 대한 암묵적인 신뢰를 제거하지는 않지만 최소한 해당 소스 코드를 공개하지 않고 악의적인 아티팩트를 릴리스할 수 있는 개별 관리자의 능력을 제거합니다.
Ken Thompson의 고전 ""도 참조하십시오.신뢰에 대한 생각", 그리고컴파일러 신뢰에 관한 후속 연구; 그리고 다음 질문: