UNC6040攻击分析与Salesforce主动防御加固指南

本文详细分析了UNC6040威胁组织的攻击手法,针对Salesforce环境提供了完整的主动防御方案,包括身份验证加固、SaaS应用安全配置、日志监控与检测规则,帮助企业构建多层防御体系应对社会工程攻击和数据窃取威胁。

背景

保护软件即服务(SaaS)平台和应用程序需要全面的安全策略。基于对UNC6040特定攻击方法的分析,本指南提出了结构化的防御框架,涵盖主动加固措施、全面日志记录协议和高级检测能力。虽然重点强调Salesforce特定的安全建议,但这些策略为企业提供了可操作的方法,以保护其SaaS生态系统免受当前威胁。

Google威胁情报小组(GTIG)正在追踪UNC6040,这是一个以经济利益为动机的威胁集群,专门从事语音钓鱼(vishing)活动,旨在入侵组织的Salesforce实例以进行大规模数据盗窃和后续勒索。在过去几个月中,UNC6040通过让操作员在令人信服的电话社交工程互动中冒充IT支持人员,多次成功入侵网络。这种方法在欺骗员工方面特别有效,通常是跨国公司的英语分支机构员工,导致攻击者获得访问权限或分享敏感凭据,最终促成了组织Salesforce数据的盗窃。在所有观察到的案例中,攻击者依赖于操纵最终用户,而非利用Salesforce固有的任何漏洞。

UNC6040操作中的一个普遍策略是欺骗受害者授权恶意连接应用程序到其组织的Salesforce门户。该应用程序通常是Salesforce Data Loader的修改版本,未经Salesforce授权。在语音钓鱼通话期间,攻击者引导受害者访问Salesforce的连接应用程序设置页面,批准名称或品牌与合法版本不同的Data Loader应用程序版本。这一步骤无意中授予UNC6040重要能力,可以直接从受感染的Salesforce客户环境访问、查询和窃取敏感信息。这种通过恶意连接应用程序滥用Data Loader功能的方法与Salesforce最近在其关于保护Salesforce环境免受此类威胁的指南中详述的观察结果一致。

在某些情况下,勒索活动直到UNC6040初始入侵活动几个月后才被观察到,这可能表明UNC6040与第二个威胁行为者合作,将窃取的数据货币化。在这些勒索尝试中,攻击者声称与著名黑客组织ShinyHunters有关联,可能是为了增加对受害者的压力。

图1:Data Loader攻击流程

我们在UNC6040受害者分析中观察到以下模式:

  • 动机:UNC6040是一个以经济利益为动机的威胁集群,通过语音钓鱼社交工程访问受害者网络。
  • 重点:获得访问权限后,UNC6040立即使用Salesforce的Data Loader应用程序从受害者的Salesforce环境窃取数据。在初始数据盗窃之后,UNC6040被观察到利用通过凭据收集或语音钓鱼获得的最终用户凭据在受害者网络中横向移动,访问并从受害者在其他云平台(如Okta和Microsoft 365)的账户中窃取数据。
  • 攻击者基础设施:UNC6040主要使用Mullvad VPN IP地址访问受害者的Salesforce环境并执行数据窃取,以及受害者网络的其他服务。

主动加固建议

以下部分提供了优先建议,以防范UNC6040使用的策略。本节分为以下类别:

  • 身份
    • 帮助台和最终用户验证
    • 身份验证和保护
  • SaaS应用程序
    • SaaS应用程序(例如Salesforce)加固措施
  • 日志记录和检测

注意:虽然以下建议包括保护SaaS应用程序的策略,但它们也涵盖了身份安全控制和适用于身份提供商(IdP)层的检测,以及对现有流程(如帮助台)的安全增强。

1. 身份

积极身份验证

为防范日益复杂的社交工程和凭据泄露攻击,组织必须采用稳健的多层身份验证流程。此流程超越过时、易受攻击的方法,为所有支持请求建立更高的保证标准,特别是涉及账户修改(例如密码重置或多因素身份验证修改)的请求。

指导原则

  • 不假设任何事:不要固有信任呼叫者的声称身份。对所有安全相关请求必须进行验证。

  • 深度防御:依赖多种验证方法的组合。任何单一因素都不应足以进行高风险操作。

  • 拒绝不安全的标识符:避免依赖公开可用或易于发现的数据。诸如以下信息:

    • 出生日期
    • 社会安全号码的最后四位数字
    • 高中名称
    • 主管姓名

    这些数据不应作为主要验证因素,因为它们通常通过数据泄露被泄露或可通过开源情报(OSINT)获得。

标准验证程序

实时视频身份验证(主要方法)

这是识别呼叫者最可靠的方法。帮助台代理必须:

  • 与用户发起视频通话
  • 要求用户在镜头前出示有效的公司徽章或政府颁发的带照片身份证(例如驾驶执照)
  • 视觉确认视频通话中的人与身份证上的照片匹配
  • 将用户的面部与内部公司身份系统中的照片进行交叉参考
  • 验证身份证上的姓名与员工公司记录中的姓名匹配

无视频应急方案:如果无法进行实时视频通话,用户必须提供自拍,显示其面部、照片身份证和一张写有当前日期和时间的纸。

此外,在进行任何请求之前,帮助台人员必须检查用户的日历以了解外出(OOO)或休假状态。所有标记为OOO的用户的请求应被推定拒绝,直到他们正式返回。

带外(OOB)验证(针对高风险请求)

对于高风险更改,如多因素身份验证(MFA)重置或特权账户的密码更改,在初始身份验证后需要额外的OOB验证步骤。这可以包括:

  • 回拨:拨打用户档案中注册的电话号码
  • 经理批准:通过已验证的公司通信渠道向用户的直接经理发送确认请求

第三方供应商请求的特殊处理

Mandiant观察到攻击者冒充第三方供应商的支持人员以获取访问权限的事件。在这些情况下,标准验证原则可能不适用。

在任何情况下,帮助台都不应继续允许访问。代理必须停止请求并遵循以下程序:

  • 在不提供任何访问或信息的情况下结束呼入通话
  • 使用可信的、档案中的联系信息独立联系该供应商的公司指定账户经理
  • 在进行任何请求之前要求账户经理明确验证

最终用户外联

Mandiant观察到威胁行为者UNC6040针对对SaaS应用程序具有提升访问权限的最终用户。UNC6040冒充供应商或支持人员,联系这些用户并提供恶意链接。一旦用户点击链接并进行身份验证,攻击者即可访问应用程序以窃取数据。

为减轻此威胁,组织应严格向所有最终用户传达验证任何第三方请求的重要性。验证程序应包括:

  • 挂断电话并使用档案中的电话号码拨打官方账户经理
  • 要求请求者通过官方公司支持门户提交工单
  • 要求提供可在支持控制台中确认的有效工单号

组织还应提供清晰且易于访问的流程,供最终用户报告可疑通信,并确保在所有安全意识外联中包含此报告机制。

Salesforce有额外指南可供参考。

身份保护

由于对SaaS应用程序的访问通常由中央身份提供商(例如Entra ID、Okta)管理,Mandiant建议组织直接在这些平台内实施统一的身份安全控制。

指导原则

Mandiant的方法侧重于以下核心原则:

  • 身份验证边界:此原则基于网络上下文建立信任的基础层。对敏感资源的访问应限制在定义的边界内,主要允许来自受信任的公司网络和VPN的连接,以创建受信任和不受信任位置之间的明确区分。
  • 深度防御:此原则规定安全不能依赖单一控制。组织应分层多种安全措施,例如强身份验证、设备合规性检查和会话控制。
  • 身份检测和响应:组织必须持续将实时威胁情报集成到访问决策中。这确保如果身份被泄露或表现出风险行为,其访问将自动被遏制或阻止,直到威胁被修复。

身份安全控制

以下控制对于通过中央身份提供商保护对SaaS应用程序的访问至关重要。

利用单点登录(SSO)

确保所有访问SaaS应用程序的用户都通过公司管理的SSO提供商(例如Microsoft Entra ID或Okta)访问,而不是通过平台原生账户。应创建并保管平台原生的应急账户,仅在紧急情况下使用。

如果通过公司管理提供商的SSO不可用,请参考特定于适用SaaS应用程序(例如Salesforce)的内容,而不是Microsoft Entra ID或Okta。

强制实施防钓鱼MFA

必须对所有访问SaaS应用程序的用户强制执行防钓鱼MFA。这是防御凭据盗窃和账户接管的基础要求。考虑对具有特权访问的账户强制执行物理FIDO2密钥。确保在与业务关键应用程序关联的身份验证策略中不存在MFA绕过。

