适用于 SAP 应用程序的 Microsoft Sentinel 解决方案 - 函数参考
本文介绍了安装适用于 SAP 的 Microsoft Sentinel 解决方案应用程序后工作区中可用的一系列函数。 通过在 Microsoft Sentinel 中浏览并加载函数代码来发现更多函数。
按如下所示查找函数:
- 在 Azure 门户的“常规”>“日志”页中的“函数”选项卡上,在“工作区函数”下列出。
本文中的内容适用于安全性团队。
在查询中使用函数,而不是基础日志或表
强烈建议尽可能使用本文列出的函数作为分析的主题,而不是基础日志或表。
这些函数旨在用作数据的主要用户接口。 它们构成了所有现成的内置分析规则和工作簿的基础。 使用函数可以对函数下的数据基础结构进行更改,而不会破坏用户创建的内容。
SAPUsersAssignments
SAPUsersAssignments 函数从多个 SAP 数据源收集数据,并为当前用户主数据(包括当前分配的角色和配置文件)创建以用户为中心的视图。
此函数汇总用户的角色分配和配置文件,并返回以下数据:
字段 | 说明 | 数据源/备注 |
---|---|---|
用户 | SAP 用户 ID | 仅限 SAL |
电子邮件 | SMTP 地址 | USR21 (SMTP_ADDR) |
UserType | 用户类型 | USR02 (USTYP) |
时区 | 时区 | USR02 (TZONE) |
LockedStatus | 锁定状态 | USR02 (UFLAG) |
LastSeenDate | 上次查看日期 | USR02 (TRDAT) |
LastSeenTime | 上次查看时间 | USR02 (LTIME) |
UserGroupAuth | 用户主数据维护中的用户组 | USR02 (CLASS) |
配置文件 | 配置文件集(默认最大集大小 = 50) | ["Profile 1", "Profile 2",...,"profile 50"] |
DirectRoles | 直接分配的角色集(默认最大集大小 = 50) | ["Role 1", "Role 2",...,"”"Role 50"] |
ChildRoles | 间接分配的角色集(默认最大集大小 = 50) | ["Role 1", "Role 2",...,"”"Role 50"] |
客户端 | 客户端 ID | |
SystemID | 系统 ID | 在连接器中定义 |
SAPUsersGetPrivileged
SAPUsersGetPrivileged 函数返回每个客户端和系统 ID 的特权用户列表。
当用户符合以下任何描述时,即被视为具有特权:
- 他们列在“SAP - 特权用户”监视列表中
- 他们被分配到“SAP - 敏感配置文件”监视列表中列出的配置文件
- 他们被添加到“SAP - 敏感角色”监视列表中列出的角色
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
TimeAgo | 可选 | 七天 | 确定函数是否搜寻从 TimeAgo 值定义的时间到 now() 值定义的时间范围内的用户主数据。 |
SAPUsersGetPrivileged 函数返回以下数据:
字段 | 说明 |
---|---|
用户 | SAP 用户 ID |
客户端 | 客户端 ID |
SystemID | 系统 ID |
SAPUsersAuthorizations
SAPUsersAuthorizations 函数将多个表中的数据汇集在一起,以生成当前的所分配角色和授权的以用户为中心的视图。 仅返回具有活动角色和授权分配的用户。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
TimeAgo | 可选 | 七天 | 确定函数是否搜寻从 TimeAgo 值定义的时间到 now() 值定义的时间范围内的用户主数据。 |
SAPUsersAuthorizations 函数返回以下数据:
字段 | 说明 | 说明 |
---|---|---|
用户 | SAP 用户 ID | |
角色 | 角色集(默认最大集大小 = 50) | ["Role 1", "Role 2",...,"Role 50"] |
AuthorizationsDetails | 授权集(默认最大集大小 = 100) | {{AuthorizationsDeatils1} ,{AuthorizationsDeatils2} ,。。。, {AuthorizationsDeatils100}} |
客户端 | 客户端 ID | |
SystemID | 系统 ID |
SAPConnectorHealth
SAPConnectorHealth 函数反映代理的和基础 SAP 系统的连接的状态。 它根据检测信号日志 SAP_HeartBeat_CL 和其他运行状况指示器返回以下数据:
字段 | 说明 |
---|---|
Agent | 代理配置中的代理 ID(自动生成) |
SystemID | SAP 系统 ID |
状态 | 总体连接状态 |
详细信息 | 连接性详细信息 |
ExtendedDetails | 连接性扩展详细信息 |
LastSeen | 最新活动的时间戳 |
StatusCode | 反映系统状态的代码 |
SAPConnectorOverview
SAPConnectorOverview 函数显示每个系统 ID 的每个 SAP 表的行计数。 它返回每个系统 ID 的数据记录及其生成时间的列表。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
TimeAgo | 可选 | 七天 | 确定函数是否搜寻从 TimeAgo 值定义的时间到 now() 值定义的时间范围内的用户主数据。 |
SAPConnectorOverview 函数返回以下数据:
字段 | 说明 |
---|---|
TimeGenerated | 记录生成时间戳的日期/时间值 |
SystemID_s | 一个表示 SAP 系统 ID 的字符串 |
使用以下 Kusto 查询执行每日趋势分析:
SAPConnectorOverview(7d)
| summarize count() by bin(TimeGenerated, 1d), SystemID_s
SAPUsersEmail
SAPUsersEmail 函数允许针对每个 SAP 系统和客户端的 SAP 用户电子邮件地址进行面向性能的查找,通常用于将其与 Active Directory 帐户相关联。
SAPUsersEmail 函数使用从 SAP 表 USR21(用户名/地址键分配)和 ADR6(电子邮件地址)中提取的数据来查找电子邮件地址。 如果找不到电子邮件地址,则返回用户 ID。
此行为可确保 SAP 服务帐户(例如 DDIC,这些帐户通常与电子邮件地址不关联)被记录为伪 AD 帐户。 这也开辟了一些 UEBA 功能,有助于调查事件和搜寻活动。
SAPUsersEmail 函数返回以下数据:
字段 | 说明 |
---|---|
ClientID | SAP 客户端 ID |
SystemID | SAP 系统 ID |
用户 | SAP 用户 ID |
电子邮件 | SAP 用户的电子邮件地址 |
SAPSystems
SAPSystems 函数用于集中展示使用“SAP - 系统”监视列表进行的每系统配置。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
SelectedSystems | 可选 | All Systems |
用于筛选特定 SAP 系统 |
SelectedSystemRoles | 可选 | All System Roles |
确定要查看的 SAP 系统的角色(如“SAP - 系统”监视列表中所定义) |
SAPSystems 函数返回以下数据:
字段 | 说明 | 数据源/备注 |
---|---|---|
SearchKey | 搜索键 | SAP 系统 ID 的索引字段 |
SystemRole | SAP 系统的角色 | 生产、UAT |
SystemUsage | SAP 系统的主要用法 | ERP、CRM |
SystemID | SAP 系统 ID |
SAPAuditLogConfiguration
SAPAuditLogConfiguration 函数将 SAP 审核日志警报的本地配置返回到为 Microsoft Sentinel 启用的 Log Analytics 工作区。 此配置用于 SAP 审核日志相关的警报。
SAPAuditLogConfiguration 函数将“SAP 动态审核日志监视器配置”和“SAP - 系统”监视列表中的数据联接起来,以按系统角色提供每系统配置。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
SelectedSystems | 可选 | All Systems |
用于筛选要查看的特定 SAP 系统。 |
SelectedSystemRoles | 可选 | All System Roles |
确定要查看的 SAP 系统的角色(如“SAP - 系统”监视列表中所定义)。 |
SelectedSeverities | 可选 | 【High ,Medium 】 |
用于根据严重性确定要查看的事件。 每个 SAP 审核日志消息 ID 和系统角色的严重性在 SAP_Dynamic_Audit_Log_Monitor_Configuration 监视列表中定义。 |
SelectedRuleTypes | 可选 | All RuleTypes |
确定哪些事件与检测异常相关。 每个 SAP 审核日志消息 ID 和系统角色的规则类型在 SAP_Dynamic_Audit_Log_Monitor_Configuration 监视列表中定义。 |
SAPAuditLogConfiguration 函数返回以下数据:
字段 | 说明 | 数据源/备注 |
---|---|---|
CategoryName | SAP 给定事件类别 | “SAP 动态审核日志监视器配置”监视列表 |
DestinationEmail | 指派团队的电子邮件地址 | “SAP 动态审核日志监视器配置”监视列表 |
DetailedDescription | 要在警报上显示的 Markdown 格式文本 | “SAP 动态审核日志监视器配置”监视列表 |
消息 ID | SAP 审核日志消息 ID | “SAP 动态审核日志监视器配置”监视列表 |
MessageText | 消息文本示例 | “SAP 动态审核日志监视器配置”监视列表 |
RolesTagsToExclude | ABAP 角色、配置文件或自定义文本标记 | “SAP 动态审核日志监视器配置”监视列表 |
RuleType | 异常或确定性 | “SAP 动态审核日志监视器配置”监视列表 |
策略 | MITRE ATTA&CK 策略 | “SAP 动态审核日志监视器配置”监视列表 |
TeamsChannelID | Teams 通道 | “SAP 动态审核日志监视器配置”监视列表 |
SystemID | SAP 系统 ID | “SAP - 系统”监视列表 |
SystemRole | SAP 系统的角色 | “SAP - 系统”监视列表 |
SystemUsage | SAP 系统的主要用法 | “SAP - 系统”监视列表 |
IsProd | 生产系统标志 | “SAP - 系统”监视列表 |
严重性 | 推导出的严重性 | 按系统使用情况的严重性 |
阈值 | 推导出的阈值 | 每个系统使用情况的事件计数 |
BagOfDetails | 详细信息包 | 详细描述事件定义的字典 |
有关详细信息,请参阅可用监视列表。
SAPAuditLogAnomalies
SAPAuditLogAnomalies 函数使用 Microsoft Sentinel 的基础 Kusto 数据库的内置机器学习功能,帮助检测在 SAP 审核日志中观察到的异常事件。
SAPAuditLogAnomalies 函数是为“SAP - (实验性)基于动态异常的审核日志监视器警报”分析规则开发的。 虽然其原始设计是为了对最近的异常发出警报,但它也可以帮助突出显示历史异常。 有关详细信息,请参阅示例使用。
SAPAuditLogAnomalies 函数在以下级别学习由不同输入参数定义的历史记录切片:
- 用户
- 网络属性
- 系统
- 季节性
- 活动级别
然后,SAPAuditLogAnomalies 函数根据学到的内容判断在最后一个 DetectingTime
时间跨度内发生的事件,并应用从 SAP 审核日志配置监视列表中获得的阈值和其他可配置的排除标准。
一旦用户活动的滑动窗口被视为异常,第二个查询将返回整个用户活动作为支持该决策的证据。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
LearningTime | 可选 | 14 天 | 确定用于模型学习的时间跨度。 |
DetectingTime | 可选 | 一小时 | 确定要查看的检测异常的时间跨度。 使用 DetectingTime = 0h 调用此函数将突出显示整个 LearningTime 时间跨度中的异常。 |
SelectedSystems | 可选 | All Systems |
用于筛选要查看的特定 SAP 系统。 |
SelectedSystemRoles | 可选 | All System Roles |
确定要查看的 SAP 系统的角色(如“SAP - 系统”监视列表中所定义) |
SelectedSeverities | 可选 | 【High ,Medium 】 |
用于根据严重性确定要查看的事件。 每个 SAP 审核日志消息 ID 和系统角色的严重性在 SAP_Dynamic_Audit_Log_Monitor_Configuration 监视列表中定义。 |
SelectedPrefixMask | 可选 | 24 | 用于确定学习和检测所用的子网掩码级别。 |
SelectedRuleTypes | 可选 | AnomaliesOnly |
确定哪些事件与检测异常相关。 每个 SAP 审核日志消息 ID 和系统角色的规则类型在 SAP_Dynamic_Audit_Log_Monitor_Configuration 监视列表中定义。 |
SAPAuditLogAnomalies 函数返回以下数据:
字段 | 说明 |
---|---|
SAPAuditLog 中的多个字段 | SAP 审核日志中的关键字段 |
SAPAuditLogConfiguration 中的多个字段 | 适用于 SAP 的 Microsoft Sentinel 审核日志配置中的关键字段 |
DiscoveredOn | 观察到异常的整点时间 |
EventCount | 按返回的行计数的事件数 |
AnomalCount | 相关滑动窗口中观察到的事件数 |
MinTime | 观察到的第一个事件的时间 |
MaxTime | 观察到的最后一个事件的时间 |
分数 | 异常模型生成的异常分数 |
建议:
与任何机器学习解决方案一样,SAPAuditLogAnomalies 函数随着时间的推移表现更好,并且可以随着时间推移根据需要进行调整。
建议使用许多可用的输入参数将学习的数据库的大小限制在 1 亿条记录以下。
若要针对在 SAP_Dynamic_Audit_Log_Monitor_Configuration 监视列表中标记为 AnomaliesOnly 的事件类型,在生产系统上搜索过去一小时内发生的高严重性事件的异常,请运行:
SAPAuditLogAnomalies(LearningTime = 14d, DetectingTime=1h, SelectedSystemRoles= dynamic(["Production"]), SelectedSeverities= dynamic(["High"]), SelectedRuleTypes= dynamic(["AnomaliesOnly"]))
若要搜索 BIP 系统中过去 14 天的所有异常,请运行:
SAPAuditLogAnomalies(LearningTime = 14d, DetectingTime=0h, SelectedSystems= dynamic(["BIP"]))
有关详细信息,请参阅监视 SAP 审核日志的内置 SAP 分析规则和使用适用于 SAP 的 Microsoft Sentinel 解决方案对 SAP 审核日志进行异常检测(博客)。
SAPAuditLogConfigRecommend
SAPAuditLogConfigRecommend 是一个帮助器函数,旨在为基于 SAP - 动态异常的审核日志监视器警报(预览版)分析规则的配置提供建议。
有关详细信息,请参阅监视 SAP 审核日志。
SAPUsersGetVIP
适用于 SAP 的 Microsoft Sentinel 解决方案应用程序使用中心用户标记和显式排除的概念,旨在帮助你轻松减少误报。
使用 SAPUsersGetVIP 函数通过指定 SAP 用户角色、SAP 用户功能或代表用户的标记将这些用户从触发警报的操作中排除。 有关详细信息,请参阅在 Microsoft Sentinel 中处理误报。
如果已将标记指定为 SAPUsersGetVIP 函数的输入,则这些标记会排除其标记已在 SAP_User_Config 监视列表中列出的所有用户。 相同的功能已扩展为使用通配符,允许你将单个标记分配给命名语法相同的一组用户。
将 SAP_User_Config 监视列表中的用户标记如下:
根据需要向 SAP_User_Config 监视列表中的每个用户添加多个标记,以涵盖各种情况。 每个预警规则都有自己的相关标记(如果有),你可以根据需要添加自定义标记。
使用星号 (*) 作为通配符来包含使用特定命名语法模板的用户。
在分析规则中添加 SAPUsersGetVIP 函数,以请求你已定义的要从警报中排除的用户列表。 在函数调用中添加一个数组,其中包含要排除的标记、SAP 角色和 SAP 配置文件。
例如,在分析规则中使用以下 KQL 查询来排除 SAP_User_Config 监视列表中配置有 RunObsoleteProgOK 标记的任何用户,或排除具有示例 SAP_BASIS_ADMIN_ROLE 角色或示例 SAP_ADMIN_PROFILE 配置文件的任何用户。
复制此示例函数调用时,请根据需要将 SAP_BASIS_ADMIN_ROLE 角色和 SAP_ADMIN_PROFILE 配置文件替换为你自己的 SAP 角色或配置文件。
例如:
// Execution of Obsolete/Insecure Program
let ObsoletePrograms = _GetWatchlist("SAP - Obsolete Programs");
// here you can exclude system users which are OK to run obsolete/ sensitive programs
// by adding those users in the SAP_User_Config watchlist with a tag of 'RunObsoleteProgOK'
// can also specify SAP roles or SAP profiles that group the users you would like to exclude
let excludeUsersTagsRolesProfiles= dynamic(["RunObsoleteProgOK","SAP_BASIS_ADMIN_ROLE", "SAP_ADMIN_PROFILE"]);
let excludedUsers= SAPUsersGetVIP(SearchForTags= excludeUsersTagsRolesProfiles)| summarize by User2Exclude=SAPUser;
// Query logic
SAPAuditLog
| where MessageID == 'AUW'
| where ABAPProgramName in (ObsoletePrograms) // The program is obsolete
| join kind=leftantisemi excludedUsers on $left.User == $right.User2Exclude
SAPUsersGetVIP 函数通常用在确定性和异常审核日志监视器警报中。 将标记与 SAP 审核日志消息 ID 相关联,或将规则模板扩展为符合组织需求的自定义规则。
提示
建议联系 SAP 系统管理员,了解要在 SAP_User_Config 监视列表中包含哪些 SAP 用户、角色和配置文件。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
SearchForTags | 可选 | dynamic('All Tags') |
当 SearchForTags 等于 All Tags 时,将返回所有用户及其标记。 否则仅返回具有 SearchForTags 中指定的标记、SAP 角色或 SAP 配置文件的用户。 TagsIntersect 显示找到的标记,IntersectionSize 保存找到的标记的数量。 |
SpecialFocusTags | 可选 | Do not return any in-focus users |
返回带有 SpecialFocusTags 中指定的标记的所有用户,用 specialFocusTagged = true 标记这些用户。 |
SAPUsersGetVIP 函数返回以下输出:
Source | 字段 | 说明 | 备注 |
---|---|---|---|
SAP_User_Config 监视列表 | SearchKey |
搜索键 | |
SAP_User_Config 监视列表 | SAPUser |
SAP 用户 | OSS、DDIC |
SAP_User_Config 监视列表 | Tags |
分配给用户的标记字符串 | RunObsoleteProgOK |
SAP_User_Config 监视列表 | 用户的 Microsoft Entra 对象 ID | Microsoft Entra 对象 ID | |
SAP_User_Config 监视列表 | 用户标识符 | Azure Directory 用户标识符 | |
SAP_User_Config 监视列表 | 用户本地 SID | ||
SAP_User_Config 监视列表 | 用户主体名称 | ||
SAP_User_Config 监视列表 | TagsList |
分配给用户的标记列表 | ChangeUserMasterDataOK ;RunObsoleteProgOK |
逻辑 | TagsIntersect | 匹配 SearchForTags 的一组标记 |
["ChangeUserMasterDataOK","RunObsoleteProgOK"] |
逻辑 | SpecialFocusTagged | 特殊焦点指示 | True ,False |
逻辑 | IntersectionSize | 相交标记的数目 |
SAPUsersHeader
SAPUsersHeader 函数旨在提供 SAP 用户的概要视图。 它使用从 SAP 用户主数据表和 SAP 审核日志中的最近活动中提取的数据来收集电子邮件和 IP 地址。 然后返回最后已知的电子邮件和 IP 地址以及主要电子邮件和 IP 地址。
参数:
名称 | 可选/必需 | 默认值 | 说明 |
---|---|---|---|
SelectedSystems | 可选 | All Systems |
用于筛选要查看的特定 SAP 系统 |
SelectedSystemRoles | 可选 | All System Roles |
确定要查看的 SAP 系统的角色(如“SAP - 系统”监视列表中所定义)。 |
SelectedUsers | 可选 | All Users |
可以输入用户列表。 |
SelectedUser | 可选 | All Users |
仅接受单个用户。 |
例如:
SelectedSystemRoles:dynamic = dynamic(["All System Roles"]) SelectedSystems:dynamic = dynamic(["All Systems"]) SelectedUsers:dynamic = dynamic(["All Users"]) SelectedUser:string = "All Users"
提示
出于性能考虑,仅考虑几天的审核活动。 有关用户活动的完整历史记录,请针对 SAPAuditLog 函数运行自定义 KQL 查询。
SAPUsersHeader 函数返回以下数据:
Source | 字段 | 说明 | 说明 |
---|---|---|---|
用户 | SAP 用户 | ||
SAP 表 ADR6 和 USR21 | 电子邮件 | 从用户的主数据中获取 | OSS、DDIC |
SAP 表 USR02 | UserType | 分配给用户的标记字符串 | RunObsoleteProgOK |
SAP 表 USR02 | 时区 | Microsoft Entra 对象 ID | |
SAP 表 USR02 | LockedStatus | Azure Directory 用户标识符 | |
SAP 审核日志 | LastSeen | 时间戳 | 为用户观察到的最后一个审核事件 |
SAP 审核日志 | LastSeenDaysAgo | 自 LastSeen 以来已过去的天数 |
|
SAP 审核日志 | PrimaryIP | 最常用的 IP 地址 | ChangeUserMasterDataOK ;RunObsoleteProgOK |
SAP 审核日志 | LastKnownIP | 最近使用的 IP 地址 | ["ChangeUserMasterDataOK","RunObsoleteProgOK"] |
SAP 审核日志 | PrimaryEmail | 最常用的电子邮件地址 | True ,False |
SAP 审核日志 | KnownIPs | 已知 IP 地址列表 | 按最频繁的优先排序 |
SAP 审核日志 | KnownEmails | 已知电子邮件地址列表 | 按最频繁的优先排序 |
客户端 | SAP 客户端 ID | ||
SystemID | SAP 系统 ID | ||
SystemRole | SAP 系统的角色 | 生产、UAT | |
SystemUsage | SAP 系统的主要用法 | ERP、CRM |
相关内容
有关详细信息,请参阅: