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 实例显示出受损迹象,存在可疑的出站流量和意外的进程活动;团队必须隔离该实例,并为取证分析保留易失性内存和非易失性磁盘证据,同时不能破坏审计跟踪。
推荐方法:
- 使用 Auto Scaling 和 ELB API 将实例从目标组中分离并暂停 Auto Scaling 进程,然后应用一个限制性安全组(拒绝所有入站/出站流量),并更新实例的网络 ACL 规则以隔离网络访问,同时通过 AWS Systems Manager Session Manager 保留管理权限。
- 使用 AWS Systems Manager Run Command 执行客户机内内存捕获(例如,LiME),将 RAM 转储写入一个附加的、加密的 EBS 卷,或直接写入一个使用 SSE-KMS 加密并启用了 S3 对象锁以进行保留的 S3 存储桶。
- 使用 EC2 CreateSnapshot(或 CreateImage)捕获所有附加卷的时间点 EBS 快照,然后将这些快照复制到另一个 AWS 账户或区域,以维护监管链并防止篡改。
- 为实例的 ENI 启用或检索 VPC Traffic Mirroring,以将数据包捕获到专用的监控 EC2,并同时将 VPC Flow Logs、ELB 访问日志、CloudTrail、CloudWatch Logs 和 GuardDuty 发现结果导出到安全的 S3 归档中。
- 在 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:Decrypt、kms:CreateGrant 和 kms: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>.ssm、com.amazonaws.<region>.ssmmessages 和 com.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: []
证据保全顺序
取证价值会从最易失的数据到最不易失的数据依次递减,因此操作顺序是固定且不可协商的:
首先启用终止保护。 设置
DisableApiTermination=true可以防止 Auto Scaling 事件、操作员失误或计划操作在调查过程中销毁实例。同时,将实例从其 Auto Scaling 组中分离,以免 ASG 的健康检查将其替换。从 Auto Scaling 分离或保护。 使用
EnterStandby或分离实例,这样 ASG 就不会因其不健康而终止它。为每个挂载的 EBS 卷创建快照。
CreateSnapshot(或用于多卷原子捕获的CreateSnapshots)可生成不可变、加密的取证制品。为快照添加标签,注明事件 ID、源实例 ID、时间戳和分析师。将快照复制到由安全团队拥有的专用取证账户中,以确保在账户被攻破后快照依然存在。捕获内存。 使用 SSM
RunCommand文档调用内存采集工具(Linux 上的 LiME、AVML;Windows 上的 WinPMEM),并将内存镜像以流式传输方式上传到启用了合规模式 Object Lock 的 S3 取证存储桶中。内存必须在实例仍在运行时捕获——已停止的实例没有内存可供采集。收集元数据。 记录实例 ID、AMI、IAM 实例配置文件、VPC/子网、ENI ID、标签、运行中的进程列表、
netstat输出以及 IMDS 内容。为实例打上Status=Quarantined和IncidentId=<id>标签,以便下游的自动化流程和操作人员能够识别其状态。仅当调查需要离线磁盘分析时,才停止实例。 停止操作会清除内存,因此这永远是最后一步。
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.guardduty,detail-type 为 GuardDuty 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 标签的实例,并且只授予事件响应角色。
常见陷阱及其失败原因
首先停止或终止实例。 停止操作会释放内存、终止活动连接,并导致无法捕获易失性构件。终止操作还会释放根卷(除非
DeleteOnTermination=false),即便如此,您仍会丢失运行时状态。在进行任何电源状态更改之前,务必先就地隔离。在 NACL 更快的情况下仅依赖安全组。 SG 的更改是精确的,但只影响其附加的 ENI,且只管理新的流量。当子网中的多个实例受到牵连,或者必须立即切断攻击者现有的出站会话时,子网级别的 NACL 拒绝规则能更快地关闭通道,因为 NACL 是无状态的,会阻止每个数据包,而不管其先前的状态如何。
在创建快照前进行修复。 在创建 EBS 快照之前对实例进行重置镜像、修补或替换,会破坏磁盘上的证据——例如恶意软件二进制文件、持久化机制、日志和时间戳。快照成本低廉且不可变;在采取任何修复措施之前先创建快照,并将其复制到专用的取证账户,这样即使生产账户被攻破也无法删除它们。
实践问题:用例场景
场景: Meridian Financial 公司运行一个多账户 AWS 环境,其生产工作负载位于一个专用账户中:托管客户数据的 EC2 和 EKS 服务、用于归档的 S3 存储桶、一个启用了 CloudTrail、GuardDuty、Security Hub 和 Config 的安全账户用于集中式日志记录,以及一个用于部署的 CI/CD 管道。他们的运营团队使用 Systems Manager 进行补丁和维护,并使用 Route 53/ALB 作为公共端点。
挑战: 一个 GuardDuty 发现项和意外的出站流量激增表明,一个 EC2 实例可能已被攻破,正在进行数据窃取和可疑的 IAM API 调用,需要立即进行隔离,同时保留取证证据并维持可审计的调查员访问权限。
推荐方法:
- 根据 GuardDuty 发现项,通过 EventBridge 触发立即隔离,调用一个 Step Functions 工作流。该工作流使用 Lambda/SSM Automation 来附加一个隔离安全组,移除公有 IP 或分离 ENI,并通过 IAM 撤销/轮换受牵连的 IAM 凭证。
- 通过执行 SSM Automation 文档来保留易失性和持久性证据,包括创建实例的 EBS 快照和 AMI,将快照复制到专用的取证 AWS 账户,并将导出的构件存储在启用了 S3 对象锁(合规模式)和 KMS 加密的 S3 存储桶中。
- 捕获日志以进行数据窃取和 C2 分析,确保已启用 CloudTrail 管理事件和数据事件(S3、Lambda),将 VPC Flow Logs、ALB/NGINX 访问日志和 Route 53 查询日志转发到中央安全账户,并将该发现项提升到 Amazon Detective 进行时间线关联分析。
- 使用 EventBridge -> Step Functions -> Lambda 来自动化编排和通知,以协调隔离、证据复制、向事件负责人发送 SNS 通知,并在现有的 ITSM 系统中创建工单。
- 提供受控的取证访问,要求使用 AWS Systems Manager Session Manager 进行实时调查会话,并将所有会话日志记录到 CloudWatch Logs 和取证 S3 存储桶中。访问权限仅授予指定的、启用了 MFA 并使用临时凭证的取证 IAM 角色。
基本原理: 该方法能快速隔离威胁,保留不可变的构件和集中式日志以供分析,自动化可重复的响应步骤以缩短遏制时间,并根据 AWS 最佳实践,通过 Session Manager 强制执行可审计的、最小权限的取证访问。
练习这些题目 → · 在 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.
通过考试 →