AUTHOR.md + SECURITY.md split out; README restructured for public eyes
This commit is contained in:
parent
da455b77a5
commit
565baa0819
4 changed files with 110 additions and 59 deletions
44
README.md
44
README.md
|
|
@ -8,17 +8,15 @@
|
|||
> A stable release is coming soon, bringing Windows support back fully gated.
|
||||
> I'll be pinning a release version this week to mark the start of stabilization —
|
||||
> focused on hardening what's here rather than shipping new features.
|
||||
> If you want it to keep existing, [sponsor the work](#sponsorship--consulting).
|
||||
> RedFlag is free and stays free — [here's who builds it, and why](AUTHOR.md).
|
||||
|
||||
---
|
||||
|
||||
The software that patches your fleet runs as root on every box. XZ Utils came through a build pipeline. SolarWinds came through an update. The update manager is part of your attack surface — most homelab tooling ignores that. RedFlag treats it as the attack surface it is.
|
||||
<!-- Showcase video goes here: terminal → install → multiple agents → updates. -->
|
||||
|
||||
Every command the server issues is Ed25519-signed. Agents verify the signature, check the nonce, validate the timestamp, and reject anything they've seen before. The signing key never leaves your server. Hardware binding means a stolen agent config doesn't work on a different machine. You can read the security model in the code, not in marketing copy.
|
||||
One dashboard for updates across Linux, Windows, and the Docker containers running on those hosts. Agents check in, scan their package managers, and queue what they find. Nothing installs until a human approves it.
|
||||
|
||||
The supply-chain gate goes deeper: when an update is approved, the server resolves the full dependency closure, checks every transitive artifact against OSV.dev, and mints a signed capability token binding the exact artifact hashes. A network-less privileged executor verifies the signature and every hash before anything installs — it can't reach out and can't be redirected. A known vulnerability anywhere in the closure is a full stop: the operator must override with a documented reason, or the token is never minted. The signing and hash verification have no skip path.
|
||||
|
||||
It also just manages your updates — across Linux and Windows, including Docker containers running on those hosts — from a single dashboard, with a human approval step before anything gets installed.
|
||||
What makes RedFlag different: the software that patches your fleet runs as root on every box, which makes it part of your attack surface — XZ Utils came through a build pipeline, SolarWinds came through an update. So every command here is Ed25519-signed, agents reject anything forged or replayed, and approved packages are hash-pinned down to their dependency closure before anything touches a machine. A known vulnerability anywhere in that chain stops the install cold. The full trust model is in [SECURITY.md](SECURITY.md).
|
||||
|
||||
ConnectWise charges $50/agent/month. RedFlag doesn't.
|
||||
|
||||
|
|
@ -87,23 +85,11 @@ Agents run at the OS level and query the Docker socket directly — there's no s
|
|||
|
||||
---
|
||||
|
||||
## Trust Model
|
||||
## Security
|
||||
|
||||
Agents register with a one-time token plus a hardware fingerprint. The server stores the fingerprint; future check-ins that don't match the registered machine are rejected. This prevents config copying between hosts.
|
||||
The update manager *is* attack surface, so it gets treated like one: Ed25519-signed commands with replay protection, hardware-bound agent identity, rotating refresh tokens that burn loudly when stolen, and a supply-chain gate that hash-pins entire dependency closures behind a network-less executor. Signing and hash verification have no skip path — that's doctrine, not a setting.
|
||||
|
||||
On first connect, the agent fetches and caches the server's Ed25519 public key (TOFU). Every subsequent command is verified against it. The `signing_keys` table supports multiple concurrent active keys for zero-downtime rotation: a new key is promoted to primary while the previous key remains active (still verifies commands) until the operator deprecates it through the dashboard. Agents cache keys by `key_id` fingerprint and re-fetch when they see an unknown signer — no coordinated agent restart required. The signing key roster and deprecation controls live at Settings → Security → Key Management.
|
||||
|
||||
Every command includes a signed nonce with a 10-minute validity window. The agent tracks executed nonces and rejects replays, including from an attacker who intercepted a valid command.
|
||||
|
||||
Agent-server communication runs over HTTPS. The Ed25519 signing model is a defense-in-depth layer on top of that — commands can't be forged or replayed even if traffic is somehow intercepted or TLS is terminated at a proxy. The signing model doesn't assume the transport is trustworthy. Cert pinning and enforced TLS verification are on the roadmap.
|
||||
|
||||
Before a package is installed: the agent fetches the expected SHA-256 from the server, downloads the artifact, verifies the hash. Mismatch blocks the install. OSV.dev is queried for known vulnerabilities at discovery time (async, deduped) for npm, PyPI, apt, and dnf packages — results are visible in the dashboard before approval. The resolved dependency closure is checked too: every transitive artifact the capability token would authorize is queried before the token is minted, not just the package you named.
|
||||
|
||||
**Refresh-token rotation (90-day TTL).** Each renewal mints a new refresh token (90-day expiry) and marks the old one consumed. Replaying a consumed token whose successor was also consumed means theft — the server revokes the entire token family and logs a security event. Agent crash-before-save is covered by accept-previous-once grace: a consumed token whose successor is still unconsumed gets a fresh one, not a revocation.
|
||||
|
||||
**Machine-bound renewal.** The renewal endpoint now checks `X-Machine-ID` against the registered host, exactly as command endpoints do. A stolen `config.json` cannot mint access tokens from an unregistered machine — a mismatch returns 403 with a logged `machine_id_mismatch` security event. The agent surfaces this as a critical event, not a quiet backoff.
|
||||
|
||||
**Security Health** is surfaced as a dashboard panel on each agent — signing status, nonce protection, machine binding violations, command validation — so the posture is visible without digging through logs.
|
||||
The full trust model lives in [SECURITY.md](SECURITY.md), including how to report a vulnerability. The architecture and its honest gaps are documented in the RedFlag Architecture Framework (RAF).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -232,21 +218,15 @@ Built for operators who'd rather own the problem than outsource it.
|
|||
|
||||
---
|
||||
|
||||
## Sponsorship & Consulting
|
||||
## Free, Forever
|
||||
|
||||
I build systems that organizations actually own: cryptographically secured, self-hosted, and auditable. I weave this infrastructure in the open so you can own your stack, free from the extortion of vendor lock-in.
|
||||
RedFlag will never be monetized. No pro tier, no cloud edition, no per-agent pricing — those are the things it exists to replace. This is my resume piece, built in the open and given away, because the update manager is part of everyone's attack surface — not just the orgs with an RMM budget.
|
||||
|
||||
The code is yours, but keeping the forge lit requires fuel. If this system defends your fleet and saves your treasury — like eliminating $600K/year in RMM fees — consider sponsoring the work.
|
||||
The architecture documentation — the **RedFlag Architecture Framework (RAF)** — is being published alongside the code: how the system is built, why the design landed where it did, and the pitfalls we think are still out there. Not a guide to attacking it; the reasoning behind the madness, so you can judge the security model yourself instead of trusting a README. I haven't thought of everything — that's part of why it's published.
|
||||
|
||||
### Hire the Architect
|
||||
If community adoption takes off, ownership and contribution policies will be made transparent and stay open. This project does not get quietly captured.
|
||||
|
||||
I am a Systems Architect with 25 years on the frontier. I build sovereign agent runtimes in Rust and resurrect dead datacenters from the ashes of ransomware strikes. I am available for anyone whose genuine purpose is the betterment of humanity:
|
||||
|
||||
- **Full-Time Campaigns:** Joining a team to build sovereign AI, high-trust infrastructure, or federated networks.
|
||||
- **Consulting Expeditions ($175/hr):** Hands-on architecture, network engineering, and system hardening.
|
||||
- **Incident Response ($250/hr):** Ransomware restoration, AD/DNS rebuilds, and pulling your servers back from the void.
|
||||
|
||||
**Contact:** casey@samaritansolutions.net | [LinkedIn](https://www.linkedin.com/in/casey-tunturi) | [GitHub Sponsors](https://github.com/sponsors/Fimeg) | [Discord](https://discord.gg/TReG3mZC4Y)
|
||||
If RedFlag holds your fleet and you want to give back: [sponsor the work](https://github.com/sponsors/Fimeg), or better — [hire the person who built it](AUTHOR.md).
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue