FuzzPilot: 구조화된 텍스트 퍼징 (Structured Text Fuzzing)을 위한 정체기 트리거 기반 레시피 검증
요약
FuzzPilot은 AFL++의 커버리지 정체기 시점에 변이 레시피를 검증하는 컨트롤러 연구입니다. 추론 과정을 핫패스에서 분리하여 효율성을 높이고, 언어 모델이나 로컬 규칙을 통해 JSON 기반의 변이 레시피를 생성 및 평가합니다.
핵심 포인트
- 커버리지 정체기 시 스냅샷 기반의 마이크로 캠페인 수행
- 언어 모델 에이전트 및 Ghidra 컨텍스트를 활용한 레시피 생성
- cJSON 실험 결과, 처리량은 유지하나 통계적 유의미성은 부족함
- 정체기 감소는 모델보다 컨트롤러의 재시작 메커니즘 영향이 큼
FuzzPilot은 비용이 많이 드는 추론 (reasoning) 과정을 변이 (mutation) 핫패스 (hot path)에서 분리하는 AFL++용 컨트롤러입니다. 커버리지 (coverage)가 정체기에 도달하면, 코퍼스 (corpus)를 스냅샷으로 저장하고, 후보 변이 레시피 (mutation recipes)를 준비하며, 이를 짧고 격리된 AFL++ 마이크로 캠페인 (micro-campaigns)에서 평가한 뒤, 긍정적인 검증 보상 (validation reward)을 가진 레시피만을 승격시킵니다. 레시피는 생성된 코드가 아닌 JSON 데이터입니다. 네이티브 커스텀 뮤테이터 (custom mutator)가 연산자 가중치 (operator weights), 바이트 범위 (byte ranges), 코퍼스 선택 규칙 (corpus-selection rules), 그리고 딕셔너리 토큰 (dictionary tokens)을 소비합니다. 후보 레시피는 로컬 규칙 또는 언어 모델 (language-model) 에이전트로부터 가져올 수 있으며, Ghidra에서 유도된 상수 (constants)와 디컴파일된 컨텍스트 (decompiled context)를 타겟 힌트 (target hints)로 사용합니다. 본 프리프린트 (preprint)는 의도적으로 좁은 범위인 cJSON 평가를 보고합니다. 우리는 각 실험군당 14,400초씩 5회 반복하여 순정 AFL++와 전체 FuzzPilot 에이전트를 비교했습니다. cJSON은 포화 (saturated) 상태입니다. 베이스라인 AFL++는 중앙값 약 2,500초에서 노출된 269-에지 (edge) 천장에 도달합니다. 따라서 본 실험은 언어 모델의 제안이 커버리지를 향상시키거나 cJSON 너머로 일반화되는지를 보여주지는 않습니다. 이 범위 내에서 FuzzPilot은 처리량 (throughput)을 유지하며 (중앙값 execs_per_sec은 베이스라인의 약 1.06배), 기술적으로 더 짧은 중앙값 정체기 (1,384초 대 2,532초)를 보여주지만, N=5에서 그 차이는 통계적으로 유의미하지 않습니다 (Mann-Whitney p=0.42). 검증 게이트 (validation gate)는 모델이 제안한 20개의 레시피를 평가했으나, 모든 보상이 0이었기 때문에 하나도 승격시키지 않았습니다. 관찰된 정체기 감소는 모델이나 레시피 뮤테이터보다는 컨트롤러의 스냅샷 및 재시작 메커니즘 (restart machinery) 덕분일 가능성이 높습니다. 이 버전은 감사 가능한 구현 보고서이자, 현재 진행 중인 비포화 타겟 (non-saturated-target) 평가를 위한 베이스라인으로 읽는 것이 가장 적절합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기