开了 GuardDuty 一周,发现 EC2 被人暴力破解 SSH 了

开了 GuardDuty 一周,发现 EC2 被人暴力破解 SSH 了

跑 OpenClaw 龙虾的 EC2 服务器,凌晨 3 点收到了一堆 SSH 登录失败记录。

这事我完全不知道。是翻 CloudTrail 日志时偶然看到的------有人拿暴力破解工具在试密码。虽然我用密钥登录(密码早关了),但问题是,如果不翻日志,这种事永远不会知道

后来配了 Amazon GuardDuty,开启后它帮我自动检测各种威胁:暴力破解、异常 API 调用、恶意出站流量,都能发现并告警。

这篇记录一下怎么给 AI Agent 服务器配 GuardDuty,以及实际开了之后发现了什么。

GuardDuty 干嘛的

Amazon GuardDuty 是亚马逊云科技的托管威胁检测服务

它分析三种数据源:

  • CloudTrail 日志:哪个 IP 调了什么 API(比如凌晨从陌生 IP 调了 Bedrock)
  • VPC Flow Logs:哪台机器和哪个 IP 通信了(比如和矿池 IP 建了连接)
  • DNS 日志:解析了什么域名(比如解析了已知恶意域名)

不需要装 Agent,不需要写规则,开了就自动跑。内置威胁情报 + 机器学习模型,把发现的可疑行为输出为 Finding(告警)。

跑 AI Agent 的 EC2 面临什么威胁

说实话,我之前觉得"就一台 EC2 跑跑 OpenClaw,谁会盯上我"。

实际情况是------互联网上的自动扫描器 24 小时在跑,只要你的 EC2 有公网 IP,就会被扫到。

GuardDuty 能帮你检测的典型场景:

威胁 说明 GuardDuty Finding 类型
SSH 暴力破解 有人在试你的密码 UnauthorizedAccess:EC2/SSHBruteForce
端口扫描 扫描器在探测你的开放端口 Recon:EC2/PortProbeUnprotectedPort
凭证被盗用 IAM 密钥从异常位置被使用 UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration
挖矿 EC2 被植入矿机 CryptoCurrency:EC2/BitcoinTool.B
恶意出站 和 C&C 服务器通信 Trojan:EC2/BlackholeTraffic
Bedrock 异常 AI 安全防护被移除、模型被盗用 Bedrock 相关 Finding

最后一条重要------GuardDuty 能检测 Amazon Bedrock 相关的异常行为。如果有人偷了你的 IAM 凭证去调大模型(花你的钱),或者 AI 安全防护被异常移除,GuardDuty 都能发现。

一行命令开启

bash 复制代码
aws guardduty create-detector --enable --finding-publishing-frequency FIFTEEN_MINUTES

FIFTEEN_MINUTES 是告警发布频率(默认 6 小时,太慢了)。

开了之后不需要其他配置。GuardDuty 会自动分析你账号下的 CloudTrail、VPC Flow Logs、DNS 日志。

开额外保护模块

GuardDuty 有几个可选的增强模块,建议都开上:

bash 复制代码
# 先拿 detector ID
DETECTOR_ID=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text)

# EBS 恶意软件扫描------EC2 被入侵后自动扫描磁盘
aws guardduty update-detector \
  --detector-id $DETECTOR_ID \
  --features '[{"Name":"EBS_MALWARE_PROTECTION","Status":"ENABLED"}]'

# Runtime Monitoring------监控 EC2 上的进程/文件/网络行为
aws guardduty update-detector \
  --detector-id $DETECTOR_ID \
  --features '[{"Name":"RUNTIME_MONITORING","Status":"ENABLED","AdditionalConfiguration":[{"Name":"EC2_AGENT_MANAGEMENT","Status":"ENABLED"}]}]'

Runtime Monitoring 会在 EC2 上自动部署一个轻量级 Agent,监控运行时行为。如果 AI Agent 被 Prompt 注入后执行了可疑命令(比如反弹 shell),Runtime Monitoring 能抓到。

配告警推送

GuardDuty 发现威胁后生成 Finding,但你得配通知才能收到。

EventBridge + SNS

bash 复制代码
# 创建通知主题
aws sns create-topic --name guardduty-alerts
aws sns subscribe \
  --topic-arn arn:aws:sns:us-west-2:123456789012:guardduty-alerts \
  --protocol email \
  --notification-endpoint your@email.com

# EventBridge 规则:只推送严重性 ≥ 7 的高危告警
aws events put-rule \
  --name guardduty-high-severity \
  --event-pattern '{
    "source": ["aws.guardduty"],
    "detail-type": ["GuardDuty Finding"],
    "detail": {
      "severity": [{"numeric": [">=", 7]}]
    }
  }'

