通过单个资源使用 CLI 进行 AWS Discovery API 调用
编辑通过单个资源使用 CLI 进行 AWS Discovery API 调用
编辑检测当单个 AWS 资源在 10 秒的时间窗口内运行多个 Describe
和 List
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 调用(Describe
、List
或 Get
操作)。大量此类调用可能表明有人试图出于侦察目的枚举 AWS 基础设施,这通常是使用泄露的凭据或未经授权的访问的攻击者所使用的策略。
可能的调查步骤
- 识别攻击者和资源:
-
用户身份和资源: 检查
aws.cloudtrail.user_identity.arn
以识别发出发现请求的攻击者。验证与这些操作关联的用户或资源,以确保它们被识别并且是预期的。 -
用户代理和工具: 检查
user_agent.name
以确认是否使用了aws-cli
工具来执行这些请求。在非典型上下文中使用 CLI 可能表明存在未经授权或自动化的访问。 - 评估 API 调用的上下文和范围:
-
API 操作类型: 查看
event.action
下的特定操作,例如Describe*
、List*
或Get*
等 API 调用。注意这些调用是否以敏感服务(如EC2
、IAM
或S3
)为目标,这可能表明有人试图识别高价值资产。 -
时间模式分析: 查看
time_window
和unique_api_count
,以评估这些调用的频率是否与此资源或用户的正常模式一致。 - 分析潜在的泄露指标:
-
身份类型: 查看
aws.cloudtrail.user_identity.type
,以确定调用是否来自承担的角色、根用户或服务角色。对于发现操作而言,不寻常的身份类型可能表明存在误用或泄露。 -
源 IP 和地理位置: 检查
source.ip
和source.geo
字段,以识别与活动关联的任何不寻常的 IP 地址或位置,这可能有助于确认或排除外部访问。 - 检查相关的 CloudTrail 事件:
-
查找相关事件: 识别与同一攻击者 ARN 相关的任何其他 IAM 或 CloudTrail 事件。在这些发现调用附近进行的活动(例如
AssumeRole
、GetSessionToken
或CreateAccessKey
)可能表示试图升级权限。 - 查找异常模式: 确定此攻击者或资源之前是否执行过类似发现操作,或者这些操作是否与凭据使用或权限升级相关的其他告警同时发生。
误报分析
- 预期发现活动: 安全、自动化或监视脚本可能会定期进行发现或枚举 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
-
战术
- 名称: 发现
- ID: TA0007
- 参考 URL: https://attack.mitre.org/tactics/TA0007/
-
技术
- 名称: 云基础设施发现
- ID: T1580
- 参考 URL: https://attack.mitre.org/techniques/T1580/