Amazon SCS-C02: 事件响应与取证 — 学习指南

属于 AWS Security Specialty SCS-C02 — 学习指南. 使用经过验证的答案练习: Amazon 考试中心, 或参加限时模拟考试: ExamRoll.io.

隔离受感染的 EC2 实例

当怀疑 EC2 实例遭到入侵时,首要的操作目标是在不破坏证据的情况下进行遏制。在 AWS 上,遏制是一项分层活动,涉及实例的网络暴露、其生命周期绑定以及响应人员的可访问性。

典型的隔离顺序始于收紧实例的安全组。由于每个实例最好都有自己专用的安全组,因此您可以将入站和出站规则替换为仅允许取证团队(或专用的诊断安全组)访问它的最小规则集。如果实例位于 Application Load Balancer 之后或目标组中,请先将其注销;如果它是 Auto Scaling 组的成员,请使用 --should-decrement-desired-capacity 标志将其分离,这样 ASG 就不会立即启动替代实例,或者更糟的是,在调查中途终止“不健康”的实例。

aws autoscaling detach-instances \
  --instance-ids i-0abc123 \
  --auto-scaling-group-name web-asg \
  --should-decrement-desired-capacity

aws elbv2 deregister-targets \
  --target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/web/abc \
  --targets Id=i-0abc123

aws ec2 modify-instance-attribute \
  --instance-id i-0abc123 \
  --disable-api-termination

启用终止保护至关重要,因为一个善意的操作员、一个自动化脚本或一个 ASG 缩容事件都可能销毁您试图保留的卷。终止保护不能替代从 ASG 中分离——除非您同时将实例从组的范围中移除,否则 ASG 仍然可以在缩容期间终止受保护的实例。

对于需要立即切断出口流量的子网级遏制(例如,实例向已知的恶意 IP 发送信标),您可以将一条显式的“全部拒绝”出站规则作为编号最小的规则添加到子网的网络 ACL 中。这是无状态的,并立即对所有流量生效,不像安全组的更改只影响流量。一旦通过诊断性 SG 建立了您的取证访问路径,就可以移除 NACL 的拒绝规则,以便响应者子网可以通过 SG 的允许列表访问目标。

保存易失性和非易失性证据

易失性证据——进程列表、打开的网络套接字、加载的内核模块、内存内容、tmpfs 内容——在实例停止的瞬间就会被销毁。非易失性证据存在于 EBS 上,可以在停止/启动后幸存,但如果卷被分离或实例在没有快照的情况下被终止,仍然可能会丢失。顺序规则是:首先在实例仍在运行时收集易失性工件,然后对 EBS 进行快照。

易失性证据的收集应该通过 SSM Run Command 编写脚本并执行,而不是由人在交互式 shell 中手动输入命令。Run Command 会在 CloudWatch Logs 或 S3 中记录调用、参数、执行主体和输出,这本身就成为监管链记录的一部分。

实际问题:用例场景

场景: Meridian Financial 在单个 AWS 账户中跨多个 VPC 运行其面向客户的 Web 应用程序,使用 Application Load Balancer 后面的 Auto Scaling 组、基于 EBS 的 EC2 实例、集中的 CloudTrail 和 CloudWatch 日志、GuardDuty,以及一个使用 KMS 加密的基于 S3 的日志归档。安全运营团队使用 AWS Systems Manager 进行远程管理,并将备份和快照存储在指定的恢复账户中。

挑战: 一个生产环境的 EC2 实例显示出受损迹象,存在可疑的出站流量和意外的进程活动;团队必须隔离该实例,并为取证分析保留易失性内存和非易失性磁盘证据,同时不能破坏审计跟踪。

推荐方法:

  1. 使用 Auto Scaling 和 ELB API 将实例从目标组中分离并暂停 Auto Scaling 进程,然后应用一个限制性安全组(拒绝所有入站/出站流量),并更新实例的网络 ACL 规则以隔离网络访问,同时通过 AWS Systems Manager Session Manager 保留管理权限。
  2. 使用 AWS Systems Manager Run Command 执行客户机内内存捕获(例如,LiME),将 RAM 转储写入一个附加的、加密的 EBS 卷,或直接写入一个使用 SSE-KMS 加密并启用了 S3 对象锁以进行保留的 S3 存储桶。
  3. 使用 EC2 CreateSnapshot(或 CreateImage)捕获所有附加卷的时间点 EBS 快照,然后将这些快照复制到另一个 AWS 账户或区域,以维护监管链并防止篡改。
  4. 为实例的 ENI 启用或检索 VPC Traffic Mirroring,以将数据包捕获到专用的监控 EC2,并同时将 VPC Flow Logs、ELB 访问日志、CloudTrail、CloudWatch Logs 和 GuardDuty 发现结果导出到安全的 S3 归档中。
  5. 在 AWS Security Hub 或工单系统中对所有收集到的工件进行标记和盘点,确保 S3 对象已加密并设置了对象锁,并将 IAM 访问权限限制在一个小型的取证团队,同时通过 CloudTrail 记录所有访问。

