Sign inSign up

mar0ls/bladedr

By mar0ls

•Updated 5 days ago

Agentless threat detection and response for Linux. SSH-based probe, CEL rules, ML risk scoring

Image
Security
0

1.3K

mar0ls/bladedr repository overview

bladedr

Agentless threat detection and response for Linux, with an optional eBPF tier.

bladedr scans your Linux fleet over SSH: it uploads a static probe, evaluates ~90 builtin YAML + CEL rules against a /proc snapshot, and removes the probe again, so nothing stays installed. On top of the raw findings it adds per-host baseline drift, fleet rarity, triage with an audit log, ECS/JSON export to a SIEM, and response actions that need a second admin's approval. An optional sensor built on Cilium Tetragon adds real-time runtime telemetry.

This image is the control plane: server, web console, REST API, bladectl, and the probe and sensor binaries for both target architectures. Point it at a database, give it a node key, and it is a working install.

⁠Tags

TagMeaning
0.9.5Exact release. Use this.
0.9Newest 0.9.x patch release.
latestNewest stable release. Moves without warning.

Images are multi-arch (linux/amd64, linux/arm64) and published with build provenance and an SBOM. Pin a version, or better a digest: this container holds SSH access to your fleet.

⁠Quick start (Docker Compose)

mkdir -p /opt/bladedr && cd /opt/bladedr
curl -fsSLo compose.yml \
  https://raw.githubusercontent.com/mar0ls/bladedr/v0.9.5/docs/compose.example.yml

docker run --rm mar0ls/bladedr:0.9.5 -keygen      # prints BLADEDR_NODE_KEY=…
cat > .env <<EOF
BLADEDR_NODE_KEY=<the key it printed>
POSTGRES_PASSWORD=$(openssl rand -hex 24)
EOF
chmod 600 .env

docker compose up -d
docker compose logs server | grep 'GENERATED password'   # first admin password

Then open http://127.0.0.1:8080/ui, sign in as admin and set a new password. The compose file publishes the console on loopback only, because it serves plaintext HTTP. Put a TLS reverse proxy in front of it, or set BLADEDR_TLS_CERT/BLADEDR_TLS_KEY.

Back up BLADEDR_NODE_KEY separately from the database. It is the only key that decrypts the stored SSH credentials. If you lose it, the credentials cannot be recovered.

⁠Plain docker run

docker run -d --name bladedr -p 127.0.0.1:8080:8080 \
  -e BLADEDR_DATABASE_URL=postgres://bladedr:…@db-host:5432/bladedr \
  -e BLADEDR_NODE_KEY=… \
  mar0ls/bladedr:0.9.5

The database must be ParadeDB (PostgreSQL + pg_search), e.g. paradedb/paradedb:0.23.5. Stock PostgreSQL will not work, because full-text search uses its BM25 index. The server applies its own migrations on startup. If BLADEDR_DATABASE_URL is not set, all state is kept in memory and lost on restart.

⁠Configuration

VariableRequiredPurpose
BLADEDR_DATABASE_URLyesParadeDB DSN
BLADEDR_NODE_KEYyesSeals SSH credentials and MFA secrets; mint with -keygen
BLADEDR_ADMIN_PASSWORD–Initial admin password; if unset, one is generated, logged once and must be changed
BLADEDR_SERVER_URLeBPF / isolationAddress monitored hosts use to reach the server (literal IP)
BLADEDR_TLS_CERT, BLADEDR_TLS_KEY–Serve HTTPS directly
BLADEDR_SECURE_COOKIESbehind a proxySet 1 when TLS terminates at a proxy
BLADEDR_TRUSTED_PROXY_CIDRSbehind a proxyProxy networks allowed to set X-Forwarded-For
BLADEDR_LOG_FORMAT–json for log aggregators

Full list: README → Config⁠.

⁠Image details

  • Runs as non-root uid 10001 on Alpine; listens on 8080.
  • Healthcheck: GET /readyz over plaintext. If you enable TLS, override it (see the compose file). /healthz and /metrics (Prometheus) are also available and unauthenticated, so keep them on an internal network.
  • /etc/bladedr/policies is empty on purpose. For the optional eBPF tier, mount your own Tetragon TracingPolicy bundle there read-only. bladedr does not ship policies yet.
  • Nothing else needs to be mounted. All state is in the database.

⁠Monitored hosts need

Linux (amd64/arm64), SSH access, a writable /tmp, and flock (util-linux). Root or sudo is optional; without it scans still run but are marked partial. The eBPF tier also needs Docker and a BTF-capable kernel on the host.

⁠Stability

0.x. Agentless scanning, rules, triage, the API and storage are on the path to a stable v1. Response actions and the eBPF tier are Beta, and risk scoring is experimental. See docs/stability.md⁠. Report security issues privately as described in SECURITY.md⁠.

Tag summary

Content type

Image

Digest

sha256:5df8d7ba3…

Size

49.4 MB

Last updated

5 days ago

docker pull mar0ls/bladedr