
暗号通貨マイニング運用のためのRed Team Coin
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をブラウザで開くか、または次のURLにアクセスしてください:```text http://localhost:8080?token=YOUR_AUTH_TOKEN_HERE
アクティブなマイナー、ハッシュレート、採掘されたブロックなどのリアルタイム統計情報が表示されます。
**注意:** サーバーはすべてのネットワークインターフェースで待機します。リモートアクセスするには、`localhost` をサーバーのIPに置き換えてください。
## 動作の仕組み
マイニングプールは、プルーフ・オブ・ワークのコンセンサスメカニズムを使用して動作します:
1. サーバーはジェネシスブロックでブロックチェーンを初期化する
2. マイナーはgRPC経由で接続し、IP/ホスト名で登録する
3. サーバーは作業割り当て(ブロックテンプレート)を配布する
4. マイナーはSHA-256ハッシュを計算して有効なナンスを見つける
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 は2つの 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マイナーの利点:
完全な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
Note: GPU mining is 100-150x more energy efficient than CPU mining.```bash
./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
See [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` *(legacy)* | カスタム認証トークン | 自動生成 |
**クライアント設定:**
| 変数 | 説明 | デフォルト |
| ------------------------------------------------- | ----------------------------------- | ----------------- |
| `RTC_CLIENT_SERVER_ADDRESS` | プールサーバーアドレス (ホスト:ポート) | `localhost:50051` |
| `RTC_CLIENT_SERVER_TLS_ENABLED` | gRPC接続のTLSを有効化 | `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バッチあたりのノンス範囲 | `500000000` |
| `RTC_CLIENT_GPU_CPU_START_NONCE` | CPUの開始ノンス (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` *(legacy)* | リモートサーバーアドレス | `localhost:50051` |
| `GPU_MINING` *(legacy)* | GPUマイニングの有効/無効 | 自動検出 |
| `HYBRID_MINING` *(legacy)* | 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
詳細なTLS設定については、[docs/TLS_SETUP.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/docs/TLS_SETUP.md)を参照してください。
## 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テスト:
すべてのテストは自動的に実行されます:
CI設定については.github/workflows/build-verification.yamlを参照してください。
Windows(CPUのみ):```bash make build-windows
作成します `bin/client.exe`
**OpenCL(GPUサポート)対応のWindows:**```bash
# Requires MinGW-w64 and Windows OpenCL SDK
make build-windows-opencl
bin/client-windows-opencl.exe を作成します
Windowsビルドの完全な手順については、docs/WINDOWS_BUILD.md を参照してください。内容は以下の通りです:
複数プラットフォーム:```bash make build-all-platforms
Creates:
- `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 を実行する接続拒否:
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 General Public License 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))
| Configuration | Hash Rate | Speedup | Efficiency (MH/W) |
|---|
| CPU (1 core) | ~2 MH/s | Baseline | ~0.02 |
| CPU (8 cores) | ~16 MH/s | 8x | ~0.02 |
| GPU (RTX 3080) | ~500 MH/s | 250x | ~2.0 |
| GPU (RTX 3090) | ~600 MH/s | 300x | ~2.5 |
| GPU (AMD MI250) | ~800 MH/s | 400x | ~3.0 |
| Hybrid (CPU+GPU) | ~620 MH/s | 310x | ~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が遅い | export RTC_CLIENT_MINING_GPU_ENABLED=true |
| CGoビルドエラー | sudo apt install build-essential |