对于Microsoft Entra ID:

  • 通用MFA策略:使用条件访问对所有用户强制执行MFA
  • 通行密钥(FIDO2)设置:启用通行密钥和FIDO2安全密钥

对于Okta:

  • 配置FIDO2(WebAuthn):设置FIDO2(WebAuthn)验证器
  • 通过策略强制执行:创建身份验证策略以要求强验证器

对于Google Cloud Identity / Workspace:

  • 通用MFA策略:部署两步验证
  • 安全密钥强制执行:使用安全密钥进行两步验证

对于Salesforce:

  • 默认要求本地Salesforce账户的MFA:Salesforce多因素身份验证FAQ
  • 配置FIDO2(WebAuthn):将安全密钥注册为Salesforce组织的身份验证方法

强制执行设备信任和合规性

对公司应用程序的访问必须限制在已加入域或已验证符合组织安全标准的设备上。此策略确保设备在访问敏感数据之前满足最低安全基线。

关键设备状态检查应包括:

  • 有效主机证书:设备必须出示有效的公司颁发证书
  • 批准的操作系统:端点必须运行符合当前版本和补丁要求的批准操作系统
  • 活动的EDR代理:必须安装、活动并报告健康状态的公司端点检测和响应(EDR)解决方案

对于Microsoft Entra ID:

  • 设备合规策略:使用条件访问要求所有用户使用合规设备

对于Okta:

  • 设备信任概述:为托管设备配置Okta设备信任

对于Google Cloud Identity / Workspace:

  • 情境感知访问:情境感知访问概述
  • 端点验证:使用端点验证监控和收集设备详细信息

自动化响应身份威胁

Mandiant建议组织实施动态身份验证策略,以实时响应威胁。通过将身份威胁情报源(来自本机平台服务和第三方解决方案)集成到身份验证过程中,组织可以在身份被泄露或表现出风险行为时自动阻止或挑战访问。

此方法主要评估两类风险:

  • 风险登录:由于非典型旅行、恶意软件链接的IP地址或密码喷洒活动等因素,身份验证请求不合法的概率
  • 风险用户:用户凭据已被泄露或在线泄露的概率

基于检测到的风险级别,Mandiant建议组织应用分层修复方法。

推荐基于风险的操作

  • 对于高风险事件:组织应应用最严格的安全控制。这包括完全阻止访问。
  • 对于中风险事件:只有在验证显著升级后才应授予访问权限。这通常意味着要求证明用户身份(通过强MFA)和设备完整性(通过验证其合规性和安全状态)。
  • 对于低风险事件:组织仍应要求升级身份验证挑战,例如标准MFA,以确保会话的合法性并减轻低 fidelity 威胁。

对于Microsoft Entra ID:

  • 概述
  • 配置

对于Okta:

  • 行为检测
  • 基于风险的策略

对于Google Cloud Identity / Workspace:

  • 访问上下文管理器概述:使用情境感知访问创建细粒度、基于风险的访问策略

对于Salesforce Shield:

  • 概述
  • 事件监控:提供用户操作(如数据访问、记录修改和登录来源)的详细日志,并允许将这些日志导出用于外部分析
  • 交易安全策略:监控特定用户活动,如大型数据下载,并可配置为在发生时自动触发警报或阻止操作

2. SaaS应用程序

Salesforce定向加固控制

本节详细介绍了适用于Salesforce实例的特定安全控制。这些控制旨在防止对Salesforce内敏感数据的广泛访问、数据窃取和未经授权访问。

网络和登录控制

限制登录仅来自受信任的网络位置。 参见Salesforce关于网络访问和基于配置文件的IP限制的指南。

按IP地址限制登录

此控制防止从未授权网络滥用凭据,即使攻击者窃取了有效用户凭据也能有效阻止访问。

  • 在配置文件级别定义登录IP范围,仅允许从公司和受信任网络地址访问。
  • 在会话设置中,启用“在每个请求上强制执行登录IP范围”以确保检查不会被现有会话绕过。

参见Salesforce关于设置受信任IP范围的指南。

应用程序和API访问治理

管理连接应用程序和API访问

