compiler-optimization-vulnerability-explorations

BoBpiler Team’s Compiler Optimization Vulnerability Research

이 레포지토리는 BoBpiler 팀이 BoB 프로젝트 기간 동안 이룬 성과를 담고 있습니다. BoBpiler 퍼저를 사용하여 다양한 컴파일러 최적화 버그를 탐지하였고, 이를 바탕으로 PoC(Proof of Concept)와 스텔스 백도어 시나리오를 개발하였습니다.

목차

  1. 팀원 소개
  2. 버그 제보 목록
  3. PoC 및 스텔스 백도어 시나리오

팀원 소개 및 역할

지도 멘토 및 PL
이강석

이강석

프로젝트 주 멘토, 취약점 분석 트랙

정진호

정진호

프로젝트 부 멘토, 취약점 분석 트랙

김진영

김진영

PL, 취약점 분석 트랙 8기

팀원
김동건

김동건

PM, 취약점 분석 트랙

  • 프로젝트 총괄, 버그 분석 및 제보
  • 논문 연구 및 작성, 발표자료
  • PoC 작성 및 시나리오 개발
  • Git issue 트래커 개발
  • generator 개량, 퍼징 머신 관리
  • CodeQL DB 구축
고현정

고현정

취약점 분석 트랙

  • 발표자료, CodeQL DB 구축
김대영

김대영

취약점 분석 트랙

  • 버그 분석 및 제보, 논문 연구 및 작성
  • generator 최적화, wasm 연구
  • CodeQL DB 구축, Docker 환경 구축
  • CVE case Study
백규민

백규민

취약점 분석 트랙

  • 버그 분석 및 제보, 논문 연구 및 작성
  • 퍼저 개발 및 유지보수, 퍼징 머신 관리
  • PoC 작성 및 시나리오 개발
  • Git issue 트래커 개발, Git 관리
  • CodeQL DB 구축 및 쿼리 작성
  • 정보보과학회 발표
신재형

신재형

취약점 분석 트랙

  • 버그 분석 및 제보, 논문 연구 및 작성
  • Creduce 적용, 발표자료 및 디자인
  • CodeQL DB 구축 및 쿼리 작성
  • 정보보호학회 발표
안서현

안서현

보안 제품 개발

  • 발표자료, 논문 작성
  • CodeQL DB 구축

버그 제보 목록

BoBpiler 팀이 BoBpiler 퍼저를 사용하여 발견하고 보고한 다양한 컴파일러의 최적화 버그들을 모아놓은 목록입니다. 각 컴파일러, 아키텍처, 버그 유형 및 상세 링크를 포함하고 있습니다. 이러한 버그 리포트는 해당 분야의 전문가들이 문제를 해결하고 소프트웨어 개발 과정에서 발생할 수 있는 유사한 문제와 잠재적인 보안 취약점을 예방하는 데 기여할 수 있습니다.

GCC 컴파일러 관련 버그는 Bugzilla에서, LLVM 컴파일러 관련 버그는 Git Issue에서 개발자들과 소통 중입니다. MSVC의 경우, 개발자들이 버그를 확인하고, 상태를 ‘Under Consideration’ 또는 ‘Under Investigation’ 등으로 분류하여 봇을 통해 공지합니다.

Explanation of Bug Status / 버그 상태 설명

시스템/플랫폼 상태 분류 태그 상세 설명
GCC Bugzilla Open New 최근 보고된 새로운 버그 상태.
GCC Bugzilla Open WAITING 버그 보고 후 검증 대기 중. 개발팀 또는 커뮤니티 확인 필요.
GCC Bugzilla Open UNCONFIRMED 버그 등록됐으나 아직 유효성 확인되지 않음. ‘canconfirm’ 권한을 가진 사람의 검증 필요.
GCC Bugzilla Open wrong-code 컴파일러가 소스 코드를 잘못 해석하거나 잘못된 코드를 생성할 때 사용되는 태그.
LLVM Git Issue Closed Fixed 문제가 해결되어 이슈가 닫힌 상태. 버그 수정 완료.
LLVM Git Issue Open miscompilation 컴파일러가 소스 코드의 컴파일을 잘못 처리하여 발생하는 오류를 지칭함.
LLVM Git Issue Open llvm:optimizations 최적화 관련 문제를 나타내는 태그. 컴파일러의 최적화 과정 중 발생하는 문제점을 다룸.
MSVC Developer Community Open Under Consideration(UC) 버그가 인지되었으며 수정 여부를 고려 중인 상태. ‘UC’는 버그에 대한 수정 우선순위가 아직 결정되지 않았음을 나타냄.
MSVC Developer Community Open Under Investigation(UI) 버그의 원인 및 해결 방안을 조사 중인 상태. ‘UI’는 버그가 현재 조사 중이며 해결책이 명확하지 않음을 의미함.
MSVC Developer Community Closed Fixed 문제가 해결되어 공식 버전에 포함된 상태. ‘Fixed’는 버그가 완전히 해결되었고 추가 조치가 필요 없음을 의미함.

