Skip to main content
Glama

Aether

CI Python 3.10+ Licence: Apache-2.0 Runtime dependencies: none

エビデンス優先のバイナリおよびファームウェア解析。

Aether は成熟したエンジン(Ghidra headless、binwalk)の上に位置し、それらが持たないものを提供します。すなわち、すべての発見が、それを裏付ける正確なアーティファクトにリンクされた構造化されたクレームであるプロジェクトモデルです。

自由形式のセキュリティクレームは、ここでは単に推奨されないだけでなく、表現不可能です。クレームは型付きフィールドを持つ登録済み述語であり、その述語が要求する種類のアーティファクトIDなしには保存できません。「これは悪用可能に見える」と書こうとするエージェントは、問題のあるフィールドを指し示すスキーマエラーを受け取ります。

Aether は逆アセンブラも逆コンパイラも構築せず、今後も構築しません。その作業はすでに十分に成し遂げられています。ギャップはその周辺にあります。


ステータス: フェーズ0完了

25のゲートチェックがすべて合格、172のテストが合格。

python examples/demo_phase0.py
  [PASS] ELF identified with architecture and word size
  [PASS] functions, xrefs, and decompilation imported
  [PASS] Ghidra converged onto existing artifacts instead of duplicating
  [PASS] nested container chain unpacked (uImage -> gzip -> cpio)
  [PASS] findings attributed to the member file, not the container blob
  [PASS] claim resolves to a string artifact at a concrete location
  [PASS] free-text claim from an agent is refused
  [PASS] two independent analyses produce byte-identical graphs
  [PASS] suite 'elf_sample' passes  -  recall 1.00, 0 false positive(s)
  ...
  25/25 gate checks passed

フェーズ1〜3(自然言語モード、マルチエージェントオーケストレーション、ファームウェアカートグラフィ)は意図的に開始していません。エビデンスモデルは、その上に何かを構築する前に証明されるために存在します。

Related MCP server: pyghidra-mcp

現在動作するもの

機能

状態

プロジェクトモデル、SQLite永続化、マイグレーション

動作中

エビデンスグラフ: 11種類のアーティファクト、10のクレーム述語

動作中

コンテンツアドレスIDとクロスエンジン収束

動作中、テスト済み

来歴台帳; すべての書き込みはトランザクション実行内

動作中

ELF/PEトリアージ: ヘッダー、セクション、シンボルテーブル、緩和策

動作中

文字列抽出(ASCII + UTF-16LE)とセクション/アドレスマッピング

動作中

ルールベースの検出器: シークレット、コンポーネント、リスクAPI

動作中

ファームウェア展開: uImage → gzip → cpio、およびzip/tar/bzip2/xz

動作中

Ghidraエクスポートインポート: 関数、xref、逆コンパイル、シンボル

動作中、記録されたエクスポートに対してテスト済み

Ghidra headless ランナー

作成済み、実際のGhidraインストールに対して未実行

binwalkサブプロセスパス

作成済み、実際のbinwalkインストールに対して未実行

決定的なGitフレンドリーなエクスポート

動作中、テスト済み

MCP stdioサーバー、15ツール

動作中、テスト済み

CLI: init/analyze/query/export/check/doctor/mcp/eval

動作中

グラウンドトゥルーススイート付き評価ハーネス

動作中、再現率1.00

「未実行」の2行は、重要であるため明確に記載されています。両側の変換レイヤーは完全にテストされています。実行されていないのはサブプロセス呼び出しであり、フェーズ0が構築されたマシンにはどちらのエンジンもインストールされていないためです。フルエンジンの有効化を参照してください。

クイックスタート

Python 3.10+ およびランタイム依存関係なし。インストールするものはありません:

git clone https://github.com/n-3-0-l-d-3-v/aether-platform.git
cd aether-platform
python examples/demo_phase0.py

プロジェクトを直接操作する場合:

python cli/aether.py init ./work
python cli/aether.py -P ./work analyze examples/demo_firmware.bin
python cli/aether.py -P ./work query objects
python cli/aether.py -P ./work query claims --predicate contains_hardcoded_secret
python cli/aether.py -P ./work query claim clm_1284ca2d2406
python cli/aether.py -P ./work export ./work/export

