이 레포지토리는 BoBpiler 팀이 BoB 프로젝트 기간 동안 이룬 성과를 담고 있습니다. BoBpiler 퍼저를 사용하여 다양한 컴파일러 최적화 버그를 탐지하였고, 이를 바탕으로 PoC(Proof of Concept)와 스텔스 백도어 시나리오를 개발하였습니다.
팀원
PM, 취약점 분석 트랙
- 프로젝트 총괄, 버그 분석 및 제보
- 논문 연구 및 작성, 발표자료
- PoC 작성 및 시나리오 개발
- Git issue 트래커 개발
- generator 개량, 퍼징 머신 관리
- CodeQL DB 구축
취약점 분석 트랙
- 버그 분석 및 제보, 논문 연구 및 작성
- generator 최적화, wasm 연구
- CodeQL DB 구축, Docker 환경 구축
- CVE case Study
취약점 분석 트랙
- 버그 분석 및 제보, 논문 연구 및 작성
- 퍼저 개발 및 유지보수, 퍼징 머신 관리
- PoC 작성 및 시나리오 개발
- Git issue 트래커 개발, Git 관리
- CodeQL DB 구축 및 쿼리 작성
- 정보과학회 발표
BoBpiler 팀이 BoBpiler 퍼저를 사용하여 발견하고 보고한 다양한 컴파일러의 최적화 버그들을 모아놓은 목록입니다. 각 컴파일러, 아키텍처, 버그 유형 및 상세 링크를 포함하고 있습니다. 이러한 버그 리포트는 해당 분야의 전문가들이 문제를 해결하고 소프트웨어 개발 과정에서 발생할 수 있는 유사한 문제와 잠재적인 보안 취약점을 예방하는 데 기여할 수 있습니다.
GCC 컴파일러 관련 버그는 Bugzilla에서, LLVM 컴파일러 관련 버그는 Git Issue에서 개발자들과 소통 중입니다. MSVC의 경우, 개발자들이 버그를 확인하고, 상태를 'Under Consideration' 또는 'Under Investigation' 등으로 분류하여 봇을 통해 공지합니다.
시스템/플랫폼 | 상태 분류 | 태그 | 상세 설명 |
---|---|---|---|
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'는 버그가 완전히 해결되었고 추가 조치가 필요 없음을 의미함. |
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 코드들은 컴파일러 최적화로 인해 발생할 수 있는 버그들이 어떻게 취약점으로 발전할 수 있는지를 보여줍니다. 이 코드들은 컴파일러 버그가 취약점으로 활용될 가능성에 대해 증명하고, 보안 연구원들과 개발자들에게 해당 위험성에 대한 인식을 제고하기 위해 제작되었습니다.
스텔스 백도어 시나리오는 컴파일러 버그가 오픈 소스 프로젝트에 삽입되어 잠재적 취약점으로 악용될 수 있는 가능성을 제시합니다. 이는 개발자들에게 컴파일러 최적화 버그로 인한 위험성에 대한 사전 예방의 중요성을 일깨우기 위한 것입니다.
위와 같이 컴파일러 최적화 버그가 발생하는 코드가 오픈소스 프로젝트에 작성될 경우, 겉보기에는 문제가 없고 여러 컴파일러, 아키텍처, 옵션에서 정해진 로직대로 잘 작동할 수 있습니다. 하지만 특정 컴파일러, 아키텍처, 옵션에서는 예상치 못한 취약점으로 발전할 가능성이 있습니다. 이러한 시나리오는 보안 연구 및 소프트웨어 개발 커뮤니티에 경각심을 불러일으키고, 보안과 관련된 코드 검증 및 테스트의 중요성을 강조하기 위해 작성되었습니다.