威胁行为者通常通过利用通用API客户端和被盗的OAuth令牌绕过交互式登录控制。此策略将模型从“默认允许”翻转为“默认拒绝”,以确保只有经过审查的应用程序可以连接。

  • 启用“默认拒绝”API策略:导航到API访问控制并启用“对于管理员批准的用户,将API访问限制为仅允许的连接应用程序。”这会阻止所有未经批准的客户端。
  • 维护最小的应用程序允许列表:明确仅批准必要的连接应用程序。定期审查此允许列表以删除未使用或未经批准的应用程序。
  • 强制执行每个应用程序的严格OAuth策略:对于每个批准的应用程序,配置细粒度安全策略,包括限制访问受信任IP范围、强制执行MFA以及设置适当的会话和刷新令牌超时。
  • 在移除应用程序时撤销会话:当撤销应用程序的访问权限时,确保所有与其关联的活动OAuth令牌和会话也被撤销,以防止持久访问。
  • 组织流程和政策:创建管理与第三方应用程序集成的政策。对所有与业务关键应用程序(例如Salesforce、Google Workspace、Workday)的集成执行第三方风险管理审查。

参见Salesforce关于管理API访问的指南。

用户特权和访问管理

实施最小权限原则

用户应仅被授予执行其工作职能所需的绝对最小权限。

  • 使用“最小访问”配置文件作为基线:配置具有最小权限的基础配置文件,并默认分配给所有新用户。限制分配“查看所有”和“修改所有”权限。
  • 通过权限集授予特权:通过基于工作角色的明确定义的权限集授予所有额外访问权限,而不是创建大量自定义配置文件。
  • 对非必要用户禁用API访问:“API启用”权限是Data Loader等工具所必需的。从所有用户配置文件中删除此权限,仅通过受控的权限集将其授予少数有理由的用户。
  • 对非管理员用户隐藏“设置”菜单:对于所有非管理员配置文件,删除对管理“设置”菜单的访问权限,以防止未经授权的配置更改。
  • 对敏感操作强制执行高保证会话:配置会话设置,要求对敏感操作(如导出报告)使用高保证会话。

参见Salesforce关于修改会话安全设置的指南。 参见Salesforce关于要求高保证会话安全的指南。 参见Salesforce关于“查看所有”和“修改所有”权限的指南。

细粒度数据访问策略

强制执行“私有”组织范围共享默认值(OWD)

  • 对所有敏感对象将内部和外部组织范围默认值(OWD)设置为“私有”。
  • 使用战略性共享规则或其他共享机制授予更广泛的数据访问权限,而不是依赖通过角色层次结构的广泛访问。

利用限制规则进行行级安全

限制规则作为应用于所有其他共享设置之上的过滤器,允许对用户可以看到的记录进行细粒度控制。 参见Salesforce关于限制规则的指南。

撤销Salesforce支持登录访问

确保任何访问敏感数据或对底层Salesforce实例具有特权访问的用户在任何Salesforce支持访问授予上设置严格超时。 撤销任何长期请求,仅针对特定用例重新启用并设置严格时间限制。警惕从管理账户启用这些授予。 参见Salesforce关于授予Salesforce支持登录访问的指南。

Mandiant建议运行Salesforce安全健康检查工具以识别和解决错误配置。有关其他加固建议,请参考Salesforce安全指南。

3. 日志记录和检测

Salesforce定向日志记录和检测控制

本节概述了Salesforce实例的关键日志记录和检测策略。这些控制对于识别和响应SaaS环境中的高级威胁至关重要。

SaaS应用程序日志记录

为获得威胁行为者针对SaaS应用程序使用的战术、技术和程序(TTP)的可见性,Mandiant建议在组织的Salesforce环境中启用关键日志类型,并将日志摄取到其安全信息和事件管理(SIEM)系统中。

日志记录前需要准备的内容

在开启收集或编写检测之前,请确保您的组织实际上有权使用您计划使用的日志,并且已启用正确的功能。

  • 权限检查(必须)
    • 大多数安全日志/功能都通过Salesforce Shield或事件监控附加组件的事件监控进行门控。这适用于实时事件监控(RTEM)流式和查看。
  • 按用例选择数据模型
    • RTEM - 流式(近实时警报):在企业/无限/开发者订阅中可用;流式事件保留约3天。
    • RTEM - 存储:许多是Big Objects(本机存储);一些是标准对象(例如威胁检测存储)。
    • 事件日志文件(ELF)- CSV模型(批量导出):在企业/性能/无限版本中可用。
    • 事件日志对象(ELO)- SOQL模型(可查询历史):需要Shield/附加组件。
  • 开启所需内容(并确定范围访问)
    • 使用事件管理器按事件启用/禁用流式和存储;查看RTEM事件。
    • 通过配置文件/权限集授予RTEM和威胁检测UI的访问权限。
  • 威胁检测和ETS
    • 威胁检测事件在UI中查看,带有Shield/附加组件;存储在相应的EventStore对象中。
    • 增强交易安全(ETS)包含在RTEM中,用于对实时事件进行阻止/MFA/通知操作。

