mcpField
D
detecting-cryptomining-in-cloud

detecting-cryptomining-in-cloud

github.com/mukul975安全35.2k66 次安装8 周前更新
代码仓库

关于 detecting-cryptomining-in-cloud

面向云安全与事件响应人员的技能指南,用于识别并处置云环境中的未授权加密货币挖矿。它结合成本、算力、网络与运行时信号,并覆盖调查初始入侵途径。

主要功能

  1. 01关联成本、算力、网络和进程信号
  2. 02分析 GuardDuty 加密货币告警
  3. 03检查矿池网络连接
  4. 04监控 ECS 和 EKS 容器
  5. 05遏制挖矿并追查初始访问

适用场景

  1. 01调查异常云计算费用
  2. 02响应 GuardDuty 挖矿告警
  3. 03排查容器中的可疑挖矿进程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill detecting-cryptomining-in-cloud

安装后在 Claude Code 中输入/detecting-cryptomining-in-cloud确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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。

应对方法:

  1. AWS Cost Anomaly Detection 针对每小时 $15,000+ 的 EC2 支出触发即时告警
  2. GuardDuty 生成 Stealth:IAMUser/CloudTrailLoggingDisabled 和 CryptoCurrency:EC2/BitcoinTool.B 发现结果
  3. 立即停用被盗用的 IAM 访问密钥
  4. 在所有受影响区域重新启用 CloudTrail 以恢复可见性
  5. 在所有 200 个实例上禁用 API 终止保护并终止它们
  6. 在终止之前为代表实例创建取证快照
  7. 审查 GitHub 提交历史,以识别并移除泄露的凭证
  8. 部署 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

评论

支持 Markdown