Sliver: A Go-Based Adversary Emulation Framework with Per-Binary Encryption
Adversary Emulation Framework. Sliver's implants support C2 over Mutual TLS (mTLS), WireGuard, HTTP(S), and DNS and are dynamically compiled with per-binary asymmetric encryption keys.
At a glance
- What is it?
- Sliver is an open source, cross-platform adversary emulation framework from BishopFox, offering dynamic implant compilation and multiple C2 transports. This review covers its architecture, setup, limitations, and who should adopt it.
- Who is it for?
- Adopt Sliver if you are a red teamer or security tester who needs a cross-platform, scriptable C2 with multiple transports and dynamic implant compilation, and you can accept a GPL-3.0 license. Do not use it if you require a fully supported commercial product or if your operations demand non-Go implant targets beyond Windows, macOS, and Linux.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Sliver Solves and Who It Serves
Sliver addresses a recurring problem in red teaming: operators need a reliable, self-hosted command and control (C2) framework that does not depend on a commercial vendor. The README positions it as an open source, cross-platform adversary emulation framework usable by organizations of all sizes for security testing. It is built for red teamers, penetration testers, and security teams that want control over their C2 infrastructure and implant generation. Unlike closed-source alternatives, Sliver gives you the source code and lets you compile implants with per-binary asymmetric encryption keys, which means each implant is unique and harder to detect by signature. The project is actively maintained, with a recent push in August 2026 and releases like v1.7.6, so it is not abandoned. The target audience is technical: people who are comfortable with command-line tools, Go, and network protocols like mTLS and WireGuard.
How Sliver Works: Dynamic Compilation and C2 Transports
The core mechanism is dynamic code generation. When you generate an implant, Sliver compiles a binary on the fly, embedding per-binary asymmetric encryption keys. This is a significant departure from static implants that share a single key. The README states that implants support C2 over Mutual TLS (mTLS), WireGuard, HTTP(S), and DNS. That breadth matters because it lets operators choose a transport that fits the target network: mTLS for low latency, DNS for exfiltration where only DNS is allowed, and HTTP(S) for blending in with normal web traffic. The server and client run on macOS, Windows, and Linux, and implants are supported on those same three, with the README noting that 'possibly every Golang compiler target' works, though not all are tested. The architecture is client-server: a server component manages listeners and implants, and a client (the `sliver` binary) connects to the server for operator interaction. Multiplayer mode, mentioned in the features, suggests multiple operators can share a server. The data flow, as implied, is that the operator generates an implant, deploys it, and the implant reaches back to the server over the chosen C2 channel. The dynamic compilation is a differentiator: it shifts the burden from static payloads to on-demand generation, which can reduce detection by AV and EDR.
Getting Sliver Running: Installation and Basic Usage
The README gives two installation paths. The quick route is a one-liner for Linux: `curl https://sliver.sh/install|sudo bash` and then run `sliver`. That is a convenience script that downloads and installs the latest release. For the latest changes, you can compile from source, but the README only points to the wiki for those steps. After installation, you start the server and client by running the `sliver` command. The README does not show the full setup, but the wiki is the reference. For configuration, the README mentions Let's Encrypt integration for HTTPS C2, which implies you can set up automatic TLS certificates. There is also a Python library, `sliver-py`, which makes the framework scriptable, so you can automate implant generation and control. If you want to test without affecting a live system, you can run the server on a local machine and generate a sample implant for a lab target. The install script requires sudo, which is a security consideration: you are piping a remote script into bash with root privileges, so verify the script's contents before running it. The README does not provide a list of configuration keys, so you must consult the wiki for anything beyond the basics.
Feature Set: From Process Injection to DNS Canary
Sliver's feature list is extensive and aimed at post-exploitation. It includes Windows process migration, process injection, and user token manipulation, which are standard for Windows post-exploitation. On the detection side, it offers a DNS canary for blue team detection, which is a clever technique: you plant a DNS record that, when queried by an implant, alerts defenders. That is a defensive feature embedded in an offensive tool, useful for testing detection capabilities. Staged and stageless payloads are supported, giving operators flexibility in how they deliver the implant. In-memory .NET assembly execution and a COFF/BOF loader are included, which are valuable for running Cobalt Strike-style Beacon Object Files without writing them to disk. TCP and named pipe pivots allow lateral movement through compromised hosts. These features are not unique to Sliver, but having them in an open source framework is notable. The procedural generation of C2 over HTTP(S) means the client can rotate through domains or URLs, making takedowns harder. The README does not detail how each feature works, so you must rely on the wiki for operational specifics. The breadth is a strength, but it also means a steeper learning curve.
Genuine Limitations and Failure Modes
Sliver is not a fit for every scenario. First, the implant targets are limited to macOS, Windows, and Linux, with only a mention that other Go targets might work but are untested. If your engagement involves embedded systems or mobile devices, Sliver is the wrong tool. Second, the GPL-3.0 license is a real constraint. If you plan to embed Sliver in a proprietary product or distribute modified versions, the copyleft obligations apply. That is not legal advice, but it is a factor for commercial use. Third, the README's one-liner install script is a supply chain risk: you are trusting the script and the server it downloads from. The README does not provide a checksum or a way to verify the script's integrity. Fourth, the framework's complexity means that misconfiguration is easy. For example, if you set up an HTTP listener without proper Let's Encrypt integration, your C2 traffic could be plaintext, defeating the purpose. The README does not warn about these pitfalls. Finally, because it is an adversary emulation tool, using it without proper authorization is illegal. The README mentions 'security testing,' but the onus is on the operator to have permission. These are not failures in the code but boundaries in the tool's intended use.
Alternative: Cobalt Strike and the Difference in Approach
The most direct alternative is Cobalt Strike, a commercial adversary simulation platform. The difference is fundamental: Cobalt Strike is closed source, requires a paid license, and has a more mature GUI and a larger ecosystem of community scripts. In contrast, Sliver is open source and free, with a command-line interface and a Python scripting layer. Cobalt Strike's implants are typically pre-built or generated with a GUI, while Sliver dynamically compiles each implant with unique keys. That dynamic compilation is a technical advantage for evasion, but Cobalt Strike offers extensive documentation and commercial support, which Sliver lacks. Another difference is the transport: Cobalt Strike uses its own Malleable C2 profiles to shape HTTP and DNS traffic, while Sliver uses standard protocols like mTLS and WireGuard, which can be more robust but less customizable for traffic shaping. If you need commercial support or a GUI, Cobalt Strike is the choice. If you want open source and per-binary encryption, Sliver is the path. The README does not compare itself to competitors, but the feature list implies a direct rivalry.
Maintenance and Upgrade Cost
The project is actively maintained, with a release cadence that shows recent activity: v1.7.2 in February 2026, v1.7.3 later that month, and v1.7.6 in August 2026. That suggests regular updates, but it also means you must track releases to stay current. Upgrading likely involves replacing the server binary and possibly regenerating implants, since encryption keys are per-binary. The README does not describe an upgrade path, so you must check the release notes and wiki. The GPL-3.0 license means that if you modify the source, you must share your changes, which is a maintenance consideration for internal forks. The Python scripting layer (`sliver-py`) is a separate project, so updates there may lag the core. The cost of maintenance is moderate: you need to monitor releases, test upgrades in a lab, and ensure your implants are compatible with the server version. The README does not provide a changelog, so you have to visit the releases page for details. Overall, the project is alive, but you should budget time for version management.
Editorial conclusion
Adopt Sliver if you are a red teamer or security tester who needs a cross-platform, scriptable C2 with multiple transports and dynamic implant compilation, and you can accept a GPL-3.0 license. Do not use it if you require a fully supported commercial product or if your operations demand non-Go implant targets beyond Windows, macOS, and Linux. Before adoption, verify the current release v1.7.6 on your target OS, test the install script in a sandbox, and check the wiki for the latest configuration keys, as the README omits many operational details.
Community notes