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

ossfuzz

OSS-Fuzzは、オープンソースプロジェクト向けに無料の継続的ファジングを提供するサービスです。継続的なファジングインフラのセットアップやプロジェクトの登録を行う際に使用します。

description の原文を見る

> OSS-Fuzz provides free continuous fuzzing for open source projects. Use when setting up continuous fuzzing infrastructure or enrolling projects.

SKILL.md 本文

OSS-Fuzz

OSS-Fuzz は、Google が開発したオープンソースプロジェクトで、継続的ファズテスト向けの無料分散インフラストラクチャを提供します。ファジングプロセスを簡素化し、より簡単な修正を可能にします。OSS-Fuzz に受け入れられるのは選定されたプロジェクトのみですが、プロジェクトのコアはオープンソースであるため、誰でもプライベートプロジェクト用に独自のインスタンスをホストできます。

概要

OSS-Fuzz は、イメージをビルドしてハーネスを開始したり、そのカバレッジを計算したりするための簡単な CLI フレームワークを提供します。さらに、OSS-Fuzz はカバレッジ情報などのファジング出力から生成された静的 Web ページをホストするサービスとして使用できます。

主要な概念

概念説明
helper.pyイメージのビルド、ファザーのビルド、ハーネスのローカル実行用 CLI スクリプト
Base Imagesビルド依存関係とコンパイラを提供する階層的 Docker イメージ
project.yamlOSS-Fuzz 登録用のプロジェクトメタデータを定義する設定ファイル
Dockerfileビルド依存関係を含むプロジェクト固有のイメージ
build.shプロジェクト用のファジングハーネスをビルドするスクリプト
Criticality Scoreプロジェクト受け入れを評価するために OSS-Fuzz チームが使用するメトリクス

適用時期

このテクニックを適用する場合:

  • オープンソースプロジェクト向けの継続的ファジングを設定する
  • サーバー管理なしで分散ファジングインフラストラクチャが必要
  • ファジングと統合されたカバレッジレポートとバグ追跡が必要
  • 既存の OSS-Fuzz ハーネスをローカルでテストする
  • OSS-Fuzz バグレポートからのクラッシュを再現する

このテクニックをスキップする場合:

  • プロジェクトがクローズドソース(独自の OSS-Fuzz インスタンスをホストしない限り)
  • プロジェクトが OSS-Fuzz の criticality score の閾値を満たさない
  • 専有またはカスタマイズされたファジングインフラストラクチャが必要
  • インフラストラクチャが必要でない簡単なスクリプトのファジング

クイックリファレンス

タスクコマンド
OSS-Fuzz をクローンgit clone https://github.com/google/oss-fuzz
プロジェクトイメージをビルドpython3 infra/helper.py build_image --pull <project>
ASan でファザーをビルドpython3 infra/helper.py build_fuzzers --sanitizer=address <project>
特定のハーネスを実行python3 infra/helper.py run_fuzzer <project> <harness>
カバレッジレポートを生成python3 infra/helper.py coverage <project>
helper.py オプションを確認python3 infra/helper.py --help

OSS-Fuzz プロジェクトコンポーネント

OSS-Fuzz は、複数の公開利用可能なツールと Web インターフェースを提供します。

バグトラッカー

