Programmatic and command-line access to NRDAX, the NullRabbit Decentralised Attack indeX.
Project description
nrdax-python
Programmatic and command-line access to NRDAX - the NullRabbit Decentralised Attack indeX.
nrdax is the standard open-source Python interface to NRDAX. If you have used
MITRE's mitreattack-python, this will feel familiar - but it is designed for the
NRDAX schema and semantics, not forced into an ATT&CK model.
- Reusable library with typed models and a small, predictable API.
- Practical CLI (
nrdax) for search, retrieval, filtering, relationships, export, citation, change inspection, and offline use. - Zero required runtime dependencies - the core library and CLI use only the Python standard library, so it installs cleanly and starts fast.
- Works offline out of the box via a bundled dataset snapshot; refresh to the live data when you want it.
What is NRDAX?
NRDAX is NullRabbit's canonical, chain-agnostic registry of techniques for attacks
on decentralised infrastructure - validators, nodes, RPC services, networking and
gossip layers, consensus implementations, and related systems. Each technique has a
permanent id (NRDAX-Tnnnn), a mechanism description, a family, and evidence in the
form of chain-specific instances, plus links to advisories, CVEs, and research.
The public website (https://nrdax.com) is for human exploration. This package is for machines and researchers: retrieve, search, filter, compare, cite, export, and monitor NRDAX data programmatically.
Install
pip install nrdax
Development version:
git clone https://github.com/NullRabbitLabs/nrdax-python
cd nrdax-python
pip install -e ".[dev]"
Python 3.10+ is supported.
Quick start (CLI)
pip install nrdax
nrdax update # fetch the latest dataset into the cache
nrdax search "rpc resource exhaustion"
nrdax get NRDAX-T0006
nrdax related NRDAX-T0006
nrdax cite NRDAX-T0006 --format bibtex
nrdax export --implementation agave --format json --output agave-attacks.json
Every command works offline against the bundled snapshot even before you run
nrdax update.
Quick start (Python)
from nrdax import NRDAX
registry = NRDAX.load() # bundled snapshot, offline, zero-config
technique = registry.get("NRDAX-T0006")
print(technique.display, technique.family, technique.chains)
results = registry.search("rpc exhaustion")
for r in results[:5]:
print(r.score, r.technique.id, r.technique.display)
related = registry.related("NRDAX-T0006") # derived: family, chain, shared refs
coverage = registry.coverage # technique x chain matrix
Core CLI commands
| Command | Purpose |
|---|---|
nrdax search <query> |
Deterministic, explainable search across id/name/mechanism/chain/family/reference. |
nrdax get <id> |
One technique with instances, references, provenance (table / JSON / STIX). |
nrdax list [filters] |
Filter and list techniques (composable filters). |
nrdax related <id> |
Derived relationships (family siblings, shared chains, shared references). |
nrdax export [filters] |
Export a subset as JSON, CSV, or STIX 2.1. |
nrdax cite <id> |
Citation in text, Markdown, BibTeX, or CSL-JSON. |
nrdax changes |
Techniques since a date, or a diff between two dataset snapshots. |
nrdax info |
Dataset, source, and cache information. |
nrdax version |
CLI, library, and schema versions. |
nrdax update |
Fetch the latest dataset into the local cache. |
| `nrdax cache info | clear` |
nrdax schema |
The NRDAX vocabularies and field set. |
Full reference: docs/cli.md.
Supported data sources
Domain operations are independent of where the data came from. Select a source with
--source (CLI) or a classmethod (library):
| Source | CLI | Library | Notes |
|---|---|---|---|
| Bundled snapshot | --source bundled |
NRDAX.bundled() |
Ships with the package; offline default. |
| Local cache | --source cache |
NRDAX.from_cache() |
Written by nrdax update. |
| Live API | --source api[:URL] |
NRDAX.from_api() |
https://api.nrdax.com. |
| Static feed | --source feed:LOC |
NRDAX.from_feed(loc) |
A directory or base URL of feed files. |
| Local file | --source file:PATH |
NRDAX.from_file(path) |
registry.jsonl, a bundle, or one technique. |
| STIX bundle | --source stix:PATH |
NRDAX.from_stix(path=...) |
Parses NRDAX STIX (lossy; see data-model). |
| In-memory | - | NRDAX.from_memory([...]) |
For tests and scripting. |
With no --source, the CLI uses the cached snapshot if present, otherwise the
bundled one. nrdax info always shows which source and version you are using.
Output formats
- Terminal tables and detail views (default).
- JSON (
--format json) with stable field names. - CSV (
--format csv) where tabular output is meaningful. - STIX 2.1 (
--format stix) for supported exports - byte-identical to the canonical NRDAX emitter, so identities round-trip.
Versioning
Four versions are tracked independently:
- Package version (this repo, e.g.
0.1.0). - CLI version (equals the package version).
- Dataset version (from the loaded data, e.g.
v0.1-import). - Schema version (the NRDAX contract this client targets, e.g.
1.4).
A package release does not imply the dataset changed, and vice versa. Pin an exact
dataset for reproducible research by keeping a feed snapshot and loading it with
--source feed:/path. See docs/data-model.md.
Honest limitations
This client never invents fields or fabricates data. Where NRDAX lacks a capability, the limitation is isolated and documented:
- No
implementationorsurfacefield exists in NRDAX;--implementationand surface search are derived text heuristics, clearly labelled as such. - No asserted technique-to-technique relationships exist;
relatedreturns derived links (shared family / chain / reference). - No DOI is minted yet; citations omit it rather than inventing one.
- No historical versioned releases are published; cross-version
changesneeds two snapshots you supply (--from/--to).--sinceworks fromfirst_seen. - The static feed is not yet hosted at a stable public URL, so
nrdax updatepulls from the live API by default.
You can validate any dataset yourself: loading reports schema and integrity issues
(nrdax info shows the count, --strict fails on the first), so problems in the
underlying data can be found and corrected separately - the client never fabricates
or silently normalises data.
Documentation
- CLI reference
- Python API reference
- Data-model guide
- Task guides:
docs/guides/- map a finding, retrieve by implementation, build a research dataset, export for a paper, cite, compare changes, import into another tool, work offline. - Runnable examples.
Contributing
See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and GOVERNANCE.md. Security issues: SECURITY.md.
License
The source code in this repository is licensed under Apache-2.0 (see LICENSE).
The NRDAX dataset - including the bundled snapshot and any data retrieved from NRDAX services - is a separate NullRabbit product with its own terms; this tool grants no rights to the data. See DATA_LICENSE.md and NOTICE. "NRDAX" and "NullRabbit" are trademarks of NullRabbit Labs.
Maintained by NullRabbit Labs.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nrdax-0.1.0.tar.gz.
File metadata
- Download URL: nrdax-0.1.0.tar.gz
- Upload date:
- Size: 126.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a95db3e485922ab8f1f234f9dd6056edcf25eb81981555c395cdf85d4ecb93d2
|
|
| MD5 |
0db2a64b02ddc4b9d1864381374ae8b3
|
|
| BLAKE2b-256 |
14fe99e5b3a1c6c05058c3c0a63123a57e666b8fb5d22aecd28352847063f08b
|
File details
Details for the file nrdax-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nrdax-0.1.0-py3-none-any.whl
- Upload date:
- Size: 113.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66db20c96e0214b2a287fdb9d18d58cdf9e92c8d1145e9b69a998dbe072a781b
|
|
| MD5 |
54f7408f0720d5e2e4048a2158e8e570
|
|
| BLAKE2b-256 |
4603d6e4e3217d366c8c8aaadb4e5708ec3b93e63d62a306f30011483891f9b8
|