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

yara-rule-authoring

マルウェア検出のための高品質なYARA-Xルール作成を支援するスキルです。YARAルールの新規作成・レビュー・最適化を行う際に使用します。命名規則、文字列の選定、パフォーマンス最適化、旧来のYARAからの移行、誤検知の低減まで幅広くカバーします。

description の原文を見る

> Guides authoring of high-quality YARA-X detection rules for malware identification. Use when writing, reviewing, or optimizing YARA rules. Covers naming conventions, string selection, performance optimization, migration from legacy YARA, and false positive reduction. Triggers on: YARA, YARA-X, malware detection, threat hunting, IOC, signature, crx module, dex module.

SKILL.md 本文

YARA-X ルール作成

マルウェアを検出しつつ、誤検知の洪水に溺れないための検出ルールを作成しましょう。

このスキルは YARA-X をターゲットとしています。YARA-X はレガシー YARA の Rust ベースの後継で、VirusTotal の本番システムを支える推奨実装です。既存ルールがある場合は、レガシー YARA からの移行 を参照してください。

コア原則

  1. 文字列は良好なアトムを生成する必要がある — YARA は高速マッチング用に 4 バイトの部分列を抽出します。バイトの繰り返し、一般的なシーケンス、または 4 バイト未満の文字列は、多数のファイルに対して遅いバイトコード検証を強制します。

  2. カテゴリではなく、特定のファミリーをターゲットにする — 「ランサムウェアを検出」はあらゆるものを検出し、何も検出しません。「LockBit 3.0 の設定抽出ルーチンを検出」は、あなたが必要とするものを検出します。

  3. デプロイ前に正規ウェアに対してテストする — Windows システムファイルで発火するルールは無用です。VirusTotal の正規ウェア コーパスまたは独自のクリーンファイルセットで検証してください。

  4. 安価なチェックで最初にショートサーキットする — 高額な文字列検索またはモジュール呼び出しの前に、filesize < 10MB and uint16(0) == 0x5A4D を配置します。

  5. メタデータはドキュメント — 将来のあなたとチームメンバーは、これが何をキャッチするのか、なぜ、サンプルがどこから来たのかを知る必要があります。

使用するケース

  • マルウェア検出用の新しい YARA-X ルールを作成する
  • 既存ルールの品質またはパフォーマンスの問題をレビューする
  • 遅いルールセットを最適化する
  • IOC または脅威インテリジェンスを検出シグネチャに変換する
  • 誤検知の問題をデバッグする
  • 本番デプロイメント用のルールを準備する
  • レガシー YARA ルールを YARA-X に移行する
  • Chrome 拡張機能を分析する (crx モジュール)
  • Android アプリを分析する (dex モジュール)

使用しないケース

  • 逆アセンブリが必要な静的分析 → Ghidra/IDA スキルを使用
  • 動的マルウェア分析 → サンドボックス分析スキルを使用
  • ネットワークベースの検出 → Suricata/Snort スキルを使用
  • Volatility を使用したメモリフォレンジクス → メモリフォレンジクス スキルを使用
  • シンプルなハッシュベースの検出 → ハッシュリストのみを使用

YARA-X の概要

YARA-X はレガシー YARA の Rust ベースの後継です:正規表現が 5~10 倍高速、エラーが向上、組み込みのフォーマッター、より厳密な検証、新しいモジュール (crx、dex)、99% のルール互換性。

インストール: brew install yara-x (macOS) または cargo install yara-x

重要なコマンド: yr scanyr checkyr fmtyr dump

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

YARA はすべてのファイルタイプに対応しています。パターンをターゲットに適応させてください:

プラットフォームマジックバイト悪い文字列良い文字列
Windows PEuint16(0) == 0x5A4DAPI 名、Windows パスミューテックス名、PDB パス
macOS Mach-Ouint32(0) == 0xFEEDFACE (32 ビット)、0xFEEDFACF (64 ビット)、0xCAFEBABE (ユニバーサル)一般的な Obj-C メソッドキーロガー文字列、永続化パス
JavaScript/Node(不要)requirefetchaxiosオブファスケータのシグネチャ、eval+デコード チェーン
npm/pip パッケージ(不要)postinstalldependencies疑わしいパッケージ名、exfil URL
Office ドキュメントuint32(0) == 0x504B0304VBA キーワードマクロ自動実行、エンコードペイロード
VS Code 拡張機能(不要)vscode.workspace一般的でない activationEvents、隠しファイルアクセス
Chrome 拡張機能crx モジュールを使用一般的な Chrome APIパーミッション悪用、マニフェスト異常
Android アプリdex モジュールを使用標準 DEX 構造オブファスケートされたクラス、疑わしいパーミッション

