为 Root 添加的 AWS IAM 登录配置文件

编辑

为 Root 添加的 AWS IAM 登录配置文件

编辑

检测何时为 root 用户账户添加了 AWS IAM 登录配置文件,且该配置文件是自行分配的。攻击者在临时访问 root 账户的情况下,可能会为 root 用户账户添加登录配置文件,以维持访问权限,即使原始访问密钥被轮换或禁用。

规则类型: esql

规则索引: 无

严重性: 高

风险评分: 73

运行频率: 5 分钟

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

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

参考: 无

标签:

  • 域:云
  • 数据源:AWS
  • 数据源:Amazon Web Services
  • 数据源:AWS IAM
  • 用例:身份和访问审计
  • 策略:持久化
  • 资源:调查指南

版本: 1

规则作者:

  • Elastic

规则许可证: Elastic License v2

调查指南

编辑

调查为 Root 添加的 AWS IAM 登录配置文件

此规则检测何时为 AWS root 账户添加了登录配置文件。为 root 账户添加登录配置文件,尤其是自行分配的情况下,高度可疑,因为它可能表明攻击者试图在环境中建立持久性。

可能的调查步骤

  • 识别操作的来源和上下文:
  • 检查 source.address 字段,以识别请求的来源 IP 地址。
  • 检查地理位置 (source.address) 以确定访问是否来自预期或非预期的区域。
  • 查看 user_agent.original 字段,以识别用于此操作的工具或浏览器。
  • 例如,类似 Mozilla/5.0 的用户代理可能表示交互式访问,而 aws-cli 或 SDK 则表示脚本活动。
  • 确认 Root 用户和请求详细信息:
  • 通过 aws.cloudtrail.user_identity.arn 验证 root 用户的身份,并确保此活动符合合法的管理操作。
  • 查看 aws.cloudtrail.user_identity.access_key_id,以识别操作是否使用临时或永久凭据执行。此访问密钥可用于转到其他操作。
  • 分析登录配置文件的创建:
  • 查看 aws.cloudtrail.request_parametersaws.cloudtrail.response_elements 字段,以了解创建的登录配置文件的详细信息。
  • 例如,确认配置文件的 userName 以及是否将 passwordResetRequired 设置为 true
  • 将此事件的 @timestamp 与 root 账户的其它近期操作进行比较,以识别潜在的权限提升或滥用。
  • 与其他事件关联:
  • 调查相关的 IAM 活动,例如:
  • 针对 root 账户的 CreateAccessKeyAttachUserPolicy 事件。
  • 不寻常的数据访问、权限提升或管理控制台登录。
  • 检查环境中涉及相同 source.addressaws.cloudtrail.user_identity.access_key_id 的任何异常情况。
  • 评估策略和权限:
  • 验证 root 账户的当前安全策略
  • 确保密码策略强制执行复杂性和轮换要求。
  • 检查是否在 root 账户上强制执行 MFA。
  • 评估更广泛的 IAM 配置是否偏离最小权限原则。

误报分析

  • 例行管理任务:在某些管理流程中,添加登录配置文件可能是合法的操作。与相关的 AWS 管理员核实此事件是否符合例行账户维护或紧急恢复场景。
  • 自动化:如果该操作是已批准的自动化流程(例如,账户恢复工作流程)的一部分,请考虑使用特定的用户代理、IP 地址或会话属性将这些活动从告警中排除。

响应和补救

  • 立即访问审查:
  • 如果确定新建的登录配置文件未经授权,则禁用该配置文件 (aws iam delete-login-profile)。
  • 轮换或禁用与 root 账户关联的凭据,以防止进一步滥用。
  • 加强监控和告警:
  • 启用涉及 root 账户的 IAM 操作的实时监控和告警。
  • 增加 root 账户活动的日志详细程度。
  • 审查和更新安全策略:
  • 对所有管理操作强制执行 MFA,包括 root 账户的使用。
  • 限制对 root 账户的编程访问,除非绝对必要,否则禁用访问密钥。
  • 进行事件后分析:
  • 调查 root 账户的凭据是如何被泄露或滥用的。
  • 通过实施特定于账户的防护措施和持续监控来加强安全态势。

其它资源

规则查询

编辑
from logs-aws.cloudtrail* metadata _id, _version, _index
| where
    // filter for CloudTrail logs from IAM
    event.dataset == "aws.cloudtrail"
    and event.provider == "iam.amazonaws.com"

    // filter for successful CreateLoginProfile API call
    and event.action == "CreateLoginProfile"
    and event.outcome == "success"

    // filter for Root member account
    and aws.cloudtrail.user_identity.type == "Root"

    // filter for an access key existing which sources from AssumeRoot
    and aws.cloudtrail.user_identity.access_key_id IS NOT NULL

    // filter on the request parameters not including UserName which assumes self-assignment
    and NOT TO_LOWER(aws.cloudtrail.request_parameters) LIKE "*username*"
| keep
    @timestamp,
    aws.cloudtrail.request_parameters,
    aws.cloudtrail.response_elements,
    aws.cloudtrail.user_identity.type,
    aws.cloudtrail.user_identity.arn,
    aws.cloudtrail.user_identity.access_key_id,
    cloud.account.id,
    event.action,
    source.address

框架:MITRE ATT&CKTM