基本原理: 在制作镜像前隔离网络访问可防止进一步污染,而使用 SSM 可避免开放新的网络途径;首先捕获易失性内存,然后创建不可变的 EBS 快照和安全的 S3 归档,这符合 AWS 事件响应最佳实践,能够保护证据的完整性和监管链。

# ssm-document: capture-volatile.yml
schemaVersion: '2.2'
description: Collect volatile artifacts from a suspect Linux host
mainSteps:
  - action: aws:runShellScript
    name: volatileCapture
    inputs:
      runCommand:
        - TS=$(date +%s)
        - mkdir -p /var/ir/$TS && cd /var/ir/$TS
        - ps auxfww > processes.txt
        - ss -tanp > sockets.txt
        - lsof -n > openfiles.txt
        - cat /proc/mounts > mounts.txt
        - lsmod > modules.txt
        - dd if=/dev/mem of=mem.raw bs=1M 2>/dev/null || true
        - aws s3 cp . s3://ir-evidence-bucket/$INSTANCE_ID/$TS/ --recursive

在捕获易失性证据后,立即为每个附加的 EBS 卷创建快照。用事件标识符标记快照,以便它们明确地与该案件关联。

aws ec2 create-snapshot \
  --volume-id vol-0def456 \
  --description "IR-2024-0917 root volume i-0abc123" \
  --tag-specifications 'ResourceType=snapshot,Tags=[
     {Key=IncidentId,Value=IR-2024-0917},
     {Key=SourceInstance,Value=i-0abc123},
     {Key=Handler,Value=jdoe}]'

为实例本身打上相同的事件工单号、调查员姓名以及状态标签(如 Quarantine)。一致的元数据标签是 AWS 原生的监管链机制——它可通过 IAM 条件键变得不可变、可查询,并出现在关于该资源的每个 CloudTrail 事件中。

使用 Session Manager 和 Run Command 进行实时响应

一个细微但对考试至关重要的点:现有的 SSH 会话在安全组规则被移除后仍然存活。 安全组是有状态的,在连接建立时评估规则;一个已经建立的 TCP 会话即使在允许其建立的入站规则被删除后,仍然会继续通信。如果响应人员在隔离实例时移除了安全组规则,同时又依赖自己的 SSH 会话进行访问,那么该会话会继续工作——直到它断开连接。届时,响应人员将被锁定在外,任何通过堡垒机或密钥的重新进入都将变得不可能。

正确的模式是通过 SSM Session Manager 授予取证团队访问权限,这不需要开放任何入站端口。Session Manager 通过 SSM Agent 与 SSM、EC2 Messages 和 SSM Messages 端点的出站连接工作(理想情况下通过 VPC 接口端点,这样被隔离的实例就不需要互联网路由)。附加一个允许 ssm:UpdateInstanceInformation 和消息 API 的实例配置文件,并授予响应人员 ssm:StartSession 权限,通过标签将范围限定在被隔离的实例上。

由于 Session Manager 会话是由 SSM 控制平面代理的,因此收紧或完全清空安全组的入站规则不会干扰它们,并且每一次键盘输入都可以记录到 S3 或 CloudWatch Logs 中——这是一个可审计的交互式会话,而不是一个黑盒。

加密快照的跨账户恢复

成熟的环境会将取证快照传送到一个专用的取证账户中,该账户与受陷的工作负载账户隔离。跨账户共享快照需要两件事:快照必须与目标账户共享(modify-snapshot-attribute --create-volume-permission),并且如果快照是用客户管理的 KMS 密钥加密的,那么 KMS 密钥策略必须授予取证账户主体 kms:Decryptkms:CreateGrantkms:DescribeKey 权限。使用 AWS 管理的 aws/ebs 密钥加密的快照不能跨账户共享——您必须先通过复制操作使用 CMK 对其进行重新加密。在取证账户中,复制共享的快照并使用本地取证 CMK 对其重新加密,这样后续创建卷的操作就不会依赖于源账户。

行动指南设计与最小化开销

