Add X25519 box keypair (operator.boxkey/operator.boxpub) for end-to-end
encryption of all implant->operator message Data fields via
box.SealAnonymous. Prevents eavesdropping on GossipSub traffic.
- Encrypt env.Data before signing in sendEnvelopeDirect and SignAndSend
- Build local wire envelope in sendEnvelopeDirect (avoids mutating caller's
env on send failure, preventing double-encryption on PubSub fallback)
- Serialize beacon stream writes with beaconWriteMu mutex
- Decrypt in operator handleMessage before dispatching to handlers
- Embed box pubkey in implant during arachne generate
- Generate box keys on first operator run, persist to disk
- Add stub files for development compilation
- Add SHA256 verification for Go auto-install download
- Add replay protection with time-skew validation
- Upgrade SOCKS password hashing to bcrypt
- Fix SOCKS random exit mode (pick once per listener, not per conn)
- Fix lock contention in implant sendEnvelopeDirect
- Log panics with stack traces instead of silent recover()
- Fix SOCKS5 auth downgrade when client doesn't offer method 2
- Remove TOCTOU race in port checking
- Fix Garble GOPATH parsing (use SplitList)
- Fix DHT bootstrap race (wait for >=5 peers)
- Fix Windows Go detection paths
- Fix Windows Go auto-install (.zip not .tar.gz)
- Fix Windows history persistence (defer save + MkdirAll)
- Add timeouts to all Go download HTTP requests
- Populate UUID field in beacon register
- Single cmd/arachne entry point replaces server, implant, build-implant
- Implant source embedded in operator binary at build time (self-contained)
- generate command embeds unique keypair per implant build (persistent PeerID)
- cover traffic: random noise messages mask beacon timing
- regenerate command: rotate operator keys with warning
- auto-install Go when missing during generate
- liner-based CLI with command history and per-command --help
Security model required that only the operator can send commands and
only authenticated implants can communicate, but implementation had
critical gaps:
1. Implant: verify operator's Ed25519 signature on EVERY command
before dispatching (handleCommand now calls VerifyEnvelope)
2. Operator: verify implant's Ed25519 signature on EVERY beacon
and registration before processing
3. Messenger: added VerifyEnvelope() + PubKeyFromEnvelope() helpers,
trust-on-first-use per-implant key storage
4. All outgoing messages now use SignAndSend() instead of SendEnvelope
(register, ping, ps/ls/execute results are all properly signed)
5. handler callback now receives sender's crypto.PubKey for verification
6. Renamed misleading CreateSignedEnvelope -> CreateEnvelope (it was
never actually signing)
Decentralized C2 framework built on libp2p (IPFS networking stack).
No servers, no domains, no IPs to block - cryptographic peer identities
communicating over the global p2p network.
Includes:
- Architecture, protocol, implant, server, and security model docs
- Protobuf message definitions (commonpb, arachnepb, rpcpb)
- Cryptography package (Ed25519 keys, signing, PeerID)
- Transport package (libp2p host, GossipSub pubsub, relay)
- Config package with shared types