挖矿木马与Cryptojacking分析
用于挖矿木马与Cryptojacking分析,识别XMRig及其变种、Stratum协议、矿池地址、钱包、资源占用规避和持久化手段。适合服务器或终端CPU/GPU异常占用案件,从二进制、配置和网络流量中提取矿池与钱包等关联线索,并区分正常挖矿软件与被恶意投放的矿工。
在 AI 中使用此 Skill将本页链接复制给 AI,即可让 AI 获取完整 Skill 内容并按此执行
安全提示: 本站 Skill 均经 ChatGPT 最新模型扫描,未发现恶意脚本及危险指令、未检出已知恶意行为特征,但不保证绝对安全,使用即表示接受此风险
Skill 文件
版本 20260301 · 64aad75b9c760852c14a776bd292aae8
SKILL.md
---
name: cryptominer-analysis
description: >
Analyze cryptocurrency mining malware including XMRig variants, coin miners,
and cryptojacking campaigns. Covers mining algorithm identification
(CryptoNight/RandomX for Monero, Ethash for Ethereum), Stratum protocol
detection, resource usage evasion techniques, process injection for hidden
mining, web-based cryptojacking (JavaScript miners), wallet and pool
extraction for attribution, and distinguishing legitimate mining from malware.
---
# Cryptominer Analysis
Analyze cryptocurrency mining malware to identify the mining algorithm,
extract wallet addresses and pool configurations, understand evasion
techniques, and determine the scope of the infection.
## Prerequisites
- **Python 3.10+**: `pefile`, `yara-python`, `json`, `re`
- **Tools**: Wireshark/tshark, Process Monitor, Resource Monitor
- **Optional**: js-beautify (for web miners), strings, Ghidra
- **Environment**: Isolated VM with network monitoring
## Step-by-Step Instructions
### Step 1: Identify the Mining Software
Determine which mining software or variant is being used.
**Run miner identification:**
```bash
python3 scripts/cryptominer_analyzer.py --sample suspicious.exe --mode identify --output miner_id.json
```
**Common mining software:**
| Miner | Cryptocurrency | Indicators |
|-------|---------------|------------|
| XMRig | Monero (XMR) | `xmrig`, `RandomX`, `CryptoNight`, `rx/0` |
| T-Rex | ETH/various | `t-rex`, `ethash`, `kawpow` |
| PhoenixMiner | ETH | `PhoenixMiner`, `ethash` |
| NBMiner | ETH/various | `nbminer`, `ethash` |
| Custom | Various | Embedded pool configs, Stratum strings |
**Quick identification:**
```bash
# Check for common miner strings
strings suspicious.exe | grep -iE "(xmrig|cryptonight|randomx|stratum|mining|hashrate|pool)"
# Check for mining algorithm constants
strings suspicious.exe | grep -iE "(rx/0|cn/r|cn-heavy|ethash|kawpow|equihash)"
# Check for Stratum protocol
strings suspicious.exe | grep -iE "(stratum\+tcp|stratum\+ssl|mining\.subscribe|mining\.authorize)"
```
### Step 2: Extract Pool and Wallet Configuration
Pull out the mining pool URLs and wallet addresses for attribution.
**Extract configuration:**
```bash
python3 scripts/cryptominer_analyzer.py --sample suspicious.exe --mode config --output miner_config.json
```
**Manual extraction:**
```bash
# Extract Monero wallet addresses (95 characters, starts with 4)
strings suspicious.exe | grep -oE "4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}"
# Extract Bitcoin addresses
strings suspicious.exe | grep -oE "(bc1[a-zA-HJ-NP-Z0-9]{25,39}|[13][a-km-zA-HJ-NP-Z1-9]{25,34})"
# Extract pool URLs
strings suspicious.exe | grep -iE "stratum\+[a-z]+://[^ ]+"
strings suspicious.exe | grep -iE "(pool\.|mining\.|hashvault|nanopool|supportxmr|minexmr)"
```
**Common Monero mining pools:**
| Pool | Domain |
|------|--------|
| SupportXMR | `pool.supportxmr.com` |
| MineXMR | `pool.minexmr.com` (closed) |
| Nanopool | `xmr.nanopool.org` |
| HashVault | `pool.hashvault.pro` |
| MoneroOcean | `gulf.moneroocean.stream` |
| Unmineable | `rx.unmineable.com` |
**Config file locations:**
```bash
# XMRig config is often a JSON file
find / -name "config.json" -exec grep -l "pool\|wallet\|stratum" {} \; 2>/dev/null
# Check for embedded configs in the binary
strings suspicious.exe | python3 -c "
import sys, json
for line in sys.stdin:
try:
j = json.loads(line.strip())
if 'pool' in str(j).lower() or 'wallet' in str(j).lower():
print(json.dumps(j, indent=2))
except: pass
"
```
### Step 3: Analyze Resource Usage Evasion
Understand how the miner hides its CPU/GPU usage.
**Evasion analysis:**
```bash
python3 scripts/cryptominer_analyzer.py --sample suspicious.exe --mode evasion --output evasion_analysis.json
```
**Common evasion techniques:**
| Technique | Description | Indicators |
|-----------|-------------|------------|
| CPU throttling | Limits to 50-70% CPU | `max-cpu-usage`, `threads` config |
| Idle-only mining | Mines only when user is inactive | `GetLastInputInfo`, idle timer |
| Process hiding | Hides from Task Manager | Process hollowing, name spoofing |
| Periodic pausing | Stops during business hours | Time-of-day checks |
| GPU-only mining | Avoids CPU spikes | CUDA/OpenCL only, no CPU threads |
| Name mimicking | Process named like system service | `svchost.exe`, `csrss.exe`, `dwm.exe` |
**Check for idle detection:**
```bash
strings suspicious.exe | grep -iE "(GetLastInputInfo|LASTINPUTINFO|idle|screensaver)"
```
**Check for CPU throttling:**
```bash
strings suspicious.exe | grep -iE "(max-cpu|threads|cpu-priority|SetProcessAffinityMask)"
```
### Step 4: Analyze Process Injection for Hidden Mining
Some miners inject into legitimate processes to avoid detection.
**Injection analysis:**
```bash
python3 scripts/cryptominer_analyzer.py --sample suspicious.exe --mode injection --output injection.json
```
**Common injection targets for mining:**
- `svchost.exe` (most common — blends with legitimate instances)
- `explorer.exe`
- `notepad.exe` (surprising choice, seen in some campaigns)
- `dllhost.exe`
**Detection approach:**
```bash
# Look for injection APIs
strings suspicious.exe | grep -iE "(VirtualAllocEx|WriteProcessMemory|CreateRemoteThread|NtCreateThreadEx)"
# In a running system, check for unexpected CPU-heavy processes
# Legitimate svchost.exe should not use 50%+ CPU
```
### Step 5: Analyze Stratum Protocol Communication
Reverse engineer the mining pool communication.
**Capture Stratum traffic:**
```bash
python3 scripts/cryptominer_analyzer.py --pcap capture.pcap --mode stratum --output stratum.json
```
**Stratum protocol analysis:**
```bash
# Capture mining traffic
tshark -r capture.pcap -Y "tcp.payload" -T fields -e tcp.payload | \
xxd -r -p | strings | grep -E "mining\.|method|result"
```
**Stratum protocol messages:**
```json
// mining.subscribe - Initial handshake
{"id": 1, "method": "mining.subscribe", "params": ["xmrig/6.18.0"]}
// mining.authorize - Login with wallet address
{"id": 2, "method": "mining.authorize", "params": ["WALLET_ADDRESS.WORKER_NAME", "x"]}
// mining.submit - Share submission (proof of work)
{"id": 4, "method": "mining.submit", "params": ["WALLET", "JOB_ID", "NONCE", "HASH"]}
```
**Key information to extract:**
- Wallet address (from `mining.authorize`)
- Worker name (campaign/bot identifier)
- Mining software and version (from `mining.subscribe` user agent)
- Pool URL (from connection destination)
- Algorithm (from job parameters)
### Step 6: Analyze Web-Based Cryptojacking
Detect JavaScript-based miners injected into websites.
**Analyze web miner:**
```bash
python3 scripts/cryptominer_analyzer.py --input suspicious.html --mode web-miner --output webminer.json
```
**Detection in HTML/JavaScript:**
```bash
# Look for known mining scripts
grep -rnE "(coinhive|coin-hive|cryptonight|CryptoNoter|deepMiner|monerominer)" website_files/
# Look for WebAssembly mining modules
grep -rn "WebAssembly\|wasm\|importObject" website_files/*.js
# Look for Web Worker usage (background mining)
grep -rn "new Worker\|SharedWorker\|postMessage.*hash" website_files/*.js
```
**Known web mining libraries:**
| Library | Status | Indicators |
|---------|--------|------------|
| Coinhive | Dead (2019) | `coinhive.min.js`, `CoinHive.Anonymous` |
| CryptoLoot | Dead | `cryptoloot.pro`, `CryptoLoot.Anonymous` |
| deepMiner | Active | `deepMiner.js`, `deepMiner.Anonymous` |
| WebMinePool | Active | `webminepool.com`, `WMP.Anonymous` |
### Step 7: Distinguish Legitimate from Malicious Mining
Assess whether the mining activity is authorized or malware.
**Legitimacy indicators:**
| Indicator | Legitimate | Malicious |
|-----------|-----------|-----------|
| User consent | Explicitly installed | No consent, hidden |
| Resource usage | Configurable, reasonable | Maxed out, throttled to hide |
| Installation | Normal installer, visible | Dropper, injection, no UI |
| Process name | Actual miner name | Mimicking system process |
| Persistence | Optional, visible | Hidden autostart |
| Wallet | User's own wallet | Attacker's wallet |
### Step 8: Extract IOCs and Build Detections
Compile indicators for network and endpoint detection.
**Generate IOCs:**
```bash
python3 scripts/cryptominer_analyzer.py --sample suspicious.exe --mode iocs --output miner_iocs.json
```
**Network detection (Snort/Suricata):**
```
# Detect Stratum protocol
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"Cryptocurrency Mining - Stratum Protocol"; content:"mining.subscribe"; sid:1000001;)
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"Cryptocurrency Mining - Share Submission"; content:"mining.submit"; sid:1000002;)
```
**YARA detection:**
```yara
rule XMRig_Miner {
strings:
$s1 = "stratum+tcp://" ascii
$s2 = "mining.subscribe" ascii
$s3 = "randomx" ascii nocase
$s4 = "cryptonight" ascii nocase
$pool1 = "supportxmr.com" ascii
$pool2 = "nanopool.org" ascii
$pool3 = "hashvault.pro" ascii
condition:
($s1 and $s2) or ($s3 or $s4) and any of ($pool*)
}
```
## Output Format
```json
{
"miner_type": "XMRig",
"version": "6.18.0",
"cryptocurrency": "Monero (XMR)",
"algorithm": "RandomX",
"config": {
"wallet_address": "4ABc...xyz",
"pool_url": "stratum+tcp://pool.supportxmr.com:3333",
"worker_name": "worker1",
"max_cpu_usage": 70,
"threads": 4,
"donate_level": 0
},
"evasion": {
"cpu_throttling": true,
"idle_only": false,
"process_injection": true,
"target_process": "svchost.exe",
"name_spoofing": true
},
"persistence": {
"method": "scheduled_task",
"task_name": "WindowsUpdate"
},
"network": {
"pool_domains": ["pool.supportxmr.com"],
"pool_ips": ["198.51.100.80"],
"pool_ports": [3333, 443],
"tls": false
},
"iocs": {
"wallet_addresses": ["4ABc...xyz"],
"pool_urls": ["stratum+tcp://pool.supportxmr.com:3333"],
"file_hashes": {},
"process_names": ["svchost.exe"],
"scheduled_tasks": ["WindowsUpdate"]
},
"mitre_attack": ["T1496", "T1055", "T1053.005", "T1036.005"]
}
```
## Tips
- Monero is the most common cryptocurrency for malware mining due to its privacy features
- XMRig is open-source and the most widely abused miner — many variants exist
- Wallet addresses are the best attribution IOC — check mining pool APIs for payout history
- Stratum protocol on port 3333 is a strong indicator; some miners use 443 to blend with HTTPS
- CPU usage dropping when Task Manager is opened is a classic evasion tell
- Some campaigns use proxy pools to hide the actual wallet address
- Web-based cryptojacking has declined since Coinhive's shutdown but persists in niche forms
- Mining malware often arrives via other malware (loaders, RATs) as a monetization module
- Check for XMRig's built-in HTTP API (default port 8080) for monitoring data
此文件不提供内嵌文本预览
请使用左侧文件行末尾的外链图标打开原始文件。