将遏制步骤代码化为 SSM Automation 文档或 Step Functions 工作流,由 GuardDuty 或 Security Hub 的发现通过 EventBridge 触发。一个自动化流程应完成:(1) 通过 Run Command 捕获易失性数据,(2) 为卷创建带有事件标签的快照,(3) 启用终止保护,(4) 从 ASG 分离并从 ELB 目标注销,(5) 用隔离安全组替换原有安全组,以及 (6) 用工单 ID 标记实例。保持实例运行可以保留实时证据,并能通过 Session Manager 进行交互式调查——关机应该是一个刻意的后续步骤,而不是自动遏制的一部分,因为关机会清除易失性证据,并可能触发嵌入在恶意软件中的清理逻辑。

需要内化的陷阱:在信任现有 SSH 会话的同时移除安全组规则,会让响应人员陷入盲目,并对隔离产生错误的信心;在创建快照前执行原位修复会破坏能回答入侵如何发生的痕迹;将实例留在其 ASG 或目标组中,会招致自动终止,或者更糟的是,会发生隐藏事件范围的静默替换。

立即遏制

当怀疑某个工作负载遭到入侵时,首要决策是就地隔离还是将其移出服务。将其移出服务——即停止或终止——会销毁易失性证据,例如 RAM 内容、运行中的进程、打开的套接字,以及任何仅存活于内存中的恶意软件。就地遏制几乎总是正确的起手式,而且必须足够快,以防止攻击者在控制措施生效前窃取更多数据或进行横向移动。

两种 AWS 原生控制措施在不同层面运作,区分它们很重要。安全组是有状态的,附加到弹性网络接口 (ENI);网络 ACL (NACL) 是无状态的,附加到子网。用一个锁定的“隔离”安全组替换实例的安全组是一种手术刀式的方法——它隔离一个 ENI 而不干扰同一子网中的其他工作负载,并保留实例的运行时状态。然而,安全组的变更只影响到达 ENI 的流量,如果被入侵的实例已经保持着长时间的出站连接,现有的状态可能会持续存在。NACL 的拒绝规则在子网边界立即生效,当速度比精确性更重要时,它可以更快地切断流量——例如,当同一子网中的多个实例都受到牵连,或者当必须立即切断攻击者的活动会话时。当策略禁止直接修改实例时,NACL 也很有用。

标准的隔离安全组允许入站流量,而出站流量仅允许通往 com.amazonaws.<region>.ssmcom.amazonaws.<region>.ssmmessagescom.amazonaws.<region>.ec2messages 的 VPC 接口端点。这在保留 Systems Manager Session Manager 访问权限的同时,阻止了 C2 通道、数据泄露和横向移动。

QuarantineSG:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: Forensic quarantine - SSM only
    VpcId: !Ref VpcId
    SecurityGroupEgress:
      - IpProtocol: tcp
        FromPort: 443
        ToPort: 443
        DestinationPrefixListId: !Ref SsmEndpointPrefixList
    SecurityGroupIngress: []

证据保全顺序

取证价值会从最易失的数据到最不易失的数据依次递减,因此操作顺序是固定且不可协商的:

aws ec2 modify-instance-attribute --instance-id i-0abc --disable-api-termination
aws autoscaling enter-standby --instance-ids i-0abc \
    --auto-scaling-group-name app-asg --should-decrement-desired-capacity
aws ec2 create-snapshots --instance-specification InstanceId=i-0abc \
    --description "IR-2024-071 forensic" --copy-tags-from-source volume
aws ssm send-command --instance-ids i-0abc \
    --document-name "AWS-RunShellScript" \
    --parameters 'commands=["avml /tmp/mem.lime && aws s3 cp /tmp/mem.lime s3://forensics-bucket/"]'

自动化事件响应工作流

GuardDuty 的发现结果应在数秒内(而非数小时)触发遏制措施。典型的处理流程是 EventBridge → Lambda → SSM Automation,并使用 SNS 进行通知。

