RedTeamCoin 是一个基于区块链的加密货币矿池实现,专为授权的安全测试和红队行动设计。它使用 Go 语言构建,支持 Java 客户端,能够模拟真实的加密货币挖矿攻击,帮助组织评估其检测能力并量化威胁行为者挖矿活动可能造成的潜在损害。
该工具使安全团队能够在受控环境中,使用隔离的非公开区块链,安全合法地演示企业系统上的加密货币挖矿攻击场景,生成全面的影响报告,并验证安全控制措施。
为什么使用 RedTeamCoin?
系统组件:
5 分钟内即可运行 RedTeamCoin:
Ubuntu/Debian:```bash sudo apt update sudo apt install -y golang-go protobuf-compiler
**macOS:**```bash
brew install go protobuf
Windows:
git clone https://github.com/xyplex3/RedTeamCoin.git cd RedTeamCoin
make install-tools make deps
make build
### 验证
确认构建是否成功完成:```bash
ls -lh bin/
# Expected output: server and client binaries (1-5 MB each)
./bin/server --help
# Expected output: Usage information for the server
1. 启动服务器:```bash make run-server
你应该看到类似这样的输出:```text
RedTeamCoin Mining Pool Server
Authentication Token: abc123def456...
Dashboard URL: http://localhost:8080?token=abc123def456...
gRPC server listening on port 50051
2. 启动矿工 (在新的终端中):```bash make run-client
你应该会看到挖矿活动:```text
Connected to mining pool at localhost:50051
Registered as miner: miner-hostname-1234567890
Mining block #1... Hash rate: 2.5 MH/s
Block found! Nonce: 98765, Hash: 000000ab1cd...
3. 查看仪表盘:
在浏览器中打开步骤1中的URL,或导航到:```text http://localhost:8080?token=YOUR_AUTH_TOKEN_HERE
您将看到实时统计信息,包括活跃矿工、哈希率以及已开采的区块。
**注意:** 服务器监听所有网络接口——如需远程访问,请将 `localhost` 替换为您的服务器 IP。
## 工作原理
该矿池采用工作量证明共识机制运行:
1. 服务器用创世区块初始化区块链
2. 矿工通过 gRPC 连接并使用 IP/主机名注册
3. 服务器分配工作任务(区块模板)
4. 矿工计算 SHA-256 哈希值以寻找有效的随机数(nonce)
5. 当满足难度目标时,矿工提交解
6. 服务器验证并将区块添加到区块链
7. 仪表板显示实时统计信息和矿工活动
每个区块都需要找到一个具有特定前导零位数(可配置难度)的哈希值。矿工每开采一个区块可获得 50 RTC。
### 数据流```text
Client Miner Server
| |
|--RegisterMiner(IP,Hostname)->|
|<--RegistrationResponse-------|
|--GetWork()------------------>|
|<--WorkResponse(Block)--------|
| [Mining: compute hashes] |
|--SubmitWork(nonce,hash)----->|
| | [Validate proof-of-work
| | and add block to chain]
|<--SubmissionResponse---------|
|--Heartbeat(stats)----------->|
|<--HeartbeatResponse----------|
HTTP(默认):```bash ./bin/server
- gRPC 服务器:端口 **50051**
- Web 仪表盘:**http://localhost:8080**
**HTTPS/TLS (推荐):**```bash
# Generate certificates (one time)
./generate_certs.sh
# Start with TLS
RTC_SERVER_TLS_ENABLED=true ./bin/server
注意 #1: 使用 HTTPS 时,浏览器会显示自签名证书的安全警告。点击“高级”→“继续前往 localhost”。
注意 #2: Web 仪表盘和 gRPC 服务器将在服务器的所有接口上运行,可以替代 localhost 使用。
基本用法:```bash ./bin/client
**运行多个矿工:**
打开其他终端并在每个终端中运行 `./bin/client`。
#### Java矿工
RedTeamCoin提供了两种Java矿工实现:
##### Java gRPC客户端(无头模式)
适用于服务器和自动化的生产级gRPC客户端。
**先决条件:**
- Java 11或更高版本
- Maven(仅用于构建)
**使用Makefile构建:**```bash
make build-java-client
或者手动构建:```bash cd java-client mvn clean package
**运行:**```bash
# Connect to localhost
java -jar bin/redteamcoin-miner-client.jar
# Connect to remote server
java -jar bin/redteamcoin-miner-client.jar -server 192.168.1.100:50051
特性:
带图形界面的桌面矿机。
前置要求:
使用 Makefile 构建:```bash make build-java-standalone
**或者手动构建:**```bash
cd java-standalone
mvn clean package
运行:```bash
java -jar bin/redteamcoin-miner-standalone.jar
java -jar bin/redteamcoin-miner-standalone.jar --pool localhost:50051
**功能特性:**
- 桌面GUI界面
- 可视化统计显示
- 简单的JSON/Socket协议
- 内嵌于应用程序
##### 构建所有Java矿工```bash
make build-java-all
Java Miners 的优点:
完整的 Java gRPC 客户端文档请参见 java-client/README.md。
默认情况下,客户端连接到 localhost:50051。要连接到远程服务器:
使用命令行标志(推荐):```bash ./bin/client -server 192.168.1.100:50051 ./bin/client -s mining-pool.example.com:50051
**使用环境变量:**```bash
export RTC_CLIENT_SERVER_ADDRESS=192.168.1.100:50051
./bin/client
优先级: 命令行标志 > 环境变量 > 默认值 (localhost:50051)
RedTeamCoin 支持基于 NVIDIA (CUDA) 和 AMD/Intel (OpenCL) GPU 的 GPU 加速挖矿。GPU 挖矿比 CPU 挖矿快 100-400 倍,且能效显著更高。
NVIDIA CUDA:```bash sudo apt install cuda-toolkit make build-cuda
**AMD/Intel OpenCL:**```bash
sudo apt install ocl-icd-opencl-dev
make build-opencl
自动检测:```bash make build-gpu # Automatically detects and builds for available GPU
### GPU 使用情况```bash
# Auto-detect GPU (default)
./bin/client
# Force CPU only
RTC_CLIENT_MINING_GPU_ENABLED=false ./bin/client
# Hybrid mode (CPU + GPU)
RTC_CLIENT_MINING_HYBRID_MODE=true ./bin/client
# GPU with remote server
./bin/client -server mining-pool.example.com:50051
注意: GPU挖矿比CPU挖矿节能100-150倍。
./bin/client 2>&1 | grep -i "gpu|cuda|opencl"
RTC_CLIENT_MINING_GPU_ENABLED=false ./bin/client
RTC_CLIENT_MINING_GPU_ENABLED=true ./bin/client
RTC_CLIENT_MINING_HYBRID_MODE=true ./bin/client
参见 [docs/GPU_MINING.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/docs/GPU_MINING.md) 获取完整的 GPU 挖矿指南。
## 配置
RedTeamCoin 使用 [Viper](https://github.com/spf13/viper) 实现灵活的配置管理。可以通过环境变量、YAML 配置文件或命令行标志指定设置,优先级如下:
**命令行标志** > **环境变量** > **配置文件** > **默认值**
### 设置
**初始化配置文件:**```bash
# Initialize both server and client configs
make init-config
# Or initialize individually
make init-server-config # Creates server-config.yaml
make init-client-config # Creates client-config.yaml
此操作会将示例 YAML 文件复制到您的工作目录中以供编辑。您也可以将配置文件放在 ~/.rtc/ 或 /etc/rtc/ 中。
通过环境变量覆盖配置:```bash
export RTC_SERVER_MINING_DIFFICULTY=8 export RTC_CLIENT_SERVER_ADDRESS=pool.example.com:50051 ./bin/server
### 环境变量
所有环境变量使用以下前缀:`RTC_SERVER_` 表示服务器,`RTC_CLIENT_` 表示客户端。
**服务器配置:**
| 变量 | 描述 | 默认值 |
| --------------------------------------- | ----------------------------- | ------------------ |
| `RTC_SERVER_NETWORK_GRPC_PORT` | gRPC 服务器端口 | `50051` |
| `RTC_SERVER_NETWORK_API_PORT` | HTTPS API 端口 | `8443` |
| `RTC_SERVER_NETWORK_HTTP_PORT` | HTTP 网页界面端口 | `8080` |
| `RTC_SERVER_MINING_DIFFICULTY` | 挖矿难度(1-64) | `6` |
| `RTC_SERVER_MINING_BLOCK_REWARD` | 区块奖励(代币数) | `50` |
| `RTC_SERVER_TLS_ENABLED` | 启用 HTTPS/TLS | `false` |
| `RTC_SERVER_TLS_CERT_FILE` | TLS 证书路径 | `certs/server.crt` |
| `RTC_SERVER_TLS_KEY_FILE` | TLS 私钥路径 | `certs/server.key` |
| `RTC_SERVER_API_READ_TIMEOUT` | API 读取超时 | `15s` |
| `RTC_SERVER_API_WRITE_TIMEOUT` | API 写入超时 | `15s` |
| `RTC_SERVER_API_IDLE_TIMEOUT` | API 空闲超时 | `60s` |
| `RTC_SERVER_LOGGING_UPDATE_INTERVAL` | 统计更新间隔 | `30s` |
| `RTC_SERVER_LOGGING_FILE_PATH` | 日志文件路径 | `pool_log.json` |
| `RTC_AUTH_TOKEN` *(旧版)* | 自定义验证令牌 | 自动生成 |
**客户端配置:**
| 变量 | 描述 | 默认值 |
| ------------------------------------------------- | ----------------------------------- | ----------------- |
| `RTC_CLIENT_SERVER_ADDRESS` | 矿池服务器地址(主机:端口) | `localhost:50051` |
| `RTC_CLIENT_SERVER_TLS_ENABLED` | 启用 TLS 用于 gRPC 连接 | `false` |
| `RTC_CLIENT_SERVER_TLS_INSECURE_SKIP_VERIFY` | 跳过证书验证 | `true` |
| `RTC_CLIENT_SERVER_TLS_CA_CERT_FILE` | CA 证书文件路径 | `""` |
| `RTC_CLIENT_MINING_GPU_ENABLED` | 启用 GPU 挖矿 | `true` |
| `RTC_CLIENT_MINING_HYBRID_MODE` | 启用 CPU+GPU 同时挖矿 | `false` |
| `RTC_CLIENT_MINING_AUTO_DELETE` | 关闭时自动删除 | `true` |
| `RTC_CLIENT_GPU_NONCE_RANGE` | 每个 GPU 批次的 nonce 范围 | `500000000` |
| `RTC_CLIENT_GPU_CPU_START_NONCE` | CPU 起始 nonce(避免与 GPU 重叠) | `5000000000` |
| `RTC_CLIENT_NETWORK_HEARTBEAT_INTERVAL` | 状态更新间隔 | `30s` |
| `RTC_CLIENT_NETWORK_RETRY_INTERVAL` | 连接重试延迟 | `10s` |
| `RTC_CLIENT_NETWORK_MAX_RETRY_TIME` | 最大重试时间 | `5m` |
| `RTC_CLIENT_BEHAVIOR_WORKER_UPDATE_INTERVAL` | 工作进程进度报告间隔 | `100000` |
| `POOL_SERVER` *(旧版)* | 远程服务器地址 | `localhost:50051` |
| `GPU_MINING` *(旧版)* | 启用/禁用 GPU 挖矿 | 自动检测 |
| `HYBRID_MINING` *(旧版)* | 启用 CPU+GPU 挖矿 | `false` |
### 配置文件示例
**服务器配置** (`server-config.yaml`):```yaml
network:
grpc_port: 50051
api_port: 8443
http_port: 8080
mining:
difficulty: 8
block_reward: 100
tls:
enabled: true
cert_file: /etc/rtc/certs/server.crt
key_file: /etc/rtc/certs/server.key
logging:
update_interval: 30s
file_path: /var/log/rtc/pool.json
客户端配置 (client-config.yaml):```yaml
server:
address: pool.example.com:50051
tls:
enabled: false
insecure_skip_verify: true
ca_cert_file: ""
mining:
gpu_enabled: true
hybrid_mode: false
auto_delete: true
gpu:
nonce_range: 1000000000
cpu_start_nonce: 5000000000
network:
heartbeat_interval: 30s
retry_interval: 10s
max_retry_time: 5m
### 认证
所有 API 端点(仪表盘主页除外)都需要 Bearer 令牌认证。
**自动生成的令牌:**
服务器在启动时生成一个安全令牌,并将其显示在控制台中。
**自定义令牌:**```bash
export RTC_AUTH_TOKEN="your-secret-token"
./bin/server
预期的挖矿时间因CPU性能和运气而异:
./generate_certs.sh
export RTC_SERVER_TLS_ENABLED=true export RTC_AUTH_TOKEN="my-secure-token" ./bin/server
export RTC_SERVER_TLS_CERT_FILE="/path/to/cert.pem" export RTC_SERVER_TLS_KEY_FILE="/path/to/key.pem" ./bin/server
参见 [docs/TLS_SETUP.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/docs/TLS_SETUP.md) 获取详细的 TLS 配置。
## API 参考
### REST API 端点
**公共端点:**
- `GET /` - Web 控制面板(HTML)
- `GET /blocks` - 查看所有区块页面(HTML)
**需认证端点:**
- `GET /api/stats` - 矿池统计信息(JSON)
- `GET /api/miners` - 所有矿工列表(JSON)
- `GET /api/blockchain` - 完整区块链(JSON)
- `GET /api/blocks/{index}` - 特定区块详情(JSON)
- `GET /api/validate` - 验证区块链完整性(JSON)
- `GET /api/cpu` - CPU 和 GPU 使用率统计(JSON)
- `POST /api/miner/pause` - 暂停指定矿工的挖矿
- `POST /api/miner/resume` - 恢复指定矿工的挖矿
- `POST /api/miner/delete` - 删除矿工(自动终止并自删除)
- `POST /api/miner/throttle` - 设置 CPU 节流百分比(0-100%)
### 认证示例
**cURL:**```bash
# Get stats
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8080/api/stats
# Get miners
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8080/api/miners
# Pause a miner
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"miner_id":"miner-hostname-1234567890"}' \
http://localhost:8080/api/miner/pause
# Set CPU throttle to 50%
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"miner_id":"miner-hostname-1234567890","throttle_percent":50}' \
http://localhost:8080/api/miner/throttle
# HTTPS (with self-signed cert)
curl -k -H "Authorization: Bearer YOUR_TOKEN" https://localhost:8443/api/stats
JavaScript:```javascript
const token = "YOUR_TOKEN_HERE";
const headers = { Authorization: Bearer ${token} };
fetch("http://localhost:8080/api/stats", { headers }) .then((r) => r.json()) .then((data) => console.log(data));
**Python:**```python
import requests
headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get('http://localhost:8080/api/stats', headers=headers)
print(response.json())
service MiningPool { rpc RegisterMiner(MinerInfo) returns (RegistrationResponse); rpc GetWork(WorkRequest) returns (WorkResponse); rpc SubmitWork(WorkSubmission) returns (SubmissionResponse); rpc Heartbeat(MinerStatus) returns (HeartbeatResponse); rpc StopMining(MinerInfo) returns (StopResponse); }
## 架构
### 技术栈
- **语言**: Go 1.21+
- **RPC 框架**: gRPC 与 Protocol Buffers
- **Web 服务器**: Go net/http 标准库
- **依赖**: google.golang.org/protobuf, google.golang.org/grpc
## 开发
### 构建命令```bash
make proto # Generate protobuf code
make build # Build server and client (CPU only)
make build-gpu # Build with GPU support (auto-detect)
make build-cuda # Build with NVIDIA CUDA
make build-opencl # Build with AMD/Intel OpenCL
make build-windows # Cross-compile for Windows
make build-all-platforms # Cross-compile for all platforms
make clean # Remove build artifacts
make deps # Download dependencies
make init # Full initialization
RedTeamCoin 包含了针对服务端和客户端组件的全面单元测试。
运行所有测试:```bash make test # Run all tests (server + client)
**运行特定测试套件:**```bash
# Server tests
cd server && go test -v
# Client tests
cd client && go test -v -short
# With coverage
cd server && go test -cover
cd client && go test -cover
测试覆盖率:
服务端:76 个测试,覆盖率 66.3%
blockchain_test.go:15 个测试 - 区块链验证、哈希计算、并发访问pool_test.go:26 个测试 - 矿工管理、任务分配、统计grpc_server_test.go:17 个测试 - gRPC 端点、矿工控制、心跳api_test.go:18 个测试 - REST API、身份验证、矿工操作客户端:41 个测试,覆盖率 16.2%
main_test.go:24 个测试 - 挖矿逻辑、哈希计算、状态管理gpu_test.go:18 个测试 - GPU 检测、设备管理、统计总计:117 个单元测试覆盖核心功能
测试内容:
CI/CD 测试:
所有测试在以下情况下自动运行:
请参阅 .github/workflows/build-verification.yaml 了解 CI 配置。
Windows(仅 CPU):```bash make build-windows
创建 `bin/client.exe`
**支持OpenCL的Windows(GPU支持):**```bash
# Requires MinGW-w64 and Windows OpenCL SDK
make build-windows-opencl
创建 bin/client-windows-opencl.exe
请参阅 docs/WINDOWS_BUILD.md 获取完整的 Windows 构建说明,包括:
多平台:```bash make build-all-platforms
生成:
- `client-linux-amd64` - Linux 64位
- `client-linux-arm64` - Linux ARM64
- `client-windows-amd64.exe` - Windows 64位
- `client-darwin-amd64` - macOS Intel
- `client-darwin-arm64` - macOS Apple Silicon
**注意:** 除非使用 `build-windows-opencl`,否则交叉编译的二进制文件仅为CPU版本(CGO已禁用)。
### 分析工具
生成用于挖矿影响分析的损害评估报告:```bash
make build-tools
./bin/generate_report -log pool_log.json
报告包括:
成本假设:
| 参数 | 默认值 | 备注 |
|---|
转换报告:```bash
pandoc Report_Miner_Activity_from_to.md -o report.pdf
pandoc Report_Miner_Activity_from_to.md -o report.html
pandoc Report_Miner_Activity_from_to.md -o report.docx
**使用场景:**
- 事件后分析
- 高管汇报
- 财务论证
- 合规文档
- 保险索赔
- 法律证据
参见 [tools/README.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/tools/README.md) 获取完整文档。
## 故障排除
### 远程连接问题
**测试连接性:**```bash
# Test connection
ping <server_ip>
nc -zv <server_ip> 50051
# Check server (on server side)
lsof -i :50051
ss -an | grep 50051
常见问题:
构建失败:
make deps 安装依赖make install-tools 安装protoc工具连接被拒绝:
lsof -i :50051身份验证错误:
Authorization: Bearer TOKEN 头部格式我们欢迎贡献!以下是入门方法:
git checkout -b feature/amazing-featuremake testgit commit -m 'Add amazing feature'git push origin feature/amazing-featuregit clone https://github.com/YOUR_USERNAME/RedTeamCoin.git cd RedTeamCoin
make install-tools make deps
make test
make build make run-server # Terminal 1 make run-client # Terminal 2
### 代码规范
- 遵循 Go 标准格式化(`gofmt`)
- 为新功能添加单元测试
- 为用户面向的变更更新文档
- 在提交 PR 前确保所有 CI 检查通过
## 安全说明
这是一个用于授权安全测试和红队行动的**演示/教育项目**。其用途包括:
- 授权的渗透测试任务
- 安全控制验证
- 检测能力评估
- 教育与培训目的
此工具并非设计用于生产环境的真正加密货币,并且缺少生产系统所需的许多功能(加密签名、钱包、交易验证、网络共识等)。
**仅在明确授权的情况下,对您拥有或有权测试的系统使用。**
## 许可证
本项目采用 GNU 通用公共许可证 v3.0 进行许可——详情请参阅 [LICENSE](https://github.com/xyplex3/redteamcoin/blob/HEAD/LICENSE) 文件。
## 鸣谢
**创建者:**
- Peter Greko([@Xyplex02](https://github.com/Xyplex02))
- Luciano Krigun([@klucho](https://github.com/klucho))
- Jayson Grace([@l50](https://github.com/l50))
| 配置 | 算力 | 加速比 | 能效(MH/W) |
|---|
| CPU(1核) | ~2 MH/s | 基准 | ~0.02 |
| CPU(8核) | ~16 MH/s | 8倍 | ~0.02 |
| GPU(RTX 3080) | ~500 MH/s | 250倍 | ~2.0 |
| GPU(RTX 3090) | ~600 MH/s | 300倍 | ~2.5 |
| GPU(AMD MI250) | ~800 MH/s | 400倍 | ~3.0 |
| 混合(CPU+GPU) | ~620 MH/s | 310倍 | ~2.0 |
| CPU 功率 | 150W | 满负载 |
| GPU 功率 | 250W | 满负载 |
| 电力成本 | $0.12/kWh | 根据地区调整 |
| 寿命减少 | 20-40% | 来自持续挖矿 |
| 问题 | 解决方案 |
|---|
| "cannot find -lcuda" | export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH |
| "nvcc not found" | sudo apt install cuda-toolkit |
| "No OpenCL device" | sudo apt install ocl-icd-opencl-dev |
| GPU slow | export RTC_CLIENT_MINING_GPU_ENABLED=true |
| CGo build error | sudo apt install build-essential |