aether
Aether
エビデンス優先のバイナリおよびファームウェア解析。
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つのエンジンが同じものを観察すると、同じ行に到達します。
クレーム — 構造化されたアサーション: 登録済み述語、型付きフィールド、およびそれを裏付けるアーティファクト(locus、support、context、counter の名前付きロール)。プロデューサーもタイムスタンプも持たないため、2つのエンジンからの同じアサーションは1つのクレームです。
アテステーション — 1つのプロデューサーが1つのクレームを1つの時点で裏付け、信頼度を伴います。信頼度はクレームのプロパティではなく、アテステーションから導出されます — プロデューサー内では最大、独立したプロデューサー間ではノイズOR。2つのエンジンが0.9で一致すると0.99になり、2つのほぼ重複した発見にはなりません。
この分割が中心的な設計決定です: ADR 0003。
推奨されるだけでなく強制されるもの
不変条件 | 場所 |
エビデンスなしのクレームはない |
|
自由形式の所見はない | 述語スキーマは未宣言フィールドを拒否; テストは散文フィールドを宣言する述語がないことを主張 |
エビデンスは正しい種類でなければならない |
|
来歴は決してオプションではない | 書き込みは |
エージェントは自己証明できない | MCP送信クレームは |
部分的な解析は決して着地しない | 各実行は1つのトランザクションです; クラッシュしたエンジンは |
自由形式のテキストには正確に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 PATHGhidra
関数回復、クロスリファレンス、逆コンパイル、正確に位置特定された文字列を提供します。これがない場合でも、ヘッダーレベルのトリアージは実行されます。
Ghidra をインストールします(11.x推奨)。
JDK 21以降をインストールし、
javaがPATHにあることを確認するか、JAVA_HOMEを設定します。Ghidra headless はこれなしでは起動しません。Aether をインストール先に向けます:
export GHIDRA_INSTALL_DIR=/opt/ghidra_11.1.2_PUBLIC # Linux/macOS setx GHIDRA_INSTALL_DIR "C:\ghidra_11.1.2_PUBLIC" # WindowsAETHER_GHIDRA_HOMEとGHIDRA_HOMEも尊重され、support/analyzeHeadlessがPATHにある場合も機能します。これらすべてが失敗した場合、Aether は従来のインストールディレクトリをチェックします。検証して実行:
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.elfAetherExport.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完全な抽出には sasquatch、jefferson、ubi_reader も必要ですが、これらは Windows では扱いにくいため、フォールバックカーバーが存在する理由です(ADR 0005)。
MCP
MCP サーバーは将来のエージェントが操作するインターフェースであり、CLI のピアです。どちらも1つのライブラリの薄いフロントエンドです。
aether mcp # stdio JSON-RPC
aether mcp --read-only # hide and refuse every write tool15のツール: インベントリ、アーティファクトとクレームのクエリ、文字列検索、逆コンパイル取得、グラフトラバーサル、スキーマ発見、来歴、さらに書き込み用の aether_submit_claim と aether_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ドキュメント
サンプルデータに関する注記
examples/src/ は、意図的に偽の資格情報を含むバイナリを生成します — AWS自身の公開されたサンプルキー(AKIAIOSFODNN7EXAMPLE)、合成 ghp_A1b2C3d4... トークン、キーマテリアルのないPEMヘッダー、冗談のパスワード。どれも本物ではなく、どれもライブではありません。評価スイートがグラウンドトゥルースを正確に知っているターゲットを持つために存在します。
ライセンス
Apache-2.0。
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityAmaintenanceEnables users to define and run MCP tools using declarative YAML configs with built-in trust enforcement, credential brokering, and tamper-evident audit logging.14MIT
- AlicenseNot gradedqualityBmaintenanceExposes Ghidra reverse engineering capabilities via MCP, enabling LLMs and agents to analyze binaries, decompile, search, and edit programs headlessly or with GUI integration.412Apache 2.0
- AlicenseNot gradedqualityDmaintenanceExposes angr binary-analysis capabilities (symbolic execution, taint analysis, CFG recovery) as MCP tools for vulnerability exploration and exploit development.9MIT
- AlicenseNot gradedqualityAmaintenanceMCP 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.7238MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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