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

ruzzy

Trail of Bits が開発したカバレッジガイド型の Ruby ファザーです。純粋な Ruby コードおよび Ruby の C 拡張に対するファジングテストに使用します。

description の原文を見る

> Ruzzy is a coverage-guided Ruby fuzzer by Trail of Bits. Use for fuzzing pure Ruby code and Ruby C extensions.

SKILL.md 本文

Ruzzy

Ruzzy は libFuzzer 上に構築された Ruby 用のカバレッジガイド型ファザーです。メモリ破損と未定義動作を検出するためのサニタイザーサポート付きで、純粋な Ruby コードと Ruby C 拡張の両方をファジングできます。

使用場面

Ruzzy は現在、Ruby 向けの唯一の本番対応カバレッジガイド型ファザーです。

Ruzzy を選択する場合:

  • Ruby アプリケーションやライブラリをファジングしている
  • Ruby C 拡張のメモリ安全性の問題をテストしている
  • Ruby コード用のカバレッジガイド型ファジングが必要である
  • ネイティブ拡張を持つ Ruby gem を使用している

クイックスタート

環境をセットアップ:

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"

付属のサンプル例でテスト:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby -e 'require "ruzzy"; Ruzzy.dummy'

これにより Ruzzy が正しく動作していることを示すクラッシュがすぐに見つかるはずです。

インストール

プラットフォームサポート

Ruzzy は Linux x86-64 と AArch64/ARM64 をサポートしています。macOS または Windows の場合は、Dockerfile または開発環境を使用してください。

前提条件

  • Linux x86-64 または AArch64/ARM64
  • 最近のバージョンの clang (14.0.0 までテスト済み、最新リリース推奨)
  • gem がインストールされた Ruby

インストールコマンド

clang コンパイラフラグで Ruzzy をインストール:

MAKE="make --environment-overrides V=1" \
CC="/path/to/clang" \
CXX="/path/to/clang++" \
LDSHARED="/path/to/clang -shared" \
LDSHAREDXX="/path/to/clang++ -shared" \
    gem install ruzzy

環境変数の説明:

  • MAKE: make をオーバーライドして後続の環境変数を尊重させる
  • CC, CXX, LDSHARED, LDSHAREDXX: 最新機能のために適切な clang バイナリが使用されることを確認

インストールのトラブルシューティング

インストールが失敗する場合、デバッグ出力を有効にする:

RUZZY_DEBUG=1 gem install --verbose ruzzy

検証

サンプル例を実行してインストールを検証 (「クイックスタート」セクションを参照)。

ハーネスの作成

純粋な Ruby コードのファジング

Ruby インタープリタの実装の詳細のため、純粋な Ruby ファジングには 2 つのスクリプトが必要です。

トレーサースクリプト (test_tracer.rb):

# frozen_string_literal: true

require 'ruzzy'

Ruzzy.trace('test_harness.rb')

ハーネススクリプト (test_harness.rb):

# frozen_string_literal: true

require 'ruzzy'

def fuzzing_target(input)
  # ここにファジングするコードを記述
  if input.length == 4
    if input[0] == 'F'
      if input[1] == 'U'
        if input[2] == 'Z'
          if input[3] == 'Z'
            raise
          end
        end
      end
    end
  end
end

test_one_input = lambda do |data|
  fuzzing_target(data)
  return 0
end

Ruzzy.fuzz(test_one_input)

実行:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby test_tracer.rb

Ruby C 拡張のファジング

C 拡張は単一のハーネスファイルでファジングでき、トレーサーは不要です。

msgpack のハーネス例 (fuzz_msgpack.rb):

# frozen_string_literal: true

require 'msgpack'
require 'ruzzy'

test_one_input = lambda do |data|
  begin
    MessagePack.unpack(data)
  rescue Exception
    # メモリ破損を探しており、Ruby 例外ではない
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

実行:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby fuzz_msgpack.rb

ハーネスルール

するしない
C 拡張をテストする場合は Ruby 例外をキャッチRuby 例外でファザーをクラッシュさせる
test_one_input ラムダから 0 を返す他の値を返す
ハーネスを決定的に保つランダムネスや時間ベースのロジックを使用
純粋 Ruby にトレーサースクリプトを使用純粋 Ruby コードのトレーサーをスキップ

参照: ハーネス作成の詳細なテクニック、複雑な入力の処理パターン、 高度な戦略については、fuzz-harness-writing テクニックスキルを参照してください。

コンパイル

サニタイザー付き gem のインストール

ファジング用の C 拡張を含む Ruby gem をインストールする場合、サニタイザーフラグでコンパイル:

MAKE="make --environment-overrides V=1" \
CC="/path/to/clang" \
CXX="/path/to/clang++" \
LDSHARED="/path/to/clang -shared" \
LDSHAREDXX="/path/to/clang++ -shared" \
CFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
CXXFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
    gem install <gem-name>

ビルドフラグ

フラグ目的
-fsanitize=address,fuzzer-no-linkAddressSanitizer とファザーインストルメンテーションを有効化
-fno-omit-frame-pointerスタックトレース品質を改善
-fno-commonサニタイザーとの互換性向上
-fPIC位置独立コード (共有ライブラリ向け)
-gデバッグシンボルを含める

キャンペーンの実行

環境セットアップ

ファジングキャンペーンを実行する前に、ASAN_OPTIONS を設定:

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"

オプションの説明:

  1. allocator_may_return_null=1: 一般的な低影響のアロケーション失敗 (DoS) をスキップ
  2. detect_leaks=0: Ruby インタープリタはデータをリーク、これらは今のところ無視
  3. use_sigaltstack=0: Ruby は ASan で sigaltstack を無効にすることを推奨

