Skip to main content
QUICK REVIEW

[논문 리뷰] FuzzerGym: A Competitive Framework for Fuzzing and Learning

William Drozd, Michael D. Wagner|arXiv (Cornell University)|2018. 07. 19.
Teaching and Learning Programming참고 문헌 22인용 수 25
한 줄 요약

FuzzerGym은 OpenAI Gym과 libFuzzer를 통합하여 회색상자 퍼징에서 변형 연산자 선택을 최적화하는 강화학습(RL) 기반 프레임워크를 제안한다. 이는 이방향, 저지연 RL 추론을 가능하게 하며, 다섯 가지 벤치마크에서 libFuzzer의 랜덤 변형 연산자 선택 방식을 능가하는 우수한 코드 커버리지 성능을 달성한다. 이는 프로그램 상태 특징에 기반해 훈련된 딥 네트워크를 통해 효과적인 변형 전략을 학습함으로써 달성된다.

ABSTRACT

Fuzzing is a commonly used technique designed to test software by automatically crafting program inputs. Currently, the most successful fuzzing algorithms emphasize simple, low-overhead strategies with the ability to efficiently monitor program state during execution. Through compile-time instrumentation, these approaches have access to numerous aspects of program state including coverage, data flow, and heterogeneous fault detection and classification. However, existing approaches utilize blind random mutation strategies when generating test inputs. We present a different approach that uses this state information to optimize mutation operators using reinforcement learning (RL). By integrating OpenAI Gym with libFuzzer we are able to simultaneously leverage advancements in reinforcement learning as well as fuzzing to achieve deeper coverage across several varied benchmarks. Our technique connects the rich, efficient program monitors provided by LLVM Santizers with a deep neural net to learn mutation selection strategies directly from the input data. The cross-language, asynchronous architecture we developed enables us to apply any OpenAI Gym compatible deep reinforcement learning algorithm to any fuzzing problem with minimal slowdown.

연구 동기 및 목표

  • 커버리지 기반 회색상자 퍼징(CGF)에서 랜덤 변형 연산자 선택의 비효율성을 해결하기 위해 강화학습을 적용한다.
  • 빠른 퍼징(μs)과 느린 RL 추론(ms) 간의 지연 격차를 이방향 아키텍처로 효과적으로 해소한다.
  • 수동적인 특징 공학 없이 입력 데이터와 프로그램 상태로부터 직접 최적의 변형 전략을 학습할 수 있도록 딥 강화학습을 구현한다.
  • 대규모 퍼징과 고급 RL 알고리즘을 통합해 향상된 소프트웨어 테스팅을 위한 유연하고 확장 가능한 프레임워크를 구축한다.

제안 방법

  • 퍼징 루프를 강화학습 환경으로 모델링하기 위해 libFuzzer를 OpenAI Gym과 통합한다. 여기서 상태는 프로그램 커버리지 메트릭이며, 행동은 변형 연산자이고, 보상은 코드 커버리지의 증가이다.
  • 컴파일 타임 인스트루멘테이션(llvm Sanitizers)을 활용해 커버리지, 데이터 플로우, 오류 탐지 등 저지연의 풍부한 프로그램 상태 정보를 RL 에이전트에 노출시킨다.
  • 딥 네트워크를 사용해 입력 데이터의 표현을 학습하고 최적의 변형 연산자 선택으로 매핑함으로써 자동화된 데이터 기반 특징 공학을 구현한다.
  • 아타리 RL에서 유래한 이방향 프레임 스킵 기법을 적용해 RL 추론 속도를 퍼저의 실행 속도에서 분리함으로써 성능 오버헤드를 최소화한다.
  • GRPC 기반 이방향 버퍼를 사용해 퍼저와 RL 에이전트 간의 조율을 수행함으로써 속도 격차에도 불구하고 실시간 의사결정을 가능하게 한다.
  • 모든 OpenAI Gym 호환 RL 알고리즘을 지원하여 최신 딥 RL 방법과 즉각적인 플러그 앤 플레이 통합을 가능하게 한다.

실험 결과

연구 질문

  • RQ1강화학습이 랜덤 선택보다 더 깊은 코드 커버리지를 달성하기 위해 회색상자 퍼징에서 변형 연산자 선택을 향상시킬 수 있는가?
  • RQ2실시간 시스템에서 빠른 퍼징(μs)과 느린 RL 추론(ms) 간의 성능 격차를 효과적으로 메울 수 있는가?
  • RQ3재훈련 없이도 입력 데이터 표현만으로 다양한 프로그램 간에 일반화 가능한 학습된 RL 정책을 도출할 수 있는가?
  • RQ4더 적은 총 실행 런 수가 주어졌을 때, RL 기반 변형 연산자 선택이 기준 랜덤 전략을 얼마나 뛰어나게 성능을 내는가?
  • RQ5기존 퍼징 인프라(libFuzzer 등)에 RL을 통합할 수 있는가? 이때 성능 오버헤드는 최소한으로 유지되는가?

주요 결과

  • RL 기반 퍼저는 다섯 개의 벤치마크 중 네 개에서 libFuzzer의 랜덤 변형 연산자 선택 방식보다 뛰어난 평균 라인 커버리지 성능을 달성했다.
  • 기준보다 훨씬 많은 실행 런 수가 주어졌음에도 불구하고, RL 퍼저는 더 깊은 커버리지 성능을 달성했으며, 이는 지능적인 변형 연산자 선택의 효과를 입증한다.
  • 이방향 아키텍처와 프레임 스킵 메커니즘 덕분에 퍼저의 속도가 저하되지 않은 채 성능 향상을 달성했다.
  • 훈련된 RL 정책은 재훈련 없이도 re2와 sqlite와 같은 다양한 프로그램 간에 일반화되었으며, 이는 입력 데이터로부터 강력한 특징 학습이 가능함을 시사한다.
  • 딥 강화학습을 프로덕션 수준의 퍼징 도구(libFuzzer)와 성공적으로 통합했으며, OpenAI Gym 인터페이스를 통해 고급 RL 알고리즘의 사용을 가능케 했다.
  • 보상 함수는 싱귤레이터가 탐지한 오류에 보상을 주는 방식으로 확장 가능하나, 이는 자동으로 탐지 가능한 오류에 국한된다.

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

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

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

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