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

address-sanitizer

AddressSanitizerはファジング実行中にメモリエラーを検出します。C/C++コードのファジングテスト時に、バッファオーバーフローやuse-after-freeバグを発見したい場合に使用してください。

description の原文を見る

> AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C/C++ code to find buffer overflows and use-after-free bugs.

SKILL.md 本文

AddressSanitizer (ASan)

AddressSanitizer (ASan) は、ソフトウェアテスト、特にファジング中に広く採用されているメモリエラー検出ツールです。バッファオーバーフロー、use-after-free エラー、その他のメモリ安全性違反など、気づかないうちに発生する可能性があるメモリ破損バグの検出に役立ちます。

概要

ASan はメモリ脆弱性の特定における有効性により、ファジングにおける標準的なプラクティスです。コンパイル時にコードをインストルメント化し、メモリの割り当てとアクセスを追跡して、実行時に違法な操作を検出します。

主要な概念

概念説明
インストルメント化コンパイル中にメモリ操作にランタイムチェックを追加
シャドウメモリ20TB の仮想メモリをマップして割り当て状態を追跡
パフォーマンスコストインストルメント化されていないコードと比較して約 2~4 倍の低速化
検出範囲バッファオーバーフロー、use-after-free、double-free、メモリリークを検出

適用する場合

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

  • C/C++ コードをメモリ安全性脆弱性についてファジングする
  • unsafe ブロックを含む Rust コードをテストする
  • メモリ破損に関連するクラッシュをデバッグする
  • メモリエラーが疑われるユニットテストを実行する

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

  • 本番環境コードを実行する (ASan はセキュリティを低下させる可能性がある)
  • プラットフォームが Windows または macOS である (ASan サポートが限定的)
  • パフォーマンスオーバーヘッドが許容不可能な場合
  • FFI なしの純粋に安全な言語をファジングする場合 (例: pure Go、pure Java)

クイックリファレンス

タスクコマンド/パターン
ASan を有効化 (Clang/GCC)-fsanitize=address
詳細出力を有効化ASAN_OPTIONS=verbosity=1
リーク検出を無効化ASAN_OPTIONS=detect_leaks=0
エラーで強制的に中止ASAN_OPTIONS=abort_on_error=1
複数のオプションASAN_OPTIONS=verbosity=1:abort_on_error=1

ステップバイステップ

ステップ 1: ASan でコンパイル

-fsanitize=address フラグを使ってコードをコンパイルしてリンクします:

clang -fsanitize=address -g -o my_program my_program.c

-g フラグは、ASan がエラーを検出したときにより良いスタックトレースを取得するために推奨されます。

ステップ 2: ASan オプションを設定

ASAN_OPTIONS 環境変数を設定して ASan の動作を設定します:

export ASAN_OPTIONS=verbosity=1:abort_on_error=1:detect_leaks=0

ステップ 3: プログラムを実行

ASan でインストルメント化されたバイナリを実行します。メモリエラーが検出されると、ASan は詳細レポートを出力します:

./my_program

ステップ 4: ファジャーのメモリ制限を調整

ASan は約 20TB の仮想メモリを必要とします。ファジャーのメモリ制限を無効化します:

  • libFuzzer: -rss_limit_mb=0
  • AFL++: -m none

一般的なパターン

パターン: 基本的な ASan 統合

ユースケース: ASan を使った標準的なファジング設定

前:

clang -o fuzz_target fuzz_target.c
./fuzz_target

後:

clang -fsanitize=address -g -o fuzz_target fuzz_target.c
ASAN_OPTIONS=verbosity=1:abort_on_error=1 ./fuzz_target

パターン: ユニットテスト付き ASan

ユースケース: ユニットテストスイートに対して ASan を有効化

前:

gcc -o test_suite test_suite.c -lcheck
./test_suite

後:

gcc -fsanitize=address -g -o test_suite test_suite.c -lcheck
ASAN_OPTIONS=detect_leaks=1 ./test_suite

高度な使用法

ヒントとコツ

