fuzzing-dictionary
작성자 trailofbitsfuzzing-dictionary 스킬은 파서, 프로토콜, 파일 형식에 맞는 도메인 특화 토큰, 매직 값, 프로토콜 문자열로 퍼징 사전을 만드는 데 도움을 줍니다. 무작위 변이만으로 진전이 막혔을 때, libFuzzer, AFL++, cargo-fuzz에서 더 많은 커버리지가 필요할 때 유용합니다.
이 스킬의 평점은 78/100으로, 충분히 등록 후보로 볼 만합니다. 디렉터리 사용자 입장에서는 언제 써야 하는지 빠르게 파악할 수 있고, 일반적인 퍼징 프롬프트보다 워크플로 세부 정보가 더 잘 정리돼 있어 시행착오를 줄여줍니다. 사전 기반 퍼징을 재사용 가능한 가이드로 두고 싶을 때 설치해두면 유용하지만, 도구 조작형이라기보다 기법 중심에 가깝습니다.
- 파서, 프로토콜, 파일 형식 퍼징에 대한 명확한 적용 신호가 있어 에이전트가 언제 이 스킬을 써야 하는지 쉽게 판단할 수 있습니다.
- 작동 맥락이 충분히 담겨 있으며, 따옴표 처리된 항목, 16진 이스케이프, 토큰 주입, libFuzzer/AFL++/cargo-fuzz 간 형식 차이 같은 구체적 개념이 포함되어 있습니다.
- 본문에 구조화된 헤딩과 워크플로 신호가 있어 점진적으로 정보를 드러내기 좋고, 에이전트가 내용을 빠르게 이해하는 데도 도움이 됩니다.
- 설치 명령, 스크립트, 연계 파일이 제공되지 않으므로 자동화나 바로 실행 가능한 도구를 기대하면 안 됩니다.
- 이 스킬은 전체 퍼징 엔드투엔드 워크플로보다 기법 자체에 초점이 맞춰져 있어, 대상별 사전 작성에는 여전히 외부 맥락이 필요할 수 있습니다.
fuzzing-dictionary 스킬 개요
fuzzing-dictionary 스킬은 퍼저가 더 깊은 파서, 프로토콜, 파일 형식 코드까지 도달하도록 이끄는 큐레이션된 토큰, 매직 값, 프로토콜 문자열로 구성된 fuzzing dictionary를 만들고 활용하는 데 도움을 줍니다. libFuzzer, AFL++, cargo-fuzz로 퍼징 중인데 무작위 변이가 더 이상 진전되지 않는다면, fuzzing-dictionary 스킬은 퍼지 타깃을 다시 작성하지 않고도 커버리지를 높일 수 있는 실용적인 방법을 제공합니다.
이 스킬은 이미 실행되는 타깃은 갖고 있지만, 검증 로직이 많은 영역까지 더 잘 도달해야 하는 사람에게 가장 잘 맞습니다. 입력에 예약 키워드, 구조화된 헤더, 명령 동사, 형식 전용 상수가 들어 있고, 일반적인 랜덤 퍼징이 이런 요소를 놓칠 때 특히 유용합니다.
fuzzing-dictionary가 해결하는 문제
핵심 역할은 “퍼저가 막혔다”는 상태를 더 유도적인 입력 전략으로 바꾸는 것입니다. 잘 만든 fuzzing dictionary는 초반 거부를 우회하고, 상태를 가진 파싱 분기를 열어 주며, 몇 개의 유효해 보이는 토큰이 있어야만 드러나는 엣지 케이스를 노출하는 데 도움이 됩니다.
어디에 가장 잘 맞는가
fuzzing-dictionary는 식별 가능한 토큰을 다루는 파서, 프로토콜 핸들러, 파일 리더를 퍼징할 때 사용하세요. 입력 구조가 원시 바이트 난수성보다 더 중요할 때는 매우 잘 맞고, 토큰 어휘가 없는 순수 산술 코드, 이미지 변환 코드, 혹은 논리 위주의 코드에는 상대적으로 덜 적합합니다.
이 스킬이 다른 이유
fuzzing-dictionary 스킬은 단순히 “문자열을 더 넣는 것”이 아닙니다. 대상의 검증 및 파싱 규칙에 맞는 토큰을 고르고, 퍼저가 실제로 소비할 수 있는 형태로 정리하는 데 초점을 둡니다. 그래서 단순히 그럴듯하기만 한 프롬프트보다, 실제로 바로 쓸 수 있는 dictionary가 필요할 때 훨씬 유용합니다.
fuzzing-dictionary 스킬 사용 방법
설치하고 소스 위치 확인하기
먼저 디렉터리 설치 흐름을 사용하세요: npx skills add trailofbits/skills --skill fuzzing-dictionary. 설치 후에는 SKILL.md부터 읽고, 같은 스킬 폴더 안에 연결된 자료가 있으면 이어서 확인하세요. 이 repo에서는 스킬이 독립형으로 구성되어 있으므로, 주 소스는 스킬 파일 자체입니다.
타깃을 실제로 쓸 수 있는 프롬프트로 바꾸기
fuzzing-dictionary usage는 타깃의 도메인, 입력 형식, 실패 모드를 함께 줄 때 가장 잘 작동합니다. 예를 들어 “내 앱용 fuzzing dictionary를 만들어줘”라고만 묻기보다, 아래 항목을 함께 요청하는 편이 좋습니다.
- 파서 또는 프로토콜 이름
- 샘플 입력이나 문법 힌트
- 알려진 키워드, 헤더, 매직 바이트, 구분자
- 사용하는 퍼저와 dictionary 형식 요구사항
- 어떤 커버리지가 부족한지, 또는 어디서 검증이 실패하는지
좋은 프롬프트 예시는 이런 식입니다: “DNS 유사 프로토콜 파서를 위한 fuzzing-dictionary를 만들어 주세요. 일반적인 레코드 타입, 구분자, 제어 토큰을 포함하고, AFL++ 형식에 맞춰 주세요.”
올바른 순서로 스킬 읽기
이 repository에서는 다음 순서가 가장 유용합니다.
- 작업 흐름과 적용 기준을 설명하는
SKILL.md - dictionary 항목과 토큰 범주에 대한 인라인 예시
- 이 스킬이 효과가 없는 타깃에까지 무리해서 쓰지 않도록 도와주는 “When to Apply” 안내
실전 사용 팁
항목은 짧고, 유효해 보이며, 도메인에 맞게 유지하세요. 입력을 초반에 거부하는 타깃이라면, 눈에 띄는 토큰과 함께 경계값이나 잘못된 변형도 몇 개 섞는 것이 좋습니다. 첫 번째 dictionary가 너무 일반적이면, 타깃이 실패하기 전에 실제로 도달하는 정확한 파싱 지점에 맞춰 다시 조정하세요.
fuzzing-dictionary 스킬 FAQ
fuzzing-dictionary는 퍼징 전문가만 사용할 수 있나요?
아닙니다. fuzzing-dictionary 스킬은 이미 무엇을 퍼징하는지 알고 있고 예시 입력을 제공할 수 있는 초보자도 사용할 수 있습니다. 퍼저 내부 구조를 깊이 알 필요는 없지만, 타깃의 토큰 어휘를 설명할 만큼의 맥락은 필요합니다.
언제 이 스킬을 쓰지 말아야 하나요?
타깃에 의미 있는 입력 토큰이 없거나, 별도 유도 없이도 커버리지가 이미 충분하거나, 병목이 입력 품질이 아니라 하니스 설계에 있다면 fuzzing-dictionary는 건너뛰세요. dictionary는 망가진 fuzz target, 크래시만 나는 버그, 또는 코퍼스 시드가 부족해서 생긴 문제를 해결해 주지 못합니다.
일반 프롬프트와는 무엇이 다른가요?
일반 프롬프트는 종종 범용 토큰 목록만 생성합니다. fuzzing-dictionary 스킬이 더 유용한 이유는 설치 가능한 작업 흐름, 퍼저 호환 포맷, 그리고 dictionary가 실제로 커버리지를 개선하는 구체적 조건에 맞춰져 있기 때문입니다. 그래서 fuzzing-dictionary install 판단과 반복 사용에 더 적합합니다.
모든 퍼저에 맞나요?
주요 dictionary 친화적 생태계, 특히 libFuzzer, AFL++, cargo-fuzz에 잘 맞습니다. 도구 체인이 다른 입력 메커니즘을 쓴다면 토큰 선택 로직은 참고할 수 있지만, 사용 전에 필요한 dictionary 문법은 반드시 확인해야 합니다.
fuzzing-dictionary 스킬 개선 방법
타깃 증거를 더 잘 제공하기
가장 좋은 fuzzing-dictionary guide 입력에는 타깃에서 실제로 확인한 토큰이 들어갑니다. 예를 들어 프로토콜 동사, enum 이름, 필드 레이블, 매직 넘버, 예약 키워드가 그렇습니다. 작은 샘플 코퍼스나 몇 개의 실패 입력만 있어도, 막연한 프로젝트 설명보다 토큰 선택을 훨씬 더 정확하게 개선할 수 있습니다.
목적별로 토큰을 요청하기
fuzzing-dictionary for Code Generation을 사용할 때는 토큰을 역할별로 나누세요: 필수 키워드, 선택적 수정자, 경계값, 잘못된 변형. 이렇게 하면 출력이 하나의 평평한 문자열 목록으로 끝나지 않고, 유효한 파싱 경로와 거의 유효한 엣지 케이스를 함께 커버할 수 있습니다.
흔한 실패 모드를 점검하기
가장 큰 실수는 범위가 너무 넓은 dictionary, 타깃 문법과 맞지 않는 항목, 변이에 도움이 되기엔 너무 긴 토큰입니다. 첫 결과가 너무 일반적으로 느껴진다면 범위를 하나의 파서, 하나의 프로토콜 명령 집합, 또는 하나의 파일 형식 섹션으로 좁혀 다시 생성하세요.
첫 실행 이후에 반복 개선하기
처음 fuzzing을 돌려서 어떤 토큰이 실제로 커버리지를 늘리거나 새로운 상태를 여는지 확인하세요. 그런 다음 의미 없는 항목은 제거하고, 트레이스나 로그에서 놓친 키워드를 추가한 뒤, 무작정 키우기보다 더 작고 정밀한 fuzzing-dictionary를 다시 생성하세요.