サンプルバイナリは生成され、コミットされません。examples/demo_phase0.py とテストスイートはオンデマンドでそれらを構築します。手動で構築するには:

python examples/src/build_elf_sample.py examples/firmware_agent.elf
python examples/src/build_firmware_sample.py examples/demo_firmware.bin

インストールすると aether がPATHに追加されます:

pip install -e .
aether doctor

テストの実行

python -m pytest              # 172 tests
python -m pytest -q tests/test_evidence_model.py   # the invariants alone

スイートは初回実行時に独自のサンプルバイナリを生成します。PE固有のテストは、PEを生成できないホストではクリーンにスキップされます。Linux上のネイティブな gcc はサンプルをELFにコンパイルするため、コンパイラの存在だけでは不十分で、出力は MZ ヘッダーでチェックされます。LinuxでPEカバレッジを得るには mingw-w64 クロスコンパイラをインストールしてください。

CIは、Linux、Windows、macOSでPython 3.10および3.12を使用して、スイート、ゲートデモ、エクスポート決定性チェック、評価スイートを実行します。

見た目

$ aether analyze demo_firmware.bin
[binwalk] run run_e65361591a1e...
  engine aether-carver   extracted 7 file(s)
    bin/diagnostics.exe                    pe          132.4 KiB
    bin/firmware_agent                     elf         1.8 KiB
    etc/dropbear/dropbear_rsa_host_key.pem certificate 196 B
    etc/telemetry.conf                     data        219 B

