[논문 리뷰] Modular Abstract Definitional Interpreters for WebAssembly
이 논문은 x86과 WebAssembly로 컴파일된 C 프로그램 간의 보안 이질성을 조사하며, 4,469개의 취약한 C 프로그램 중 24%가 WebAssembly에서 스택 캐나리가 없어 기존의 native 코드와 다른 실행 결과를 보임을 발견한다. 이 연구는 컴파일러 보호 기능인 스택 오버플로우 보호 기능이 WebAssembly에 일관되게 적용되지 않음을 입증하며, 그렇지 않으면 잡히지 않을 수 있는 버퍼 오버플로우가 악용될 위험이 있음을 시사한다.
Even though static analyses can improve performance and secure programs against vulnerabilities, no static whole-program analyses exist for WebAssembly (Wasm) to date. Part of the reason is that Wasm has many complex language concerns, and it is not obvious how to adopt existing analysis frameworks for these features. This paper explores how abstract definitional interpretation can be used to develop sophisticated analyses for Wasm and other complex languages efficiently. In particular, we show that the semantics of Wasm can be decomposed into 19 language-independent components that abstract different aspects of Wasm. We have written a highly configurable definitional interpreter for full Wasm 1.0 in 1628 LOC against these components. Analysis developers can instantiate this interpreter with different value and effect abstractions to obtain abstract definitional interpreters that compute inter-procedural control and data-flow information. This way, we develop the first whole-program dead code, constant propagation, and taint analyses for Wasm, each in less than 210 LOC. We evaluate our analyses on 1458 Wasm binaries collected by others in the wild. Our implementation is based on a novel framework for definitional abstract interpretation in Scala that eliminates scalability issues of prior work.
연구 동기 및 목표
- C 프로그램의 보안 특성, 특히 버퍼 오버플로우 보호 기능이 x86으로 컴파일될 때 WebAssembly로 컴파일된 경우에도 유지되는지 평가하기.
- 기존의 컴파일러 보호 기능인 스택 캐나리가 x86 네이티브 코드 대비 WebAssembly 바이너리에 존재하지 않는지 조사하기.
- 배포된 애플리케이션에서 보안 위험을 유발할 수 있는 WebAssembly와 네이티브 코드 간의 실행 이질성을 규명하고 분석하기.
- 향후 크로스컴파일 보안 연구를 위해 1,088개의 이질적 프로그램 데이터셋 제공하기.
- 버퍼 오버플로우를 초월한 보다 광범위한 보안 이질성에 대한 연구 유도하기.
제안 방법
- Clang 및 Emscripten 툴체인을 사용해 버퍼 오버플로우가 알려진 4,469개의 C 프로그램을 x86과 WebAssembly로 각각 컴파일하기.
- Linux에서 Wasmer 런타임을 사용해 동일한 조건에서 x86 및 WebAssembly 바이너리 실행하기.
- 버퍼 오버플로우 발생 시 충돌 여부를 비교함으로써 실행 이질성 식별하기.
- 수동 역공학을 통해 이질적 바이너리의 생성된 코드 차이 분석하기. 특히 스택 캐나리의 부재에 초점하기.
- 컴파일러 최적화 수준(예: -O1)이 이질성 존재에 미치는 영향 평가하기. 최적화가 보호 기능 생성 여부에 영향을 줄 수 있음을 확인함.
- 재현 가능성과 추가 분석을 위해 1,088개의 이질적 프로그램과 해당 x86 및 WebAssembly 바이너리의 공개 데이터셋 제공하기.
실험 결과
연구 질문
- RQ1버퍼 오버플로우가 알려진 C 프로그램이 x86과 WebAssembly로 컴파일되었을 때, 실행 결과가 다를까?
- RQ2취약한 C 프로그램에서 WebAssembly와 네이티브 코드 간의 실행 이질성의 근본 원인은 무엇인가?
- RQ3스택 캐나리와 같은 컴파일러 보안 메커니즘이 WebAssembly와 네이티브 코드 백엔드 간에 어느 정도 다를까?
- RQ4컴파일러 최적화와 코드 변형은 WebAssembly 바이너리의 보안 보호 기능 유무에 어떤 영향을 미치는가?
- RQ5버퍼 오버플로우를 초월한 보다 광범위한 보안 이질성이 WebAssembly 컴파일 과정에서 발생하는가?
주요 결과
- 4,469개의 취약한 C 프로그램 중 24%가 x86과 WebAssembly 바이너리 간에 이질적인 실행 결과를 보였다.
- 이질성의 근본 원인은 항상 WebAssembly 바이너리에서 스택 캐나리가 부재한 데 기인하며, x86 바이너리에는 존재한다.
- x86 바이너리는 스택 기반 버퍼 오버플로우 발생 시 충돌하지만, WebAssembly 바이너리는 계속 실행을 이어가며 런타임 보호 기능의 부재를 시사한다.
- WebAssembly에서 스택 캐나리가 없는 것은 WebAssembly 사양의 결함 때문이 아니라 컴파일러 백엔드 선택의 결과이다.
- -O1과 같은 컴파일러 최적화 수준은 보안 보호 기능이 생성되는지 여부에 영향을 미칠 수 있으며, 이는 이질성 존재 여부에 영향을 준다.
- x86 및 WebAssembly 바이너리가 포함된 1,088개의 이질적 프로그램 데이터셋은 향후 연구를 위해 공개되어 있다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.