# 关联 SNS
aws events put-targets \
  --rule guardduty-high-severity \
  --targets '[{"Id":"sns-target","Arn":"arn:aws:sns:us-west-2:123456789012:guardduty-alerts"}]'

为什么只推 ≥ 7?因为低危的(端口扫描之类的)天天都有,推了也是噪音。高危的才需要立即处理。低危的每天汇总看就行。

我实际收到的 Finding

开了 GuardDuty 一周,实际收到这些:

1. SSH 暴力破解(严重性 Medium)

yaml 复制代码
Finding Type: UnauthorizedAccess:EC2/SSHBruteForce
Description: EC2 instance is being probed with SSH brute force attacks
Actor: 185.xxx.xxx.xxx (Netherlands, ISP: OVH)
Target Port: 22
Count: 847 attempts in 6 hours

847 次尝试,来自荷兰的 IP。如果我用的是弱密码,早被破了。

2. 端口扫描(严重性 Low)

yaml 复制代码
Finding Type: Recon:EC2/PortProbeUnprotectedPort
Description: Unprotected port on EC2 instance is being probed
Probed Ports: 3389, 8080, 9090, 6379

扫描器在试 RDP、常见 Web 端口、Redis 端口。好在安全组只开了 22 和 443。

3. DNS 异常查询(严重性 Info)

这个是误报------GuardDuty 把一些正常的 DNS 查询标记了。可以设 Suppression Rule 过滤掉。

查看和管理 Finding

bash 复制代码
# 列出最近的 Finding
aws guardduty list-findings \
  --detector-id $DETECTOR_ID \
  --finding-criteria '{
    "Criterion": {
      "severity": {"Gte": 4}
    }
  }' \
  --sort-criteria '{"AttributeName":"severity","OrderBy":"DESC"}'

# 查看 Finding 详情
aws guardduty get-findings \
  --detector-id $DETECTOR_ID \
  --finding-ids '["finding-id-here"]'

# 标记误报(Archive)
aws guardduty archive-findings \
  --detector-id $DETECTOR_ID \
  --finding-ids '["finding-id-here"]'

# 设置 Suppression Rule(过滤噪音)
aws guardduty create-filter \
  --detector-id $DETECTOR_ID \
  --name "suppress-low-severity" \
  --action ARCHIVE \
  --finding-criteria '{
    "Criterion": {
      "severity": {"Lt": 4}
    }
  }'

成本

数据源 大概费用
CloudTrail 管理事件 免费(已包含)
VPC Flow Logs 分析 每百万事件约 $1
DNS 日志 每百万查询约 $1
EBS 扫描 按扫描量
Runtime Monitoring 按 vCPU 小时

单台 EC2 跑 AI Agent 的场景:每月大约 $3-10。和 OpenClaw 龙虾每天调 Bedrock 大模型的花费比,这个几乎可以忽略。

前 30 天免费试用,建议先开了看看。

小结

给 AI Agent 服务器开 GuardDuty,解决的核心问题是------被攻击了你能知道

不开 GuardDuty 的情况下:SSH 被暴力破解、凭证被盗用、EC2 被植入矿机------除非你天天翻日志,否则可能过了几周才发现(或者账单暴涨了才发现)。

开了之后,高危事件 15 分钟内推送到你手机。

配合前面几篇的 IAM 权限控制、VPC Endpoint 网络隔离、Secrets Manager 密钥管理、CloudTrail 审计日志,GuardDuty 补上了自动检测这一环。

一行命令的事,没理由不开。


以上配置在亚马逊云科技上验证。GuardDuty 提供 30 天免费试用。

相关推荐
亚马逊云开发者18 小时前
Bedrock 调用次数比预期多了一倍?CloudTrail 5 分钟定位元凶
aws
亚马逊云开发者18 小时前
API Key 还明文写在配置文件里?OpenClaw SecretRef 帮你摘出来
aws
zhojiew1 天前
[INFRA] EMR集群节点下线 (Decommission) 机制和逻辑深入分析
aws·emr·bigdata
zhojiew2 天前
[INFRA] EMR集群中Hive和Spark集成Glue Data Catalog过程的深入分析
hive·hadoop·spark·aws·bigdata
亚马逊云开发者2 天前
我用 Lambda Durable Functions 把五个 Lambda 缩成了一个,代码量砍半
aws
亚马逊云开发者2 天前
异构 GPU 混合部署 Whisper,我用 HyperPod 一个集群搞定了
aws
亚马逊云开发者2 天前
模型搜完网页就"脑算"数字?用 Dynamic Filtering 让它老老实实写代码
aws
亚马逊云开发者2 天前
老板让我迁 Graviton,我用 AI 工具几分钟搞定了迁移评估
aws
亚马逊云开发者2 天前
用 Kiro CLI 做 Agent 后端,1000 行代码搞定飞书 AI 聊天机器人
aws