收集 Microsoft System Center Endpoint Protection (SCEP) 日志
本文档介绍了如何通过使用 Microsoft Azure Blob Storage V2 设置 Google Security Operations Feed 来收集 Microsoft System Center Endpoint Protection (SCEP) 日志。
Microsoft System Center Endpoint Protection (SCEP) 是一款与 System Center Configuration Manager (SCCM) 集成的企业反恶意软件和防病毒解决方案。SCEP 可为基于 Windows 的端点提供实时保护,防范恶意软件、病毒、间谍软件和其他恶意软件。SCEP 会将安全事件写入 Microsoft-Windows-Windows Defender/Operational Windows 事件日志渠道,这些事件可以使用 Azure 监视器代理收集并导出到 Azure Blob Storage。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例
- 对 Microsoft Azure 门户的特权访问权限,包括:
- 创建存储账号
- 创建和管理 Log Analytics 工作区
- 创建和管理数据收集规则
- 配置数据导出规则
- 管理访问密钥
- 安装了 SCEP 的 Windows Server 2012 R2 或更高版本,或者安装了 Windows Defender 防病毒软件的 Windows Server 2016 或更高版本
- 安装在 Windows 服务器上的 Azure Monitor 代理(需要 Azure Arc 来支持本地服务器,或需要原生支持 Azure 虚拟机)
部署 SCEP 的 Windows 服务器上的管理员访问权限
配置 Azure 存储账号
创建存储账号
- 在 Azure 门户中,搜索存储账号。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择现有组或创建新组 存储账号名称 输入唯一名称(例如 sceplogssa)区域 选择区域(例如 East US)性能 标准(推荐) 冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储) 点击检查 + 创建。
查看账号概览,然后点击创建。
等待部署完成。
获取存储账号凭据
- 前往您刚刚创建的存储账号。
- 在左侧导航栏中,选择安全性 + 网络下的访问密钥。
- 点击显示密钥。
- 复制并保存以下内容以供日后使用:
- 存储账号名称:您创建的名称(例如
sceplogssa) - 密钥 1 或密钥 2:共享访问密钥(采用 base-64 编码的 512 位随机字符串)
- 存储账号名称:您创建的名称(例如
获取 Blob 服务端点
- 在同一存储账号中,从左侧导航栏中选择端点。
- 复制并保存 Blob 服务端点网址。
- 示例:
https://sceplogssa.blob.core.windows.net/
- 示例:
创建 Log Analytics 工作区
- 在 Azure 门户中,搜索 Log Analytics 工作区。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择与存储账号相同的资源组 名称 输入唯一名称(例如 scep-logs-workspace)区域 选择与存储账号相同的区域 点击检查 + 创建。
点击创建。
等待部署完成。
在 Windows 服务器上安装 Azure 监视器代理
对于运行 SCEP 的本地服务器,您必须先将服务器载入到 Azure Arc,然后安装 Azure Monitor 代理。
加入 Azure Arc(仅限本地服务器)
- 在 Azure 门户中,搜索 Azure Arc。
- 在基础架构下,选择服务器。
- 点击添加。
- 选择添加单个服务器,然后点击生成脚本。
- 提供以下配置详细信息:
- 订阅:选择您的 Azure 订阅
- 资源组:选择您的资源组
- 区域:选择与存储账号相同的区域
- 操作系统:选择 Windows
- 点击下载并运行脚本。
- 在运行 SCEP 的 Windows 服务器上,以管理员身份打开 PowerShell。
运行下载的脚本以完成 Azure Arc 初始配置。
安装 Azure Monitor 代理
- 在 Azure 门户中,依次前往 Azure Arc > 服务器(或 虚拟机,如果是 Azure 虚拟机)。
- 选择运行 SCEP 的服务器。
- 在左侧导航栏中,选择设置下的扩展程序。
- 点击添加。
- 搜索并选择 Azure Monitor 代理。
- 点击下一步,然后点击检查并创建。
- 点击创建。
- 等待扩展程序安装完成。
为 SCEP 事件创建数据收集规则
- 在 Azure 门户中,搜索监控。
- 在设置下,选择数据收集规则。
- 点击 + 创建。
- 在基本标签页中,提供以下配置详细信息:
- 规则名称:输入一个描述性名称(例如
dcr-scep-events) - 订阅:选择您的 Azure 订阅
- 资源组:选择您的资源组
- 区域:选择与 Log Analytics 工作区相同的区域
- 平台类型:选择 Windows
- 规则名称:输入一个描述性名称(例如
- 点击下一步:资源。
- 在资源标签页中:
- 点击 + 添加资源。
- 展开资源组,然后选择运行 SCEP 的服务器(Azure Arc 服务器或 Azure 虚拟机)。
- 点击应用。
- 点击下一部分:收集和交付。
在取件和送达标签页中:
- 点击 + 添加数据源。
- 在数据源类型下拉菜单中,选择 Windows 事件日志。
- 选择自定义以输入 XPath 查询。
点击 + 添加 XPath 查询,然后输入以下 XPath 查询以收集所有 SCEP 和 Windows Defender 事件:
Microsoft-Windows-Windows Defender/Operational!*[System[(Level=1 or Level=2 or Level=3 or Level=4 or Level=5)]]此 XPath 查询从 Windows Defender Operational 渠道收集所有事件(严重、错误、警告、信息和详细)。如需仅收集特定事件 ID(例如恶意软件检测),请使用更具针对性的查询,例如:
Microsoft-Windows-Windows Defender/Operational!*[System[(EventID=1006 or EventID=1007 or EventID=1116 or EventID=1117 or EventID=2000 or EventID=2001 or EventID=5007)]]在目标标签页中,点击 + 添加目标。
选择 Azure Monitor 日志作为目标类型。
选择您之前创建的 Log Analytics 工作区(例如
scep-logs-workspace)。
点击添加数据源。
点击 Review + create(检查 + 创建)。
点击创建。
收集的关键事件 ID
数据收集规则从 Microsoft-Windows-Windows Defender/Operational 渠道收集事件,其中包括以下关键 SCEP 事件 ID:
| 事件 ID | 说明 |
|---|---|
| 1006 | 反恶意软件引擎检测到恶意软件 |
| 1007 | 针对检测到的恶意软件采取了反恶意软件措施 |
| 1116 | 实时防护功能检测到恶意软件或潜在的垃圾软件 |
| 1117 | 实时防护功能针对恶意软件采取了行动 |
| 2000 | 已开始更新恶意软件防护签名 |
| 2001 | 反恶意软件签名更新完成 |
| 5007 | 反恶意软件平台配置已更改 |
将数据从 Log Analytics 工作区导出到 Azure Blob Storage
注册 Microsoft.Insights 资源提供程序
- 在 Azure 门户中,前往订阅。
- 选择您的订阅。
- 在左侧导航栏中,选择设置下的资源提供方。
- 搜索 Microsoft.Insights。
- 如果状态不是已注册,请选择相应应用,然后点击注册。
创建数据导出规则
- 在 Azure 门户中,前往您的 Log Analytics 工作区(例如
scep-logs-workspace)。 - 在左侧导航栏中,选择设置下的数据导出。
- 点击 + 新导出规则。
- 在基本标签页中:
- 数据导出规则名称:输入一个描述性名称(例如
export-scep-to-blob)
- 数据导出规则名称:输入一个描述性名称(例如
- 点击下一步:来源。
在来源标签页中,选择事件表。
点击下一步:目的地。
在目标标签页中:
- 目标类型:选择存储账号
- 订阅:选择包含存储账号的订阅
- 存储账号:选择您之前创建的存储账号(例如
sceplogssa)
点击下一步:检查并创建。
点击创建。
配置完成后,系统会自动将事件导出到存储账号。在存储账号中创建名为
am-Event的容器。Blob 存储在 5 分钟文件夹中,采用以下路径结构:am-Event/ └── WorkspaceResourceId=/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.operationalinsights/workspaces/{workspace}/ └── y={year}/m={month}/d={day}/h={hour}/m={minute}/ └── PT05M.json
验证数据导出
- 在 Azure 门户中,前往存储账号(例如
sceplogssa)。 - 在左侧导航栏中,选择数据存储区下的容器。
- 验证容器
am-Event是否存在。 - 进入容器,并验证是否正在文件夹结构中创建包含事件数据的 JSON 文件。
在 Google SecOps 中配置 Feed 以注入 Microsoft System Center Endpoint Protection (SCEP) 日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Microsoft SCEP Logs)。 - 选择 Microsoft Azure Blob Storage V2 作为来源类型。
- 选择 Microsoft System Center Endpoint Protection (SCEP) 作为日志类型。
- 点击下一步。
为以下输入参数指定值:
- Azure URI:输入包含容器路径的 Blob 服务端点网址:
https://sceplogssa.blob.core.windows.net/am-Event/替换以下内容:
sceplogssa:您的 Azure 存储账号名称。am-Event:用于存储导出事件的 Blob 容器名称。
- 来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件。
- 删除已转移的文件:在成功转移后删除文件。
- 删除已转移的文件和空目录:成功转移后删除文件和空目录。
- 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)
- 共享密钥:输入您从存储账号中捕获的共享密钥值(访问密钥)
- 资产命名空间:资产命名空间
- 注入标签:要应用于此 Feed 中事件的标签
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
配置 Azure 存储防火墙(如果已启用)
如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。
- 在 Azure 门户中,前往您的存储账号。
- 在安全性 + 网络下,选择网络。
- 在防火墙和虚拟网络下,选择从所选虚拟网络和 IP 地址启用。
- 在防火墙部分的地址范围下,点击 + 添加 IP 范围。
以 CIDR 表示法添加每个 Google SecOps IP 范围。
如需获取当前的 IP 范围,请执行以下操作:
- 请参阅 IP 许可名单文档
- 或者使用 Feed Management API 以编程方式检索这些信息
此外,请选中允许受信任的服务列表中的 Azure 服务访问此存储账号复选框,以允许 Log Analytics 工作区数据导出功能将数据写入存储账号。
点击保存。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| about.hostname | about.hostname | 设置为“%{_DB_HOST}” |
| _DB_PORT | about.port | 直接复制的值,已转换为整数 |
| _DB_DRIVER | about.resource.name | 设置为“%{_DB_DRIVER}” |
| _DB_URL | about.url | 设置为“%{_DB_网址}” |
| signature_labels | event.idm.read_only_udm.additional.fields | 如果签名不为空,则从 signature_labels 合并;如果 PendingAction 不为空,则从 pending_action 合并;如果 ExecutionStatus 不为空,则从 execution_status 合并;如果 RecordID 不为空,则从 record_id 合并;如果 ErrorCode 不为空,则从 error_code 合并;如果 ActionSuccess 不为空,则从 action_success 合并 |
| pending_action | event.idm.read_only_udm.additional.fields | |
| execution_status | event.idm.read_only_udm.additional.fields | |
| record_id | event.idm.read_only_udm.additional.fields | |
| error_code | event.idm.read_only_udm.additional.fields | |
| action_success | event.idm.read_only_udm.additional.fields | |
| source_url | event.idm.read_only_udm.src.url | 如果 source_url 不为空,则取自 source_url;否则,如果 my_string1 不为空,则取自 my_string1 |
| my_string1 | event.idm.read_only_udm.src.url | |
| has_principal | metadata.event_type | 如果 has_principal 和 has_target 为 true,则设置为“NETWORK_CONNECTION”;否则,如果 has_principal 为 true,则设置为“STATUS_UPDATE”;否则,如果 not no_target_host 和 path_available 为 true,则设置为“SCAN_FILE”;否则,如果 not no_target_host,则设置为“STATUS_UNCATEGORIZED”;否则,如果 has_user 为 true,则设置为“USER_UNCATEGORIZED”;否则,设置为“GENERIC_EVENT” |
| has_user | metadata.event_type | |
| has_target | metadata.event_type | |
| no_target_host | metadata.event_type | |
| path_available | metadata.event_type | |
| 名称 | metadata.product_event_type | 直接复制值 |
| DetectionID | metadata.product_log_id | 直接复制值 |
| metadata.product_name | metadata.product_name | 设置为“MICROSOFT SYSTEM CENTER ENDPOINT PROTECTION” |
| metadata.vendor_name | metadata.vendor_name | 设置为“MICROSOFT” |
| NTdomain | principal.administrative_domain | 直接复制值 |
| 主机名 | principal.asset.hostname | 如果主机名不为空,则取自主机名;否则,取自 TargetHost |
| TargetHost | principal.asset.hostname | |
| action_type | principal.group.attribute.labels | 如果 action_type 不为空,则从 action_type_label 合并 |
| 主机名 | principal.hostname | 如果主机名不为空,则取自主机名;否则,取自 TargetHost |
| TargetHost | principal.hostname | |
| 流程 | principal.process.file.full_path | 如果 Process 不为空,则直接复制值 |
| 用户名 | principal.user.user_display_name | 直接复制值 |
| 用户名 | principal.user.userid | 如果 UserName 不为空,则返回 UserName 中的值;否则,如果 user 不为空,则返回 user 中的值 |
| 用户 | principal.user.userid | |
| 操作 | security_result.action | 根据操作值(成功/创建/开始/传送/允许时为 ALLOW,失败/已屏蔽/拆除/延迟/删除/拒绝/丢弃/出错/锁定时为 BLOCK,acl_modified/修改时为 ALLOW_WITH_MODIFICATION,隔离时为 QUARANTINE)或 CleanAction(失败时为 FAIL,隔离时为 QUARANTINE,允许时为 ALLOW,屏蔽时为 BLOCK)设置 |
| CleanAction | security_result.action | |
| CleanAction | security_result.action_details | 如果 CleanAction 不为空,则直接复制值 |
| 类别 | security_result.category_details | 如果非空,则从类别合并,否则从类别合并 |
| 类别 | security_result.category_details | |
| DetectionID | security_result.detection_fields | 如果 DetectionID 不为空,则从 DetectionID_field 合并;如果 detectionid 不为空,则从 detectionid_field 合并;如果 detection_source 不为空,则从 detection_source_labels 合并;如果 pending_action 不为空,则从 pending_action_labels 合并;如果 source_url、file_path 和 Path 均不为空,则从 detection_Path 合并 |
| detectionid | security_result.detection_fields | |
| detection_source | security_result.detection_fields | |
| pending_action | security_result.detection_fields | |
| 路径 | security_result.detection_fields | |
| 和程度上减少 | security_result.severity | 根据严重程度(0/1/2/3/LOW 为 LOW,4/5/6/MEDIUM/SUBSTANTIAL/INFO 为 MEDIUM,7/8/HIGH/SEVERE 为 HIGH,9/10/VERY-HIGH/CRITICAL 为 CRITICAL)或 SeverityID(1 为 LOW,2 为 MEDIUM,4 为 HIGH,5 为 CRITICAL,其他为 UNKNOWN_SEVERITY)设置 |
| SeverityID | security_result.severity | |
| SeverityID | security_result.severity_details | 直接复制值 |
| ThreatID | security_result.threat_id | 直接复制值 |
| ThreatName | security_result.threat_name | 直接复制值 |
| MaliciousFileCt | security_result.verdict_info | 直接复制的值,转换为整数,合并为 malicious_file_ct |
| dest_nt_domain | target.administrative_domain | 直接复制值 |
| dest_name | target.asset.hostname | 如果 dest_name 不为空,则直接复制值 |
| file_path | target.file.full_path | 如果 file_path 不为空,则返回 file_path 中的值;否则,如果 Path 不为空,则返回 Path 中的值;否则,如果 my_string 不为空,则返回 my_string 中的值 |
| 路径 | target.file.full_path | |
| my_string | target.file.full_path | |
| dest_name | target.hostname | 如果 dest_name 不为空,则直接复制值 |
| ResourceID | target.resource.name | 如果 ResourceID 不为空,则取自 ResourceID;否则,如果 resourceid 不为空,则取自 resourceid |
| resourceid | target.resource.name | |
| 用户 | target.user.userid | 如果用户不为空,则直接复制值 |
| 时间 | metadata.event_timestamp | 如果时间不为空,则使用“MMM dd HH:mm:ss”格式从时间转换;否则,使用 UNIX_MS 从 DetectionTime 或 detectiontime 转换 |
| DetectionTime | metadata.event_timestamp | |
| detectiontime | metadata.event_timestamp |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。