메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Finding Semantic Bugs in File Systems with an Extensible Fuzzing Framework

noriwiki
Finding Semantic Bugs in File Systems with an Extensible Fuzzing Framework
AuthorSeulbae Kim, Meng Xu, Sanidhya Kashyap, Jungyeon Yoon, Wen Xu, Taesoo Kim
ConferenceACM SOSP
Year2019

개요

본 연구에서는 메모리 오류뿐 아니라 파일 시스템의 시맨틱 버그를 탐지하기 위하여 새로운 퍼저(fuzzer)를 설계하였다. 제안된 퍼저는 입력 변형기(input mutator), 피드백 엔진(feedback engine), libOS 기반 실행기(libOS-based executor), 그리고 버그 재현기(bug reproducer)로 구성된다.

Motivation & Importance

File system은 구조가 복잡하고 다양한 유형의 버그가 존재한다. 기존 연구에서 Fuzzing 기법이 활발히 적용되었지만, 대부분 메모리 버그 탐지에 집중되어 있었으며 시맨틱 버그를 효과적으로 잡지는 못했다. 시맨틱 버그는 메모리 버그와 달리 보통 Kernel panic을 일으키지 않고 조용히 무시되거나 잘못된 동작을 유발하기 때문에 탐지가 더 어렵다. 따라서 시맨틱 버그를 겨냥한 퍼징 기법이 필요하다.

Main Idea

본 연구는 파일 시스템의 시맨틱 버그를 다음 세 가지 유형으로 분류한다.

버그 유형 설명 (및 버그 체커)
CI 시스템 크래시나 전원 차단 시 데이터가 올바르게 유지되지 않음

버그 체커: SymC3, eXplode, B3

SV 사양(예: POSIX)에 맞지 않는 구현

버그 체커: SibylFS, EnvyFS, Recon

LB 잘못된 알고리즘 사용 또는 잘못된 가정에 기반한 구현

버그 체커: 내장 검증(예: 기본 제공 체크)

ME 메모리 범위 초과 접근, use-after-free, 초기화되지 않은 읽기 등

버그 체커: KASan, KMSan, UBSan

  1. CI: Crash inconsistency
  2. SV: POSIX specification violation
  3. LB: File system-specific logic bugs
  4. ME: Memory errors

이를 기반으로 각 버그 유형에 대응하는 체크 플러그인(check plugin)을 퍼저에 설치할 수 있도록 설계하였다. 이러한 확장 가능한 플러그인 구조를 통해 다양한 시맨틱 버그를 탐지할 수 있으며, 기존의 메모리 버그 탐지 범위를 넘어서는 새로운 퍼징 프레임워크를 제공하였다.

Design

Input Mutator
File system image와 System call 둘다 Mutating시켰다. 또한 Synergy효과를 보기 위해서 우선 Image를 Mutating시키고 버그가 발견되지 않으면, System call mutator를 호출하고, 최종적으로 버그가 발견되지 않으면 새로운 System call을 추가시켜서 새로운 Mutating round를 진행하였다.
Library OS Based Executor
재현 가능성을 위해서 Library OS-based의 executor을 사용하였다.
Bug Checker Plugins
다양한 플러그인을 개발하여 Semantic버그가 있는지 체크하였다. 주된 내용은 어떻게 Crash consistency bug를 잡을 수 있는가가 논문에 나오며, 나머지 POSIX와 같은 경우에는 Oracle로 사용하는 SibyIFS라는 파일 시스템의 결과와 비교 하였고 Logic과 같은 경우에는 커널의 Debugging flag를 켜서, Memory는 기존과 마찬가지로 KASAN사용으로 검출하였다.
Feedback Engine
Branch covereage + CHecker-defined signal을 Mutator에 전달하여 의미있는 결과를 유도하는 부분이다.
Post Bug Processing
의미있는 PoC으로 잡아낸 버그를 만들어주는 부분이다. Vm Replay나 Delta debugging과 같은 방식을 채택하였다.

Conclusion

HYDRA가 제안한 시맨틱 버그 탐지 방식은 크게 보면 크래시 일관성(crash consistency) 문제를 어떻게 효과적으로 포착할 수 있는가에 초점을 맞춘 것으로 해석된다. 나머지 시맨틱 오류 유형과 관련된 기법들은 기존 연구에서 제안된 방법들을 상당 부분 계승한 것으로 보인다. 그럼에도 불구하고, 파일 시스템의 시맨틱 버그 자체를 퍼징(fuzzing)의 대상으로 삼았다는 점은 매우 신선하며, 연구의 독창성을 보여주는 중요한 기여라고 할 수 있다.