Detects and responds to unauthorized cryptomining in AWS (EC2/ECS/EKS via GuardDuty) and Azure clouds using cost anomalies, mining pool traffic, and runtime process monitoring.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 云账单告警显示意外计算成本激增时
Detects unauthorized cryptomining in AWS, Azure, GCP clouds via GuardDuty findings, compute/CPU anomalies, mining pool network traffic, and native security services. Useful for cost spikes or threat alerts.
Detects unauthorized cryptomining in AWS EC2/ECS/EKS and Azure via compute anomalies, GuardDuty CryptoCurrency findings, network traffic to mining pools, and runtime process monitoring.
Detects unauthorized cryptomining in AWS (EC2,ECS,EKS) and Azure clouds via compute anomalies, GuardDuty CryptoCurrency findings, network traffic to mining pools, and runtime process monitoring. Useful for cost spikes and GuardDuty alerts.
Share bugs, ideas, or general feedback.
不适用于:合法的加密货币挖矿操作、物理硬件上的非云环境挖矿检测,或与挖矿活动无关的通用恶意软件分析。
跨四个信号类别部署检测:成本异常、计算资源利用率、网络流量和运行时进程。
# 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": "security@company.com", "Type": "EMAIL"}],
"Threshold": 50.0,
"Frequency": "IMMEDIATE"
}'
# CloudWatch CPU 利用率激增告警
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"
为针对 EC2、ECS 和 EKS 工作负载上加密货币挖矿活动的 GuardDuty 发现配置告警。
GuardDuty 加密挖矿关键发现类型:
CryptoCurrency:EC2/BitcoinTool.B - 到加密货币相关域名的网络连接CryptoCurrency:Runtime/BitcoinTool.B - 运行时检测到挖矿进程执行Impact:EC2/BitcoinTool.B - EC2 实例与已知比特币挖矿池通信Impact:Runtime/CryptoMinerExecuted - 运行时 Agent 检测到加密挖矿程序执行# 针对加密货币发现的 EventBridge 规则
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"}
]
}
}'
# 加密货币发现的自动修复 Lambda
aws events put-targets \
--rule CryptoMiningDetection \
--targets '[{
"Id": "CryptoAutoRemediate",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function/crypto-remediate"
}]'
监控 VPC Flow Logs 和 DNS 查询,识别到已知加密货币挖矿池在常用端口(3333、4444、5555、8333、9999、14444)上运行的连接。
// Sentinel KQL 查询,检测挖矿池连接
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 查询,检测 VPC Flow Logs 中的挖矿池连接
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
监控 ECS 任务定义和 EKS Pod 部署,识别已知挖矿容器镜像和可疑进程执行。
# 检查最近注册的含有可疑镜像的 ECS 任务定义
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
# 需要监控的已知恶意挖矿镜像特征:
# - 来自未知镜像仓库且拉取次数极高的镜像
# - 包含 xmrig、cpuminer、minergate 或 ccminer 二进制文件的镜像
# - 入口点指向 /tmp/.hidden 或 /dev/shm 路径的镜像
# 监控 CloudTrail 中可疑的 ECS/EKS 活动
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]'
确认挖矿后立即执行遏制操作,在终止恶意工作负载前保留取证证据。
# 加密货币挖矿事件的自动修复 Lambda
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')
# 在隔离前对 EBS 卷创建取证快照
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'取证快照 - 加密货币挖矿 - {instance_id}',
TagSpecifications=[{
'ResourceType': 'snapshot',
'Tags': [{'Key': 'Incident', 'Value': 'CryptoMining'},
{'Key': 'SourceInstance', 'Value': instance_id}]
}]
)
# 如果攻击者设置了 API 终止保护,先禁用它
ec2.modify_instance_attribute(
InstanceId=instance_id,
DisableApiTermination={'Value': False}
)
# 使用空安全组隔离实例
vpc_id = finding['resource']['instanceDetails']['networkInterfaces'][0]['vpcId']
isolation_sg = ec2.create_security_group(
GroupName=f'crypto-isolation-{instance_id}',
Description='加密挖矿隔离 - 禁止所有流量',
VpcId=vpc_id
)
# 撤销默认出站规则
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}
通过调查 CloudTrail 日志,确定攻击者如何获取访问权限以部署挖矿工作负载。常见向量包括被入侵的 IAM 凭据、暴露的访问密钥以及通过容器镜像进行的供应链攻击。
# 追踪被入侵身份的初始访问记录
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
# 检查在异常区域的 RunInstances 调用
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 - RunInstances 调用数: $count"
fi
done
| 术语 | 定义 |
|---|---|
| 加密劫持(Cryptojacking) | 未授权使用云计算资源挖掘加密货币,通常是门罗币(XMR),因其 CPU 友好的算法 |
| Stratum 协议(Stratum Protocol) | 在 TCP 端口 3333、4444 或自定义端口上运行的挖矿池通信协议,可在网络流日志中识别 |
| XMRig | 开源门罗币挖矿软件,常见于加密劫持攻击,通常以隐藏二进制文件部署在容器中 |
| API 终止保护(API Termination Protection) | 攻击者启用的 EC2 属性,用于阻止安全团队快速终止被入侵的挖矿实例 |
| Cost Anomaly Detection | AWS 服务,使用机器学习识别可能表明未授权资源使用的异常消费模式 |
| Runtime Monitoring(运行时监控) | GuardDuty 功能,部署 Agent 检测进程级别的活动,包括加密挖矿程序执行 |
| 攻击序列(Attack Sequence) | GuardDuty 扩展威胁检测发现,将凭据窃取、基础设施部署和挖矿执行关联为单个严重事件 |
场景背景:公开 GitHub 仓库中泄露的 IAM 凭据在 10 分钟内被用于在 8 个 AWS 区域启动 200 个 GPU 实例。攻击者在每个区域启用了 API 终止保护并禁用了 CloudTrail。
方法:
常见陷阱:未检查所有 AWS 区域的挖矿实例会导致未被发现的区域中的矿机持续运行。在停止实例前未禁用 API 终止保护会浪费响应时间。
加密货币挖矿事件响应报告
=======================================
事件 ID: INC-2025-0223-CRYPTO
检测时间: 2025-02-23T14:23:00Z
遏制时间: 2025-02-23T14:41:00Z(18 分钟)
初始访问:
向量: IAM 访问密钥暴露于公开 GitHub 仓库
凭据: AKIAIOSFODNN7EXAMPLE(用户: ci-deploy)
首次恶意活动: 2025-02-23T14:12:00Z
影响:
启动实例数: 200 个(p3.2xlarge GPU 实例)
受影响区域: 8 个(us-east-1, us-west-2, eu-west-1, eu-central-1 等)
估计成本: 4,200 美元(18 分钟,每小时 15,400 美元)
挖矿池: stratum+tcp://pool.supportxmr.com:3333
加密货币: 门罗币(XMR)
检测信号:
[14:15] GuardDuty: Stealth:IAMUser/CloudTrailLoggingDisabled(高)
[14:18] 成本异常: EC2 费用超基准 4,200%
[14:23] GuardDuty: CryptoCurrency:EC2/BitcoinTool.B(高)x 200
遏制操作:
[14:25] IAM 访问密钥 AKIAIOSFODNN7EXAMPLE 已停用
[14:30] CloudTrail 已在所有 8 个区域重新启用
[14:35] 200 个实例的 API 终止保护已禁用
[14:41] 所有 200 个实例已终止
修复措施:
- 被入侵的访问密钥已删除
- GitHub 仓库密钥扫描已启用
- AWS Config 规则已部署: cloudtrail-enabled(自动修复)
- SCP 已部署: 拒绝在未经审批的情况下为 GPU 实例类型执行 ec2:RunInstances