macOS マルウェア検出

専用の Mach-O モジュールはまだ存在しません。マジックバイト チェック + 文字列パターンを使用してください:

マジックバイト:

// Mach-O 32 ビット
uint32(0) == 0xFEEDFACE
// Mach-O 64 ビット
uint32(0) == 0xFEEDFACF
// ユニバーサル バイナリ (fat バイナリ)
uint32(0) == 0xCAFEBABE or uint32(0) == 0xBEBAFECA

macOS マルウェアの良好なインジケータ:

  • キーロガー アーティファクト:CGEventTapCreatekCGEventKeyDown
  • SSH トンネル文字列:ssh -Dtunnelsocks
  • 永続化パス:~/Library/LaunchAgents/Library/LaunchDaemons
  • 認証情報の盗難:security find-generic-passwordkeychain

Airbnb BinaryAlert からのサンプルパターン:

rule SUSP_Mac_ProtonRAT
{
    strings:
        // ライブラリ インジケータ
        $lib1 = "SRWebSocket" ascii
        $lib2 = "SocketRocket" ascii

        // 動作 インジケータ
        $behav1 = "SSH tunnel not launched" ascii
        $behav2 = "Keylogger" ascii

    condition:
        (uint32(0) == 0xFEEDFACF or uint32(0) == 0xCAFEBABE) and
        any of ($lib*) and any of ($behav*)
}

JavaScript 検出の判定木

JavaScript ルールを書きますか?
├─ npm パッケージ?
│  ├─ package.json パターンを確認
│  ├─ postinstall/preinstall フックを探す
│  └─ exfil パターンをターゲット:fetch + env アクセス + 認証情報パス
├─ ブラウザ拡張機能?
│  ├─ Chrome:crx モジュールを使用
│  └─ その他:マニフェスト パターン、バックグラウンド スクリプト動作をターゲット
├─ スタンドアロン JS ファイル?
│  ├─ オブファスケーション マーカーを探す:eval+atob、fromCharCode チェーン
│  ├─ ミニファイ後も残る一意な関数/変数名をターゲット
│  └─ パック/エンコードされたペイロードを確認
└─ ミニファイ/webpack バンドル?
   ├─ バンドル後も残る一意な文字列をターゲット (URL、マジック値)
   └─ 関数名を避ける (マングル化される)

JavaScript 固有の良好な文字列:

  • Ethereum 関数セレクタ:{ 70 a0 82 31 } (transfer)
  • ゼロ幅文字 (ステガノグラフィ):{ E2 80 8B E2 80 8C }
  • オブファスケータ シグネチャ:_0xvar _0x
  • 特定の C2 パターン:ドメイン名、webhook URL

JavaScript 固有の悪い文字列:

  • requirefetchaxios — 一般的すぎる
  • Buffercrypto — 至るところで正規用途
  • process.env のみ — 特定の環境変数名が必要

必須ツールキット

ツール用途
yarGen候補文字列を抽出:yarGen.py -m samples/ --excludegoodyr check で検証
FLOSSオブファスケートされた/スタック文字列を抽出:floss sample.exe (yarGen が失敗した場合)
yr CLI検証:yr check、スキャン:yr scan -s、検査:yr dump -m pe
signature-base品質の高い例を研究
YARA-CIデプロイメント前に正規ウェア コーパス テストを実施

これら 5 つをマスターしてください。ツール カタログに気を取られないでください。

避けるべき言い訳

これらの考えが浮かんだら、止めて再検討してください。

