UBfuzz: Finding Bugs in Sanitizer Implementations

Ahn9807 (토론 | 기여)님의 2024년 7월 2일 (화) 06:45 판 (새 문서: 분류: 시스템 논문 == 개요 == YARPGen이라는 도구를 사용하여 컴파일러 Sanitizer의 Fuzzing기법을 제시한다. YARPGen은 다양한 컴파일러 세니타이저에서 발생하는 버그를 찾아내기 위해 설계되었으며, 이를 통해 컴파일러 세니타이저의 안정성과 신뢰성을 높이고자 합니다. == Motivation == YARPGen이 다루는 문제는 C 및 C++ 컴파일러에서 사용하는 Sanitizer에서 발생할 하는 버...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

YARPGen이라는 도구를 사용하여 컴파일러 Sanitizer의 Fuzzing기법을 제시한다. YARPGen은 다양한 컴파일러 세니타이저에서 발생하는 버그를 찾아내기 위해 설계되었으며, 이를 통해 컴파일러 세니타이저의 안정성과 신뢰성을 높이고자 합니다.

Motivation

YARPGen이 다루는 문제는 C 및 C++ 컴파일러에서 사용하는 Sanitizer에서 발생할 하는 버그를 발견하는 것이다. Sanitizer에서 발생한 False-negative과 같은 경우에는 Sanitizer의 정확성과 신뢰성을 해치기 때문에 중요한 문제이다.

Importance

기존의 무작위 테스트 도구들은 다양한 최적화를 유도하는데 제한적이었으며, 발생하는 버그를 효율적으로 탐지하지 못하였다. 이들 도구는 생성된 코드의 다양성을 충분히 확보하지 못하고, 미리 정의된 패턴에 의존하는 경향이 있었다.

Challenge

이 논문은 다음 2개의 Challenge point를 제시하였다.

  • UB program generation: 효율적인 잘못된 프로그램의 생성
  • Compiler optimization: Compiler optimization으로 인해서 변화하는 UB의 원인 파악

Main Idea & Design

  • Shadow Statement Insertion: 다양한 최적화 기회를 극대화하기 위해 프로그램 생성 시 여러 버그들을 자동으로 Seed 프로그램에 Insertion한다.
  • Crash-stie mapping: 컴파일러 Optimization에 대한 False negative에 대한 효과를 검증하기 위해서, 자동으로 버그가 Compiler optimization에 의해서 생성된 버그인지를 체크한다.

이 두개를 위해서 Design을 PL적으로 설명하면서 제시하고 있다. 자세한 내용은 논문 참고.

Conclusion

  • 다양한 최적화를 유도하는 프로그램을 자동으로 생성하는 메커니즘을 도임하였으며, 테스트 과정 대부분을 자동화 하여 테스트 효율성을 높임.
  • 코드 커버리지 측면에서는 기존 방식보다 좋아지지는 않음. 그러나 Detectability측면에서 보면, 향상이 있었음
  • 논문에서 지적하듯이 반드시 Seed program에 의존해야 한다는 한계와, 모든 UB를 Cover할수는 없다는 단점이 있음.