Reported Bug List / 버그 리스트

Compiler Arch Bug Type Status Link
ICX/ICPX X86-64 Inaccurate Computation (부정확한 연산) Open Details
ICX/ICPX X86-64 Compiler Crash (크래시) Fixed Details
GCC Risc-V Inaccurate Computation (부정확한 연산) Open (New, needs-bisection, wrong-code) Details
LLVM Arm64 Pointer Dereference Omission (포인터 역참조 생략) Open Details
LLVM Risc-V Sign/Unsign Extension Issue (부호 확장 문제) Closed (Fixed) Details
LLVM Powerpc64 Sign/Unsign Extension Issue (부호 확장 문제) Open (miscompilation) Details
LLVM Powerpc64 Inaccurate Computation (부정확한 연산) Open (miscompilation) Details
LLVM Mips64el Inaccurate Computation (부정확한 연산) Open (llvm:optimizations) Details
LLVM Mips64 Inaccurate Computation (부정확한 연산) Open (miscompilation, llvm:optimizations) Details
MSVC Arm64 Inaccurate Computation (부정확한 연산) UC Details
MSVC Arm64 Inaccurate Computation (부정확한 연산) UC Details
MSVC Arm64 Inaccurate Computation (부정확한 연산) UC Details
MSVC Arm64 Inaccurate Computation (부정확한 연산) UC Details
MSVC Arm64 Inaccurate Computation (부정확한 연산) UC Details
MSVC X86-64 Incorrect Inline Call Order (부정확한 인라인 호출 순서) UC Details
MSVC X86-64 Misidentification of Different Variable Addresses (다른 변수 주소 동일 인식) UC Details
MSVC X86-64 Infinite Loop Elimination (무한 루프 제거) UC Details
MSVC X86-64 Inaccurate Calculation and Comparison of Constants (상수의 부정확한 계산 및 비교) UC Details
MSVC X86-64 Non-Compliance with C Standard for Hexadecimal Literal Constants (16진수 상수 리터럴 c 표준 미준수) UC Details
MSVC X86-64 Omission of Stack Initialization for Local Variables (지역 변수의 스택 초기화 누락) UC Details
MSVC X86-64 Compiler Crash (크래시) UC Details
MSVC X86-64 Compiler Crash (크래시) UC Details
MSVC X86-64 Sign/Unsign Extension Issue (부호 확장 문제) UI Details
MSVC X86-64 Sign/Unsign Extension Issue (부호 확장 문제) UC Details
MSVC X86-64 Sign/Unsign Extension Issue (부호 확장 문제) UC Details
MSVC Arm64 Sign/Unsign Extension Issue (부호 확장 문제) UC Details
MSVC X86-64 Inaccurate Computation (부정확한 연산) UC Details
MSVC X86-64 Inaccurate Computation (부정확한 연산) UC Details
MSVC X86-64 Inaccurate Computation (부정확한 연산) UC Details
MSVC X86-64 Inaccurate Computation (부정확한 연산) UC Details
MSVC X86-64 Inaccurate Computation (부정확한 연산) Fixed Details

PoC 및 스텔스 백도어 시나리오

PoC 코드 / PoC Codes

PoC 코드들은 컴파일러 최적화로 인해 발생할 수 있는 버그들이 어떻게 취약점으로 발전할 수 있는지를 보여줍니다. 이 코드들은 컴파일러 버그가 취약점으로 활용될 가능성에 대해 증명하고, 보안 연구원들과 개발자들에게 해당 위험성에 대한 인식을 제고하기 위해 제작되었습니다.

스텔스 백도어 시나리오 / Stealth Backdoor Scenarios

스텔스 백도어 시나리오는 컴파일러 버그가 오픈 소스 프로젝트에 삽입되어 잠재적 취약점으로 악용될 수 있는 가능성을 제시합니다. 이는 개발자들에게 컴파일러 최적화 버그로 인한 위험성에 대한 사전 예방의 중요성을 일깨우기 위한 것입니다.

OpenSSH Stealth Backdoor Demo - Password Authentication Bypass

OpenSSH Stealth Backdoor Demo

libxml2 Stealth Backdoor Demo - Return Address Overwrite

libxml2 Stealth Backdoor Demo

위와 같이 컴파일러 최적화 버그가 발생하는 코드가 오픈소스 프로젝트에 작성될 경우, 겉보기에는 문제가 없고 여러 컴파일러, 아키텍처, 옵션에서 정해진 로직대로 잘 작동할 수 있습니다. 하지만 특정 컴파일러, 아키텍처, 옵션에서는 예상치 못한 취약점으로 발전할 가능성이 있습니다. 이러한 시나리오는 보안 연구 및 소프트웨어 개발 커뮤니티에 경각심을 불러일으키고, 보안과 관련된 코드 검증 및 테스트의 중요성을 강조하기 위해 작성되었습니다.