Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

fuzzing-dictionary

パーサー・プロトコル・特定フォーマットのコードをファジングする際に、ドメイン固有のトークンをファザーに提供する辞書を生成します。対象の仕様や構文に精通したトークンリストを活用することで、ファジングの効率と脆弱性発見率を高めます。

description の原文を見る

> Fuzzing dictionaries guide fuzzers with domain-specific tokens. Use when fuzzing parsers, protocols, or format-specific code.

SKILL.md 本文

Fuzzing Dictionary

Fuzzing dictionary は、ドメイン固有のトークンを提供することで、ファザーを興味深いインプットへ導きます。純粋なランダムミューテーションの代わりに、ファザーは既知のキーワード、マジックナンバー、プロトコルコマンド、フォーマット固有の文字列を取り込み、パーサー、プロトコルハンドラー、ファイルフォーマットプロセッサーの深いコードパスに到達しやすくなります。

Overview

Dictionary はターゲットにとって意味のあるトークンを表す引用符で囲まれた文字列を含むテキストファイルです。これにより、ファザーは初期の検証チェックをバイパスし、ブラインドミューテーションだけでは到達しにくいコードパスを探索できます。

Key Concepts

ConceptDescription
Dictionary Entry引用符で囲まれた文字列(例:"keyword")またはキーバリューペア(例:kw="value"
Hex Escapes"\xF7\xF8" のような非印字文字のバイトシーケンス
Token Injectionファザーが生成されたインプットに dictionary エントリを挿入
Cross-Fuzzer FormatDictionary ファイルは libFuzzer、AFL++、cargo-fuzz で動作

When to Apply

以下の場合にこのテクニックを適用します:

  • パーサーをファジング(JSON、XML、設定ファイル)
  • プロトコル実装をファジング(HTTP、DNS、カスタムプロトコル)
  • ファイルフォーマットハンドラーをファジング(PNG、PDF、メディアコーデック)
  • カバレッジが早期に頭打ちになり、深いロジックに到達していない
  • ターゲットコードが特定のキーワードやマジック値をチェック

以下の場合はこのテクニックをスキップします:

  • フォーマット期待を持たない純粋なアルゴリズムをファジング
  • ターゲットにキーワードベースのパースがない
  • コーパスが既に高いカバレッジを達成している

Quick Reference

TaskCommand/Pattern
libFuzzer で使用./fuzz -dict=./dictionary.dict ...
AFL++ で使用afl-fuzz -x ./dictionary.dict ...
cargo-fuzz で使用cargo fuzz run fuzz_target -- -dict=./dictionary.dict
ヘッダーから抽出grep -o '".*"' header.h > header.dict
バイナリから生成strings ./binary | sed 's/^/"&/; s/$/&"/' > strings.dict

Step-by-Step

Step 1: Create Dictionary File

各行に引用符で囲まれた文字列を含むテキストファイルを作成します。コメント(#)をドキュメントに使用します。

Dictionary フォーマット例:

# Lines starting with '#' and empty lines are ignored.

# Adds "blah" (w/o quotes) to the dictionary.
kw1="blah"
# Use \\ for backslash and \" for quotes.
kw2="\"ac\\dc\""
# Use \xAB for hex values
kw3="\xF7\xF8"
# the name of the keyword followed by '=' may be omitted:
"foo\x0Abar"

Step 2: Generate Dictionary Content

利用可能な内容に基づいて、生成方法を選択します:

LLM から:

A dictionary can be used to guide the fuzzer. Write me a dictionary file for fuzzing a <PNG parser>. Each line should be a quoted string or key-value pair like kw="value". Include magic bytes, chunk types, and common header values. Use hex escapes like "\xF7\xF8" for binary values.

ヘッダーファイルから:

grep -o '".*"' header.h > header.dict

Man ページから(CLI ツール用):

man curl | grep -oP '^\s*(--|-)\K\S+' | sed 's/[,.]$//' | sed 's/^/"&/; s/$/&"/' | sort -u > man.dict

バイナリ文字列から:

strings ./binary | sed 's/^/"&/; s/$/&"/' > strings.dict

Step 3: Pass Dictionary to Fuzzer

ファザーに応じた適切なフラグを使用します(上記 Quick Reference を参照)。

Common Patterns

Pattern: Protocol Keywords

Use Case: HTTP またはカスタムプロトコルハンドラーをファジング

Dictionary 内容:

# HTTP methods
"GET"
"POST"
"PUT"
"DELETE"
"HEAD"

# Headers
"Content-Type"
"Authorization"
"Host"

# Protocol markers
"HTTP/1.1"
"HTTP/2.0"

Pattern: Magic Bytes and File Format Headers

Use Case: イメージパーサー、メディアデコーダー、アーカイブハンドラーをファジング

Dictionary 内容:

# PNG magic bytes and chunks
png_magic="\x89PNG\r\n\x1a\n"
ihdr="IHDR"
plte="PLTE"
idat="IDAT"
iend="IEND"

# JPEG markers
jpeg_soi="\xFF\xD8"
jpeg_eoi="\xFF\xD9"

Pattern: Configuration File Keywords

Use Case: 設定ファイルパーサーをファジング(YAML、TOML、INI)

Dictionary 内容:

# Common config keywords
"true"
"false"
"null"
"version"
"enabled"
"disabled"

# Section headers
"[general]"
"[network]"
"[security]"

Advanced Usage

Tips and Tricks

TipWhy It Helps
複数の生成方法を組み合わせLLM 生成キーワード + バイナリからの文字列は広い表面をカバー
境界値を含める"0""-1""2147483647" はエッジケースをトリガー
フォーマットデリミターを追加:, =, {, } はファザーが有効な構造を構築するのに役立つ
Dictionary を絞る数千ではなく 50-200 エントリが最適に動作
Dictionary の有効性をテストdict ありなしで実行、カバレッジを比較

Auto-Generated Dictionaries (AFL++)

afl-clang-lto コンパイラを使用する場合、AFL++ はバイナリの文字列比較から dictionary エントリを自動抽出します。これはコンパイル時の AUTODICTIONARY 機能を通じて行われます。

自動 dictionary を有効化:

export AFL_LLVM_DICT2FILE=auto.dict
afl-clang-lto++ target.cc -o target
# Dictionary saved to auto.dict
afl-fuzz -x auto.dict -i in -o out -- ./target

複数の Dictionary を組み合わせ

一部のファザーは複数の dictionary ファイルをサポート:

# AFL++ with multiple dictionaries
afl-fuzz -x keywords.dict -x formats.dict -i in -o out -- ./target

Anti-Patterns

Anti-PatternProblemCorrect Approach
完全な文を含めるファザーは散文ではなく原子的トークンが必要個別キーワードに分割
エントリを複製ミューテーション予算を浪費sort -u で重複排除
巨大な dictionaryファザーを遅化、有用なトークンを希釈フォーカス保持:50-200 最関連エントリ
Hex escapes を欠落非印字バイトが破損バイナリ値に \xXX を使用
コメントなしメンテナンスと監査が困難# コメントでセクションをドキュメント

Tool-Specific Guidance

libFuzzer

clang++ -fsanitize=fuzzer,address harness.cc -o fuzz
./fuzz -dict=./dictionary.dict corpus/

統合のヒント:

  • Dictionary トークンはミューテーション中に挿入/置換される
  • -max_len と組み合わせてインプットサイズを制御
  • -print_final_stats=1 を使用して dictionary 有効性メトリクスを表示
  • -max_len より長いエントリは無視される

AFL++

afl-fuzz -x ./dictionary.dict -i input/ -o output/ -- ./target @@

統合のヒント:

  • AFL++ は複数 dictionary 用に複数の -x フラグをサポート
  • afl-clang-ltoAFL_LLVM_DICT2FILE を使用して自動生成 dictionary を作成
  • Dictionary 有効性はファザー統計 UI に表示
  • トークンは決定的およびハボック段階で使用される

cargo-fuzz (Rust)

cargo fuzz run fuzz_target -- -dict=./dictionary.dict

統合のヒント:

  • cargo-fuzz は libFuzzer バックエンドを使用するため、すべての libFuzzer dict フラグが動作
  • ハーネスと並べて fuzz/ ディレクトリに dictionary ファイルを配置
  • ハーネスディレクトリから参照:cargo fuzz run target -- -dict=../dictionary.dict

go-fuzz (Go)

go-fuzz は組み込み dictionary サポートを持たず、手動でコーパスに dictionary エントリをシードできます:

# Convert dictionary to corpus files
grep -o '".*"' dict.txt | while read line; do
    echo -n "$line" | base64 > corpus/$(echo "$line" | md5sum | cut -d' ' -f1)
done

go-fuzz -bin=./target-fuzz.zip -workdir=.

Troubleshooting

IssueCauseSolution
Dictionary ファイルが読み込まれないパス間違い、またはフォーマットエラーファザー出力で dict 解析エラーを確認、ファイルフォーマットを検証
カバレッジ改善なしDictionary トークンが無関連ターゲットコードで実際のキーワードを分析、別の生成方法を試行
Dict ファイルの構文エラーエスケープされていないクォート、または無効なエスケープバックスラッシュには \\、クォートには \" を使用、テスト実行で検証
ファザーが長いエントリを無視エントリが -max_len を超えるエントリを max インプット長以下に保つ、または -max_len を増やす
多くのエントリがファザーを遅化Dictionary が大きすぎる50-200 最関連エントリに削減

Related Skills

Tools That Use This Technique

SkillHow It Applies
libfuzzer-dict= フラグ経由のネイティブ dictionary サポート
aflpp-x フラグ経由のネイティブ dictionary サポート、AUTODICTIONARIES による自動生成
cargo-fuzzlibFuzzer バックエンドを使用、-dict= サポートを継承

Related Techniques

SkillRelationship
fuzzing-corpusDictionary はコーパスを補完:コーパスは構造、dictionary はキーワードを提供
coverage-analysisカバレッジデータを使用して dictionary 有効性を検証
harness-writingハーネス構造により、どの dictionary トークンが有用かを決定

Resources

Key External Resources

AFL++ Dictionaries 一般的なフォーマット(HTML、XML、JSON、SQL など)用の事前構築 dictionary。フォーマット固有ファジングの良い出発点。

libFuzzer Dictionary Documentation libFuzzer の公式 dictionary フォーマットと使用法ドキュメント。トークン挿入戦略とパフォーマンス含意を説明。

Additional Examples

OSS-Fuzz Dictionaries Google の継続的ファジングサービスからの実世界 dictionary。プロジェクトディレクトリで *.dict ファイルを検索して、本番例を参照。

ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
trailofbits
リポジトリ
trailofbits/skills
ライセンス
CC-BY-SA-4.0
最終更新
不明

Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: trailofbits · trailofbits/skills · ライセンス: CC-BY-SA-4.0