Skip to main content
QUICK REVIEW

[논문 리뷰] Fully Countering Trusting Trust through Diverse Double-Compiling

David A. Wheeler|arXiv (Cornell University)|2010. 04. 30.
Cryptography and Data Security인용 수 9
한 줄 요약

이 논문은 '신뢰하는 신뢰' 공격을 탐지하고 방지하기 위한 기법인 다각적 이중 컴파일(Diverse Double-Compiling, DDC)을 제안한다. 이 공격은 컴파일러가 컴파일된 코드에 백도어를 삽입하도록 조작되는 경우를 뜻한다. 서로 다른 컴파일러를 사용해 컴파일러 소스를 두 번 컴파일하고, 결과로 나오는 바이너리가 비트 단위로 완전히 일치하는지 검증함으로써, 컴파일된 바이너리가 소스 코드를 정확히 반영하고 있음을 보장한다. 이는 공식적인 증명과 GCC 및 악성 변형 컴파일러를 포함한 여러 컴파일러에서의 실증적 검증을 통해 이루어진다.

ABSTRACT

An Air Force evaluation of Multics, and Ken Thompson's Turing award lecture ("Reflections on Trusting Trust"), showed that compilers can be subverted to insert malicious Trojan horses into critical software, including themselves. If this "trusting trust" attack goes undetected, even complete analysis of a system's source code will not find the malicious code that is running. Previously-known countermeasures have been grossly inadequate. If this attack cannot be countered, attackers can quietly subvert entire classes of computer systems, gaining complete control over financial, infrastructure, military, and/or business systems worldwide. This dissertation's thesis is that the trusting trust attack can be detected and effectively countered using the "Diverse Double-Compiling" (DDC) technique, as demonstrated by (1) a formal proof that DDC can determine if source code and generated executable code correspond, (2) a demonstration of DDC with four compilers (a small C compiler, a small Lisp compiler, a small maliciously corrupted Lisp compiler, and a large industrial-strength C compiler, GCC), and (3) a description of approaches for applying DDC in various real-world scenarios. In the DDC technique, source code is compiled twice: the source code of the compiler's parent is compiled using a trusted compiler, and then the putative compiler source code is compiled using the result of the first compilation. If the DDC result is bit-for-bit identical with the original compiler-under-test's executable, and certain other assumptions hold, then the compiler-under-test's executable corresponds with its putative source code.

연구 동기 및 목표

  • 컴파일러가 컴파일된 소프트웨어에 암묵적으로 백도어를 삽입할 수 있는 '신뢰하는 신뢰' 공격으로 인한 심각한 보안 취약점을 해결하기 위해.
  • 소스 코드를 완전히 검토한 후에도 악성 컴파일러를 탐지하지 못하는 현존하는 대응 조치의 한계를 극복하기 위해.
  • 컴파일러의 바이너리 출력이 소스 코드와 정확히 일치함을 보장하는 실용적이고 검증 가능한 방법을 제공하기 위해.
  • 소규모, 커스터마이징된, 그리고 GCC와 같은 대규모 산업용 컴파일러를 포함한 다양한 컴파일러 유형에 대해 DDC의 타당성과 정확성을 입증하기 위해.
  • 컴파일러 소스나 빌드 프로세스에 대한 신뢰가 없더라도, 컴파일러의 무결성을 검증할 수 있도록 하여 핵심 소프트웨어 시스템에 대한 신뢰를 가능하게 하기 위해.

제안 방법

  • 신뢰할 수 있는 컴파일러(부모 컴파일러)의 소스 코드를 신뢰할 수 있는 컴파일러로 컴파일하여 신뢰할 수 있는 바이너리를 생성한다.
  • 생성된 신뢰할 수 있는 바이너리를 사용해 타겟 컴파일러(가능성 있는 악성 컴파일러)의 소스 코드를 컴파일하여 두 번째 바이너리를 생성한다.
  • 두 번째 컴파일 과정에서 생성된 바이너리를 테스트 중인 타겟 컴파일러의 원본 바이너리와 비교한다.
  • 두 바이너리가 비트 단위로 완전히 일치하고, 정의된 가정 조건을 충족할 경우, 타겟 컴파일러의 바이너리는 소스 코드에 암호학적으로 묶여 있음을 의미한다.
  • 동일한 백도어가 삽입되지 않도록 두 번째 컴파일 과정에서 서로 다른 언어 구현체나 버전의 컴파일러를 사용한다.
  • DDC가 소스 코드와 바이너리 간의 모든 불일치를 탐지할 수 있음을 증명하기 위해 공식적 검증 기법을 적용한다.

실험 결과

연구 질문

  • RQ1컴파일러가 악성일 수 있는 상황에서도 소스 코드와 바이너리 간의 일치 여부를 공식적으로 검증할 수 있는 방법을 구성할 수 있는가?
  • RQ2다각적 이중 컴파일 기법은 '신뢰하는 신뢰' 공격을 탐지하고 방지할 수 있는가? 이 공격은 컴파일러가 컴파일된 소프트웨어에 백도어를 삽입한다.
  • RQ3DDC는 소규모, 커스터마이징된, 그리고 GCC와 같은 대규모 산업용 컴파일러를 포함한 다양한 컴파일러 유형에서 효과적으로 작동하는가?
  • RQ4DDC가 타당하기 위해 필요한 가정 조건은 무엇이며, 이러한 가정은 실무에서 어떻게 검증할 수 있는가?
  • RQ5DDC는 실제 시스템에 실용적으로 적용되어 핵심 소프트웨어 및 컴파일러 툴체인에 대한 신뢰를 확보할 수 있는가?

주요 결과

  • 다각적 이중 컴파일(DDC) 기법은 컴파일러 소스 코드와 바이너리 간의 모든 불일치를 탐지할 수 있음을 공식적으로 증명한다.
  • 실증적 평가 결과, DDC는 컴파일된 코드에 백도어를 삽입하는 악성으로 수정된 LISP 컴파일러를 성공적으로 탐지했다.
  • DDC는 소규모 C 컴파일러, 소규모 LISP 컴파일러, 악성으로 손상된 LISP 컴파일러, 그리고 GCC 총 네 대상 컴파일러에 대해 성공적으로 적용되어 광범위한 적용 가능성을 입증했다.
  • DDC 출력 바이너리와 원본 컴파일러 바이너리 간의 비트 단위 일치 비교를 통해, 조작이 없을 경우 정확성이 확인되었다.
  • 두 번째 컴파일러가 신뢰할 수 없더라도, 첫 번째 컴파일러가 신뢰되고 두 컴파일러가 서로 다각적일 경우, 이 방법은 여전히 효과가 있다.
  • 이 방법은 컴파일러 소스 코드나 빌드 프로세스에 대한 접근이나 신뢰가 없더라도 컴파일러 무결성을 완전히 검증할 수 있도록 한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.