バグトラッカーでは、以下が可能です:

  • 特定のプロジェクトのバグを確認(最初はメンテナのみに表示、その後公開
  • 新しい問題を作成し、既存の問題にコメントする
  • すべてのプロジェクトを通じて同様のバグを検索し、問題を理解する

ビルドステータスシステム

ビルドステータスシステムは以下を追跡するのに役立ちます:

  • 含まれるすべてのプロジェクトのビルドステータス
  • 最後に成功したビルドの日付
  • ビルド失敗とその期間

Fuzz Introspector

Fuzz Introspectorは以下を表示します:

  • OSS-Fuzz に登録されたプロジェクトのカバレッジデータ
  • カバーされたコードのヒット周波数
  • パフォーマンス分析およびボトルネック識別

例と説明についてはこのケーススタディを参照してください。

ステップバイステップ: 単一ハーネスの実行

OSS-Fuzz プラットフォーム全体をホストする必要はありません。ヘルパースクリプトを使用すると、個別のハーネスをローカルで簡単に実行できます。

ステップ 1: OSS-Fuzz をクローン

git clone https://github.com/google/oss-fuzz
cd oss-fuzz
python3 infra/helper.py --help

ステップ 2: プロジェクトイメージをビルド

python3 infra/helper.py build_image --pull <project-name>

これにより、プロジェクト用のベース Docker イメージがダウンロードおよびビルドされます。

ステップ 3: サニタイザーを使用してファザーをビルド

python3 infra/helper.py build_fuzzers --sanitizer=address <project-name>

サニタイザーオプション:

注: ファザーは /build/out/<project-name>/ にビルドされ、ハーネス実行ファイル、辞書、コーパス、クラッシュファイルが含まれます。

ステップ 4: ファザーを実行

python3 infra/helper.py run_fuzzer <project-name> <harness-name> [<fuzzer-args>]

ヘルパースクリプトは、スキップされたステップを自動的に実行します。

ステップ 5: カバレッジ分析(オプション)

まず、gsutil をインストールしてください(gcloud の初期化はスキップ)。

python3 infra/helper.py build_fuzzers --sanitizer=coverage <project-name>
python3 infra/helper.py coverage <project-name>

ローカルコーパスのみを使用するには --no-corpus-download を使用します。このコマンドはカバレッジレポートを生成してローカルでホストします。

詳細については、公式 OSS-Fuzz ドキュメントを参照してください。

一般的なパターン

パターン: irssi の例の実行

ユースケース: シンプルな登録済みプロジェクトで OSS-Fuzz セットアップをテストする

# OSS-Fuzz をクローンしてナビゲート
git clone https://github.com/google/oss-fuzz
cd oss-fuzz

# irssi ファザーをビルドして実行
python3 infra/helper.py build_image --pull irssi
python3 infra/helper.py build_fuzzers --sanitizer=address irssi
python3 infra/helper.py run_fuzzer irssi irssi-fuzz

予想される出力:

INFO:__main__:Running: docker run --rm --privileged --shm-size=2g --platform linux/amd64 -i -e FUZZING_ENGINE=libfuzzer -e SANITIZER=address -e RUN_FUZZER_MODE=interactive -e HELPER=True -v /private/tmp/oss-fuzz/build/out/irssi:/out -t gcr.io/oss-fuzz-base/base-runner run_fuzzer irssi-fuzz.
Using seed corpus: irssi-fuzz_seed_corpus.zip
/out/irssi-fuzz -rss_limit_mb=2560 -timeout=25 /tmp/irssi-fuzz_corpus -max_len=2048 < /dev/null
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 1531341664
INFO: Loaded 1 modules   (95687 inline 8-bit counters): 95687 [0x1096c80, 0x10ae247),
INFO: Loaded 1 PC tables (95687 PCs): 95687 [0x10ae248,0x1223eb8),
INFO:      719 files found in /tmp/irssi-fuzz_corpus
INFO: seed corpus: files: 719 min: 1b max: 170106b total: 367969b rss: 48Mb
#720        INITED cov: 409 ft: 1738 corp: 640/163Kb exec/s: 0 rss: 62Mb
#762        REDUCE cov: 409 ft: 1738 corp: 640/163Kb lim: 2048 exec/s: 0 rss: 63Mb L: 236/2048 MS: 2 ShuffleBytes-EraseBytes-

パターン: 新しいプロジェクトの登録

ユースケース: プロジェクトを OSS-Fuzz(またはプライベートインスタンス)に追加

projects/<your-project>/ に 3 つのファイルを作成します:

1. project.yaml - プロジェクトメタデータ:

homepage: "https://github.com/yourorg/yourproject"
language: c++
primary_contact: "your-email@example.com"
main_repo: "https://github.com/yourorg/yourproject"
fuzzing_engines:
  - libfuzzer
sanitizers:
  - address
  - undefined

2. Dockerfile - ビルド依存関係:

FROM gcr.io/oss-fuzz-base/base-builder
RUN apt-get update && apt-get install -y \
    autoconf \
    automake \
    libtool \
    pkg-config
RUN git clone --depth 1 https://github.com/yourorg/yourproject
WORKDIR yourproject
COPY build.sh $SRC/

3. build.sh - ハーネスをビルド:

#!/bin/bash -eu
./autogen.sh
./configure --disable-shared
make -j$(nproc)

# ハーネスをビルド
$CXX $CXXFLAGS -std=c++11 -I. \
    $SRC/yourproject/fuzz/harness.cc -o $OUT/harness \
    $LIB_FUZZING_ENGINE ./libyourproject.a

# コーパスと辞書が利用可能であればコピー
cp $SRC/yourproject/fuzz/corpus.zip $OUT/harness_seed_corpus.zip
cp $SRC/yourproject/fuzz/dictionary.dict $OUT/harness.dict

OSS-Fuzz の Docker イメージ

ハーネスは Docker コンテナでビルドおよび実行されます。すべてのプロジェクトはランナーイメージを共有しますが、各プロジェクトには独自のビルドイメージがあります。

イメージ階層

イメージはこのシーケンスで相互に構築されます:

  1. base_image - 特定の Ubuntu バージョン
  2. base_clang - Clang コンパイラ; base_image をベース
  3. base_builder - ビルド依存関係; base_clang をベース
  4. プロジェクト Docker イメージ - プロジェクト固有の依存関係; base_builder または言語バリアントをベース

ランナーイメージ(別途使用)

高度な使用法

ヒントとコツ

ヒント理由
ソースコードを手動でコピーしないプロジェクト Dockerfile は既に最新バージョンをプルしている
既存のプロジェクトを確認oss-fuzz/projects で例を参照
ハーネスを別のリポジトリに保持curl-fuzzer のように - より整理された
特定のコンパイラバージョンを使用ベースイメージは一貫したビルド環境を提供
Dockerfile に依存関係をインストールOSS-Fuzz 登録の承認が必要な場合があります

Criticality Score

OSS-Fuzz は criticality score を使用してプロジェクト受け入れを評価します。スコアリングの仕組みについてはこの例を参照してください。

スコアが低いプロジェクトでも、プライベート OSS-Fuzz インスタンスに追加される可能性があります。

独自のインスタンスをホスト

OSS-Fuzz はオープンソースなため、以下の用途で独自のインスタンスをホストできます:

  • 公開 OSS-Fuzz の対象外のプライベートプロジェクト
  • criticality score が低いプロジェクト
  • カスタムファジングインフラストラクチャの必要性

アンチパターン

アンチパターン問題正しいアプローチ
build.sh でソースを手動でプル最新バージョンを使用しないDockerfile で git clone を処理
コードを OSS-Fuzz リポジトリにコピー管理が難しく、分離原則に違反外部ハーネスリポジトリを参照
ベースイメージバージョンを無視ビルドに矛盾提供されるベースイメージとコンパイラを使用
ローカルテストをスキップCI リソースを無駄にするPR 前に helper.py をローカルで使用
ビルドステータスを確認しないビルド失敗に気付かないビルドステータスページを定期的に監視

ツール固有のガイダンス

libFuzzer

OSS-Fuzz は主に C/C++ プロジェクト向けのファジングエンジンとして libFuzzer を使用します。

ハーネス署名:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    // ファジングロジック
    return 0;
}