言い訳専門家の回答
「この一般的な文字列は十分にユニーク」正規ウェアに対してテストしてください。あなたの直感は間違っています。
「yarGen がこれらの文字列をくれた」yarGen は提案し、あなたが検証します。各文字列を手動で確認してください。
「10 のサンプルで動作する」10 サンプル ≠ 本番環境。VirusTotal 正規ウェア コーパスを使用してください。
「すべてのバリアントをキャッチするための 1 つのルール」FP 洪水を引き起こします。特定のファミリーをターゲットにしてください。
「FP が発生したら、より具体的にしよう」最初から厳密なルールを書いてください。FP は信頼を失わせます。
「このパターンはユニーク」1 つのサンプルでユニーク ≠ マルウェア エコシステム全体でユニーク。
「パフォーマンスは重要でない」1 つの遅いルールがルールセット全体を遅くします。アトムを最適化してください。
「PEiD ルールはまだ機能する」廃止されました。32 ビット パッカーは関連性がありません。
「後で条件を追加しよう」デプロイされた弱いルール = ダメージが発生しました。
「これはハンティング用のみ」ハンティング ルールが検出ルールになります。同じ品質基準が適用されます。
「API 名が悪意のあることを示している」正規ソフトウェアも同じ API を使用しています。行動文脈が必要です。
「一般的な文字列の場合は any of で問題ない」一般的な文字列 + any = FP 洪水。個別にユニークな文字列にのみ any of を使用してください。
「このレジェックスは十分に具体的」/fetch.*token/ はすべての認証コードにマッチします。exfil 宛先の要件を追加してください。
「JavaScript はクリーンに見える」攻撃者は正規のコードに悪意あるコードを混ぜます。eval+デコード チェーンを確認してください。
「.* を使用して柔軟性を持たせよう」無制限の正規表現 = パフォーマンス災害 + メモリ爆発。.{0,30} を使用してください。
「どこでも --relaxed-re-syntax を使用しよう」実際のバグをマスクします。正規表現を修正して、問題を隠さないようにしてください。

判定木

この文字列は十分か?

この文字列は十分か?
├─ 4 バイト未満?
│  └─ NO — より長い文字列を見つける
├─ 繰り返しバイトを含む (0000、9090)?
│  └─ NO — 周囲のコンテキストを追加
├─ API 名 (VirtualAlloc、CreateRemoteThread)?
│  └─ NO — 呼び出しサイトの 16 進パターンを使用
├─ Windows システム ファイルに表示される?
│  └─ NO — 一般的すぎます。ユニークな何かを見つけてください
├─ 一般的なパス (C:\Windows\、cmd.exe)?
│  └─ NO — マルウェア固有のパスを見つける
├─ このマルウェア ファミリーに固有?
│  └─ YES — 使用する
└─ 他のマルウェアにも表示される?
   └─ おそらく — ファミリー固有のマーカーと組み合わせる

"all of" と "any of" をいつ使うか

すべての文字列を要求するか、任意を許可するか?
├─ 文字列は個別にマルウェアに固有?
│  └─ any of them (それぞれが疑わしい)
├─ 文字列は一般的だが組み合わせが疑わしい?
│  └─ all of them (完全なパターンを要求)
├─ 文字列の信頼度レベルが異なる?
│  └─ グループ:all of ($core_*) and any of ($variant_*)
└─ 多くの誤検知を見ている?
   └─ 厳密化:any → all に変更、必須文字列をさらに追加

本番環境のレッスン: any of ($network_*) を使用するルールでは、文字列が "fetch"、"axios"、"http" を含めると、事実上すべてのウェブアプリケーションにマッチしました。認証情報パス AND ネットワーク呼び出し AND exfil 宛先を要求するように切り替えることで、FP を排除しました。

ルール アプローチを放棄するタイミング

これらの場合に停止してピボットしてください:

  • yarGen が API 名とパスのみを返す文字列が失敗したとき、構造にピボット を参照

  • 3 つのユニークな文字列が見つからない → パック化されている可能性があります。未パック版をターゲットにするか、パッカーを検出してください。

  • ルールが正規ウェア ファイルにマッチする → 文字列はユニークではありません。1~2 回のマッチ = 調査して厳密化、3~5 回のマッチ = 異なるインジケータを見つける、6 回以上 = 最初からやり直す。

  • パフォーマンスが最適化後でも悪い → アーキテクチャの問題です。複数の的を絞ったルールに分割するか、厳密なプリフィルタを追加してください。

  • 説明が書きにくい → ルールが不明確です。何をキャッチするかを説明できない場合、キャッチしすぎています。

誤検知のデバッグ

