fuzzing-dictionary
bởi trailofbitsSkill fuzzing-dictionary giúp bạn xây dựng fuzzing dictionary với token theo miền, giá trị đặc biệt và chuỗi giao thức cho parser, protocol và định dạng tệp. Skill này hữu ích khi blind mutation bị chững lại và bạn cần tăng coverage với libFuzzer, AFL++, hoặc cargo-fuzz.
Skill này đạt 78/100, tức là một ứng viên khá tốt cho danh mục: người dùng trong thư mục có thể nhanh chóng nhận ra khi nào nên dùng, và nội dung cung cấp đủ chi tiết quy trình để giảm mò mẫm so với một prompt fuzzing chung chung. Skill phù hợp nếu bạn muốn một hướng dẫn tái sử dụng cho dictionary-driven fuzzing, dù thiên về kỹ thuật hơn là thao tác công cụ đầu-cuối.
- Hướng dẫn kích hoạt rõ ràng cho fuzzing parser, protocol và định dạng tệp giúp agent dễ xác định khi nào nên áp dụng skill.
- Nội dung vận hành khá đầy đủ, với các khái niệm cụ thể như entry trong dấu ngoặc kép, hex escape, token injection và các định dạng dùng chung giữa libFuzzer, AFL++, cargo-fuzz.
- Phần nội dung được tổ chức bằng các heading và tín hiệu quy trình, hỗ trợ mở rộng dần thông tin và giúp agent nắm bắt nhanh hơn.
- Không có lệnh cài đặt, script hay tệp đi kèm, nên người dùng không nên kỳ vọng tự động hóa hoặc bộ công cụ chạy ngay.
- Skill này tập trung vào kỹ thuật hơn là một quy trình fuzzing hoàn chỉnh từ đầu đến cuối, nên agent có thể vẫn cần ngữ cảnh bên ngoài để tạo dictionary phù hợp với mục tiêu cụ thể.
Tổng quan về skill fuzzing-dictionary
Skill fuzzing-dictionary giúp bạn xây dựng và sử dụng fuzzing dictionary: các token đã được tuyển chọn, giá trị “magic”, và chuỗi giao thức giúp bộ fuzzer đi sâu hơn vào code xử lý parser, protocol, hoặc định dạng file. Nếu bạn đang fuzz bằng libFuzzer, AFL++, hoặc cargo-fuzz mà mutation mù đang bị chững lại, skill fuzzing-dictionary cho bạn một cách thực tế để tăng coverage mà không cần viết lại fuzz target.
Skill này phù hợp nhất với những người đã có một target chạy được, nhưng cần mở rộng độ bao phủ vào phần logic kiểm tra/validate nặng. Nó đặc biệt hữu ích khi input của bạn có từ khóa dành riêng, header có cấu trúc, lệnh điều khiển, hoặc các hằng số đặc thù của định dạng mà fuzzing ngẫu nhiên thường bỏ sót.
Skill fuzzing-dictionary giải quyết vấn đề gì
Nhiệm vụ chính là biến câu “fuzzer của tôi bị kẹt” thành một chiến lược input có định hướng hơn. Một fuzzing dictionary tốt có thể giúp vượt qua các lần từ chối sớm, mở khóa các nhánh parse có trạng thái, và lộ ra các edge case chỉ xuất hiện khi đã có vài token trông hợp lệ.
Skill fuzzing-dictionary phù hợp nhất ở đâu
Hãy dùng fuzzing-dictionary khi bạn đang fuzz parser, bộ xử lý protocol, hoặc trình đọc file có các token dễ nhận diện. Đây là lựa chọn rất mạnh cho những trường hợp cấu trúc input quan trọng hơn sự hỗn loạn byte thuần túy, và sẽ kém hiệu quả hơn với code thiên về số học, biến đổi ảnh, hoặc logic nặng nhưng không có “từ vựng” token rõ ràng.
Vì sao skill này khác biệt
Skill fuzzing-dictionary không chỉ đơn giản là “thêm nhiều chuỗi hơn”. Nó tập trung vào việc chọn token khớp với luật validate và parse của target, rồi định dạng chúng theo cách mà fuzzer của bạn thật sự có thể tiêu thụ. Nhờ vậy, nó hữu ích hơn một prompt chung chung khi bạn cần một dictionary có thể hành động được, chứ không chỉ nghe có vẻ hợp lý.
Cách dùng skill fuzzing-dictionary
Cài đặt và tìm nguồn
Trước tiên hãy dùng luồng cài đặt của thư mục: npx skills add trailofbits/skills --skill fuzzing-dictionary. Sau khi cài xong, bắt đầu với SKILL.md, rồi đọc thêm mọi tài liệu được liên kết trong cùng thư mục skill đó. Trong repo này, skill là self-contained, nên nguồn chính là chính file skill.
Biến target của bạn thành một prompt dùng được
Cách dùng fuzzing-dictionary usage hiệu quả nhất là khi bạn cung cấp miền của target, định dạng input, và kiểu lỗi. Ví dụ, thay vì hỏi “tạo một fuzzing dictionary cho app của tôi”, hãy nêu rõ:
- tên parser hoặc protocol
- input mẫu hoặc gợi ý grammar
- keyword, header, magic bytes, hoặc dấu phân tách đã biết
- fuzzer bạn dùng và kỳ vọng về định dạng dictionary
- coverage nào còn thiếu hoặc bước validate nào đang fail
Một prompt mạnh sẽ có dạng như: “Tạo một fuzzing-dictionary cho parser giao thức giống DNS. Bao gồm các record type phổ biến, dấu phân tách, và control token, rồi định dạng cho AFL++.”
Đọc skill theo đúng thứ tự
Với repository này, đường đọc hữu ích nhất là:
SKILL.mdđể nắm workflow và quy tắc áp dụng- Mọi ví dụ inline về entry dictionary và nhóm token
- Hướng dẫn “When to Apply” để không dùng skill này cho target không thực sự hưởng lợi
Mẹo sử dụng thực tế
Giữ các entry ngắn, trông hợp lệ, và bám sát miền. Kết hợp token hiển nhiên với một vài biến thể ranh giới hoặc biến thể lỗi khi bạn biết target hay từ chối input quá sớm. Nếu dictionary đầu tiên quá chung chung, hãy tinh chỉnh theo đúng các điểm parse mà target đi qua trước khi fail.
FAQ về skill fuzzing-dictionary
Skill fuzzing-dictionary chỉ dành cho chuyên gia fuzzing thôi sao?
Không. Skill fuzzing-dictionary vẫn dùng tốt cho người mới, miễn là họ đã biết mình đang fuzz gì và có thể cung cấp input mẫu. Bạn không cần hiểu quá sâu nội bộ fuzzer, nhưng bạn cần đủ ngữ cảnh để mô tả vốn từ token của target.
Khi nào không nên dùng skill này?
Hãy bỏ qua fuzzing-dictionary nếu target không có token input có ý nghĩa, nếu coverage đã tốt mà không cần dẫn hướng, hoặc nếu nút thắt nằm ở thiết kế harness chứ không phải chất lượng input. Dictionary sẽ không sửa được fuzz target bị hỏng, bug chỉ-crash, hay vấn đề do thiếu corpus seed.
Skill này khác gì so với một prompt bình thường?
Một prompt bình thường thường chỉ sinh ra danh sách token khá chung chung. Skill fuzzing-dictionary hữu ích hơn vì nó được định hướng theo workflow có thể cài đặt, cách định dạng tương thích với fuzzer, và những điều kiện cụ thể mà dictionary thật sự cải thiện coverage. Điều đó khiến nó phù hợp hơn cho quyết định fuzzing-dictionary install và cho việc dùng lặp lại.
Skill này có phù hợp với mọi fuzzer không?
Nó phù hợp với các hệ sinh thái thân thiện với dictionary, đặc biệt là libFuzzer, AFL++, và cargo-fuzz. Nếu toolchain của bạn dùng cơ chế input khác, bạn vẫn có thể mượn logic chọn token, nhưng nên kiểm tra cú pháp dictionary yêu cầu trước khi áp dụng.
Cách cải thiện skill fuzzing-dictionary
Cung cấp bằng chứng tốt hơn về target
Input tốt nhất cho fuzzing-dictionary guide là các token thật lấy từ target: protocol verb, tên enum, nhãn field, số magic, hoặc reserved keyword. Chỉ cần một corpus nhỏ hoặc vài input bị fail cũng có thể cải thiện việc chọn token tốt hơn rất nhiều so với mô tả mơ hồ về dự án.
Yêu cầu token theo mục đích
Khi dùng fuzzing-dictionary for Code Generation, hãy tách token theo vai trò: từ khóa bắt buộc, bộ điều biến tùy chọn, giá trị biên, và biến thể lỗi. Cách này giúp đầu ra bao phủ cả đường parse hợp lệ lẫn edge case gần hợp lệ, thay vì chỉ tạo ra một danh sách chuỗi phẳng.
Cảnh giác với các kiểu lỗi thường gặp
Những lỗi lớn nhất là dictionary quá rộng, entry không khớp grammar của target, và token quá dài nên không còn hữu ích cho mutation. Nếu kết quả đầu tiên trông quá chung chung, hãy thu hẹp phạm vi xuống một parser, một bộ lệnh protocol, hoặc một phần định dạng file rồi tạo lại.
Lặp lại sau lần chạy đầu tiên
Dùng lượt fuzz đầu tiên để xem token nào thật sự tăng coverage hoặc chạm được state mới. Sau đó loại bỏ entry chết, thêm keyword bị thiếu từ trace hoặc log, và tạo lại một fuzzing-dictionary nhỏ hơn, chính xác hơn thay vì cứ mở rộng nó mãi.