build.sh でビルド:

$CXX $CXXFLAGS -std=c++11 -I. \
    harness.cc -o $OUT/harness \
    $LIB_FUZZING_ENGINE ./libproject.a

統合のヒント:

  • OSS-Fuzz が提供する $LIB_FUZZING_ENGINE 変数を使用
  • -fsanitize=fuzzer は自動的に処理される
  • 可能な限り静的ライブラリにリンク

AFL++

OSS-Fuzz は AFL++ を代替ファジングエンジンとしてサポートしています。

project.yaml で有効化:

fuzzing_engines:
  - afl
  - libfuzzer

統合のヒント:

  • AFL++ ハーネスは libFuzzer ハーネスと一緒に動作
  • パフォーマンス向上のためにパーシスタントモードを使用
  • OSS-Fuzz はエンジン固有のコンパイルフラグを処理

Atheris (Python)

C 拡張機能を備えた Python プロジェクト向けです。

cbor2 統合の例:

ハーネス:

import atheris
import sys
import cbor2

@atheris.instrument_func
def TestOneInput(data):
    fdp = atheris.FuzzedDataProvider(data)
    try:
        cbor2.loads(data)
    except (cbor2.CBORDecodeError, ValueError):
        pass

def main():
    atheris.Setup(sys.argv, TestOneInput)
    atheris.Fuzz()