推荐监控的日志源

  • 登录历史(LoginHistory):跟踪所有登录尝试,包括用户名、时间、IP地址、状态(成功/失败)和客户端类型。这使您能够识别异常登录时间、未知位置或重复失败,这可能表示凭据填充或账户泄露。
  • 登录事件(LoginEventStream):LoginEvent跟踪登录到Salesforce的用户的登录活动。
  • 设置审计跟踪(SetupAuditTrail):记录Salesforce环境内的管理和配置更改。这有助于跟踪对权限、安全设置和其他关键配置的更改,便于审计和合规工作。
  • API调用(ApiEventStream):通过跟踪用户或连接应用程序进行的调用来监控API使用和潜在滥用。
  • 报告导出(ReportEventStream):提供对报告下载的洞察,帮助检测潜在的数据窃取尝试。
  • 列表视图事件(ListViewEventStream):跟踪用户与列表视图的交互,包括对这些视图中数据的访问和操作。
  • 批量API事件(BulkApiResultEvent):跟踪用户下载批量API请求结果的时间。
  • 权限更改(PermissionSetEvent):跟踪权限集和权限集组的更改。当权限被添加到权限集或从权限集中移除时,此事件启动。
  • API异常(ApiAnomalyEvent):跟踪用户进行API调用的方式中的异常。
  • 唯一查询事件类型:唯一查询事件捕获处理的特定搜索查询(SOQL)、过滤器ID和报告ID,以及底层数据库查询(SQL)。
  • 外部身份提供商事件日志:跟踪使用SSO的登录尝试信息。(请遵循您的身份提供商提供的监控和收集IdP事件日志的指南。)

这些日志源将为组织提供日志记录能力,以正确收集和监控威胁行为者使用的常见TTP。每个TTP要监控的关键日志源和可观察的Salesforce活动如下:

TTP 可观察的Salesforce活动 日志源
语音钓鱼 可疑登录尝试(快速失败)。从异常IP/ASN登录(例如Mullvad/Tor)。来自未识别客户端的OAuth(“远程访问2.0”)。 登录历史、LoginEventStream/LoginEvent、设置审计跟踪
恶意连接应用程序授权(例如Data Loader、自定义脚本) 新连接应用程序创建/修改(广泛范围:api、refresh_token、offline_access)。策略放宽(允许用户、IP限制)。通过权限授予API启用/“管理连接应用程序”。 设置审计跟踪、PermissionSetEvent、LoginEventStream/LoginEvent(OAuth)
数据窃取(通过API、Data Loader、报告) 高频率Query/QueryMore/QueryAll突发。报告和列表视图中的大RowsProcessed/RecordCount(分块)。批量作业结果下载。大规模文件/附件下载。 ApiEventStream/ApiEvent、ReportEventStream/ReportEvent、ListViewEventStream/ListViewEvent、BulkApiResultEvent、FileEvent/FileEventStore、ApiAnomalyEvent/ReportAnomalyEvent、唯一查询事件类型
横向移动/持久性(在Salesforce内或到其他云平台) 权限提升(例如查看/修改所有数据、API启用)。新用户/服务账户。LoginAs活动。SF OAuth后从VPN/Tor登录。转向Okta/M365,然后Graph数据拉取。 设置审计跟踪、PermissionSetEvent、LoginAsEventStream

SaaS应用程序检测

虽然本机SIEM威胁检测提供了一些保护,但它们通常缺乏在复杂环境中连接不同事件所需的集中可见性。通过开发自定义定向检测规则,组织可以主动检测恶意活动。

数据窃取和跨SaaS横向移动(后授权)

MITRE映射:TA0010 - 窃取和TA0008 - 横向移动

场景和目标

用户授权(恶意或欺骗性)连接应用程序后,UNC6040通常:

  • 快速执行数据窃取(REST分页突发、批量API下载、大型/敏感报告导出)。
  • 从相同的风险出口IP转向Okta/Microsoft 365以扩大访问权限并窃取更多数据。

