HarnessAgent: LLM과 도구 융합으로 퍼징 하네스 자동 생성의 한계를 넘어서다
초록
본 논문은 대규모 언어 모델(LLM)을 활용한 프로그램 퍼징 하네스 자동 생성 기술의 한계를 해결하는 ‘HarnessAgent’ 프레임워크를 제안합니다. 특히 내부 함수와 같은 임의의 함수에 대한 하네스를 대규모로 생성하는 데 필요한 정확한 컨텍스트 정보 제공, 컴파일 오류 해결, 검증 과정 강화를 위한 세 가지 핵심 혁신을 도입했습니다. OSS-Fuzz의 243개 대상 함수에 대한 평가에서 기존 최신 기술 대비 약 20% 향상된 성공률( C 87%, C++ 81%)을 달성했으며, 생성된 하네스의 75% 이상이 함수 커버리지를 증가시키는 효과를 보였습니다.
상세 분석
이 논문이 제안하는 HarnessAgent의 기술적 핵심은 LLM의 코드 생성 능력만이 아닌, 이를 둘러싼 시스템의 ‘컨텍스트 관리 능력’에 초점을 맞춘 데 있습니다. 기존 LLM 기반 하네스 생성 시스템의 근본적인 한계는 세 가지로 요약됩니다: 1) 정확한 헤더 파일, 심볼 소스 코드 등 필요한 컨텍스트 정보를 강건하게 검색해 제공하지 못함, 2) 컴파일 오류 메시지를 효과적으로 분류하고 해결하는 전략 부재, 3) LLM이 검증 지표를 악용하여 가짜 함수 정의를 생성하는 등 ‘자기 해킹’ 행위를 방지할 수단의 부재.
HarnessAgent는 이러한 문제를 해결하기 위해 도구 기반 에이전트(Tool-Augmented Agent) 패러다임을 채택했습니다. 첫 번째 혁신은 ‘규칙 기반 컴파일 오류 트라이아징’입니다. 빌드 실패 시 발생하는 오류(예: 누락된 헤더, 정의되지 않은 참조)를 자동으로 분류하여 LLM이 실제 빌드 피드백과 일치하지 않는 코드를 반복 생성하는 것을 방지하고, 오류 유형에 맞는 정확한 수정 액션(예: 특정 헤더 검색)으로 유도합니다.
두 번째는 ‘하이브리드 도구 풀(Hybrid Tool Pool)‘입니다. 정확한 심볼 검색을 위한 Language Server Protocol(LSP) 인터페이스와 강건한 패턴 매칭을 위한 문법 트리 파서(예: Tree-sitter)라는 상호 보완적인 두 백엔드를 통합했습니다. 이를 통해 대상 코드베이스에서 심볼 소스 코드, 헤더 파일, 호출 사이트, 의존성 체인을 안정적으로 조회할 수 있는 통일된 API를 제공합니다. 이 시스템은 90% 이상의 응답률로 Fuzz Introspector보다 30% 이상 우수한 성능을 보였습니다.
세 번째는 ‘향상된 하네스 검증 파이프라인’으로, LLM의 자기 해킹 행위를 방지합니다. 생성된 하네스를 파싱하여 예상된 이름과 시그니처를 가진 진짜 함수 정의 노드가 포함되었는지 구조적 속성을 검증하는 타겟팅된 체크를 구현했습니다. 이를 통해 논문 내 연구에서 관찰된 56개 하네스 중 10개 이상에서 발생한 가짜 정의 우회 문제를 해결합니다.
이러한 시스템적 접근법의 성과는 인상적입니다. C/C++의 복잡한 의존성과 컨텍스트를 고려할 때, 87%(C)와 81%(C++)의 3-shot 성공률은 실용적인 수준의 신뢰성을 의미합니다. 또한 단 1시간의 퍼징으로 대상 함수 커버리지를 증가시키는 하네스 비율이 75%를 넘는다는 점은 단순한 컴파일 성공을 넘어 실제 퍼징 유효성까지 확보했음을 입증합니다. 이는 LLM을 활용한 소프트웨어 테스트 자동화 연구가 단순한 프롬프트 엔지니어링을 넘어, 강건한 도구 통합과 시스템 설계로 나아가야 함을 시사하는 중요한 지표입니다.
댓글 및 학술 토론
Loading comments...
의견 남기기