if __name__ == "__main__":
    main()

build.sh でビルド:

pip3 install .
for fuzzer in $(find $SRC -name 'fuzz_*.py'); do
  compile_python_fuzzer $fuzzer
done

統合のヒント:

Rust プロジェクト

project.yaml で有効化:

language: rust
fuzzing_engines:
  - libfuzzer
sanitizers:
  - address  # AddressSanitizer のみ Rust でサポート

build.sh でビルド:

cargo fuzz build -O --debug-assertions
cp fuzz/target/x86_64-unknown-linux-gnu/release/fuzz_target_1 $OUT/

統合のヒント:

トラブルシューティング

問題原因解決策
依存関係がないためビルドが失敗依存関係が Dockerfile にないDockerfile に apt-get install またはそれに相当するものを追加
ハーネスがすぐにクラッシュ入力検証がないハーネスでサイズチェックを追加
カバレッジが 0%ハーネスがターゲットコードに到達しないハーネスが実際にターゲット関数を呼び出しているか確認
ビルドタイムアウト複雑なビルドプロセスbuild.sh を最適化し、並列ビルドを検討
ビルド中のサニタイザーエラー互換性のないフラグOSS-Fuzz 環境変数で提供されるフラグを使用
ソースコードが見つからないDockerfile の作業ディレクトリが間違っているWORKDIR を設定するか、絶対パスを使用

関連スキル

このテクニックを使用するツール

スキル適用方法
libfuzzerOSS-Fuzz が使用するプライマリファジングエンジン
aflppOSS-Fuzz がサポートする代替ファジングエンジン
atherisOSS-Fuzz で Python プロジェクトのファジング用
cargo-fuzzOSS-Fuzz で Rust プロジェクト用

関連テクニック

スキル関係
coverage-analysisOSS-Fuzz は helper.py でカバレッジレポートを生成
address-sanitizerOSS-Fuzz プロジェクトのデフォルトサニタイザー
fuzz-harness-writingOSS-Fuzz へのプロジェクト登録に必須
corpus-managementOSS-Fuzz は登録済みプロジェクト用のコーパスを管理

リソース

主要な外部リソース

OSS-Fuzz 公式ドキュメント OSS-Fuzz プラットフォームの登録、ハーネス作成、トラブルシューティングをカバーする包括的なドキュメント。

入門ガイド OSS-Fuzz への新規プロジェクト登録のステップバイステッププロセス(要件と承認プロセス含む)。

cbor2 OSS-Fuzz 統合 PR C 拡張機能を備えた Python プロジェクトを OSS-Fuzz に登録する実例。以下を示します:

  • 初期提案とプロジェクト紹介
  • Criticality score 評価
  • 完全な実装(project.yaml、Dockerfile、build.sh、ハーネス)

Fuzz Introspector ケーススタディ Fuzz Introspector を使用してカバレッジを分析しファジングボトルネックを特定する例と説明。

ビデオリソース

登録とハーネス開発に関するワークショップ記録とチュートリアルについては、OSS-Fuzz ドキュメントを確認してください。

ライセンス: 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