此处的目标是在≤10分钟内检测Salesforce OAuth → 窃取,并在≤60分钟内检测Salesforce OAuth → Okta/M365登录(相同风险IP),加上单信号、低噪声窃取模式。

基线和允许列表

重用您为语音钓鱼阶段维护的列表,并添加两个正则表达式助手以关注内容。

  • STRING
    • ALLOWLIST_CONNECTED_APP_NAMES
    • KNOWN_INTEGRATION_USERS(合法使用OAuth的用户ID/电子邮件)
    • VPN_TOR_ASNS(作为字符串的ASN)
  • CIDR
    • ENTERPRISE_EGRESS_CIDRS(您的公司/VPN公共出口)
  • REGEX
    • SENSITIVE_REPORT_REGEX (?i)\b(all|export|dump)\b.*\b(contact|lead|account|customer|pii|email|phone|ssn)\b
    • M365_SENSITIVE_GRAPH_REGEX (?i)^https?://graph\.microsoft\.com/(beta|v1\.0)/(users|me)/messages (?i)^https?://graph\.microsoft\.com/(beta|v1\.0)/drives/.*/items/.*/content (?i)^https?://graph\.microsoft\.com/(beta|v1\.0)/reports/ (?i)^https?://graph\.microsoft\.com/(beta|v1\.0)/users(\?|$)

高保真检测目录(伪代码)

Salesforce OAuth → 数据窃取在≤10分钟内(多事件)

可疑OAuth在10分钟内被同一用户的批量结果下载、REST分页突发或敏感/大型报告导出跟随。

高保真原因:匹配UNC6040的“批准→排空”模式;紧密时间窗口+体积阈值。

关键信号:

  • OAuth成功(未知应用程序或允许列表+风险出口),绑定用户。
  • 然后任意以下:
    • BulkApiResultEvent具有大RowsProcessed/RecordCount
    • ApiEventStream许多query/queryMore调用
    • ReportEventStream大型/敏感报告导出

列表/旋钮:ENTERPRISE_EGRESS_CIDRS、VPN_TOR_ASNS、SENSITIVE_REPORT_REGEX。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$oauth.metadata.product_name = "SALESFORCE"
$oauth.metadata.log_type = "SALESFORCE"
$oauth.extracted.fields["LoginType"] = "Remote Access 2.0"
($oauth.extracted.fields["Status"] = "Success" or $oauth.security_result.action_details = "Success")
( not ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
or ( ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
and ( not ($ip in cidr %ENTERPRISE_EGRESS_CIDRS)
or strings.concat(ip_to_asn($ip), "") in %VPN_TOR_ASNS ) ) )
$uid = coalesce($oauth.principal.user.userid, $oauth.extracted.fields["UserId"])

$bulk.metadata.product_name = "SALESFORCE"
$bulk.metadata.log_type = "SALESFORCE"
$bulk.metadata.product_event_type = "BulkApiResultEvent"
$uid = coalesce($bulk.principal.user.userid, $bulk.extracted.fields["UserId"])

match:
$uid over 10m

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$oauth.metadata.product_name = "SALESFORCE"
$oauth.metadata.log_type = "SALESFORCE"
$oauth.extracted.fields["LoginType"] = "Remote Access 2.0"
($oauth.extracted.fields["Status"] = "Success" or $oauth.security_result.action_details = "Success")
( not ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
or ( ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
and ( not ($ip in cidr %ENTERPRISE_EGRESS_CIDRS)
or strings.concat(ip_to_asn($ip), "") in %VPN_TOR_ASNS ) ) )
$uid = coalesce($oauth.principal.user.userid, $oauth.extracted.fields["UserId"])

$api.metadata.product_name = "SALESFORCE"
$api.metadata.log_type = "SALESFORCE"
$api.metadata.product_event_type = "ApiEventStream"
$uid = coalesce($api.principal.user.userid, $api.extracted.fields["UserId"])

match:
$uid over 10m

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$oauth.metadata.product_name = "SALESFORCE"
$oauth.metadata.log_type = "SALESFORCE"
$oauth.extracted.fields["LoginType"] = "Remote Access 2.0"
($oauth.extracted.fields["Status"] = "Success" or $oauth.security_result.action_details = "Success")
( not ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
or ( ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
and ( not ($ip in cidr %ENTERPRISE_EGRESS_CIDRS)
or strings.concat(ip_to_asn($ip), "") in %VPN_TOR_ASNS ) ) )
$uid = coalesce($oauth.principal.user.userid, $oauth.extracted.fields["UserId"])

