우분투의 바이너리가 소스 코드에서 온 것인지 어떻게 확인할 수 있습니까?


25

99 %의 사용자와 마찬가지로 기성품 바이너리에서 Ubuntu를 설치합니다.

이 바이너리가 실제로 Ubuntu의 원래 소스 코드에서 온 것인지 어떻게 확인할 수 있습니까?

NSA / 누군가가 이진 파일을 망치기 위해 Ubuntu 또는 Linode (내 VPS 공급자)와 협력하지 않았는지 확인하는 것이 좋습니다. 바이너리를 검증 할 수 있다면, 그것들을 쉽게 불러 낼 수 있기 때문에 처음부터 시도하지 않을 것입니다.


를 사용하여 소스 코드 apt-get source를 보거나 직접 컴파일 할 수 있습니다. 이 질문을보십시오 : askubuntu.com/questions/28372/…
Wilf

4
아마도 유용 : 패키지 설치 파일이 원본과 일치하는지 확인하는 방법은 무엇입니까? (데비안, 우분투에 적용 할 수있을만큼 가까워 야 함)
CVn

@ MichaelKjörling 나는 그 질문의 우리 버전을 찾고 있었다 ...
Braiam

1
@ Brai 나는이 특별한 경우 데비안 / 우분투가 큰 차이를 만들지 않는다고 생각합니다. 무엇 합니까 차이를 만드는 것은 질문의 목적이다; 위에 링크 된 파일은 설치 후 어느 시점에서 손상된 파일을 탐지하는 것을 목표로하는 반면,이 파일은 악의적으로 교체되거나 변경된 파일 또는 의도 된 소스 코드와 일치하지 않는 이진 파일을 탐지하는 것을 목표로하는 것 같습니다. 다른 문제 때문에 링크에 "유용한 것"만 태그했습니다.
CVn

3
흥미롭게도 Gentoo 조차도이 문제를 완전히 피할 수 있다고 생각합니다. 다운로드 한 소스 코드 아카이브를 신뢰해야합니다. 암호화 서명을 모두 사용하십시오. 서명 된 내용이 진품이며 그것이 의도 된 것임을 믿을 수 없다면 실제로해야 할 일이 거의 없습니다.
CVn

답변:


36

소스 코드를 다운로드하여 직접 컴파일 할 수 있습니다. 그러나 Canonical이 NSA와 공동 작업 한 경우 키로거 또는 원격으로 활성화 할 수있는 코드를 입력 할 수 있기 때문에 먼저 소스 코드를 확인해야합니다.

그래서...

  1. 소스 코드를 다운로드 한 후
  2. 모든 코드를 확인해야합니다
  3. 그런 다음 컴파일하십시오!

그러나 기다려- 컴파일러를 신뢰할 수 있습니까?


15
"컴파일러를 신뢰할 수 있습니까?" 그것은 접선을 시작하고 C 컴파일러를 처음부터 컴파일하는 방법 질문을 읽은 다음 Unix / Linux를 처음부터 컴파일 (및 관련 답변)합니다.
CVn

17
그러나 당신은 당신의 하드웨어를 믿을 수 있습니까? 컴퓨터를 처음부터 새로 빌드해야 할 수도 있습니다. 여기에서 몇 가지 문제가 발생합니다.
Thomas

그리고 VM을 실행하는 하이퍼 바이저를 신뢰할 수 있습니까?
Fernando Correia

1
다른 저자의 몇 가지 유사한 컴파일러에서 소스를 컴파일하고 차이에 대한 출력을 확인하는 데 사용할 수 있다고 생각하지 않습니다. 그러나 저자가 별명에 따라 실제로 동일한 엔티티가 아니라는 것을 어떻게 알 수 있습니까? 아니면 모든 컴파일러에 공통된 상위 조상이 있으면 어떻게 될까요? 그리고 그 어느 것도 어쨌든 하드웨어 신뢰 문제를 도울 수 없습니다.
Keen

6
그러나 잠깐만 요-잠재적으로 손상된 영역을 모두 알려주지 않기 위해 askubuntu가 NSA에 의해 필터링되거나 완전히 제어되지 않는다고 믿을 수 있습니까?
TheZ

9

"우분투가 그렇게 말했기 때문에"기꺼이 받아들이지 않으면 할 수 없습니다.


2
체크섬을 비교하여 특정 시스템의 바이너리가 우분투 오리지널 바이너리와 일치하는지 확인할 수 있습니다. 물론 어떤 경우에도 시스템 내에서 적절한 루트킷을 쉽게 탐지 할 수 없습니다.
Peteris

2
"원래 우분투 바이너리"가 변경되지 않았다고 믿는 경우에만 작동합니다. 즉, 우분투가 그렇게 말했기 때문에 그들이 좋다고 받아들이면. ;)
fkraiem

5

