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

7 阅读3分钟

开了 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 都能发现。

一行命令开启

aws guardduty create-detector --enable --finding-publishing-frequency FIFTEEN_MINUTES

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

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

开额外保护模块

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

# 先拿 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

# 创建通知主题
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)

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)

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

# 列出最近的 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 天免费试用。