New

The executive guide to generative AI

Read more

通过单个资源使用 CLI 进行 AWS Discovery API 调用

编辑

通过单个资源使用 CLI 进行 AWS Discovery API 调用

编辑

检测当单个 AWS 资源在 10 秒的时间窗口内运行多个 DescribeList API 调用时。此行为可能表明攻击者正在尝试使用泄露的凭证或受损实例来发现 AWS 基础设施。攻击者可能会使用此信息来识别进一步利用的潜在目标,或更好地了解目标的基础设施。

规则类型: esql

规则索引: 无

严重性: 低

风险评分: 21

运行频率: 5 分钟

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

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

参考:

标签:

  • 域: 云
  • 数据源: AWS
  • 数据源: AWS EC2
  • 数据源: AWS IAM
  • 数据源: AWS S3
  • 用例: 威胁检测
  • 战术: 发现

版本: 1

规则作者:

  • Elastic

规则许可证: Elastic License v2

调查指南

编辑

分类和分析

调查通过单个资源使用 CLI 进行的 AWS Discovery API 调用

此规则检测到在短时间窗口(30 秒)内,来自单个 AWS 资源的多个与发现相关的 API 调用(DescribeListGet 操作)。大量此类调用可能表明有人试图出于侦察目的枚举 AWS 基础设施,这通常是使用泄露的凭据或未经授权的访问的攻击者所使用的策略。

可能的调查步骤

  • 识别攻击者和资源:
  • 用户身份和资源: 检查 aws.cloudtrail.user_identity.arn 以识别发出发现请求的攻击者。验证与这些操作关联的用户或资源,以确保它们被识别并且是预期的。
  • 用户代理和工具: 检查 user_agent.name 以确认是否使用了 aws-cli 工具来执行这些请求。在非典型上下文中使用 CLI 可能表明存在未经授权或自动化的访问。
  • 评估 API 调用的上下文和范围:
  • API 操作类型: 查看 event.action 下的特定操作,例如 Describe*List*Get* 等 API 调用。注意这些调用是否以敏感服务(如 EC2IAMS3)为目标,这可能表明有人试图识别高价值资产。
  • 时间模式分析: 查看 time_windowunique_api_count,以评估这些调用的频率是否与此资源或用户的正常模式一致。
  • 分析潜在的泄露指标:
  • 身份类型: 查看 aws.cloudtrail.user_identity.type,以确定调用是否来自承担的角色、根用户或服务角色。对于发现操作而言,不寻常的身份类型可能表明存在误用或泄露。
  • 源 IP 和地理位置: 检查 source.ipsource.geo 字段,以识别与活动关联的任何不寻常的 IP 地址或位置,这可能有助于确认或排除外部访问。
  • 检查相关的 CloudTrail 事件:
  • 查找相关事件: 识别与同一攻击者 ARN 相关的任何其他 IAM 或 CloudTrail 事件。在这些发现调用附近进行的活动(例如 AssumeRoleGetSessionTokenCreateAccessKey)可能表示试图升级权限。
  • 查找异常模式: 确定此攻击者或资源之前是否执行过类似发现操作,或者这些操作是否与凭据使用或权限升级相关的其他告警同时发生。

误报分析

  • 预期发现活动: 安全、自动化或监视脚本可能会定期进行发现或枚举 API 调用,以维护资源清单。验证此活动是否与已知的自动化或清单任务一致。
  • 例行管理或自动化访问: 如果特定角色或资源(例如自动化工具或监视服务)定期触发此规则,请考虑为这些已知良性用户添加例外,以减少误报。

响应和修复

  • 确认授权访问: 如果发现活动似乎未经授权,请考虑立即采取措施限制用户或资源的权限。
  • 审查和删除未经授权的 API 调用: 如果攻击者未被授权执行发现操作,请调查并可能禁用其权限或访问密钥,以防止进一步滥用。
  • 增强对发现模式的监视: 考虑对高频发现 API 调用添加额外的日志记录或告警,尤其是在从新的或无法识别的资源触发时。
  • 策略审查和更新: 审查与攻击者关联的 IAM 策略,确保尽可能采取限制性权限和 MFA 强制措施,以防止未经授权的发现。

其他信息

有关 AWS 基础设施发现和最佳实践的更多指南,请参阅 AWS CloudTrail 文档和 MITRE ATT&CK 的 云基础设施发现

规则查询

编辑
from logs-aws.cloudtrail*

// create time window buckets of 10 seconds
| eval time_window = date_trunc(10 seconds, @timestamp)
| where
    event.dataset == "aws.cloudtrail"

    // filter on CloudTrail audit logs for IAM, EC2, and S3 events only
    and event.provider in (
      "iam.amazonaws.com",
      "ec2.amazonaws.com",
      "s3.amazonaws.com",
      "rds.amazonaws.com",
      "lambda.amazonaws.com",
      "dynamodb.amazonaws.com",
      "kms.amazonaws.com",
      "cloudfront.amazonaws.com",
      "elasticloadbalancing.amazonaws.com",
      "cloudfront.amazonaws.com"
    )

    // ignore AWS service actions
    and aws.cloudtrail.user_identity.type != "AWSService"

    // filter for aws-cli specifically
    and user_agent.name == "aws-cli"

    // exclude DescribeCapacityReservations events related to AWS Config
    and not event.action in ("DescribeCapacityReservations")

// filter for Describe, Get, List, and Generate API calls
| where true in (
    starts_with(event.action, "Describe"),
    starts_with(event.action, "Get"),
    starts_with(event.action, "List"),
    starts_with(event.action, "Generate")
)
// extract owner, identity type, and actor from the ARN
| dissect aws.cloudtrail.user_identity.arn "%{}::%{owner}:%{identity_type}/%{actor}"
| where starts_with(actor, "AWSServiceRoleForConfig") != true
| keep @timestamp, time_window, event.action, aws.cloudtrail.user_identity.arn
| stats
    // count the number of unique API calls per time window and actor
    unique_api_count = count_distinct(event.action) by time_window, aws.cloudtrail.user_identity.arn

// filter for more than 5 unique API calls per time window
| where unique_api_count > 5

// sort the results by the number of unique API calls in descending order
| sort unique_api_count desc

框架: MITRE ATT&CKTM

Was this helpful?
Feedback