현대 소프트웨어 시스템은 웹 브라우저, 운영체제, 클라우드 인프라 등 다양한 형태로 우리의 일상과 산업 전반에 깊이 관여하고 있으며, 이들 시스템의 신뢰성과 안정성은 사회적 기반 시...
현대 소프트웨어 시스템은 웹 브라우저, 운영체제, 클라우드 인프라 등 다양한 형태로 우리의 일상과 산업 전반에 깊이 관여하고 있으며, 이들 시스템의 신뢰성과 안정성은 사회적 기반 시설의 핵심 요소로 간주되고 있다. 이러한 시스템의 품질을 보장하기 위해서는 다양한 종류의 버그를 체계적으로 탐지하고 제거하는 과정이 필수적이며, 특히 버그는 크게 메모리 안전성 버그와 의미적(논리적) 버그라는 두 가지 주요 범주로 나뉜다. 메모리 버그는 버퍼 오버플로우, use-after-free와 같이 명확한 보안 취약점을 유발할 수 있기 때문에 오랜 기간 퍼징(fuzzing) 연구의 중심 대상이 되어 왔다. 반면, 의미적 버그는 명시적인 충돌(crash)을 유발하지 않음에도 불구하고, 프로그램의 동작 오류를 야기하며 사용자 경험을 훼손하거나 보이지 않는 방식으로 잘못된 결과를 유도하는 등 실질적인 피해를 초래할 수 있다.
본 논문은 메모리 버그와 의미적 버그를 통합적으로 탐지하기 위한 새로운 퍼징 기반 프레임워크를 제안하며, differential fuzzing과 coverage-guided fuzzing 기법을 활용하여 이 두 범주에 대한 체계적인 접근을 시도한다. 먼저, CrFuzz는 입력 검증 로직에 주목하여 기존 퍼징 기법들이 접근하기 어려운 깊은 코드 경로에서 메모리 손상 버그를 유발하도록 설계된 퍼징 프레임워크이다. 이를 통해 다양한 목적의 복합 프로그램에서 실질적인 취약점을 효율적으로 탐지할 수 있음을 보인다.
다음으로, R2Z2는 웹 브라우저의 시각적 정확성에 중점을 두며, 동일한 입력에 대해 브라우저의 버전 간 렌더링 결과를 비교함으로써 시각적 회귀(regression) 버그를 효과적으로 탐지하는 differential testing 시스템이다. 이는 사용자가 직접 관찰할 수 있는 버그를 자동으로 검출할 수 있다는 점에서 의미 있는 진보를 이룬다.
마지막으로, Metamong은 기존의 자동화된 방법론들이 갖는 거짓 양성(false positive) 문제를 해소하고자, HTML 표준에 정의된 yielding 규칙을 이용하여 정확성 오라클을 구성하는 방식으로 렌더-업데이트(render-update) 버그를 탐지한다. Metamong은 동적으로 변경된 웹 페이지의 렌더링 상태를 기반으로 두 HTML 문서 간의 차이를 비교함으로써, 의도하지 않은 시각적 변경을 정밀하게 탐지할 수 있도록 설계되었다.
본 연구는 메모리 안전성과 의미적 정확성을 모두 포괄하는 소프트웨어 품질 보증 프레임워크를 제시하며, 이 두 가지 버그 유형을 동등하게 다루는 것이 실질적인 소프트웨어 신뢰성을 확보하는 데 있어 필수적임을 실증적으로 제시한다. 제안된 시스템들은 실제 널리 사용되는 소프트웨어에서 수십 개의 신규 취약점을 발견하였으며, 다수는 개발사로부터 인정 및 수정 조치를 받음으로써 본 연구의 실용성과 확장 가능성을 입증하였다.