来自不同地理位置的 Okta 用户会话启动

编辑

来自不同地理位置的 Okta 用户会话启动

编辑

检测特定 Okta 参与者从不同地理位置启动多个会话的情况。攻击者可能会尝试使用已知的用户名和密码列表,从不同位置非法访问用户帐户来发起攻击。

规则类型: esql

规则索引: 无

严重性: 中

风险评分: 47

运行频率: 15 分钟

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

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

参考:

标签:

  • 用例:身份和访问审计
  • 数据源:Okta
  • 战术:初始访问

版本: 303

规则作者:

  • Elastic

规则许可证: Elastic License v2

调查指南

编辑

初步评估和分析

调查来自不同地理位置的 Okta 用户会话启动

此规则检测特定 Okta 参与者从不同地理位置启动多个会话的情况。攻击者可能会尝试使用已知的用户名和密码列表,从不同位置非法访问用户帐户来发起攻击。

可能的调查步骤

  • 由于这是一个 ES|QL 规则,okta.actor.alternate_idokta.client.id 值可以用于深入分析与此告警相关的原始身份验证事件。
  • 通过检查 okta.actor.idokta.actor.typeokta.actor.alternate_idokta.actor.display_name 字段来确定参与此操作的用户。
  • 通过分析 okta.client.ipokta.client.user_agent.raw_user_agentokta.client.zoneokta.client.deviceokta.client.id 字段,确定这些操作使用的设备客户端。
  • 在确定 Okta 最终用户后,查看 okta.debug_context.debug_data.dt_hash 字段。
  • 历史分析应指示此设备令牌哈希是否通常与该用户关联。
  • 查看 okta.event_type 字段以确定发生的身份验证事件的类型。
  • 如果事件类型是 user.authentication.sso,则用户可能出于安全或隐私原因通过代理合法启动了会话。
  • 如果事件类型是 user.authentication.password,则用户可能正在使用代理来访问多个帐户以进行密码喷洒攻击。
  • 如果事件类型是 user.session.start,则源可能尝试通过 Okta 身份验证 API 建立会话。
  • 通过检查参与此操作的参与者之前的操作,查看其过去活动。
  • 评估 okta.event_type 字段中在此事件发生之前和之后的操作,以帮助了解活动的完整上下文。
  • 这可能有助于确定用户、Okta 和应用程序之间发生的身份验证和授权操作。

误报分析

  • 在短时间内,合法用户从不同地理位置的国家启动多个会话的情况非常罕见。

响应和补救

  • 如果用户是合法的,并且根据设备分析,身份验证行为没有可疑之处,则无需执行任何操作。
  • 如果用户是合法的,但身份验证行为可疑,请考虑重置所涉及用户的密码并启用多因素身份验证 (MFA)。
  • 如果已启用 MFA,请考虑为用户重置 MFA。
  • 如果任何用户不合法,请考虑停用该用户的帐户。
  • 对 Okta 策略进行审查,并确保它们符合安全最佳实践。
  • 与内部 IT 团队联系,以确定所涉及的帐户是否最近应用户的要求重置了 MFA。
  • 如果是,请与用户确认这是一个合法的请求。
  • 如果此请求不合法,请考虑暂时停用该用户的帐户。
  • 重置用户的密码并重置 MFA。
  • 如果这是一个误报,请考虑将 okta.debug_context.debug_data.dt_hash 字段添加到规则的 exceptions 列表中。
  • 这将防止未来此设备发生此事件时触发规则。
  • 或者,将 okta.client.ip 或 CIDR 范围添加到 exceptions 列表可以防止未来此事件发生时触发规则。
  • 应谨慎执行此操作,因为它可能会阻止生成合法的告警。

设置

编辑

需要 Okta Fleet 集成、Filebeat 模块或类似结构的数据才能与此规则兼容。

规则查询

编辑
FROM logs-okta*
| WHERE
    event.dataset == "okta.system"
    AND (event.action RLIKE "user\\.authentication(.*)" OR event.action == "user.session.start")
    AND okta.security_context.is_proxy != true and okta.actor.id != "unknown"
    AND event.outcome == "success"
| KEEP event.action, okta.security_context.is_proxy, okta.actor.id, event.outcome, client.geo.country_name, okta.actor.alternate_id
| STATS
    geo_auth_counts = COUNT_DISTINCT(client.geo.country_name)
    BY okta.actor.id, okta.actor.alternate_id
| WHERE
    geo_auth_counts >= 2

框架: MITRE ATT&CKTM