
암호화폐 채굴 작업을 위한 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
### Verification
빌드가 성공적으로 완료되었는지 확인하십시오:```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. 대시보드가 실시간 통계 및 채굴기 활동 표시
각 블록은 특정 개수의 선행 0을 가진 해시를 찾아야 합니다
(설정 가능한 난이도). 채굴기들은 블록당 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 클라이언트 (Headless)
서버 및 자동화를 위한 프로덕션 준비 완료 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
Features:
그래픽 인터페이스를 갖춘 데스크톱 채굴기.
사전 요구 사항:
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/소켓 프로토콜
- 애플리케이션에 내장
##### 모든 Java Miners 빌드```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
Priority: 명령줄 플래그 > 환경 변수 > 기본값 (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배 더 높습니다.```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) for complete GPU mining guide.
## 구성
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` | 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` *(레거시)* | 원격 서버 주소 | `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
See [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 with 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
테스트 커버리지:
서버: 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을 지원하는 Windows (GPU 지원):**```bash
# Requires MinGW-w64 and Windows OpenCL SDK
make build-windows-opencl
Creates bin/client-windows-opencl.exe
See docs/WINDOWS_BUILD.md for complete Windows build instructions including:
다중 플랫폼:```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
Common issues:
빌드 실패:
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 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% | 지속적인 채굴로 인한 |
| Problem | 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 느림 | export RTC_CLIENT_MINING_GPU_ENABLED=true |
| CGo 빌드 오류 | sudo apt install build-essential |