Skip to main content
QUICK REVIEW

[논문 리뷰] 2LS: Heap Analysis and Memory Safety (Competition Contribution)

Viktor Malík, Martin Hruška|arXiv (Cornell University)|2019. 03. 02.
Formal Methods in Verification참고 문헌 3인용 수 5
한 줄 요약

2LS는 C 프로그램을 대상으로 하는 정적 분석 프레임워크로, 템플릿 기반 합성과 증분 $k$-인도크션을 사용하여 형상 및 내용 불변식을 조합함으로써 힙 분석을 향상시킨다. 프로그램에 어설션을 삽입하고 SAT 기반 추론을 활용하여 메모리 안전성 성질—예를 들어, null 포인터 해제, 자유 후 사용, 메모리 泄漏—의 검증을 가능하게 하며, 복잡한 데이터 구조를 다루는 새로운 MemSafety 범주에서 10개의 벤치마크 중 9개를 성공적으로 검증하였다.

ABSTRACT

2LS is a framework for analysis of sequential C programs that can verify and refute program assertions and termination. The 2LS framework is built upon the CPROVER infrastructure and implements template-based synthesis techniques, e.g. to find invariants and ranking functions, and incremental loop unwinding techniques to find counterexamples and k-induction proofs. The main improvements in this year's version are the ability of 2LS to analyse programs requiring combined reasoning about shape and content of dynamic data structures, and an instrumentation for memory safety properties.

연구 동기 및 목표

  • 데이터 구조 형상과 요소 값에 대한 동시 추론이 필요한 복잡한 힙 조작 C 프로그램의 검증 도전 과제를 해결한다.
  • null 포인터 해제, 자유 후 사용, 메모리 泄漏에 대한 어설션을 인코딩하여 메모리 안전성 검증을 향상시킨다.
  • 추상 도메인 조합과 기호적 경로 추적 기법을 통해 동적 데이터 구조의 정밀한 분석을 지원하기 위해 2LS 프레임워크를 확장한다.
  • 증분 SAT 해결을 활용하여 무한대 데이터 구조, 예를 들어 값이 [1,10] 범위에 제약된 단일 연결 리스트를 포함한 프로그램의 확장 가능한 검증을 가능하게 한다.
  • SV-COMP 경쟁 대회에 동적 데이터 구조의 형상 및 내용에 대한 추론 평가를 위한 새로운 벤치마크를 기여한다.

제안 방법

  • 루프 전개 및 초과 근사 기법을 적용하여 C 프로그램을 단일 정적 할당(SSA) 형식의 GOTO 프로그램으로 표현한다.
  • 템플릿 기반 합성을 사용하여 추상 도메인 내에서 귀납 불변식을 계산하며, 형상, 영역(구간), 기호적 경로 도메인을 조합한다.
  • 형상 및 다각형(영역) 불변식을 논리적 합성으로 조합하여 제품 도메인을 구성함으로써 포인터 구조와 수치적 값에 대한 동시 추론을 가능하게 한다.
  • 기호적 경로를 도입하여 어떤 루프가 실행되었는지 추적함으로써 경로 민감한 불변식과 정밀도 향상을 위한 파wr 도메인 조합을 실현한다.
  • 메모리 안전성 위반을 탐지하기 위해 프로그램을 어설션으로 장착한다: null 해제를 위한 $p \neq \mathtt{NULL}$, 자유 후 사용을 위한 $p \neq \mathit{fr}$, 메모리 泄漏를 위한 $\mathit{fr} \neq \&ao_{i}^{co}$.
  • 증분 SAT 해결을 통해 $k$-인도크션 및 $k$-불변식($k$IkI) 알고리즘을 활용하여 어설션과 종료 조건의 참 또는 거짓을 증명하거나 반증한다.

실험 결과

연구 질문

  • RQ1정적 분석 프레임워크는 C 프로그램의 동적 데이터 구조에 대해 형상과 내용 추론을 효과적으로 통합할 수 있는가?
  • RQ2기호 실행 및 불변식 합성 기법을 사용하여 메모리 안전성 성질—예를 들어, null 포인터 해제 및 자유 후 사용—을 정밀하게 인코딩하고 검증할 수 있는가?
  • RQ3템플릿 기반 합성과 도메인 조합은 복잡한 힙 조작 프로그램의 검증에 얼마나 향상시키는가?
  • RQ4기호적 경로 추상화는 다양한 프로그램 경로에 대한 불변식 정밀도 향상에 얼마나 효과적인가?
  • RQ5무한대 데이터 구조와 복잡한 메모리 연산을 포함한 프로그램 검증에서 $k$IkI 알고리즘의 확장성과 정확도는 어떠한가?

주요 결과

  • 2LS는 값이 [1,10] 범위에 제약된 무한대 단일 연결 리스트를 포함한 10개의 새로운 벤치마크 중 9개를 성공적으로 검증하여 형상과 내용 분석의 통합 능력이 뛰어나다는 것을 입증하였다.
  • SV-COMP의 MemSafety 범주에서 다른 모든 도구보다 뛰어난 성능을 보였으며, 다른 도구는 10개의 새로운 형상-내용 벤치마크 중 최대 3개만 검증하였다.
  • null 포인터 해제 및 자유 후 사용에 대한 메모리 안전성 검사는 어설션을 통해 인코딩되었고, SAT 기반 추론을 통해 정당성 증명되었으며, 대회에서 가짜 경고가 보고되지 않았다.
  • 메모리 泄漏 탐지는 루프가 없거나 루프가 완전히 전개된 프로그램에서만 정당성이 입증되었으며, 추상 동적 객체 내 모든 객체를 추적하는 데 한계가 있었다.
  • MemSafety 범주에서 4위를 기록하였으며, 메달 테이블에 근소한 차이로 못 미쳤으며, 확인되지 않은 증거로 인해 종료 분석에 여전히 도전 과제가 남아 있다.
  • $k$IkI 알고리즘은 순차적 C 프로그램에 대해 확장성은 입증되었지만, 재귀 처리 및 배열 내용 추론 처리에 한계가 있다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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