一条 EventBridge 规则匹配 source: aws.guarddutydetail-typeGuardDuty Finding,并使用模式筛选与 EC2 相关的发现类型,例如 UnauthorizedAccess:EC2/*Backdoor:EC2/*Trojan:EC2/*CryptoCurrency:EC2/*

{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"],
  "detail": {
    "type": [{"prefix": "UnauthorizedAccess:EC2/"},
             {"prefix": "Backdoor:EC2/"},
             {"prefix": "Trojan:EC2/"}]
  }
}

作为目标的 Lambda 函数从 detail.resource.instanceDetails.instanceId 中提取实例 ID,然后调用一个 SSM Automation 文档(或直接调用 SDK)来执行以下操作:启用终止保护、通过 ModifyNetworkInterfaceAttribute 将 ENI 的安全组替换为隔离 SG、为所有挂载的卷创建快照、为实例添加标签,并向 SOC 渠道发布一条 SNS 消息。与直接调用原生 SDK 相比,使用 SSM Automation 能在 Automation 执行历史记录中提供分步审计跟踪。

用于分析数据外泄和 C2 的日志记录

没有遥测数据的遏制措施无异于猜测。必须在 VPC 或子网级别启用 VPC 流日志,并将流量类型设置为 ALL(包括 ACCEPT 和 REJECT)。REJECT 记录可以揭示扫描行为、被阻止的数据外泄尝试以及试图连接已知恶意 IP 的 C2 信标;ACCEPT 记录则显示哪些流量成功通过。将流日志路由到 CloudWatch Logs 以进行实时查询,并路由到 S3 以便通过 Object Lock 进行长期保留。对取证 S3 存储桶和 KMS 启用 CloudTrail 数据事件,可为证据处理提供审计链。结合 DNS 查询日志记录(Route 53 Resolver),可以捕获仅靠流日志会错过的 DGA 和 DNS 隧道攻击。

通过 Session Manager 进行受控的取证访问

Session Manager 无需使用 SSH 密钥、堡垒机或开放 22/3389 端口,这正是隔离 SG 可以阻止所有传统访问方式的原因。启用会话日志记录,将其发送到使用 SSE-KMS 加密的 S3 存储桶和 CloudWatch Logs;在会话首选项中强制执行 EnforceEncryption=true,以确保没有任何会话在没有 TLS 和日志加密的情况下运行。针对 ssm:StartSession 的 IAM 策略应将范围限定于带有 tag:Status=Quarantined 标签的实例,并且只授予事件响应角色。

常见陷阱及其失败原因

实践问题:用例场景

场景: Meridian Financial 公司运行一个多账户 AWS 环境,其生产工作负载位于一个专用账户中:托管客户数据的 EC2 和 EKS 服务、用于归档的 S3 存储桶、一个启用了 CloudTrail、GuardDuty、Security Hub 和 Config 的安全账户用于集中式日志记录,以及一个用于部署的 CI/CD 管道。他们的运营团队使用 Systems Manager 进行补丁和维护,并使用 Route 53/ALB 作为公共端点。

挑战: 一个 GuardDuty 发现项和意外的出站流量激增表明,一个 EC2 实例可能已被攻破,正在进行数据窃取和可疑的 IAM API 调用,需要立即进行隔离,同时保留取证证据并维持可审计的调查员访问权限。

推荐方法:

  1. 根据 GuardDuty 发现项,通过 EventBridge 触发立即隔离,调用一个 Step Functions 工作流。该工作流使用 Lambda/SSM Automation 来附加一个隔离安全组,移除公有 IP 或分离 ENI,并通过 IAM 撤销/轮换受牵连的 IAM 凭证。
  2. 通过执行 SSM Automation 文档来保留易失性和持久性证据,包括创建实例的 EBS 快照和 AMI,将快照复制到专用的取证 AWS 账户,并将导出的构件存储在启用了 S3 对象锁(合规模式)和 KMS 加密的 S3 存储桶中。
  3. 捕获日志以进行数据窃取和 C2 分析,确保已启用 CloudTrail 管理事件和数据事件(S3、Lambda),将 VPC Flow Logs、ALB/NGINX 访问日志和 Route 53 查询日志转发到中央安全账户,并将该发现项提升到 Amazon Detective 进行时间线关联分析。
  4. 使用 EventBridge -> Step Functions -> Lambda 来自动化编排和通知,以协调隔离、证据复制、向事件负责人发送 SNS 通知,并在现有的 ITSM 系统中创建工单。
  5. 提供受控的取证访问,要求使用 AWS Systems Manager Session Manager 进行实时调查会话,并将所有会话日志记录到 CloudWatch Logs 和取证 S3 存储桶中。访问权限仅授予指定的、启用了 MFA 并使用临时凭证的取证 IAM 角色。

基本原理: 该方法能快速隔离威胁,保留不可变的构件和集中式日志以供分析,自动化可重复的响应步骤以缩短遏制时间,并根据 AWS 最佳实践,通过 Session Manager 强制执行可审计的、最小权限的取证访问。


容器与 Serverless 安全 · 所有领域

练习这些题目 → · 在 ExamRoll.io 上限时练习 →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

通过考试 →

浏览 Amazon →

Related guides

一体化访问

一次订阅。所有考试。

所有计划均可无限制搜索答案、进行模拟测试、获取AI解释以及访问完整的资源库 — 支持20多种语言。

每月
24.87
Just €0.83/day
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

最具价值
12个月
179.87
Just €0.49/daySave 40%
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

✓ 包含免费计划 · ✓ 随时取消 · ✓ 所有计划均解锁完整产品