기존의 버그 찾기 도구 (Fuzzer) 들은 마치 눈을 가리고 문을 두드리는 사람과 비슷했습니다.
상태 없는 프로그램: 문이 열려 있는지, 잠겨 있는지 상관없이 무작위로 문을 두드려 봅니다.
상태가 있는 프로그램 (프로토콜): 하지만 네트워크 프로그램은 다릅니다. "문 열기"를 먼저 해야 "안으로 들어가기"가 가능합니다. 순서가 틀리면 문은 열리지 않거나, 경비원이 쫓아냅니다.
기존 도구의 한계: 기존 도구들은 이 '순서 (상태)'를 잘 이해하지 못해, 무작위로 문을 두드려도 문이 열리지 않아 시간을 낭비하거나, 아주 깊은 곳에 숨겨진 중요한 버그를 찾지 못했습니다.
2. APFuzz 의 두 가지 비밀 무기
APFuzz 는 이 문제를 해결하기 위해 두 가지 혁신적인 방법을 도입했습니다.
🔑 무기 1: "자동 열쇠 찾기" (상태 모델 학습)
기존 방식: 탐정이 "어디에 열쇠가 있을까?"라고 물으면, 사람이 직접 "여기 열쇠 구멍이 있어요"라고 알려줘야 했습니다. (수동 분석)
APFuzz 의 방식: APFuzz 는 스스로 코드를 분석하여 "어떤 변수가 문이 열리고 닫히는 상태를 결정하는 열쇠인가?"를 찾아냅니다.
정적 분석 (Static Analysis): 코드를 미리 훑어보며 "아마도 이 변수가 열쇠일 거야"라고 후보를 뽑습니다.
동적 분석 (Dynamic Analysis): 실제로 프로그램을 실행해보며 "오, 이 변수가 정말로 상태에 따라 변하네? 진짜 열쇠야!"라고 확인하고 나머지는 걸러냅니다.
결과: 사람이 일일이 알려주지 않아도, APFuzz 는 스스로 프로토콜의 '상태 지도'를 그려내어 가장 효율적인 경로로 탐험할 수 있습니다.
🧠 무기 2: "AI 비서 (LLM) 의 도움" (메시지 구조 이해)
기존 방식: 프로토콜은 복잡한 언어 (이진법) 로 되어 있습니다. 기존 도구는 이 언어를 모르고 무작위로 글자를 바꿔서 보냈기 때문에, 서버가 "이건 말이 안 돼!"라고 거절해 버렸습니다.
APFuzz 의 방식: APFuzz 는 거인 (Large Language Model, LLM) 같은 AI 비서를 고용했습니다.
AI 비서는 프로토콜의 규칙서 (RFC) 를 공부하고, 초기 메시지들을 분석하여 "이 부분은 '주소'고, 저 부분은 '날짜'야"라고 메시지의 구조를 이해합니다.
이제 APFuzz 는 무작위로 글자를 바꾸는 게 아니라, "주소 부분만 살짝 바꿔서 보낼까?"처럼 구조를 이해한 채로 변형을 가합니다.
효과: 서버가 거절하지 않고 받아들일 수 있는 '정당한' 메시지를 만들어내어, 훨씬 더 깊은 곳까지 침투할 수 있게 됩니다.
3. 실험 결과: 얼마나 잘할까요?
연구진은 13 가지 유명한 네트워크 프로그램 (FTP, SSH, DNS 등) 을 대상으로 APFuzz 를 테스트했습니다.
더 많은 코드 커버리지: 기존 도구보다 약 10% 더 많은 코드 영역을 탐색했습니다. (더 넓은 집을 샅샅이 뒤짐)
더 빠른 속도: 같은 시간 동안 더 많은 메시지를 주고받으며, 5~6 배 더 빠른 속도로 탐험을 진행했습니다.
더 많은 버그 발견: 다른 도구들이 찾지 못한 새로운 버그 (치명적인 오류) 를 가장 많이 찾아냈습니다. 특히, 24 시간 안에 다른 도구들이 24 시간 이상 걸려 찾거나 못 찾았던 버그를 APFuzz 는 몇 시간 만에 찾아냈습니다.
4. 결론: 왜 이 연구가 중요할까요?
APFuzz 는 "사람의 손이 덜 들고, 더 똑똑하며, 더 빠르게" 네트워크 보안 문제를 해결할 수 있는 길을 열었습니다.
비유하자면: 예전에는 낯선 건물을 수동으로 지도를 그리며 들어가는 탐정이었다면, APFuzz 는 건물 구조를 스스로 파악하고, AI 비서와 함께 최적의 경로를 찾아내는 자동화된 특수부대입니다.
이 기술은 5G/6G 같은 미래 통신망이나 중요한 시스템의 보안을 강화하는 데 큰 역할을 할 것으로 기대됩니다.
1. 문제 제기 (Problem)
네트워크 프로토콜 구현체의 취약점을 발견하기 위한 그레이박스 프로토콜 페이징 (Greybox Protocol Fuzzing) 은 상태 기반 (Stateful) 프로그램 테스트의 핵심 기술입니다. 그러나 기존 기술에는 다음과 같은 주요 한계가 존재합니다.
상태 표현의 자동화 부재 (State Representation):
기존 도구 (AFLNET 등) 는 서버 응답의 상태 코드에 의존하거나, 사용자가 소스 코드를 분석하여 상태 변수를 직접 지정해야 합니다.
이는 수동 개입이 필요하며, 새로운 프로토콜에 적용하기 어렵고 오검출 (False Positive) 및 누락 (False Negative) 문제가 발생합니다.
이진 프로토콜에 대한 구조 인식 부족 (Input Structure Awareness):
기존 LLM 기반 페이저 (ChatAFL 등) 는 텍스트 기반 프로토콜 (HTTP 등) 에서는 문법 패턴을 추출할 수 있으나, 이진 프로토콜 (Binary Protocols, 예: SSH, DNS, TLS) 에서는 적용이 불가능합니다.
이진 프로토콜의 경우 필드 (Field) 단위의 구조를 이해하지 못하면 무작위 변형 (Mutation) 이 메시지 형식을 깨뜨려 서버에 거절당하거나, 깊은 상태 공간 (Deep-state space) 을 탐색하지 못합니다.
2. 방법론 (Methodology)
저자들은 APFuzz (Automatic greybox Protocol Fuzzer) 를 제안하며, 상태 모델과 메시지 모델의 관점에서 페이저의 지능성을 향상시키는 두 가지 핵심 기술을 도입했습니다.
가. 자동 상태 표현 학습 (State Representation Learning)
프로토콜의 상태를 자동으로 식별하고 추론하기 위해 정적 분석 (Static Analysis) 과 동적 분석 (Dynamic Analysis) 의 2 단계 프로세스를 사용합니다.
정적 분석: 소스 코드에서 잠재적인 상태 변수를 식별합니다.
네트워크 이벤트 루프 내에서 로드/스토어되는 전역 정수 변수나 사용자 정의 구조체 멤버를 찾습니다.
열거형 (Enum) 타입 변수나 상수 값을 할당받는 변수를 포함하도록 규칙을 확장합니다.
동적 분석: 정적 분석 결과의 노이즈 (오검출) 를 필터링합니다.
LLVM 기반의 도구를 사용하여 런타임 중 변수의 값을 추적합니다.
필터링 규칙:
고유한 값의 개수가 최소/최대 임계치 내에 있어야 함.
각 값의 히트 카운트가 일정 임계치를 초과해야 함.
이를 통해 프로토콜 상태와 밀접하게 관련된 변수만 선별하여 정확한 상태 모델을 추론합니다.
나. 입력 구조 학습 및 필드 기반 변형 (Input Structure Learning)
대형 언어 모델 (LLM) 을 활용하여 이진 프로토콜의 메시지 구조를 해석하고 필드 단위의 변형을 수행합니다.
LLM 기반 시드 해석:
초기 시드 (Seeds) 를 이진 텍스트 문자열로 변환하여 LLM 에 입력합니다.
Few-shot prompting 기법을 사용하여 LLM 이 메시지의 필드 이름, 비트 시작 위치, 비트 길이를 추출하도록 유도합니다.
필드 기반 변형 (Field-based Mutation):
추출된 필드 구조 정보를 바탕으로, 단순 바이트 단위가 아닌 필드 단위 (Field-level) 로 변형을 가합니다.
확률 ϵ에 따라 LLM 이 학습한 필드 구조를 기반으로 한 변형 (Field-based stack operators) 또는 기존 AFLNET 의 변형을 선택적으로 적용합니다.
이는 이진 프로토콜에서도 유효한 메시지를 생성하여 깊은 상태 공간으로 진입할 수 있게 합니다.
3. 주요 기여 (Key Contributions)
자동 상태 변수 식별: 소스 코드를 분석하여 상태 변수를 자동으로 식별하는 방법을 제안하여, 수동 개입 없이 정확한 상태 모델 추론과 상태 추적을 가능하게 했습니다.
LLM 기반 이진 프로토콜 구조 학습: LLM 을 활용하여 이진 프로토콜의 메시지 구조를 학습하고, 이를 필드 단위 변형에 적용함으로써 텍스트 기반뿐만 아니라 이진 프로토콜에서도 구조 인식 페이징을 가능하게 했습니다.
종합적인 평가: 널리 사용되는 벤치마크인 ProFuzzBench를 기반으로 APFuzz 를 기존 베이스라인 (AFLNET) 및 최신 페이저 (StateAFL, NSFuzz, ChatAFL 등) 와 비교 평가했습니다.
4. 실험 결과 (Results)
ProFuzzBench 에 포함된 13 개의 네트워크 서버 (텍스트 기반 7 개, 이진 기반 6 개) 를 대상으로 24 시간 동안 5 회 실험을 수행한 결과는 다음과 같습니다.
코드 커버리지 (Code Coverage):
APFuzz 는 분기 (Branch) 커버리지에서 10.03%, 라인 (Line) 커버리지에서 8.42% 만큼의 평균 향상률을 보였습니다. 이는 베이스라인인 AFLNET 대비 가장 높은 성능입니다.
처리량 (Throughput):
실행 속도 (Executions/sec) 와 메시지 전송 속도 (Messages/sec) 에서 APFuzz 는 각각 5.19 배와 6.20 배의 향상된 처리량을 기록하며, 효율적인 상태 탐색을 가능하게 했습니다.
취약점 발견 (Vulnerability Discovery):
13 개의 고유한 충돌 (Crashes) 을 발견하여 다른 모든 페이저 (NSFuzz 와 StateAFL 은 12 개, AFLNET 은 8 개) 보다 많은 취약점을 찾았습니다.
특히 Dnsmasq와 TinyDTLS에서 힙 버퍼 오버플로우, 글로벌 버퍼 오버플로우 등을 수천 초 내에 발견하여 다른 도구들 (>24 시간 또는 실패) 보다 훨씬 빠른 속도를 보였습니다.
상태 모델 추론:
APFuzz 는 더 정교하고 정확한 상태 전이 그래프 (Vertex/Edges) 를 추론하여, 서버의 실제 상태 흐름을 더 잘 반영함을 확인했습니다.
5. 의의 및 결론 (Significance & Conclusion)
자동화 및 지능성 향상: APFuzz 는 수동 분석에 의존하던 기존 프로토콜 페이징의 한계를 극복하고, 정적/동적 분석과 LLM 을 결합하여 완전 자동화된 상태 기반 페이징을 실현했습니다.
이진 프로토콜 지원 확장: LLM 을 활용하여 텍스트 프로토콜뿐만 아니라 이진 프로토콜에서도 구조 인식 변형을 가능하게 함으로써, 5G/6G 등 현대 통신 시스템의 보안 테스트에 중요한 기여를 했습니다.
실용성: 높은 처리량과 우수한 취약점 발견 능력을 통해, 실제 네트워크 프로토콜 구현체의 보안 강화에 효과적으로 적용될 수 있음을 입증했습니다.
한계점 및 향후 과제: 현재 구현은 이진 프로토콜 내 필드 간의 복잡한 의존성 (Dependency) 문제를 완전히 해결하지 못했으며, 상태 변수 필터링 과정에서 여전히 일부 노이즈가 발생할 수 있습니다. 향후 이러한 의존성 문제 해결 및 더 정교한 상태 변수 필터링 기술 개발이 필요하다고 결론지었습니다.