关于 detecting-cryptomining-in-cloud
面向云安全与事件响应人员的技能指南,用于识别并处置云环境中的未授权加密货币挖矿。它结合成本、算力、网络与运行时信号,并覆盖调查初始入侵途径。
主要功能
- 01关联成本、算力、网络和进程信号
- 02分析 GuardDuty 加密货币告警
- 03检查矿池网络连接
- 04监控 ECS 和 EKS 容器
- 05遏制挖矿并追查初始访问
适用场景
- 01调查异常云计算费用
- 02响应 GuardDuty 挖矿告警
- 03排查容器中的可疑挖矿进程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill detecting-cryptomining-in-cloud安装后在 Claude Code 中输入/detecting-cryptomining-in-cloud确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
检测云环境中的加密货币挖矿
使用场景
- 当云账单告警显示计算成本出现意外激增时
- 当 GuardDuty 生成 CryptoCurrency 或 Impact 类型的发现结果时
- 当调查可能被用于启动挖矿实例的已泄露 IAM 凭证时
- 当监控容器工作负载是否存在未授权的进程执行时
- 当建立针对资源劫持攻击的主动检测控制时
请勿使用于合法的加密货币挖矿运营、物理硬件上的非云挖矿检测,或与挖矿活动无关的一般恶意软件分析。
前提条件
- 已启用 Amazon GuardDuty,并针对 EC2、ECS 和 EKS 启用运行时监控
- 已配置 CloudWatch 或 Azure Monitor 以进行计算利用率告警
- 已启用 VPC Flow Logs 以分析与矿池 IP 之间的网络流量
- 已配置 AWS Cost Anomaly Detection 或 Azure Cost Management 告警
工作流
步骤 1:通过多种信号建立检测
在四个信号类别中部署检测:成本异常、计算利用率、网络流量和运行时进程。
# AWS Cost Anomaly Detection
aws ce create-anomaly-monitor \
--anomaly-monitor '{
"MonitorName": "EC2CostSpike",
"MonitorType": "DIMENSIONAL",
"MonitorDimension": "SERVICE"
}'
aws ce create-anomaly-subscription \
--anomaly-subscription '{
"SubscriptionName": "CryptoMiningAlert",
"MonitorArnList": ["arn:aws:ce::123456789012:anomalymonitor/monitor-id"],
"Subscribers": [{"Address": "[email protected]", "Type": "EMAIL"}],
"Threshold": 50.0,
"Frequency": "IMMEDIATE"
}'
# CloudWatch alarm for CPU utilization spike
aws cloudwatch put-metric-alarm \
--alarm-name HighCPUUtilization \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--statistic Average \
--period 300 \
--threshold 90 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 3 \
--alarm-actions "arn:aws:sns:us-east-1:123456789012:security-alerts"
步骤 2:监控 GuardDuty CryptoCurrency 发现结果
针对与 EC2、ECS 和 EKS 工作负载上加密货币挖矿活动相关的 GuardDuty 发现结果配置告警。
与加密货币挖矿相关的关键 GuardDuty 发现结果类型:
CryptoCurrency:EC2/BitcoinTool.B- 与加密货币相关域名的网络连接CryptoCurrency:Runtime/BitcoinTool.B- 对挖矿进程执行的运行时检测Impact:EC2/BitcoinTool.B- EC2 实例与已知比特币矿池通信Impact:Runtime/CryptoMinerExecuted- 运行时 Agent 检测到加密货币挖矿二进制文件执行
# EventBridge rule for cryptocurrency findings
aws events put-rule \
--name CryptoMiningDetection \
--event-pattern '{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {
"type": [
{"prefix": "CryptoCurrency:"},
{"prefix": "Impact:EC2/BitcoinTool"},
{"prefix": "Impact:Runtime/CryptoMiner"}
]
}
}'
# Auto-remediation Lambda for crypto findings
aws events put-targets \
--rule CryptoMiningDetection \
--targets '[{
"Id": "CryptoAutoRemediate",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function/crypto-remediate"
}]'
步骤 3:分析网络流量中的矿池连接
监控 VPC Flow Logs 和 DNS 查询,以发现与已知加密货币矿池在常见端口(3333、4444、5555、8333、9999、14444)上的连接。
// Sentinel KQL query for mining pool connections
AzureNetworkAnalytics_CL
| where TimeGenerated > ago(24h)
| where DestPort_d in (3333, 4444, 5555, 8333, 9999, 14444, 14433, 45700)
| summarize ConnectionCount = count(), BytesSent = sum(BytesSent_d)
by SrcIP_s, DestIP_s, DestPort_d, bin(TimeGenerated, 1h)
| where ConnectionCount > 10
| project TimeGenerated, SrcIP_s, DestIP_s, DestPort_d, ConnectionCount, BytesSent
# AWS Athena query for VPC Flow Logs mining pool detection
cat << 'EOF' > mining-detection.sql
SELECT srcaddr, dstaddr, dstport, protocol,
COUNT(*) as connection_count,
SUM(bytes) as total_bytes
FROM vpc_flow_logs
WHERE dstport IN (3333, 4444, 5555, 8333, 9999, 14444)
AND action = 'ACCEPT'
AND start >= date_add('hour', -24, now())
GROUP BY srcaddr, dstaddr, dstport, protocol
HAVING COUNT(*) > 10
ORDER BY connection_count DESC
EOF
步骤 4:检测容器环境中的挖矿行为
监控 ECS 任务定义和 EKS Pod 部署,以发现已知的挖矿容器镜像和可疑的进程执行。
# Check for recently registered ECS task definitions with suspicious images
aws ecs list-task-definitions --sort DESC --max-items 50 | \
jq -r '.taskDefinitionArns[]' | while read arn; do
aws ecs describe-task-definition --task-definition "$arn" \
--query 'taskDefinition.containerDefinitions[*].[name,image]' --output text
done
# Known malicious mining images to watch for:
# - Images with high pull counts from unknown registries
# - Images containing xmrig, cpuminer, minergate, or ccminer binaries
# - Images with entrypoint pointing to /tmp/.hidden or /dev/shm paths
# Monitor CloudTrail for suspicious ECS/EKS activity
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=RegisterTaskDefinition \
--start-time $(date -d '-24 hours' +%Y-%m-%dT%H:%M:%S) \
--query 'Events[*].[EventName,Username,EventTime]'
步骤 5:响应并遏制挖矿活动
在确认挖矿行为后立即执行遏制操作,在终止恶意工作负载之前保留取证证据。
# Auto-remediation Lambda for cryptomining incidents
import boto3
import json
def lambda_handler(event, context):
finding = event['detail']
resource_type = finding['resource']['resourceType']
if resource_type == 'Instance':
instance_id = finding['resource']['instanceDetails']['instanceId']
ec2 = boto3.client('ec2')
# Snapshot EBS volumes for forensics before isolation
volumes = ec2.describe_instances(InstanceIds=[instance_id])
for reservation in volumes['Reservations']:
for instance in reservation['Instances']:
for vol in instance['BlockDeviceMappings']:
volume_id = vol['Ebs']['VolumeId']
ec2.create_snapshot(
VolumeId=volume_id,
Description=f'Forensic snapshot - crypto mining - {instance_id}',
TagSpecifications=[{
'ResourceType': 'snapshot',
'Tags': [{'Key': 'Incident', 'Value': 'CryptoMining'},
{'Key': 'SourceInstance', 'Value': instance_id}]
}]
)
# Disable API termination protection if set by attacker
ec2.modify_instance_attribute(
InstanceId=instance_id,
DisableApiTermination={'Value': False}
)
# Isolate instance with empty security group
vpc_id = finding['resource']['instanceDetails']['networkInterfaces'][0]['vpcId']
isolation_sg = ec2.create_security_group(
GroupName=f'crypto-isolation-{instance_id}',
Description='Cryptomining isolation - no traffic allowed',
VpcId=vpc_id
)
# Revoke default egress rule
ec2.revoke_security_group_egress(
GroupId=isolation_sg['GroupId'],
IpPermissions=[{'IpProtocol': '-1', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}]
)
ec2.modify_instance_attribute(
InstanceId=instance_id,
Groups=[isolation_sg['GroupId']]
)
return {'status': 'contained', 'instance': instance_id}
步骤 6:追溯初始访问途径
调查 CloudTrail 日志以确定攻击者如何获得访问权限并部署挖矿工作负载。常见途径包括已泄露的 IAM 凭证、暴露的访问密钥,以及通过容器镜像实施的供应链攻击。
# Trace the initial access for the compromised identity
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=Username,AttributeValue=compromised-user \
--start-time 2025-02-01T00:00:00Z \
--query 'Events[?EventName==`ConsoleLogin` || EventName==`GetSessionToken`].[EventTime,SourceIPAddress,EventName]' \
--output table
# Check for RunInstances calls in unusual regions
for region in $(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text); do
count=$(aws cloudtrail lookup-events \
--region $region \
--lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances \
--start-time $(date -d '-7 days' +%Y-%m-%dT%H:%M:%S) \
--query 'Events | length(@)')
if [ "$count" -gt 0 ]; then
echo "Region: $region - RunInstances calls: $count"
fi
done
关键概念
| 术语 | 定义 |
|---|---|
| Cryptojacking | 未经授权使用云计算资源挖掘加密货币,通常为门罗币(XMR),因其对 CPU 友好的算法 |
| Stratum 协议 | 矿池通信协议,运行在 TCP 端口 3333、4444 或自定义端口上,可在网络流日志中识别 |
| XMRig | 开源门罗币挖矿软件,常见于 Cryptojacking 攻击中,通常以隐藏二进制文件的形式部署在容器中 |
| API 终止保护 | EC2 属性,攻击者启用后可阻止安全团队快速终止已受损的挖矿实例 |
| 成本异常检测 | AWS 服务,使用机器学习识别可能表明未授权资源使用的不寻常支出模式 |
| 运行时监控 | GuardDuty 功能,部署 Agent 以检测进程级活动,包括加密货币挖矿二进制文件的执行 |
| 攻击序列 | GuardDuty 扩展威胁检测发现结果,将凭证窃取、基础设施部署和挖矿执行关联为单个 Critical 事件 |
工具与系统
- Amazon GuardDuty:通过网络流量分析、DNS 查询和运行时进程监控检测加密货币挖矿
- AWS Cost Anomaly Detection:基于机器学习的服务,识别因部署挖矿实例导致的意外成本增长
- VPC Flow Logs:网络流量元数据,显示与矿池 IP 地址和端口的连接
- Falco:开源运行时安全工具,用于检测容器中加密货币挖矿进程的执行
- Amazon Detective:基于图的调查工具,用于追踪从初始访问到挖矿部署的攻击路径
常见场景
场景:被盗用的 IAM 凭证被用于大规模 EC2 挖矿
背景:来自公共 GitHub 仓库的泄露 IAM 凭证被用于在 10 分钟内在 8 个 AWS 区域启动 200 个 GPU 实例。攻击者启用了 API 终止保护,并在每个区域禁用了 CloudTrail。
应对方法:
- AWS Cost Anomaly Detection 针对每小时 $15,000+ 的 EC2 支出触发即时告警
- GuardDuty 生成 Stealth:IAMUser/CloudTrailLoggingDisabled 和 CryptoCurrency:EC2/BitcoinTool.B 发现结果
- 立即停用被盗用的 IAM 访问密钥
- 在所有受影响区域重新启用 CloudTrail 以恢复可见性
- 在所有 200 个实例上禁用 API 终止保护并终止它们
- 在终止之前为代表实例创建取证快照
- 审查 GitHub 提交历史,以识别并移除泄露的凭证
- 部署 AWS Config 规则,防止 CloudTrail 被禁用并强制执行 IMDSv2
陷阱:未检查所有 AWS 区域中的挖矿实例会留下仍在被忽视区域中运行的活跃矿工。在尝试停止实例之前未禁用 API 终止保护会浪费时间。
输出格式
Cryptomining Incident Response Report
=======================================
Incident ID: INC-2025-0223-CRYPTO
Detection Time: 2025-02-23T14:23:00Z
Containment Time: 2025-02-23T14:41:00Z (18 minutes)
INITIAL ACCESS:
Vector: Exposed IAM access key in public GitHub repository
Credential: AKIAIOSFODNN7EXAMPLE (user: ci-deploy)
First Malicious Activity: 2025-02-23T14:12:00Z
IMPACT:
Instances Launched: 200 (p3.2xlarge GPU instances)
Regions Affected: 8 (us-east-1, us-west-2, eu-west-1, eu-central-1, ...)
Estimated Cost: $4,200 (18 minutes at $15,400/hour)
Mining Pool: stratum+tcp://pool.supportxmr.com:3333
Cryptocurrency: Monero (XMR)
DETECTION SIGNALS:
[14:15] GuardDuty: Stealth:IAMUser/CloudTrailLoggingDisabled (HIGH)
[14:18] Cost Anomaly: EC2 spend 4,200% above baseline
[14:23] GuardDuty: CryptoCurrency:EC2/BitcoinTool.B (HIGH) x 200
CONTAINMENT ACTIONS:
[14:25] IAM access key AKIAIOSFODNN7EXAMPLE deactivated
[14:30] CloudTrail re-enabled in all 8 regions
[14:35] API termination protection disabled on 200 instances
[14:41] All 200 instances terminated
REMEDIATION:
- Compromised access key deleted
- GitHub repository secret scanning enabled
- AWS Config rule deployed: cloudtrail-enabled (auto-remediate)
- SCP deployed: deny ec2:RunInstances for GPU instance types without approval