基本実行

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb

注: LD_PRELOAD はサニタイザー注入に必須です。ASAN_OPTIONS と異なり、他のプログラムに干渉する可能性があるためエクスポートしないでください。

コーパス付き

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb /path/to/corpus

libFuzzer オプションの引き渡し

すべての libFuzzer オプションを引数として渡すことができます:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb /path/to/corpus -max_len=1024 -timeout=10

完全な参照は libFuzzer オプション を参照してください。

クラッシュの再現

クラッシュファイルを渡してクラッシュケースを再実行:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb ./crash-253420c1158bc6382093d409ce2e9cff5806e980

出力の解釈

出力意味
INFO: Running with entropic power scheduleファジングキャンペーン開始
ERROR: AddressSanitizer: heap-use-after-freeメモリ破損検出
SUMMARY: libFuzzer: fuzz target exitedRuby 例外が発生
artifact_prefix='./'; Test unit written to ./crash-*クラッシュ入力保存
Base64: ...クラッシュ入力の Base64 エンコーディング

サニタイザーの統合

AddressSanitizer (ASan)

Ruzzy には事前コンパイルされた AddressSanitizer ライブラリが含まれます:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb

ASan を使用して検出:

  • ヒープバッファオーバーフロー
  • スタックバッファオーバーフロー
  • Use-after-free
  • Double-free
  • メモリリーク (Ruzzy ではデフォルトで無効)

UndefinedBehaviorSanitizer (UBSan)

Ruzzy には UBSan も含まれます:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::UBSAN_PATH') \
    ruby harness.rb

UBSan を使用して検出:

  • 符号付き整数オーバーフロー
  • ヌルポインタの逆参照
  • メモリ不整列アクセス
  • ゼロ除算

よくあるサニタイザーの問題

問題解決方法
Ruby インタープリタリーク警告ASAN_OPTIONS=detect_leaks=0 を使用
Sigaltstack 競合ASAN_OPTIONS=use_sigaltstack=0 を使用
アロケーション失敗スパムASAN_OPTIONS=allocator_may_return_null=1 を使用
LD_PRELOAD がツールに干渉エクスポートしない、ruby コマンドでインラインに設定

参照: サニタイザーの詳細な設定、よくある問題、高度なフラグについては、 address-sanitizerundefined-behavior-sanitizer テクニックスキルを参照してください。

実例

例: msgpack-ruby

メモリ破損について msgpack MessagePack パーサーをファジング。

サニタイザー付きでインストール:

MAKE="make --environment-overrides V=1" \
CC="/path/to/clang" \
CXX="/path/to/clang++" \
LDSHARED="/path/to/clang -shared" \
LDSHAREDXX="/path/to/clang++ -shared" \
CFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
CXXFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
    gem install msgpack

ハーネス (fuzz_msgpack.rb):

# frozen_string_literal: true

require 'msgpack'
require 'ruzzy'

test_one_input = lambda do |data|
  begin
    MessagePack.unpack(data)
  rescue Exception
    # メモリ破損を探しており、Ruby 例外ではない
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

実行:

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"
LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby fuzz_msgpack.rb

例: 純粋 Ruby ターゲット

カスタムパーサーで純粋な Ruby コードをファジング。

トレーサー (test_tracer.rb):

# frozen_string_literal: true

require 'ruzzy'

Ruzzy.trace('test_harness.rb')

ハーネス (test_harness.rb):

# frozen_string_literal: true

require 'ruzzy'
require_relative 'my_parser'

test_one_input = lambda do |data|
  begin
    MyParser.parse(data)
  rescue StandardError
    # 不正な入力からの予期される例外
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

実行:

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"
LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby test_tracer.rb

トラブルシューティング

問題原因解決方法
インストール失敗不正な clang バージョンまたはパスclang パスを確認、clang 14.0.0+ を使用
cannot open shared object fileLD_PRELOAD が設定されていないruby コマンドでインラインに LD_PRELOAD を設定
ファザーが即座に終了コーパスディレクトリが見つからないコーパスディレクトリを作成または引数として渡す
カバレッジの進行がない純粋 Ruby にトレーサーが必要純粋 Ruby コードにトレーサースクリプトを使用
リーク検出スパムRuby インタープリタがリークASAN_OPTIONS=detect_leaks=0 を設定
インストールデバッグが必要コンパイルエラーRUZZY_DEBUG=1 gem install --verbose ruzzy を使用

関連スキル

テクニックスキル

スキル使用例
fuzz-harness-writing効果的なハーネス作成の詳細なガイダンス
address-sanitizerファジング中のメモリエラー検出
undefined-behavior-sanitizerC 拡張での未定義動作の検出
libfuzzerlibFuzzer オプションの理解 (Ruzzy は libFuzzer 上に構築)

関連ファザー

スキル検討する場合
libfuzzerRuby C 拡張コードを直接 C/C++ でファジング
aflppRuby インタープリタをインストルメンテーションすることで Ruby をファジングする別のアプローチ

リソース

主要な外部リソース

Introducing Ruzzy, a coverage-guided Ruby fuzzer Ruzzy を発表する Trail of Bits 公式ブログ記事、動機、アーキテクチャ、初期結果をカバー。

Ruzzy GitHub Repository ソースコード、追加の例、開発手順。

libFuzzer Documentation Ruzzy は libFuzzer 上に構築されているため、libFuzzer オプションと動作を理解することは有用です。

Fuzzing Ruby C extensions コンパイルフラグと例を使用した C 拡張のファジング詳細ガイド。

Fuzzing pure Ruby code 純粋 Ruby ファジングに必要なトレーサーパターンの詳細ガイド。

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