
Red Team Coin для операций крипто-майнинга.
RedTeamCoin — это реализация пула для майнинга криптовалюты на основе блокчейна, предназначенная для авторизованного тестирования безопасности и операций красных команд. Написанный на Go с поддержкой клиентов на Java, он имитирует реальные атаки криптомайнинга, помогая организациям оценить свои возможности обнаружения и количественно оценить потенциальный ущерб от операций майнинга со стороны злоумышленников.
Этот инструмент позволяет командам безопасности безопасно и легально демонстрировать сценарии атак криптомайнинга на корпоративных системах, создавать всесторонние отчеты о воздействии и проверять средства защиты — и все это в контролируемой среде с использованием изолированного, непубличного блокчейна.
Зачем использовать RedTeamCoin?
Компоненты системы:
Запустите RedTeamCoin менее чем за 5 минут:
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. Просмотр панели управления:
Откройте URL из шага 1 в вашем браузере или перейдите по адресу:```text http://localhost:8080?token=YOUR_AUTH_TOKEN_HERE
Вы увидите статистику в реальном времени, включая активных майнеров, хэшрейты и добытые блоки.
**Примечание:** Сервер прослушивает все сетевые интерфейсы — замените `localhost` на IP-адрес вашего сервера для удаленного доступа.
## Как это работает
Майнинг-пул работает на основе механизма консенсуса proof-of-work:
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**
- Веб-панель: **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: Веб-панель и 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
**Особенности:**
- Графический интерфейс рабочего стола
- Визуальное отображение статистики
- Простой протокол JSON/Socket
- Встраиваемый в приложения
##### Сборка всех Java Miners```bash
make build-java-all
Преимущества Java Miners:
Смотрите java-client/README.md для полной документации Java gRPC клиента.
По умолчанию клиенты подключаются к 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 поддерживает майнинг с ускорением GPU для NVIDIA (CUDA) и AMD/Intel (OpenCL). GPU-майнинг в 100–400 раз быстрее и значительно более энергоэффективен, чем CPU-майнинг.
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 в 100–150 раз энергоэффективнее майнинга на CPU.
./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` *(legacy)* | Пользовательский токен аутентификации | Автоматически сгенерирован |
**Конфигурация клиента:**
| Переменная | Описание | По умолчанию |
| ------------------------------------------------- | ----------------------------------------- | ------------------ |
| `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` | Путь к файлу сертификата ЦС | `""` |
| `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` | Диапазон nonce для пакета GPU | `500000000` |
| `RTC_CLIENT_GPU_CPU_START_NONCE` | Начальный 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
Ожидаемое время майнинга зависит от производительности ЦП и удачи:
./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 /` - Веб-панель управления (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
- **Веб-сервер**: стандартная библиотека 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
Test Coverage:
Сервер: 76 тестов, 66.3% покрытия
blockchain_test.go: 15 тестов - Проверка блокчейна, вычисление хеша,
конкурентный доступpool_test.go: 26 тестов - Управление майнерами, распределение работы, статистикаgrpc_server_test.go: 17 тестов - gRPC-эндпоинты, контроль майнеров, heartbeatapi_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`
**Windows с OpenCL (поддержка 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
**Примечание:** Кросс-компилированные бинарные файлы работают только на CPU (CGO отключен), если не используется `build-windows-opencl`.
### Инструменты анализа
Создавайте отчеты об оценке ущерба для анализа влияния майнинга:```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
**Use Cases:**
- Post-incident analysis
- Executive briefings
- Financial justification
- Compliance documentation
- Insurance claims
- Legal evidence
See [tools/README.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/tools/README.md) for complete documentation.
## Troubleshooting
### Remote Connection Issues
**Testing connectivity:**```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`)
- Добавляйте модульные тесты для нового функционала
- Обновляйте документацию для изменений, видимых пользователю
- Убедитесь, что все проверки CI проходят перед отправкой PR
## Примечание по безопасности
Это **демонстрационный/образовательный проект** для авторизованного тестирования безопасности
и операций красных команд. Он предназначен для:
- Авторизованных заданий по тестированию на проникновение
- Проверки контроля безопасности
- Оценки возможностей обнаружения
- Образовательных и учебных целей
Этот инструмент не предназначен для использования в производственной среде в качестве реальной криптовалюты и
не имеет многих функций, необходимых для производственной системы (криптографические подписи,
кошельки, проверка транзакций, сетевой консенсус и т.д.).
**Используйте только с явного разрешения на системах, которыми вы владеете или имеете право
тестировать.**
## Лицензия
Этот проект лицензирован в соответствии с GNU General Public License v3.0 - см.
файл [LICENSE](https://github.com/xyplex3/redteamcoin/blob/HEAD/LICENSE) для подробностей.
## Благодарности
**Создатели:**
- Питер Греко ([@Xyplex02](https://github.com/Xyplex02))
- Лучано Кригун ([@klucho](https://github.com/klucho))
- Джейсон Грейс ([@l50](https://github.com/l50))
| Конфигурация | Хэшрейт | Ускорение | Эффективность (MH/W) |
|---|
| CPU (1 ядро) | ~2 MH/s | Базовый | ~0.02 |
| CPU (8 ядер) | ~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 |
| Гибрид (CPU+GPU) | ~620 MH/s | 310x | ~2.0 |
| Parameter | Default | Notes |
|---|
| Мощность ЦП | 150W | Полная нагрузка |
| Мощность ГП | 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 |