wh0amitz/TailVNC
GitHub: wh0amitz/TailVNC
TailVNC 是一个将 WireGuard 与 VNC 融合于单二进制的 Tailscale 持久化远程桌面工具,解决在隔离网络中隐蔽接入 Windows Session 0 的问题。
Stars: 231 | Forks: 24
# TailVNC
一个基于 Tailscale 的 WireGuard 加密网状网络构建的 Windows 远程桌面持久化工具。TailVNC 将一个完整的自包含 VNC 服务器与 Tailscale 节点嵌入到单个二进制文件中,实现在 Tailscale/Headscale 上的安全远程桌面访问,而不对外暴露任何端口。适用于合法的基础设施管理和红队持久化操作。
灵感来源于 [SockTail](https://github.com/Yeeb1/SockTail)。
## 功能特性
- **Tailscale/Headscale 集成** - 利用 `tsnet` 将 WireGuard 对等点直接嵌入二进制文件;支持官方的 Tailscale 协调以及自托管的 Headscale 控制平面
- **Windows Session 0 隔离绕过** - 以 SYSTEM 身份运行时,自动通过 `CreateProcessAsUser` 在活动用户会话中生成代理进程,并通过 IPC 转发 VNC 流量,绕过 Vista+ 的会话隔离
- **动态桌面跟踪** - 通过 `OpenInputDesktop`/`SetThreadDesktop` 跟随用户在默认桌面、Winlogon(登录屏幕)、UAC 安全桌面和锁定屏幕之间的桌面切换
- **Ctrl+Alt+Del 注入** - 通过 `sas.dll!SendSAS` 从 Session 0 发送安全注意序列
- **双向剪贴板同步** - VNC 客户端与目标主机之间的 Latin-1 剪贴板同步
- **编译时配置嵌入** - 认证密钥、VNC 密码、监听端口和控制 URL 通过 LDFLAGS 在编译时注入;生成的二进制文件在运行时无需配置文件
- **认证密钥混淆** - Tailscale 认证密钥在编译时进行 XOR 混淆,防止二进制文件中明文凭证泄露
## 架构
```
┌──────────────────────────────────────────────┐
│ TailVNC Service (Session 0) │
│ │
│ tsnet.Server ───► Tailscale/Headscale Net │
│ │ │
│ VNC Listener :5900 (Tailscale interface) │
│ │ │
│ ┌────▼───────────────────────────────────┐ │
│ │ Session Manager │ │
│ │ - Polls active console session (2s) │ │
│ │ - Spawns agent via CreateProcessAsUser│ │
│ │ - Auto-restarts on session change │ │
│ │ or agent crash │ │
│ └────┬───────────────────────────────────┘ │
│ │ TCP Proxy (bidirectional) │
└───────┼──────────────────────────────────────┘
▼
┌────────────────────────────────────────┐
│ VNC Agent (User Session, Desktop) │
│ 127.0.0.1:15900 │
│ - GDI+ screen capture (~30fps) │
│ - SendInput keyboard/mouse injection │
│ - Clipboard monitoring │
└────────────────────────────────────────┘
```
## 技术栈
| 组件 | 技术 |
|-----------|------------|
| 语言 | Go 1.25+ |
| 网络传输 | [Tailscale tsnet](https://pkg.go.dev/tailscale.com/tsnet) — 嵌入的 WireGuard 对等点 |
| VNC 协议 | RFB 3.008(自定义实现,原始编码) |
| 屏幕捕获 | Windows GDI+(`CreateDIBSection`、`BitBlt`) |
| 输入注入 | Windows `SendInput` API |
| 会话管理 | `WTSQueryUserToken` + `CreateProcessAsUser` |
| 桌面切换 | `OpenInputDesktop` + `SetThreadDesktop` |
| SAS 注入 | `sas.dll!SendSAS` |
| 认证 | VNC DES 挑战-响应(符合 RFB 规范) |
| 密钥混淆 | XOR + 十六进制编码 |
| 系统调用 | `golang.org/x/sys`(Windows 系统调用封装) |
| 二进制压缩 | UPX(可选) |
| 构建系统 | GNU Make + Go LDFLAGS 注入 |
## 构建
### 先决条件
- **Go** >= 1.25.3
- **GNU Make**
- **UPX**(可选,用于减小二进制文件体积)
- **Tailscale 认证密钥** — 从 Tailscale 管理控制台生成;建议对操作使用可重用和临时密钥
### 构建参数
| 参数 | 是否必需 | 默认值 | 描述 |
|-----------|----------|---------|-------------|
| `AUTH_KEY` | 是 | — | Tailscale 认证密钥;编译时自动进行 XOR 混淆并嵌入 |
| `LISTEN_PORT` | 否 | `5900` | Tailscale 接口上的 VNC 监听端口 |
| `AUTH_PASS` | 否 | 空(无认证) | VNC 连接密码(DES 挑战-响应) |
| `CONTROL_URL` | 否 | 空(官方 Tailscale) | Headscale 控制平面 URL |
| `CONFIG_DIR` | 否 | `C:\Windows\Temp\.cache` | 持久的 tsnet 状态目录(WireGuard 密钥、节点身份) |
### 编译
```
# 最小构建 — 仅需身份验证密钥
make build-vnc AUTH_KEY=tskey-auth-kBEXAMPLEKEY
# 完整构建,包含所有参数
# [CONTROL_URL] — 可选,仅在使用自托管 Headscale 控制平面时需要
# [CONFIG_DIR] — 可选,覆盖默认 tsnet 状态目录(C:\Windows\Temp\.cache)
make build-vnc \
AUTH_KEY=tskey-auth-kBEXAMPLEKEY \
LISTEN_PORT=5900 \
AUTH_PASS=VNCPassword \
[CONTROL_URL=https://headscale.example.com] \
[CONFIG_DIR='C:\Windows\Temp\.cache']
```
构建产物输出至 `dist/`:
```
dist/TailVNC-windows-amd64.exe
```
构建流程执行以下步骤:
1. 清理之前的构建产物
2. 下载并整理 Go 模块依赖
3. 运行 `obfuscator/` 进行 XOR 混淆认证密钥
4. 通过 LDFLAGS(`-X`)将所有配置注入二进制文件
5. 剥离符号表和 DWARF 调试信息(`-s -w`)
6. 如果可用,使用 UPX(`--best --lzma`)压缩二进制文件
### 附加 Make 目标
```
make clean # Remove build artifacts
make deps # Download and tidy Go modules
make help # Print usage and parameter reference
```
## 使用
**TailVNC 必须以 SYSTEM 权限运行。** 当在 Session 0 中执行(作为 Windows 服务或在 SYSTEM 上下文中)时,该工具会自动检测活动控制台会话,在其中生成用于屏幕捕获和输入注入的代理进程,并通过该代理转发所有 VNC 流量。如果直接在交互式用户会话中启动,则以本地模式运行,不使用代理层。
执行后,目标主机将加入配置的 Tailscale 网络并作为一个新节点出现。使用任意标准 VNC 客户端连接:
```
:5900
```


标签:Auth Key 混淆, CreateProcessAsUser, Ctrl+Alt+Del注入, DNS 解析, EVTX分析, Headscale, IPC代理, Session 0 隔离绕过, SOCK5代理, T1015, T1036, T1055, T1059, T1078, Tailscale, tsnet, VNC, Windows服务, WireGuard, XOR 混淆, 免安装后门, 内网穿透, 剪贴板同步, 动态桌面跟踪, 单文件二进制, 基础设施管理, 安全桌面切换, 日志审计, 构建时配置嵌入, 系统权限提升, 远程桌面