使用外部KMS密钥加密AWS S3对象

编辑

识别S3存储桶中使用来自外部账户的AWS KMS密钥进行加密的CopyObject事件。拥有错误配置的S3存储桶访问权限和相应权限的攻击者可能会使用外部KMS密钥加密对象,从而拒绝受害者访问其自身数据。

规则类型: esql

规则索引: 无

严重性: 中等

风险评分: 47

每隔: 5分钟

搜索索引时间范围: now-9m (日期数学格式,另请参阅 额外回溯时间)

每次执行的最大告警数: 100

参考资料:

标签:

  • 领域: 云
  • 数据源: AWS
  • 数据源: Amazon Web Services
  • 数据源: AWS S3
  • 数据源: AWS KMS
  • 用例: 威胁检测
  • 战术: 影响

版本: 2

规则作者:

  • Elastic

规则许可证: Elastic License v2

调查指南

编辑

分类和分析

调查使用外部KMS密钥加密AWS S3对象

此规则检测使用外部AWS KMS密钥加密S3存储桶中对象的事件。拥有错误配置的S3存储桶访问权限的攻击者可能会使用外部密钥复制存储桶中的对象,并阻止受害者访问其自身数据。此规则使用 ES|QL 来查找使用CopyObject操作的事件,其中目标存储桶的cloud.account.id与从用于加密的AWS KMS密钥中提取的key.account.id不同。

可能的调查步骤

  • 识别攻击者: 检查aws.cloudtrail.user_identity.arnaws.cloudtrail.user_identity.access_key_id字段以识别执行该操作的用户。验证此攻击者是否通常执行此类操作,以及他们是否拥有必要的权限。
  • 审查请求详细信息: 检查aws.cloudtrail.request_parameters以了解CopyObject操作的具体细节。查找可能暗示未经授权或恶意修改或使用未知KMS keyId的任何异常参数。
  • 分析请求来源: 检查source.ipsource.geo字段以确定请求的地理来源。外部或意外位置可能表明凭据被泄露或未经授权的访问。
  • 结合时间戳进行分析: 使用@timestamp字段检查对象复制的时间。在非工作时间或常规维护窗口之外进行的更改可能需要进一步审查。
  • 与其他活动相关联: 在此操作之前和之后搜索相关的CloudTrail事件,以查看相同的攻击者或IP地址是否参与了其他可能可疑的活动。
  • 检查对象删除或访问: 查找针对相同S3存储桶的DeleteObjectDeleteObjectsGetObject API调用,这些调用可能表明攻击者正在访问和销毁对象,包括较旧的对象版本。
  • 采访相关人员: 如果复制事件是由用户发起的,请与负责管理S3存储桶的人员或团队核实此操作的意图和授权。

误报分析

  • 合法的管理操作: 确认CopyObject操作是否与计划更新、维护活动或变更管理系统中记录的合法管理任务一致。
  • 一致性检查: 将操作与用户或组织执行的类似活动的历史数据进行比较。如果操作与过去的合法活动一致,则可能表明这是一个误报。

响应和补救措施

  • 立即审查: 如果活动未经授权,请搜索S3存储桶中放置的潜在勒索软件提示,并查看存储桶的访问日志以查找任何可疑活动。
  • 增强监控和告警: 调整监控系统以针对类似的CopyObject操作发出告警,尤其是涉及敏感数据或异常文件扩展名的操作。
  • 教育和培训: 为拥有管理权限的用户提供额外的培训,让他们了解有关S3存储桶管理的安全最佳实践以及勒索软件风险的重要性。
  • 审核S3存储桶策略和权限: 对所有S3存储桶策略和关联的权限进行全面审核,以确保它们符合最小权限原则。
  • 事件响应: 如果有恶意意图或安全漏洞的迹象,请启动事件响应协议以减轻任何损害并防止将来发生类似事件。

其他信息

有关管理S3存储桶安全和防范勒索软件的更多指南,请参阅 AWS S3文档 和AWS安全最佳实践。此外,请参阅以下资源以获取有关S3勒索软件防护的具体详细信息: - ERMETIC报告 - AWS S3勒索软件暴露于野外 - S3勒索软件第1部分:攻击向量

设置

编辑

需要在CloudTrail跟踪配置中启用AWS S3数据事件类型。

规则查询

编辑
from logs-aws.cloudtrail-* metadata _id, _version, _index

// any successful copy event
| where event.dataset == "aws.cloudtrail"
    and event.provider == "s3.amazonaws.com"
    and event.action == "CopyObject"
    and event.outcome == "success"

// abstract key account id, key id, encrypted object bucket name and object name
| dissect aws.cloudtrail.request_parameters "{%{?bucketName}=%{target.bucketName},%{?x-amz-server-side-encryption-aws-kms-key-id}=%{?arn}:%{?aws}:%{?kms}:%{?region}:%{key.account.id}:%{?key}/%{keyId},%{?Host}=%{?tls.client.server_name},%{?x-amz-server-side-encryption}=%{?server-side-encryption},%{?x-amz-copy-source}=%{?bucket.objectName},%{?key}=%{target.objectName}}"

// filter for s3 objects whose account id is different from the encryption key's account id
// add exceptions based on key.account.id or keyId for known external accounts or encryption keys
| where cloud.account.id != key.account.id

// keep relevant fields
| keep @timestamp, aws.cloudtrail.user_identity.arn, cloud.account.id, event.action, target.bucketName, key.account.id, keyId, target.objectName

框架: MITRE ATT&CKTM