Skip to main content
QUICK REVIEW

[논문 리뷰] Testing Database Engines via Pivoted Query Synthesis

Manuel Rigger, Zhendong Su|arXiv (Cornell University)|2020. 01. 13.
Software Testing and Debugging Techniques참고 문헌 25인용 수 28
한 줄 요약

이 논문은 데이터베이스 관리 시스템(DBMS)의 논리 버그를 탐지하기 위해 특정 임의의 '피봇 행'을 검색하도록 설계된 쿼리를 합성하는 새로운 일반적인 접근법인 SQLancer를 제안한다. 이 방법은 쿼리가 결과 집합에 반드시 해당 피봇 행을 포함하도록 보장함으로써 함의 오라클로 작용한다; 만약 DBMS가 피봇 행을 반환하지 못하면 논리 버그가 발생한 것이다. 이 방법은 SQLite, MySQL, PostgreSQL에서 모두 123개의 버그를 발견했으며, 그 중 99개는 수정되거나 확인되었으며, 높은 효과성과 광범위한 적용 가능성을 입증한다.

ABSTRACT

Relational databases are used ubiquitously. They are managed by database management systems (DBMS), which allow inserting, modifying, and querying data using a domain-specific language called Structured Query Language (SQL). Popular DBMS have been extensively tested by fuzzers, which have been successful in finding crash bugs. However, approaches to finding logic bugs, such as when a DBMS computes an incorrect result set, have remained mostly untackled. Differential testing is an effective technique to test systems that support a common language by comparing the outputs of these systems. However, this technique is ineffective for DBMS, because each DBMS typically supports its own SQL dialect. To this end, we devised a novel and general approach that we have termed Pivoted Query Synthesis. The core idea of this approach is to automatically generate queries for which we ensure that they fetch a specific, randomly selected row, called the pivot row. If the DBMS fails to fetch the pivot row, the likely cause is a bug in the DBMS. We tested our approach on three widely-used and mature DBMS, namely SQLite, MySQL, and PostgreSQL. In total, we reported 123 bugs in these DBMS, 99 of which have been fixed or verified, demonstrating that the approach is highly effective and general. We expect that the wide applicability and simplicity of our approach will enable the improvement of robustness of many DBMS.

연구 동기 및 목표

  • 크래시를 일으키지 않지만 잘못된 결과를 반환하는 논리 버그를 탐지하는 데 도전하는 것.
  • DBMS가 서로 다른 SQL 다이얼렉트와 의미 체계를 지원할 경우 실패하는 차등 테스팅의 한계를 극복하는 것.
  • 특정 행이 쿼리 결과에 포함되어야 한다는 조건을 보장하는 경량의 일반 목적의 테스팅 오라클을 설계하는 것.
  • 기존에 알려지지 않은 논리 버그를 자동으로 스케일러블하게 탐지할 수 있도록 성숙하고 널리 사용되는 DBMS에서의 적용을 가능하게 하는 것.
  • 대상 쿼리 합성 기반으로 DBMS의 신뢰성 향상을 위한 실용적이고 확장 가능한 프레임워크를 제공하는 것.

제안 방법

  • 피봇 행에 대해 참이 되는 WHERE 및 JOIN 절을 구성함으로써 무작위로 선택된 '피봇 행'을 반드시 포함하는 쿼리를 생성하는 방법.
  • 피봇 행에 대해 참이 되도록 표현식을 동적으로 수정하는 제약 기반 합성 기법을 사용하여 피봇 행이 결과 집합에 반드시 포함되도록 보장하는 방법.
  • 이 방법은 함의 오라클을 활용한다: 만약 DBMS가 피봇 행을 반환하지 못하면 논리 버그가 탐지된다.
  • 이 방법은 DBMS의 특정 SQL 다이얼렉트와 기능에 맞게 적응 가능한 도구인 SQLancer로 구현되어 있으며, 여러 DBMS를 지원한다.
  • 공유되는 의미 체계가 필요 없이도 정확성을 확보할 수 있도록 의미적 제약 조건을 통합한 무작위 쿼리 생성 기법을 활용한다.
  • 내부 오류(예: 손상, 크래시)를 유도하고 측면 효과를 통해 이를 탐지하는 기법들이 이 방법을 보완한다.

실험 결과

연구 질문

  • RQ1차등 테스팅에 의존하지 않고도 DBMS의 논리 버그를 탐지할 수 있는 일반적이고 경량의 오라클를 설계할 수 있는가?
  • RQ2피봇 행 쿼리 합성 기법이 기존의 패치 테스팅 및 무작위 쿼리 생성 기법으로는 탐지되지 않은 논리 버그를 효과적으로 드러낼 수 있는가?
  • RQ3이 방법은 서로 다른 SQL 다이얼렉트와 기능을 가진 다양한 성숙한 DBMS에서 얼마나 스케일링 가능한가?
  • RQ4함의 오라클이 실전 DBMS에서 이전에 알려지지 않은 논리 버그를 얼마나 효과적으로 탐지할 수 있는가?
  • RQ5이 방법을 집계 및 세트 연산과 같은 복잡한 SQL 구조에서의 버그 탐지로 확장할 수 있는가?

주요 결과

  • 이 방법은 널리 사용되는 세 가지 DBMS인 SQLite, MySQL, PostgreSQL에서 총 123개의 버그를 발견했다: SQLite에서 65개, MySQL에서 25개, PostgreSQL에서 9개.
  • 이 중 99개의 버그는 개발자들에 의해 확인되거나 수정되었으며, 이 중 61개는 함의 오라클을 통해, 34개는 데이터베이스 손상 등의 내부 오류를 통해 탐지되었다.
  • 한 개의 MySQL 크래시는 보안 취약점(CVE-2019-2879)으로 분류되었다.
  • 이 방법은 2013년부터 존재해 온 심각한 논리 버그를 SQLite에서 성공적으로 탐지했으며, 이는 기존 도구로는 이전에 탐지되지 않았다.
  • 이 방법은 SQLite의 동적 타이핑 및 부분 인덱스와 같은 DBMS 전용 기능에도 효과적으로 작용한다. 이는 다른 DBMS에서 지원되지 않는 기능이다.
  • 이 방법의 단순성과 일반성 덕분에 공유 의미 체계나 복잡한 오라클이 필요 없이 다양한 DBMS에 넓게 적용 가능하다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.