
Red Team Coin pour les opérations de minage de crypto-monnaies.
RedTeamCoin est une implémentation de pool de minage de cryptomonnaies basée sur la blockchain, conçue pour les tests de sécurité autorisés et les opérations de red team. Développé en Go avec le support de clients Java, il simule des attaques de cryptomining réelles pour aider les organisations à évaluer leurs capacités de détection et à quantifier les dommages potentiels des opérations de minage menées par des acteurs malveillants.
Cet outil permet aux équipes de sécurité de démontrer en toute sécurité et légalement des scénarios d'attaques de cryptomining sur des systèmes d'entreprise, de générer des rapports d'impact complets, et de valider les contrôles de sécurité—le tout dans un environnement contrôlé utilisant une blockchain isolée et non publique.
Pourquoi utiliser RedTeamCoin ?
Composants du système :
Faites fonctionner RedTeamCoin en moins de 5 minutes :
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
### Vérification
Vérifiez que la compilation s'est terminée avec succès :```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. Démarrer le serveur :```bash make run-server
Vous devriez voir une sortie comme :```text
RedTeamCoin Mining Pool Server
Authentication Token: abc123def456...
Dashboard URL: http://localhost:8080?token=abc123def456...
gRPC server listening on port 50051
2. Lancez un mineur (dans un nouveau terminal):```bash make run-client
Vous devriez voir une activité de minage :```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. Consultez le tableau de bord :
Ouvrez l'URL de l'étape 1 dans votre navigateur, ou accédez à :```text http://localhost:8080?token=YOUR_AUTH_TOKEN_HERE
Vous verrez des statistiques en temps réel, notamment les mineurs actifs, les taux de hachage et les blocs minés.
**Remarque :** Le serveur écoute sur toutes les interfaces réseau - remplacez `localhost`
par l'IP de votre serveur pour un accès distant.
## Comment ça marche
Le pool de minage fonctionne grâce à un mécanisme de consensus par preuve de travail :
1. Le serveur initialise la blockchain avec le bloc genesis
2. Les mineurs se connectent via gRPC et s'enregistrent avec leur IP/hostname
3. Le serveur distribue les tâches de travail (modèles de blocs)
4. Les mineurs calculent des hachages SHA-256 pour trouver des nonces valides
5. Les mineurs soumettent leurs solutions lorsque la cible de difficulté est atteinte
6. Le serveur valide et ajoute les blocs à la blockchain
7. Le tableau de bord affiche les statistiques en temps réel et l'activité des mineurs
Chaque bloc nécessite de trouver un hachage avec un nombre spécifique de zéros en tête
(difficulté configurable). Les mineurs reçoivent 50 RTC par bloc miné.
### Flux de données```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 (par défaut):```bash ./bin/server
- Serveur gRPC: port **50051**
- Tableau de bord web: **http://localhost:8080**
**HTTPS/TLS (Recommandé):**```bash
# Generate certificates (one time)
./generate_certs.sh
# Start with TLS
RTC_SERVER_TLS_ENABLED=true ./bin/server
Note #1: Avec HTTPS, les navigateurs afficheront un avertissement de sécurité pour les certificats auto-signés. Cliquez sur « Avancé » → « Accéder à localhost ».
Note #2: Le tableau de bord web et le serveur gRPC s'exécuteront sur toutes les interfaces du serveur et peuvent être utilisés à la place de localhost.
Utilisation de base:```bash ./bin/client
**Exécuter plusieurs mineurs :**
Ouvrez des terminaux supplémentaires et exécutez `./bin/client` dans chacun d'eux.
#### Mineurs Java
RedTeamCoin fournit deux implémentations de mineurs Java :
##### Client gRPC Java (sans interface)
Client gRPC prêt pour la production, destiné aux serveurs et à l'automatisation.
**Prérequis :**
- Java 11 ou version ultérieure
- Maven (uniquement pour la compilation)
**Construire avec le Makefile :**```bash
make build-java-client
Ou construisez manuellement:```bash cd java-client mvn clean package
**Exécuter :**```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
Fonctionnalités :
Mineur de bureau avec interface graphique.
Prérequis :
Compilation avec Makefile :```bash make build-java-standalone
**Ou construire manuellement :**```bash
cd java-standalone
mvn clean package
Exécuter:```bash
java -jar bin/redteamcoin-miner-standalone.jar
java -jar bin/redteamcoin-miner-standalone.jar --pool localhost:50051
**Caractéristiques :**
- Interface graphique de bureau
- Affichage des statistiques visuelles
- Protocole simple JSON/Socket
- Intégré dans les applications
##### Compiler tous les mineurs Java```bash
make build-java-all
Avantages des mineurs Java :
Voir java-client/README.md pour la documentation complète du client gRPC Java.
Par défaut, les clients se connectent à localhost:50051. Pour se connecter à un serveur distant :
Utilisation de l'option de ligne de commande (recommandé) :```bash ./bin/client -server 192.168.1.100:50051 ./bin/client -s mining-pool.example.com:50051
**Utilisation de la variable d'environnement :**```bash
export RTC_CLIENT_SERVER_ADDRESS=192.168.1.100:50051
./bin/client
Priorité: Option de ligne de commande > Variable d'environnement > Défaut (localhost:50051)
RedTeamCoin prend en charge le minage accéléré par GPU pour les GPU NVIDIA (CUDA) et AMD/Intel (OpenCL). Le minage GPU est 100 à 400 fois plus rapide et nettement plus économe en énergie que le minage 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
Détection automatique :```bash make build-gpu # Automatically detects and builds for available GPU
### Utilisation du 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
Remarque : Le minage par GPU est 100 à 150 fois plus économe en énergie que le minage par 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
Voir [docs/GPU_MINING.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/docs/GPU_MINING.md) pour le guide complet d'extraction sur GPU.
## Configuration
RedTeamCoin utilise [Viper](https://github.com/spf13/viper) pour une gestion flexible de la configuration.
Les paramètres peuvent être spécifiés via des variables d'environnement, des fichiers de configuration YAML, ou
des drapeaux de ligne de commande avec la précédence suivante :
**Drapeaux de ligne de commande** > **Variables d'environnement** > **Fichiers de configuration** > **Valeurs par défaut**
### Configuration initiale
**Initialiser les fichiers de configuration :**```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
Cela copie des exemples de fichiers YAML dans votre répertoire de travail pour modification. Vous pouvez également placer les fichiers de configuration dans ~/.rtc/ ou /etc/rtc/.
Remplacement via les variables d'environnement :```bash
export RTC_SERVER_MINING_DIFFICULTY=8 export RTC_CLIENT_SERVER_ADDRESS=pool.example.com:50051 ./bin/server
### Variables d'environnement
Toutes les variables d'environnement utilisent des préfixes : `RTC_SERVER_` pour le serveur, `RTC_CLIENT_` pour le client.
**Configuration serveur :**
| Variable | Description | Défaut |
| --------------------------------------- | ----------------------------- | ------------------ |
| `RTC_SERVER_NETWORK_GRPC_PORT` | Port du serveur gRPC | `50051` |
| `RTC_SERVER_NETWORK_API_PORT` | Port de l'API HTTPS | `8443` |
| `RTC_SERVER_NETWORK_HTTP_PORT` | Port de l'interface web HTTP | `8080` |
| `RTC_SERVER_MINING_DIFFICULTY` | Difficulté de minage (1-64) | `6` |
| `RTC_SERVER_MINING_BLOCK_REWARD` | Récompense de bloc en pièces | `50` |
| `RTC_SERVER_TLS_ENABLED` | Activer HTTPS/TLS | `false` |
| `RTC_SERVER_TLS_CERT_FILE` | Chemin du certificat TLS | `certs/server.crt` |
| `RTC_SERVER_TLS_KEY_FILE` | Chemin de la clé privée TLS | `certs/server.key` |
| `RTC_SERVER_API_READ_TIMEOUT` | Délai d'attente de lecture de l'API | `15s` |
| `RTC_SERVER_API_WRITE_TIMEOUT` | Délai d'attente d'écriture de l'API | `15s` |
| `RTC_SERVER_API_IDLE_TIMEOUT` | Délai d'attente d'inactivité de l'API | `60s` |
| `RTC_SERVER_LOGGING_UPDATE_INTERVAL` | Intervalle de mise à jour des statistiques | `30s` |
| `RTC_SERVER_LOGGING_FILE_PATH` | Chemin du fichier journal | `pool_log.json` |
| `RTC_AUTH_TOKEN` *(hérité)* | Jeton d'authentification personnalisé | Auto-généré |
**Configuration client :**
| Variable | Description | Défaut |
| ------------------------------------------------- | ----------------------------------- | ----------------- |
| `RTC_CLIENT_SERVER_ADDRESS` | Adresse du serveur de pool (hôte:port) | `localhost:50051` |
| `RTC_CLIENT_SERVER_TLS_ENABLED` | Activer TLS pour la connexion gRPC | `false` |
| `RTC_CLIENT_SERVER_TLS_INSECURE_SKIP_VERIFY` | Ignorer la vérification du certificat | `true` |
| `RTC_CLIENT_SERVER_TLS_CA_CERT_FILE` | Chemin du fichier de certificat CA | `""` |
| `RTC_CLIENT_MINING_GPU_ENABLED` | Activer le minage GPU | `true` |
| `RTC_CLIENT_MINING_HYBRID_MODE` | Activer le minage simultané CPU+GPU | `false` |
| `RTC_CLIENT_MINING_AUTO_DELETE` | Suppression automatique à l'arrêt | `true` |
| `RTC_CLIENT_GPU_NONCE_RANGE` | Plage de nonces par lot GPU | `500000000` |
| `RTC_CLIENT_GPU_CPU_START_NONCE` | Nonce de départ CPU (éviter le chevauchement GPU) | `5000000000` |
| `RTC_CLIENT_NETWORK_HEARTBEAT_INTERVAL` | Intervalle de mise à jour du statut | `30s` |
| `RTC_CLIENT_NETWORK_RETRY_INTERVAL` | Délai de nouvelle tentative de connexion | `10s` |
| `RTC_CLIENT_NETWORK_MAX_RETRY_TIME` | Durée maximale de nouvelle tentative | `5m` |
| `RTC_CLIENT_BEHAVIOR_WORKER_UPDATE_INTERVAL` | Intervalle de rapport de progression du worker | `100000` |
| `POOL_SERVER` *(hérité)* | Adresse du serveur distant | `localhost:50051` |
| `GPU_MINING` *(hérité)* | Activer/désactiver le minage GPU | Détection automatique |
| `HYBRID_MINING` *(hérité)* | Activer le minage CPU+GPU | `false` |
### Exemples de fichiers de configuration
**Configuration serveur** (`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
Configuration client (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
### Authentification
Tous les points de terminaison de l'API (sauf la page d'accueil du tableau de bord) nécessitent une authentification par jeton Bearer.
**Jeton généré automatiquement :**
Le serveur génère un jeton sécurisé au démarrage et l'affiche dans la console.
**Jeton personnalisé :**```bash
export RTC_AUTH_TOKEN="your-secret-token"
./bin/server
Les temps de minage attendus varient selon les performances du CPU et la chance :
./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
Voir [docs/TLS_SETUP.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/docs/TLS_SETUP.md) pour une configuration TLS détaillée.
## Référence API
### Points de terminaison de l'API REST
**Points de terminaison publics :**
- `GET /` - Tableau de bord web (HTML)
- `GET /blocks` - Page de visualisation de tous les blocs (HTML)
**Points de terminaison authentifiés :**
- `GET /api/stats` - Statistiques du pool (JSON)
- `GET /api/miners` - Liste de tous les mineurs (JSON)
- `GET /api/blockchain` - Blockchain complète (JSON)
- `GET /api/blocks/{index}` - Détails d'un bloc spécifique (JSON)
- `GET /api/validate` - Valider l'intégrité de la blockchain (JSON)
- `GET /api/cpu` - Statistiques d'utilisation du CPU et du GPU (JSON)
- `POST /api/miner/pause` - Mettre en pause le minage pour un mineur spécifique
- `POST /api/miner/resume` - Reprendre le minage pour un mineur spécifique
- `POST /api/miner/delete` - Supprimer un mineur (arrêt automatique et auto-suppression)
- `POST /api/miner/throttle` - Définir le pourcentage de limitation du CPU (0-100%)
### Exemples d'authentification
**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); }
## Architecture
### Stack technique
- **Langage**: Go 1.21+
- **Framework RPC**: gRPC avec Protocol Buffers
- **Serveur web**: bibliothèque standard net/http de Go
- **Dépendances**: google.golang.org/protobuf, google.golang.org/grpc
## Développement
### Commandes de build```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 comprend des tests unitaires complets pour les composants serveur et client.
Exécutez tous les tests :```bash make test # Run all tests (server + client)
**Exécuter des suites de tests spécifiques :**```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
Couverture des tests :
Serveur : 76 tests, 66.3 % de couverture
blockchain_test.go : 15 tests - validation de la blockchain, calcul de hachage,
accès concurrentpool_test.go : 26 tests - gestion des mineurs, distribution du travail, statistiquesgrpc_server_test.go : 17 tests - points de terminaison gRPC, contrôle des mineurs, heartbeatsapi_test.go : 18 tests - API REST, authentification, opérations des mineursClient : 41 tests, 16.2 % de couverture
main_test.go : 24 tests - logique de minage, calcul de hachage, gestion d'étatgpu_test.go : 18 tests - détection GPU, gestion des périphériques, statistiquesTotal : 117 tests unitaires couvrant les fonctionnalités de base
Ce qui est testé :
Tests CI/CD :
Tous les tests s'exécutent automatiquement sur :
Voir .github/workflows/build-verification.yaml pour la configuration CI.
Windows (CPU uniquement) :```bash make build-windows
Crée `bin/client.exe`
**Windows avec OpenCL (support GPU) :**```bash
# Requires MinGW-w64 and Windows OpenCL SDK
make build-windows-opencl
Crée bin/client-windows-opencl.exe
Voir docs/WINDOWS_BUILD.md pour les instructions complètes de compilation Windows y compris:
Plusieurs plateformes:```bash make build-all-platforms
Créé :
- `client-linux-amd64` - Linux 64 bits
- `client-linux-arm64` - Linux ARM64
- `client-windows-amd64.exe` - Windows 64 bits
- `client-darwin-amd64` - macOS Intel
- `client-darwin-arm64` - macOS Apple Silicon
**Remarque :** Les binaires compilés en croisé sont uniquement CPU (CGO désactivé), sauf si vous utilisez `build-windows-opencl`.
### Outils d'analyse
Générer des rapports d'évaluation des dommages pour l'analyse d'impact minier :```bash
make build-tools
./bin/generate_report -log pool_log.json
Le rapport comprend :
Hypothèses de coût :
Conversion des rapports :```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
**Cas d'utilisation :**
- Analyse post-incident
- Briefings exécutifs
- Justification financière
- Documentation de conformité
- Réclamations d'assurance
- Preuves légales
Voir [tools/README.md](https://github.com/xyplex3/redteamcoin/blob/HEAD/tools/README.md) pour la documentation complète.
## Dépannage
### Problèmes de connexion à distance
**Test de connectivité :**```bash
# Test connection
ping <server_ip>
nc -zv <server_ip> 50051
# Check server (on server side)
lsof -i :50051
ss -an | grep 50051
Problèmes courants :
Échecs de compilation :
make deps pour installer les dépendancesmake install-tools pour les outils protocConnexion refusée :
lsof -i :50051Erreurs d'authentification :
Authorization: Bearer TOKENNous accueillons les contributions ! Voici comment commencer :
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
### Directives de code
- Suivre le formatage standard de Go (`gofmt`)
- Ajouter des tests unitaires pour les nouvelles fonctionnalités
- Mettre à jour la documentation pour les changements visibles par l'utilisateur
- S'assurer que toutes les vérifications CI passent avant de soumettre une PR
## Note de sécurité
Ceci est un **projet de démonstration/éducation** pour les tests de sécurité autorisés
et les opérations d'équipe rouge. Il est destiné à :
- aux engagements de tests d'intrusion autorisés
- à la validation des contrôles de sécurité
- à l'évaluation des capacités de détection
- à des fins éducatives et de formation
Cet outil n'est pas destiné à une utilisation en production comme une véritable cryptomonnaie et
ne dispose pas de nombreuses fonctionnalités requises pour un système de production (signatures cryptographiques,
portefeuilles, validation de transactions, consensus réseau, etc.).
**Utilisez-le uniquement avec une autorisation explicite sur des systèmes que vous possédez ou dont vous avez la permission de
tester.**
## Licence
Ce projet est sous licence GNU General Public License v3.0 - voir le
fichier [LICENSE](https://github.com/xyplex3/redteamcoin/blob/HEAD/LICENSE) pour plus de détails.
## Remerciements
**Créé par :**
- Peter Greko ([@Xyplex02](https://github.com/Xyplex02))
- Luciano Krigun ([@klucho](https://github.com/klucho))
- Jayson Grace ([@l50](https://github.com/l50))
| Configuration | Taux de hachage | Accélération | Efficacité (MH/W) |
|---|
| CPU (1 cœur) | ~2 MH/s | Baseline | ~0.02 |
| CPU (8 cœurs) | ~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 |
| Hybride (CPU+GPU) | ~620 MH/s | 310x | ~2.0 |
| Paramètre | Défaut | Notes |
|---|
| Puissance CPU | 150W | Pleine charge |
| Puissance GPU | 250W | Pleine charge |
| Électricité | $0.12/kWh | Ajuster par région |
| Réduction de durée | 20-40% | Dû à un minage soutenu |
| Problème | Solution |
|---|
| "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 lent | export RTC_CLIENT_MINING_GPU_ENABLED=true |
| Erreur de build CGo | sudo apt install build-essential |