[논문 리뷰] Nyx-Net: Network Fuzzing with Incremental Snapshots
Nyx-Net는 증분 전체 가상머신 스크래치와 선택적 네트워크 스택 에뮬레이션을 사용함으로써 복잡한 상태 기반 네트워크 서비스의 고성능, 카디오 가이드 퍼징을 가능하게 하는 새로운 스크래치 기반 퍼징 프레임워크이다. 기존 최고 수준의 방법 대비 최대 300배의 속도 향상을 달성했으며, Lighttpd, MySQL 클라이언트, Firefox의 IPC 인터페이스 등에서 이전에 알려지지 않은 버그를 발견하였다.
Coverage-guided fuzz testing ("fuzzing") has become mainstream and we have observed lots of progress in this research area recently. However, it is still challenging to efficiently test network services with existing coverage-guided fuzzing methods. In this paper, we introduce the design and implementation of Nyx-Net, a novel snapshot-based fuzzing approach that can successfully fuzz a wide range of targets spanning servers, clients, games, and even Firefox's Inter-Process Communication (IPC) interface. Compared to state-of-the-art methods, Nyx-Net improves test throughput by up to 300x and coverage found by up to 70%. Additionally, Nyx-Net is able to find crashes in two of ProFuzzBench's targets that no other fuzzer found previously. When using Nyx-Net to play the game Super Mario, Nyx-Net shows speedups of 10-30x compared to existing work. Under some circumstances, Nyx-Net is even able play "faster than light": solving the level takes less wall-clock time than playing the level perfectly even once. Nyx-Net is able to find previously unknown bugs in servers such as Lighttpd, clients such as MySQL client, and even Firefox's IPC mechanism - demonstrating the strength and versatility of the proposed approach. Lastly, our prototype implementation was awarded a $20.000 bug bounty for enabling fuzzing on previously unfuzzable code in Firefox and solving a long-standing problem at Mozilla.
연구 동기 및 목표
- 기존의 카디오 가이드 퍼저가 활용하기 어려운 복잡하고 상태 기반의 네트워크 서비스를 효율적으로 퍼징하는 데 도전한다.
- 실제 네트워크 I/O나 비증분 스크래치 기반 접근 방식에 비해 가상화 기반 스크래치를 사용하여 네트워크 지연, 상태 오염, 신뢰할 수 없는 정리 등의 기존 방법의 한계를 극복한다.
- 소스 코드나 맞춤형 하니스 없이도 서버, 클라이언트, 게임, IPC 메커니즘과 같은 이전에 퍼징이 어려웠던 대상에 대해 효과적인 퍼징을 가능하게 한다.
- 선택적 네트워크 스택 에뮬레이션을 통해 실제 네트워크 I/O와 테스트 실행을 분리함으로써 테스트 처리량과 코드 커버리지를 향상시킨다.
- Firefox, Lighttpd, MySQL과 같은 실제 시스템에서의 새로운 취약점을 발견함으로써 실용성과 보안 영향을 입증한다.
제안 방법
- 테스트 케이스 간에 결정론적인 리셋과 근접한 네이티브 성능을 달성하기 위해 가상화 기반 증분 스크래치를 활용한다.
- 실제 네트워크 트래픽의 오버헤드를 피하면서도 프로토콜의 정밀도를 유지하기 위해 네트워크 I/O 작업의 선택적 에뮬레이션을 도입한다.
- Nyx를 기반으로 하되, 네트워크 인식 스크래치를 추가하여 대상이 퍼저가 제공한 입력을 수신할 준비가 되었을 때 스크래치를 트리거한다.
- 퍼징 중 네트워크 스택 동작을 모니터링하고 제어하기 위해 경량 에이전트를 사용하여 정밀한 타이밍과 상태 관리를 가능하게 한다.
- 코드 커버리지가 높아지도록 입력 생성을 유도하기 위해 카디오 가이드 변형과 피드백을 적용한다. 이는 복잡한 메시지 전달 프로토콜 전반에서 높은 코드 커버리지를 보장한다.
- 바이너리 전용 퍼징을 지원하여 표준 리포지터리에서 제공하는 사전 컴파일된 바이너리에 직접 테스트를 수행할 수 있도록 하며, 소스 코드나 수동 하니싱이 필요하지 않다.
실험 결과
연구 질문
- RQ1기존 파일 기반 퍼징에 적합하지 않은 복잡하고 상태 기반의 네트워크 서비스에 대해 카디오 가이드 퍼징을 효과적으로 적용할 수 있는 방법은 무엇인가?
- RQ2실제 네트워크 I/O나 비증분 스크래치 기반 접근 방식에 비해 증분 전체 가상머신 스크래치가 퍼징 성능과 신뢰성에 얼마나 기여하는가?
- RQ3선택적 네트워크 스택 에뮬레이션은 실제 프로덕션 네트워크 프로토콜에서 실질적인 버그를 유발할 수 있도록 충분한 정밀도를 유지하면서도 퍼징 오버헤드를 줄일 수 있는가?
- RQ4Firefox의 IPC, Lighttpd, Super Mario Bros.와 같은 실제 대상에 적용했을 때 Nyx-Net의 테스트 처리량과 코드 커버리지에 미치는 영향은 어떠한가?
- RQ5Nyx-Net은 기존 퍼저가 감지하지 못한 프로덕션 시스템에서 이전에 알려지지 않은 취약점을 발견할 수 있는가?
주요 결과
- Nyx-Net는 최고 수준의 네트워크 퍼징 기법 대비 최대 300배 높은 테스트 처리량을 달성하여 취약점 발견 속도를 크게 향상시켰다.
- 복잡한 네트워크 프로토콜 표면의 깊은 탐색을 가능하게 하기 위해 평균적으로 코드 커버리지를 최대 70%까지 향상시켰다.
- 기존의 다른 퍼저가 발견하지 못한 ProFuzzBench 대상에서 두 개의 새로운 버그를 발견하여, 뛰어난 탐색 능력을 입증했다.
- Super Mario Bros.의 게임플레이 퍼징에서 이전 접근 방식 대비 10~30배의 속도 향상을 달성했으며, 완벽한 인간 플레이아웃보다도 더 짧은 벽시계 시간 내에 레벨을 클리어했다.
- 프로토타입을 통해 이전에 퍼징이 어려웠던 Firefox의 IPC 인터페이스에 성공적으로 퍼징을 수행하여 2만 달러의 버그 바운티를 획득하고, 널리 알려지지 않은 포인터 해제 버그 세 건과 공격 가능한 취약점 두 건을 책임감 있게 공개했다.
- Lighttpd의 malloc 환경에서 발생하는 정수 언더플로우 버그를 발견하여 출시 전에 패치되었으며, 이는 실생활 보안 테스트에서 Nyx-Net의 효과성을 입증한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.