$report.metadata.product_name = "SALESFORCE"
$report.metadata.log_type = "SALESFORCE"
$report.metadata.product_event_type = "ReportEventStream"
strings.to_lower(coalesce($report.extracted.fields["ReportName"], "")) in regex SENSITIVE_REPORT_REGEX
$uid = coalesce($report.principal.user.userid, $report.extracted.fields["UserId"])

match:
$uid over 10m

注意:在这种情况下也可以使用单事件规则,而不是多事件规则,其中只有产品事件类型如ApiEventStream、BulkApiResultEvent、ReportEventStream可以用作要监控的单事件规则。但是,如果建立单事件规则,必须小心,因为这些规则可能非常嘈杂,因此应主动监控参考列表。

批量API大型结果下载(非集成用户)

批量API/Bulk v2结果下载超过阈值,由人类用户执行。

高保真原因:清晰的窃取工件。

关键信号:BulkApiResultEvent,用户不在KNOWN_INTEGRATION_USERS中。

列表/旋钮:KNOWN_INTEGRATION_USERS,大小阈值。

1
2
3
4
$e.metadata.product_name = "SALESFORCE"
$e.metadata.log_type = "SALESFORCE"
$e.metadata.product_event_type = "BulkApiResultEvent"
not (coalesce($e.principal.user.userid, $e.extracted.fields["UserId"]) in %KNOWN_INTEGRATION_USERS)

REST查询分页突发(query/queryMore)

短时间窗口内高频率query*/queryMore调用。

高保真原因:模拟脚本化排空;稳定的人类使用不会达到突发阈值。

关键信号:ApiEventStream,操作在query、queryMore、query_all、queryall中,10分钟内计数≥阈值,用户不在KNOWN_INTEGRATION_USERS中。

列表/旋钮:突发阈值,KNOWN_INTEGRATION_USERS。

1
2
3
4
5
6
$api.metadata.product_name = "SALESFORCE"
$api.metadata.log_type = "SALESFORCE"
$api.metadata.product_event_type = "ApiEventStream"
not (coalesce($api.principal.user.userid, $api.extracted.fields["UserId"]) in %KNOWN_INTEGRATION_USERS)
strings.to_lower(coalesce($api.extracted.fields["Operation"], "")) in regex `(?i)^(query|querymore|query_all|queryall)$`
$uid = coalesce($api.principal.user.userid, $api.extracted.fields["UserId"])

非集成用户的敏感报告导出

人类用户导出大型或敏感名称的报告。

高保真原因:报告提取是常见的、对攻击者嘈杂但高信号的向量。

关键信号:ReportEventStream,高RowsProcessed或ReportName匹配SENSITIVE_REPORT_REGEX,用户不在KNOWN_INTEGRATION_USERS中。

列表/旋钮:SENSITIVE_REPORT_REGEX,KNOWN_INTEGRATION_USERS。

1
2
3
4
5
$e.metadata.product_name = "SALESFORCE"
$e.metadata.log_type = "SALESFORCE"
$e.metadata.product_event_type = "ReportEventStream"
not (coalesce($e.principal.user.userid, $e.extracted.fields["UserId"]) in %KNOWN_INTEGRATION_USERS)
strings.to_lower(coalesce($e.extracted.fields["ReportName"], "")) in regex %SENSITIVE_REPORT_REGEX

Salesforce OAuth → Okta/M365从相同风险IP登录在≤60分钟内(多事件)

可疑Salesforce OAuth在60分钟内被来自相同公共IP的Okta或Entra ID登录跟随,其中IP是非公司或VPN/Tor ASN。

高保真原因:在紧密时间窗口内将攻击者的出口IP跨SaaS绑定。

关键信号:

  • Salesforce OAuth姿态(未知应用程序或允许列表+风险出口)
  • 来自相同IP的OKTA*或OFFICE_365 USER_LOGIN