ヒント有用な理由
-g フラグを使用するデバッグ用に詳細なスタックトレースを提供
verbosity=1 を設定するプログラム開始前に ASan が有効であることを確認
ファジング中のリーク検出を無効化するリーク検出は即座にクラッシュを引き起こさず、出力が雑然とする
abort_on_error=1 を有効化する一部のファジャーは _exit() の代わりに abort() が必要

ASan レポートを理解する

ASan がメモリエラーを検出すると、以下の情報を含む詳細レポートが出力されます:

  • エラータイプ: バッファオーバーフロー、use-after-free など
  • スタックトレース: エラーが発生した場所
  • 割り当て/解放トレース: メモリが割り当て/解放された場所
  • メモリマップ: エラー周辺のシャドウメモリ状態

ASan レポートの例:

==12345==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60300000eff4 at pc 0x00000048e6a3
READ of size 4 at 0x60300000eff4 thread T0
    #0 0x48e6a2 in main /path/to/file.c:42

複数のサニタイザーの組み合わせ

ASan を他のサニタイザーと組み合わせて、包括的な検出を実現できます:

clang -fsanitize=address,undefined -g -o fuzz_target fuzz_target.c

プラットフォーム固有の考慮事項

Linux: 完全な ASan サポート、最高のパフォーマンス macOS: サポートが限定的で、一部の機能が動作しない可能性がある Windows: 実験的サポート、本番ファジングには推奨されない

アンチパターン

アンチパターン問題正しいアプローチ
本番環境で ASan を使用するアプリケーションのセキュリティが低下する可能性があるテスト時のみ ASan を使用する
メモリ制限を無効化しない20TB の仮想メモリのためにファジャーがプロセスを強制終了する可能性がある-rss_limit_mb=0 または -m none を設定する
リークレポートを無視するメモリリークはリソース管理の問題を示唆しているファジングキャンペーンの終了時にリークレポートを確認する

ツール別ガイダンス

libFuzzer

ファジャーとアドレスサニタイザーの両方でコンパイル:

clang++ -fsanitize=fuzzer,address -g harness.cc -o fuzz

無制限の RSS で実行:

./fuzz -rss_limit_mb=0

統合のヒント:

  • 常に -fsanitize=fuzzer-fsanitize=address と組み合わせる
  • クラッシュレポートで詳細なスタックトレースを得るために -g を使用する
  • クラッシュハンドリング向上のために ASAN_OPTIONS=abort_on_error=1 を検討する

参照: libFuzzer: AddressSanitizer

AFL++

AFL_USE_ASAN 環境変数を使用:

AFL_USE_ASAN=1 afl-clang-fast++ -g harness.cc -o fuzz

無制限のメモリで実行:

afl-fuzz -m none -i input_dir -o output_dir ./fuzz

統合のヒント:

  • AFL_USE_ASAN=1 は自動的に適切なコンパイルフラグを追加する
  • AFL++ のメモリ制限を無効化するために -m none を使用する
  • 大きなカバレッジマップを持つプログラムの場合は AFL_MAP_SIZE を検討する

参照: AFL++: AddressSanitizer

cargo-fuzz (Rust)

--sanitizer=address フラグを使用:

cargo fuzz run fuzz_target --sanitizer=address

または fuzz/Cargo.toml に設定:

[profile.release]
opt-level = 3
debug = true

統合のヒント:

  • ASan は unsafe Rust コードまたは FFI の境界をファジングする場合に有用
  • 安全な Rust コードはそれほど恩恵を受けない可能性がある (コンパイラが既に多くのエラーを防止)
  • unsafe ブロック、生ポインタ、C ライブラリバインディングに焦点を当てる

参照: cargo-fuzz: AddressSanitizer

honggfuzz

ASan でコンパイルして honggfuzz とリンク:

honggfuzz -i input_dir -o output_dir -- ./fuzz_target_asan

ターゲットをコンパイル:

hfuzz-clang -fsanitize=address -g target.c -o fuzz_target_asan