FP 調査フロー:
│
├─ 1. どの文字列がマッチしたか?
│     実行:yr scan -s rule.yar false_positive.exe
│
├─ 2. それは正規ライブラリに存在するか?
│     └─ 追加:not $fp_vendor_string 除外
│
├─ 3. 共通の開発パターンか?
│     └─ より具体的なインジケータを見つけ、文字列を置き換える
│
├─ 4. 複数の一般的な文字列が一緒にマッチしているか?
│     └─ すべてを要求するよう厳密化 + ユニークなマーカーを追加
│
└─ 5. マルウェアが共通テクニックを使用しているか?
      └─ テクニック ではなく、マルウェア固有の実装詳細をターゲット

16 進数 vs テキスト vs 正規表現

どの文字列タイプを使うべき?
│
├─ 正確な ASCII/Unicode テキスト?
│  └─ TEXT:$s = "MutexName" ascii wide
│
├─ 特定のバイト シーケンス?
│  └─ HEX:$h = { 4D 5A 90 00 }
│
├─ 変動のあるバイト シーケンス?
│  └─ ワイルドカード付き HEX:{ 4D 5A ?? ?? 50 45 }
│
├─ 構造を持つパターン (URL、パス)?
│  └─ 有界正規表現:/https:\/\/[a-z]{5,20}\.onion/
│
└─ 不明なエンコーディング (XOR、base64)?
   └─ 修飾子付き TEXT:$s = "config" xor(0x00-0xFF)

サンプルはパック化されているか? (最初に確認)

文字列ベースのルールを書く前に:

サンプルはパック化されているか?
├─ エントロピー > 7.0?
│  └─ おそらくパック化 — 未パック化層を最初に見つける
├─ 読み取り可能な文字列が少ない/ない?
│  └─ おそらくパック化 — エントロピー、PE 構造、またはパッカー シグネチャを使用
├─ UPX/MPRESS/カスタム パッカーが検出された?
│  └─ 未パック化ペイロード OR パッカー自体を検出
└─ 読み取り可能な文字列が利用可能?
   └─ 文字列ベースの検出を進める

専門家のガイダンス: パック化レイヤーに対するルールを書かないでください。パッキングは変わります。ペイロードは変わりません。

文字列が失敗したとき、構造にピボット

yarGen が API 名と一般的なパスのみを返す場合:

文字列抽出が失敗 — 次は?
├─ 高エントロピー セクション?
│  └─ 特定セクションで math.entropy() を使用
├─ 異常なインポート パターン?
│  └─ インポート ハッシュ クラスタリングに pe.imphash() を使用
├─ 一貫した PE 構造の異常?
│  └─ セクション名、サイズ、特性をターゲット
├─ メタデータが存在?
│  └─ バージョン情報、タイムスタンプ、リソースをターゲット
└─ ユニークなものがない?
   └─ このサンプルは YARA だけでは検出できない可能性があります

専門家のガイダンス: 「メタデータ、エントロピー、インポート ハッシュ、その他の一定で留まるデータなど、他のファイル プロパティを使用できます。」— Kaspersky Applied YARA Training

専門家のヒューリスティクス

文字列選択: ミューテックス名は金、C2 パスは銀、エラー メッセージは銅です。スタック文字列はほぼ常にユニークです。6 個以上の文字列が必要な場合、オーバーフィッティングしています。

条件設計: filesize < で開始し、その後マジック バイト、次に文字列、最後にモジュール。5 行以上の場合は、複数のルールに分割してください。

品質シグナル: yarGen 出力は 80% フィルタリングが必要です。バリアントの <50% にマッチするルールは狭すぎ、正規ウェアにマッチするルールは広すぎです。

修飾子の規律:

  • 推測で nocase または wide を使用しない — サンプルでケース/エンコーディングが変わることを確認した場合のみ
  • nocase はアトム生成を 2 倍に、wide は文字列マッチングを 2 倍にします — どちらも実際のコストがあります
  • 「これらの修飾子を使用する明確な理由がない場合は、使用しないでください。」— Kaspersky Applied YARA

正規表現のアンカリング:

  • 4+ バイトのリテラル部分文字列のない正規表現 は、すべてのファイル オフセットで評価されます — 壊滅的なパフォーマンス
  • 常に正規表現を特別なリテラルにアンカーしてください:/mshta\.exe http:\/\/.../ ではなく /http:\/\/.../
  • アンカーできない場合は、代わりにワイルドカードを使用した 16 進パターンを検討してください