列表/旋钮:ENTERPRISE_EGRESS_CIDRS、VPN_TOR_ASNS。(如果身份已规范化,可选兄弟规则通过用户电子邮件绑定。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$oauth.metadata.product_name = "SALESFORCE"
$oauth.metadata.log_type = "SALESFORCE"
$oauth.extracted.fields["LoginType"] = "Remote Access 2.0"
($oauth.extracted.fields["Status"] = "Success" or $oauth.security_result.action_details = "Success")
( not ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
or ( ($app in %ALLOWLIST_CONNECTED_APP_NAMES)
and ( not ($ip in cidr %ENTERPRISE_EGRESS_CIDRS)
or strings.concat(ip_to_asn($ip), "") in %VPN_TOR_ASNS )
$ip = coalesce($oauth.principal.asset.ip, $oauth.principal.ip)

$okta.metadata.log_type in "OKTA"
$okta.metadata.event_type = "USER_LOGIN"
$ip = coalesce($okta.principal.asset.ip, $okta.principal.ip) = $ip

$o365.metadata.log_type = "OFFICE_365"
$o365.metadata.event_type = "USER_LOGIN"
$ip = coalesce($o365.principal.asset.ip, $o365.principal.ip)

match:
$ip over 10m

M365 Graph数据拉取后风险登录

来自风险出口的Entra ID登录,随后由同一账户在几小时内通过匹配M365_SENSITIVE_GRAPH_REGEX的URL进行HTTP访问。

高保真原因:捕获账户接管后典型的数据访问。

关键信号:OFFICE_365 USER_LOGIN带有非公司IP或VPN/Tor ASN,然后同一账户在几小时内通过匹配M365_SENSITIVE_GRAPH_REGEX的URL进行HTTP访问。

列表/旋钮:ENTERPRISE_EGRESS_CIDRS、VPN_TOR_ASNS、M365_SENSITIVE_GRAPH_REGEX。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$login.metadata.log_type = "OFFICE_365"
$login.metadata.event_type = "USER_LOGIN"
$ip  = coalesce($login.principal.asset.ip, $login.principal.ip)
( not ($ip in cidr %ENTERPRISE_EGRESS_CIDRS)
 or strings.concat(ip_to_asn($ip), "") in %VPN_TOR_ASNS )
$acct = coalesce($login.principal.user.userid, $login.principal.user.email_addresses)

$http.metadata.product_name in ("Entra ID","Microsoft")
($http.metadata.event_type = "NETWORK_HTTP" or $http.target.url != "")
$acct = coalesce($http.principal.user.userid, $http.principal.user.email_addresses)
strings.to_lower(coalesce($http.target.url, "")) in regex %M365_SENSITIVE_GRAPH_REGEX

match:
$acct over 30m

调优和异常

  • 身份连接 - 横向规则按IP分组以增强鲁棒性。如果您有强身份规范化(Salesforce <-> Okta <-> M365),克隆它并通过用户电子邮件而不是IP匹配。
  • 更改窗口 - 在批准的数据迁移/连接应用程序上线期间抑制时间绑定规则(临时将供应商应用程序添加到ALLOWLIST_CONNECTED_APP_NAMES)。
  • 集成账户 - 保持KNOWN_INTEGRATION_USERS最新;窃取规则中的大多数噪声来自计划的ETL。
  • 出口卫生 - 保持ENTERPRISE_EGRESS_CIDRS最新;过时的NAT/VPN范围会增加VPN/Tor发现。
  • 流式与存储 - 上述规则假设实时事件监控流式对象(例如ApiEventStream、ReportEventStream、ListViewEventStream、BulkApiResultEvent)。对于历史狩猎,使用相同逻辑查询存储的等效项(例如ApiEvent、ReportEvent、ListViewEvent)。

基于IOC的检测

场景和目标

恶意威胁行为者已成功访问或尝试访问组织的网络。

目标是基于所有可用日志检测环境中已知UNC6040 IOC的存在。

参考列表

组织应维护的参考列表:

  • STRING
    • UNC6040_IOC_LIST(来自威胁情报源的IP地址,例如VirusTotal)

高保真检测目录(伪代码)

检测到UNC6040 IP_IoC

在组织的环境中检测到与UNC6040相关的已知IOC,无论是来自源还是目标连接。

当条件为源或目标IP地址匹配已知UNC6040 IOC时,高保真。

1
($e.principal.ip in %unc6040_IoC_list) or ($e.target.ip in %unc6040_IoC_list)

致谢

我们要感谢Salesforce在构建本指南过程中的合作和帮助。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计