$ aether query claims --predicate contains_hardcoded_secret
id                predicate                  conf  prod  ev  subject             statement
----------------  -------------------------  ----  ----  --  -----------------  --------------------
clm_1284ca2d2406  contains_hardcoded_secret  0.95  1     1   etc/telemetry.conf  {"detector": "rul...
clm_0217e368bbeb  contains_hardcoded_secret  0.98  1     1   etc/dropbear/dro..  {"detector": "rul...

$ aether query claim clm_1284ca2d2406
claim   clm_1284ca2d2406f45deb3f680afb7914f5
schema  aether.claim.contains_hardcoded_secret/1
stated  {"detector": "rule:github-token", "redacted_preview": "ghp_****", "secret_kind": "api_token"}
conf    0.95 (max 0.95 across 1 producer(s))

evidence
role   kind    addr  artifact          name
-----  ------  ----  ----------------  ----------------------------------------
locus  string  0x56  art_6a75100355c5  api_key=ghp_A1b2C3d4E5f6G7h8I9j0K1l2...

すべての発見はバイトに遡ります。それがすべての要点です。

モデル

3つのレコードタイプがすべてを運びます。

アーティファクト — 具体的で位置特定可能なエビデンスの断片: ファイル、関数、文字列、xref、セクション、逆コンパイルされたボディ、シグネチャヒット。そのIDはIDフィールドのみのハッシュであるため、アーティファクトを豊かにしてもIDは変わりません。また、2つのエンジンが同じものを観察すると、同じ行に到達します。

クレーム — 構造化されたアサーション: 登録済み述語、型付きフィールド、およびそれを裏付けるアーティファクト(locussupportcontextcounter の名前付きロール)。プロデューサーもタイムスタンプも持たないため、2つのエンジンからの同じアサーションは1つのクレームです。

アテステーション — 1つのプロデューサーが1つのクレームを1つの時点で裏付け、信頼度を伴います。信頼度はクレームのプロパティではなく、アテステーションから導出されます — プロデューサー内では最大、独立したプロデューサー間ではノイズOR。2つのエンジンが0.9で一致すると0.99になり、2つのほぼ重複した発見にはなりません。

この分割が中心的な設計決定です: ADR 0003

推奨されるだけでなく強制されるもの

不変条件

場所

エビデンスなしのクレームはない

Claim.create、ストア、および孤立を拒否するSQLiteトリガー

自由形式の所見はない

述語スキーマは未宣言フィールドを拒否; テストは散文フィールドを宣言する述語がないことを主張

エビデンスは正しい種類でなければならない

contains_hardcoded_secret クレームはファイルではなく文字列を引用する必要があります

来歴は決してオプションではない

書き込みは project.run() ブロック内でのみ発生します

エージェントは自己証明できない

MCP送信クレームは proposed として着地し、エージェントに帰属します

部分的な解析は決して着地しない

各実行は1つのトランザクションです; クラッシュしたエンジンは failed 実行行とアーティファクトなしを残します

自由形式のテキストには正確に1つの居場所があります: 注釈。独自のテーブルと独自のエクスポートストリームにあり、所見と誤認されることはありません。

フルエンジンの有効化

Aether は Ghidra や binwalk なしで、深さを減らして実行され、その旨を明示します。aether doctor は何が欠けているか、各ギャップのコストを報告します:

$ aether doctor
aether 0.1.0  (python 3.12.2)

  ok      triage     0.1.0        built in; no external engine required
  MISSING ghidra     unknown      analyzeHeadless was not found
  MISSING binwalk    unknown      binwalk was not found on PATH

Ghidra

関数回復、クロスリファレンス、逆コンパイル、正確に位置特定された文字列を提供します。これがない場合でも、ヘッダーレベルのトリアージは実行されます。

  1. Ghidra をインストールします(11.x推奨)。

  2. JDK 21以降をインストールし、javaPATH にあることを確認するか、JAVA_HOME を設定します。Ghidra headless はこれなしでは起動しません。

  3. Aether をインストール先に向けます:

    export GHIDRA_INSTALL_DIR=/opt/ghidra_11.1.2_PUBLIC     # Linux/macOS
    setx GHIDRA_INSTALL_DIR "C:\ghidra_11.1.2_PUBLIC"       # Windows

    AETHER_GHIDRA_HOMEGHIDRA_HOME も尊重され、support/analyzeHeadlessPATH にある場合も機能します。これらすべてが失敗した場合、Aether は従来のインストールディレクトリをチェックします。

  4. 検証して実行:

    aether doctor
    aether -P ./work analyze ./target.elf --engine ghidra

Ghidra の結果を使用するためにローカルに Ghidra をインストールする必要はありません。 ブリッジは実行とインポートを分離しているため、任意のマシンで生成されたエクスポートをどこでも取り込むことができます:

# on the machine that has Ghidra
analyzeHeadless /tmp/proj aether -import target.elf \
    -scriptPath aether/adapters/ghidra/scripts \
    -postScript AetherExport.py /tmp/export 40 "" -deleteProject

# anywhere
aether -P ./work import-ghidra /tmp/export --target ./target.elf

AetherExport.py は Ghidra 自身のインタプリタ(Jython 2.7、または PyGhidra の下の CPython)内で実行され、両方が受け入れるサブセットに留まります。

binwalk

squashfs、jffs2、ubifs、およびベンダーフォーマットを提供します。これがない場合、組み込みのカーバーは gzip、bzip2、xz、zip、tar、cpio を処理し、位置を特定できたものの抽出できなかったものを報告し、静かにスキップしません。

pip install binwalk
# or: https://github.com/ReFirmLabs/binwalk

完全な抽出には sasquatchjeffersonubi_reader も必要ですが、これらは Windows では扱いにくいため、フォールバックカーバーが存在する理由です(ADR 0005)。

MCP

MCP サーバーは将来のエージェントが操作するインターフェースであり、CLI のピアです。どちらも1つのライブラリの薄いフロントエンドです。

aether mcp              # stdio JSON-RPC
aether mcp --read-only  # hide and refuse every write tool

15のツール: インベントリ、アーティファクトとクレームのクエリ、文字列検索、逆コンパイル取得、グラフトラバーサル、スキーマ発見、来歴、さらに書き込み用の aether_submit_claimaether_annotate。エージェント送信クレームは、アダプタが行うのとまったく同じ検証を経て proposed として着地します。

Gitフレンドリーなエクスポート

aether export は2つのツリーを書き出し、その分割が要点です:

  • graph/ — アーティファクト、クレーム、リンク。コンテンツアドレス、IDでソート、タイムスタンプや実行IDなし。同じバイトの2つの独立した解析は、バイト同一のファイルを生成します。これをコミットしてください。差分は発見されたものを示します。

  • ledger/ — 実行、アテステーション、観察。来歴はイベントの記録であるため、成長します。それは正しいことです。

評価

グラウンドトゥルースは eval/suites/*.json にあります:

$ aether eval
[PASS] elf_sample       required 22/22   recall 1.00   false positives 0
[PASS] firmware_image   required 12/12   recall 1.00   false positives 0

期待値は、信頼度の下限、独立したプロデューサーの最小数、そして重要なことに、一致したクレームが特定の種類のエビデンスを引用することを要求できます。ファイルではなく文字列を指す contains_hardcoded_secret クレームは、ステートメントが同じように読めても失敗します。

再現率は、スイートが何を見つけなければならないかを列挙できるため、実際の数値です。精度は、明示的に禁止されたパターンに対してのみスコアリングされます。バイナリについて真実であるすべてを列挙できるスイートはないため、予期しないクレームはスコアリングされないボリュームとして報告され、お世辞の数値に折り込まれません。ハーネスにはテストスイートにネガティブコントロールがあります — 失敗できないハーネスは何も証明しません。

レイアウト

aether/
  canonical.py       deterministic serialization, hashing, id minting
  evidence/          artifact kinds, claim predicates, and their invariants
  project/           SQLite schema, migrations, and the only sanctioned store
  adapters/
    triage/          ELF/PE headers, strings, rule-based detectors
    ghidra/          headless runner, export script, importer
    binwalk/         firmware unpacking with a standard-library fallback
  export/            deterministic JSONL export
  mcp/               stdio MCP server and its tool surface
  eval/              evaluation harness
cli/                 entry point runnable without installing
docs/                architecture and decision records
eval/suites/         ground truth
examples/            sample generators and the gate demonstration
tests/               172 tests

ドキュメント

  • アーキテクチャ — レイヤー、データモデル、各ピースがその形である理由

  • 決定記録 — 合理的なエンジニアが「なぜその方法なのか?」と尋ねる選択:

    • 0001 コアにPython、ランタイム依存関係ゼロ

    • 0002 コンテンツアドレスID、およびそれから除外されるもの

    • 0003 クレームとアテステーションは別々のレコード

    • 0004 MCPサーバーはプロトコルを直接話す

    • 0005 binwalkがない場合の制限付き抽出フォールバック

サンプルデータに関する注記

examples/src/ は、意図的に偽の資格情報を含むバイナリを生成します — AWS自身の公開されたサンプルキー(AKIAIOSFODNN7EXAMPLE)、合成 ghp_A1b2C3d4... トークン、キーマテリアルのないPEMヘッダー、冗談のパスワード。どれも本物ではなく、どれもライブではありません。評価スイートがグラウンドトゥルースを正確に知っているターゲットを持つために存在します。

ライセンス

Apache-2.0。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables users to define and run MCP tools using declarative YAML configs with built-in trust enforcement, credential brokering, and tamper-evident audit logging.
    14
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes Ghidra reverse engineering capabilities via MCP, enabling LLMs and agents to analyze binaries, decompile, search, and edit programs headlessly or with GUI integration.
    412
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes angr binary-analysis capabilities (symbolic execution, taint analysis, CFG recovery) as MCP tools for vulnerability exploration and exploit development.
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for reverse engineering Windows executables and related binary formats, offering static analysis, Ghidra-assisted function recovery, plugin-driven tooling, and optional isolated Windows runtime execution.
    7
    238
    MIT

View all related MCP servers

Related MCP Connectors

  • Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi

  • Remote MCP for C2PA intake verifier MCP, structured receipts, audit logs, and reviewer-ready evidenc

  • Production-grade cryptography toolkit with 31 MCP tools for classical, PQC, and KMS workflows.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/n-3-0-l-d-3-v/aether-platform'

If you have feedback or need assistance with the MCP directory API, please join our Discord server