ループの規律:

  • 常にループを filesize でバウンドしてください:filesize < 100KB and for all i in (1..#a) : ...
  • アンバウンドの #a は大規模ファイルで数千になる可能性があります — 指数関数的な減速

YARA-X ヒント: $_unused 警告を抑制するため、private $s 出力から隠す、すべてのコミット前に yr check + yr fmt を実行。

モジュールと バイト チェックを使うべき時

モジュールまたはバイト チェックを使うべき?
├─ imphash/rich ヘッダー/authenticode が必要?
│  └─ PE モジュールを使用 — 複製するには複雑すぎます
├─ マジック バイトまたはシンプルなオフセットをチェック?
│  └─ uint16/uint32 を使用 — より高速、モジュール オーバーヘッドなし
├─ セクション名/サイズをチェック?
│  └─ PE モジュール がクリーンですが、マジック バイト フィルタを最初に追加
├─ Chrome 拡張パーミッションをチェック?
│  └─ crx モジュールを使用 — 文字列解析は脆弱です
└─ LNK ターゲット パスをチェック?
   └─ lnk モジュールを使用 — LNK フォーマットは複雑です

専門家のガイダンス: 「magic モジュールを避けてください — 代わりに明示的な 16 進チェックを使用してください。」— Neo23x0。この原則を適用してください:uint32() で行える場合は、モジュールを読み込まないでください。

YARA-X の新機能

最近のリリースの主な追加:

  • プライベート パターン (v1.3.0+):private $helper = "pattern" — マッチしますが出力から隠す
  • 警告抑制 (v1.4.0+):// suppress: slow_pattern インラインコメント
  • 数値アンダースコア (v1.5.0+):filesize < 10_000_000 可読性向上
  • 組み込みフォーマッターyr fmt rules/ 標準化フォーマット用
  • NDJSON 出力yr scan --output-format ndjson ツール用

YARA-X ツーリング ワークフロー

YARA-X はレガシー YARA にない診断ツールを提供します:

ルール開発サイクル:

# 1. 初期ルールを作成
# 2. 詳細なエラーで構文をチェック
yr check rule.yar

# 3. 一貫性をフォーマット
yr fmt -w rule.yar

# 4. モジュール出力をダンプしてファイル構造を検査 (ダミー ルール不要)
yr dump -m pe sample.exe --output-format yaml

# 5. タイミング情報でスキャン
time yr scan -s rule.yar corpus/

yr dump を使う時:

  • 利用可能な PE/ELF/Mach-O フィールドを調査
  • モジュール条件がマッチしない理由をデバッグ
  • 新しいモジュール (crx、lnk、dotnet) をルール作成前に探索

YARA-X 診断の利点: エラー メッセージには正確なソース位置が含まれます。yr check が行 15 を指す場合、問題は実際に行 15 にあります (レガシー YARA と異なります)。

Chrome 拡張機能分析 (crx モジュール)

crx モジュールは悪意のある Chrome 拡張機能の検出を可能にします。YARA-X v1.5.0+ (基本)、v1.11.0+ (permhash() 用) が必要です。

主要 API: crx.is_crxcrx.permissionscrx.permhash()

危険信号: nativeMessaging + downloadsdebugger パーミッション、<all_urls> のコンテンツ スクリプト

import "crx"

rule SUSP_CRX_HighRiskPerms {
    condition:
        crx.is_crx and
        for any perm in crx.permissions : (perm == "debugger")
}

完全な API リファレンス、パーミッション リスク評価、ルール例については、crx-module.md を参照してください。

Android DEX 分析 (dex モジュール)

dex モジュールは Android マルウェア検出を可能にします。YARA-X v1.11.0+ が必要です。レガシー YARA の dex モジュールとは互換性がありません — API は完全に異なります。

主要 API: dex.is_dexdex.contains_class()dex.contains_method()dex.contains_string()

危険信号: 1 文字のクラス名 (オブファスケーション)、DexClassLoader リフレクション、暗号化されたアセット

import "dex"

rule SUSP_DEX_DynamicLoading {
    condition:
        dex.is_dex and
        dex.contains_class("Ldalvik/system/DexClassLoader;")
}

完全な API リファレンス、オブファスケーション検出、ルール例については、dex-module.md を参照してください。

レガシー YARA からの移行

YARA-X には 99% のルール互換性がありますが、より厳密な検証を実施します。

クイック移行:

yr check --relaxed-re-syntax rules/  # 問題を特定
# 各問題を修正してから:
yr check rules/  # relaxed モード なしで検証

一般的な修正:

問題レガシーYARA-X 修正
正規表現のリテラル {/{//\{/
無効なエスケープ\R サイレント リテラル\\R または R
Base64 文字列任意の長さ3+ 文字必須
負のインデックス@a[-1]@a[#a - 1]
重複修飾子許可重複を削除

注: --relaxed-re-syntax は診断ツールとしてのみ使用してください。relaxed モードに頼らず、問題を修正してください。

クイック リファレンス

命名規則

{CATEGORY}_{PLATFORM}_{FAMILY}_{VARIANT}_{DATE}

一般的なプレフィックス: MAL_ (マルウェア)、HKTL_ (ハッキング ツール)、WEBSHELL_EXPL_SUSP_ (疑わしい)、GEN_ (汎用)

プラットフォーム: Win_Lnx_Mac_Android_CRX_

例: MAL_Win_Emotet_Loader_Jan25

完全な規則、メタデータ要件、命名例については、style-guide.md を参照してください。

必須メタデータ

すべてのルールに必要:description (「Detects」で開始)、authorreferencedate

meta:
    description = "Detects Example malware via unique mutex and C2 path"
    author = "Your Name <email@example.com>"
    reference = "https://example.com/analysis"
    date = "2025-01-29"

文字列選択

良好: ミューテックス名、PDB パス、C2 パス、スタック文字列、設定マーカー 悪い: API 名、一般的な実行可能ファイル、フォーマット指定子、一般的なパス

完全な判定木と例については、strings.md を参照してください。

条件パターン

条件を短絡化するための順序:

  1. filesize < 10MB (即座)
  2. uint16(0) == 0x5A4D (ほぼ即座)
  3. 文字列マッチ (安価)
  4. モジュール チェック (高価)

詳細な最適化パターンについては、performance.md を参照してください。

ワークフロー

  1. サンプルを収集 — 複数のサンプル。単一サンプルのルールは脆弱です
  2. 候補を抽出yarGen -m samples/ --excludegood
  3. 品質を検証 — 判定木を使用、yarGen は 80% フィルタリングが必要
  4. 初期ルールを作成 — テンプレートに従い適切なメタデータを使用
  5. Lint とテストyr checkyr fmt、リンタ スクリプト
  6. 正規ウェア検証 — VirusTotal コーパスまたはローカル クリーン ファイル
  7. デプロイ — 完全なメタデータをリポジトリに追加、FP を監視

サンプル収集からデプロイメントまですべてのフェーズをカバーする包括的なステップバイステップ ガイドについては、rule-development.md を参照してください。

一般的なミス

ミス悪い良い
インジケータとしての API 名"VirtualAlloc"呼び出しサイトの 16 進パターン + ユニークなミューテックス
アンバウンド正規表現/https?:\/\/.*//https?:\/\/[a-z0-9]{8,12}\.onion/
ファイルタイプ フィルタがないpe.imports(...) 最初uint16(0) == 0x5A4D and filesize < 10MB 最初
短い文字列"abc" (3 バイト)"abcdef" (4+ バイト)
エスケープなしの波括弧 (YARA-X)/config{key}//config\{key\}/

パフォーマンス最適化

クイック ウィン: filesize を最初に配置、nocase を避ける、有界正規表現 {1,100}、16 進数を正規表現より優先。

危険信号: 4 バイト未満の文字列、アンバウンド正規表現 (.*)、ファイルタイプ フィルタなしのモジュール。

詳細なアトム理論と最適化については、performance.md を参照してください。

リファレンス ドキュメント

トピックドキュメント
命名とメタデータ規則style-guide.md
パフォーマンスとアトム最適化performance.md
文字列タイプと判定strings.md
テストと検証testing.md
Chrome 拡張モジュール (crx)crx-module.md
Android DEX モジュール (dex)dex-module.md

ワークフロー

トピックドキュメント
完全なルール開発プロセスrule-development.md

ルール例

examples/ ディレクトリには、ベストプラクティスを実証する実在で属性付けされたルールが含まれています:

デモンストレーションソース
MAL_Win_Remcos_Jan25.yarPE マルウェア:段階的な文字列数、ファミリーごとに複数のルールElastic Security
MAL_Mac_ProtonRAT_Jan25.yarmacOS:Mach-O マジック バイト、マルチカテゴリー グループ化Airbnb BinaryAlert
MAL_NPM_SupplyChain_Jan25.yarnpm サプライ チェーン:実際の攻撃パターン、ERC-20 セレクタStairwell Research
SUSP_JS_Obfuscation_Jan25.yarJavaScript:オブファスケータ検出、密度ベースのマッチングimp0rtp3、Nils Kuhnert
SUSP_CRX_SuspiciousPermissions.yarChrome 拡張:crx モジュール、パーミッション教育用

スクリプト

uv run {baseDir}/scripts/yara_lint.py rule.yar      # スタイル/メタデータを検証
uv run {baseDir}/scripts/atom_analyzer.py rule.yar  # 文字列品質をチェック

詳細なスクリプト ドキュメントについては、README.md を参照してください。

品質チェックリスト

ルールをデプロイする前に:

  • 名前が {CATEGORY}_{PLATFORM}_{FAMILY}_{VARIANT}_{DATE} フォーマットに従っている
  • 説明が「Detects」で開始し、何/どのように説明しているかを説明
  • すべての必須メタデータが存在 (作成者、参照、日付)
  • 文字列がユニーク (API 名、一般的なパス、フォーマット文字列ではない)
  • すべての文字列が 4+ バイトで良好なアトム可能性を持つ
  • Base64 修飾子は 3+ 文字の文字列のみ
  • 正規表現パターンが { をエスケープし、有効なエスケープシーケンスを持つ
  • 条件が安価なチェック (filesize、マジック バイト) で開始
  • ルールがすべてのターゲット サンプルにマッチ
  • ルールが正規ウェア コーパスで 0 回のマッチ
  • yr check がエラーなしで完了
  • yr fmt --check が完了 (一貫性のあるフォーマット)
  • リンタがエラーなしで完了
  • ピア レビューが完了

リソース

品質 YARA ルール リポジトリ

本番環境ルールから学習。これらのリポジトリには、よくテストされ、適切に属性付けされたルールが含まれています:

リポジトリフォーカスメンテナー
Neo23x0/signature-base17,000+ 本番ルール、マルチプラットフォームFlorian Roth
Elastic/protections-artifacts1,000+ エンドポイント テスト済みルールElastic Security
reversinglabs/reversinglabs-yara-rules脅威研究ルールReversingLabs
imp0rtp3/js-yara-rulesJavaScript/ブラウザ マルウェアimp0rtp3
InQuest/awesome-yaraキュレート済みリソース インデックスInQuest

スタイル & パフォーマンス ガイド

ガイド目的
YARA スタイル ガイド命名規則、メタデータ、文字列プレフィックス
YARA パフォーマンス ガイドラインアトム最適化、正規表現バウンド
Kaspersky Applied YARA Training本番用途の専門家テクニック

ツール

ツール目的
yarGenサンプルから候補文字列を抽出
FLOSSオブファスケート済みとスタック文字列を抽出
YARA-CI自動正規ウェア テスト
YaraDbgウェブベースのルール デバッガー

macOS 固有リソース

リソース目的
Apple XProtect/System/Library/CoreServices/XProtect.bundle/ の本番 macOS ルール
objective-seemacOS マルウェア研究とサンプル
macOS セキュリティ ツールリファレンス リスト

マルチ インジケータ クラスタリング パターン

本番環境ルールはしばしば種類別にインジケータをグループ化します:

strings:
    // カテゴリ A:ライブラリ インジケータ
    $a1 = "SRWebSocket" ascii
    $a2 = "SocketRocket" ascii

    // カテゴリ B:動作 インジケータ
    $b1 = "SSH tunnel" ascii
    $b2 = "keylogger" ascii nocase

    // カテゴリ C:C2 パターン
    $c1 = /https:\/\/[a-z0-9]{8,16}\.onion/

condition:
    filesize < 10MB and
    any of ($a*) and any of ($b*)  // 両方のカテゴリから証拠を要求

これが機能する理由: 異なるインジケータ種は異なる信頼度レベルを持ちます。単一の C2 ドメインは確実性があります。一方、複数のライブラリ インポートで確実になります。$a*$b*$c* でグループ化することで、段階的な要件を表現できます。

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