統合のヒント:

  • honggfuzz は ASan とすぐに連携できます
  • サニタイザーでより良いカバレッジを得るためにフィードバック駆動モードを使用する
  • ASan はメモリフットプリントを増加させるため、メモリ使用量を監視する

トラブルシューティング

問題原因解決策
ファジャーが即座にプロセスを強制終了するASan の 20TB 仮想メモリに対してメモリ制限が低い-rss_limit_mb=0 (libFuzzer) または -m none (AFL++) を使用する
"ASan runtime not initialized"リンク順序が不正または実行時がない-fsanitize=address がコンパイルとリンクの両方で使用されていることを確認する
リークレポートが出力を雑然とするLeakSanitizer がデフォルトで有効ASAN_OPTIONS=detect_leaks=0 を設定する
パフォーマンスが悪い (>4 倍の低速化)デバッグモードまたは最適化されていないビルド-fsanitize=address に加えて -O2 または -O3 でコンパイル
ASan が明らかなバグを検出していないバイナリがインストルメント化されていないASAN_OPTIONS=verbosity=1 で ASan が起動情報を出力することを確認する
誤検出インターセプタの競合特定のライブラリに関する既知の問題については ASan FAQ を確認する

関連スキル

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

スキル適用方法
libfuzzer-fsanitize=fuzzer,address でコンパイルして、メモリエラー検出統合ファジングを実現
aflppコンパイル中に AFL_USE_ASAN=1 環境変数を使用
cargo-fuzzRust ファジターゲットに対して ASan を有効化するために --sanitizer=address フラグを使用
honggfuzzASan でインストルメント化されたファジング用に -fsanitize=address でターゲットをコンパイル

関連テクニック

スキル関係性
undefined-behavior-sanitizer包括的なバグ検出 (未定義動作 + メモリエラー) のために ASan と組み合わせてよく使用される
fuzz-harness-writingハーネスは ASan 検出クラッシュを処理し、誤検出を回避するように設計する必要がある
coverage-analysisカバレッジ駆動ファジングは、ASan がメモリエラーを検出できるコードパスのトリガーに役立つ

リソース

主要な外部リソース

AddressSanitizer on Google Sanitizers Wiki

ASan の公式ドキュメント:

  • アルゴリズムと実装の詳細
  • 検出されるエラータイプの完全なリスト
  • パフォーマンス特性とオーバーヘッド
  • プラットフォーム固有の動作
  • 既知の制限と非互換性

SanitizerCommonFlags

すべてのサニタイザーで共有される一般的な設定フラグ:

  • verbosity: 診断出力レベルを制御
  • log_path: サニタイザー出力をファイルにリダイレクト
  • symbolize: レポートでのシンボル解決を有効/無効化
  • external_symbolizer_path: カスタムシンボライザーを使用

AddressSanitizerFlags

ASan 固有の設定オプション:

  • detect_leaks: メモリリーク検出を制御
  • abort_on_error: エラーで abort() vs _exit() を呼び出し
  • detect_stack_use_after_return: スタック use-after-return バグを検出
  • check_initialization_order: 初期化順序バグを検出

AddressSanitizer FAQ

一般的な落とし穴と解決策:

  • リンク順序の問題
  • 他のツールとの競合
  • プラットフォーム固有の問題
  • パフォーマンスチューニングのヒント

Clang AddressSanitizer Documentation

Clang 固有のガイダンス:

  • コンパイルフラグとオプション
  • 他の Clang 機能との相互作用
  • サポート対象プラットフォームとアーキテクチャ

GCC Instrumentation Options

GCC 固有の ASan ドキュメント:

  • GCC 固有のフラグと動作
  • Clang 実装との違い
  • GCC でのプラットフォームサポート

AddressSanitizer: A Fast Address Sanity Checker (USENIX Paper)

技術的な詳細を含むオリジナル研究論文:

  • シャドウメモリアルゴリズム
  • 仮想メモリ要件 (以前は 16TB、現在は約 20TB)
  • パフォーマンスベンチマーク
  • 設計の決定とトレードオフ

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