우분투는 자신의 컴퓨터에서 패키지를 컴파일 할 수있는 편리한 수단을 제공합니다. 그러나 다운로드 한 이진 패키지의 실행 파일이 해당 소스 코드에서 얻어 졌는지 확인할 방법이 없습니다. Ubuntu에서 사용하는 서명 프로세스는 타사에서 패키지를 변경하는 위험을 크게 줄이지 만 다운로드 전에 소스 코드에 반영되지 않은 컴파일 전에 유해한 코드가 추가되지 않았다는 것을 여전히 신뢰해야합니다.

그 이유는 정확한 컴파일러 버전, 옵션 및 바이너리에 컴파일 된 경로 또는 환경 변수가 있기 때문에 컴파일 된 패키지에있는 것과 정확히 같은 바이너리를 얻는 것이 매우 어렵 기 때문입니다. 따라서 자신을 컴파일 할 때 정확하게 동일한 바이너리를 얻을 수 없으므로 다운로드 한 바이너리를 "확인"할 수 있습니다.

실제로 정확하게이 문제를 둘러싼 작은 연구 커뮤니티가 있습니다-컴파일을 재현 할 수있게 만드는 방법.

그러나 다운로드 한 바이너리와 자체 컴파일 된 바이너리를 수동으로 비교하면 추가 / 수정 된 코드를 감지 할 수 있으므로 바이너리를 제공하는 누군가와 소스 코드가 감지되면 바이너리에 무언가를 숨기는 것이 위험 할 수 있습니다.

그러나 이미 언급했듯이 컴파일러를 신뢰하는 문제도 있습니다 ...


4

두 개의 다른 머신에서 정확히 동일한 바이너리를 작성하는 것은 어려운 문제입니다. TOR 프로젝트는이를 빌드의 정기적 인 부분으로 수행합니다. 그들이하는 방법에 대한 설명 이 있습니다. 데비안페도라 는이 배포판에서이를 가능하게하는 프로젝트를 갖고있는 것으로 보이지만 초기 단계에 있습니다. 그것은 우분투에서 수행 어떤 일이 아닌 것 같아 .

우분투 바이너리 꾸러미를 재현하려면 가능한 한 밀접하게 작성된 환경을 재현해야합니다. 시작하려면 먼저이 패키지가 컴파일 된 위치와 방법을 찾아야합니다. 그 정보를 찾기가 쉽지 않은 것 같습니다.


구체적인 내용은 무엇입니까?
Josef

다른 게시물과 혼동되는 나를 무시하십시오 :)
Tim

0

우분투의 MD5 확인. 파일에서 가져온 MD5가 Ubuntu에서 게시 한 MD5와 일치하면 아무도 이진 파일을 변조하지 않은 것입니다.


이것은 OP의 질문이 아닙니다. 그는 Ubuntu에서 배포 한 바이너리 코드가 Ubuntu에서 배포 한 바이너리 코드와 동일하지 않은 것에 대해 걱정하고 있습니다. 즉, "이것은 소스입니다"라고 말하지만 바이너리를 빌드하는 소스에는 실제로 NSA가 도입 한 추가 코드가 있습니다. 그는 빌드 후 바이너리가 변조되었다고 걱정하지 않습니다.
John Chrysostom

OP는 "이 바이너리가 실제로 Ubuntu의 원본 소스 코드에서 온 것임을 어떻게 확인할 수 있습니까?"라고 게시했습니다. 대답은 그 질문에 대한 것입니다. 다른 하나는 Linux 커널이 누구든지 (NSA 또는 누구?) 쉽게 조작하지 않았는지 알 수있는 코드입니다. 코드를 다운로드하고 읽고 나면 행복하게 컴파일하십시오. 그 외에는 제 의견은이 의견의 시작 부분에서 복사 한 질문에 대한 것입니다.
YoMismo

인용 한 질문에 답변하지 않았습니다. MD5를 사용하면 컴퓨터의 바이너리가 서버의 바이너리와 일치하는지 확인할 수 있습니다. 그들은 그가 다운로드 한 바이너리가 Ubuntu가 제공 한 소스에서 컴파일되었는지를 확인할 수 없습니다. 이제 나는 당신과 다른 사람들이 말한 이유 때문에 그의 질문이 우스운 것에 동의합니다. 그러나 그것은 그의 질문이었다.
John Chrysostom

0

그것은 어려운 일입니다. 저는이 복잡한 일보다 신뢰가 더 낫습니다. 그러나 질문 당신은 믿을 수 있습니까?

오픈 소스 소프트웨어는 사용자가 코드를 자유롭게 변경할 수 있기 때문에 누구도 신뢰할 수 없습니다.

이 목적을위한 시나리오를 만들어 Ubuntu == source code보겠습니다. 저를 확인하고 싶습니다 . 왜 패키지를 소스와 비교하려고하지 않습니까?

  1. source에서 Ubuntu 용 바이너리 패키지를 빌드하십시오.
  2. 자체 빌드 바이너리 패키지를 배포판에서 공개 한 패키지와 비교했습니다.
  3. apt-get -b source를 사용하여 소스를 다운로드하십시오.

그러나 나를 비교해 보면 타임 스탬프, 환경이 다르기 때문에 약간 다른 결과를 얻을 수 있지만 소스 코드가 아니라는 것을 증명합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.