收集 Epic Systems 日志
支持的平台:
Google SecOps
SIEM
本文档介绍了如何使用 Bindplane 代理将 Epic Systems 日志收集到 Google 安全运营团队。解析器会将原始 Epic EMR/EHR 系统日志转换为统一数据模型 (UDM)。该工具首先会清理和结构化日志消息、提取键值对,然后将提取的字段映射到相应的 UDM 字段,处理各种日志格式和数据不一致性,以确保全面且标准化的数据表示。
准备工作
- 确保您有一个 Google Security Operations 实例。
- 确保您使用的是 Windows 2016 或更高版本,或者使用了带有
systemd
的 Linux 主机。 - 如果在代理后面运行,请确保防火墙端口处于打开状态。
- 确保您拥有对 Epic Systems 的超级用户访问权限。
获取 Google SecOps 提取身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载提取身份验证文件。将该文件安全地保存在将安装 BindPlane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次选择 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
安装 Bindplane 代理
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安装资源
- 如需了解其他安装选项,请参阅此安装指南。
配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml
文件。通常,在 Linux 上,该目录位于/etc/bindplane-agent/
目录中;在 Windows 上,该目录位于安装目录中。 - 使用文本编辑器(例如
nano
、vi
或记事本)打开该文件。
- 找到
按如下方式修改
config.yaml
文件:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: EPIC raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
根据基础架构中的需要替换端口和 IP 地址。
将
<customer_id>
替换为实际的客户 ID。在获取 Google SecOps 提取身份验证文件部分中,将
/path/to/ingestion-authentication-file.json
更新为身份验证文件的保存路径。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent
如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop BindPlaneAgent && net start BindPlaneAgent
配置 SendSIEMSyslogAudit 服务
- 登录 Epic Systems 控制台。
- 依次前往开始 > Epic > 互连 >
<your instance>
> 配置编辑器。 - 选择商家服务表单。
- 在服务类别标签页中,选择 SendSIEMSyslogAudit。
- 点击保存。
配置 Epic Systems 以导出 syslog
- 依次前往 Epic 系统定义 > 安全性 > 审核选项 > SIEM syslog 设置。
- 提供以下配置详细信息:
- 主机:输入 Bindplane 代理 IP 地址。
- 端口:输入 Bindplane 代理端口号。
- SIEM 格式:选择 CEF(通用事件格式)。
- Syslog 结束字符:选择新行“\n”。
- 从 SIEM syslog 设置菜单中,选择 SIEM syslog。
- 点击已启用。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
APIID | read_only_udm.additional.fields.api.value.string_value | 值取自原始日志中的 APIID 字段 |
APPLICATIONID | read_only_udm.additional.fields.application_id.value.string_value | 值取自原始日志中的 APPLICATIONID 字段 |
应用 | read_only_udm.target.application | 值取自原始日志中的 APP 字段 |
审核会话 | read_only_udm.network.session_id | 值取自原始日志中的 AUDIT SESSION 字段 |
AUTH_SOURCE | 此字段未映射到 UDM | |
BCAPCS | read_only_udm.target.application | 值取自原始日志中的 BCAPCS 字段 |
BTGEXPLANATION | read_only_udm.security_result.description | 值取自原始日志中的 BTGEXPLANATION 字段 |
BTGNOACCESSREAS | read_only_udm.security_result.summary | 值取自原始日志中的 BTGNOACCESSREAS 字段 |
BTGREASON | read_only_udm.security_result.summary | 值取自原始日志中的 BTGREASON 字段 |
CLIENTNAME | read_only_udm.principal.hostname | 值取自原始日志中的 CLIENTNAME 字段 |
CSISESS_TOKEN | read_only_udm.network.session_id | 值取自原始日志中的 CSISESS_TOKEN 字段 |
CTXT | read_only_udm.metadata.description | 值取自原始日志中的 CTXT 字段 |
CVG | read_only_udm.additional.fields.cvg.value.string_value | 值取自原始日志中的 CVG 字段 |
DAT | 此字段未映射到 UDM | |
DEP | read_only_udm.principal.user.department | 值取自原始日志中的 DEP 字段。如果原始日志中同时存在 NEWDEPARTMENT 和 PREVDEPARTMENT 字段,则值将为 PREVDEPARTMENT:-{PREVDEPARTMENT}, NEWDEPARTMENT:-{NEWDEPARTMENT} 。如果只有 NEWDEPARTMENT 存在,则值为 PREVDEPARTMENT:-NONE, NEWDEPARTMENT:{NEWDEPARTMENT} 。如果只有 PREVDEPARTMENT 存在,则值为 PREVDEPARTMENT:{PREVDEPARTMENT}, NEWDEPARTMENT:-NONE |
devTime | read_only_udm.metadata.event_timestamp | 值取自原始日志中的 devTime 字段,并转换为自公元纪年以来的秒数 |
devTimeFormat | 此字段未映射到 UDM | |
E3MID | read_only_udm.network.session_id | 值取自原始日志中的 E3MID 字段 |
ENCRYPTED | read_only_udm.additional.fields.encrypt.value.string_value | 值取自原始日志中的 ENCRYPTED 字段 |
ERRMSG | read_only_udm.security_result.summary | 值取自原始日志中的 ERRMSG 字段 |
eventCnt | 此字段未映射到 UDM | |
FILENAME | read_only_udm.target.file.full_path | 值取自原始日志中的 FILENAME 字段,并且 \\\\ 的所有出现都替换为 \ |
标志 | read_only_udm.security_result.description | 值取自原始日志中的标志字段,并移除所有前导和尾随 - |
HKUAPVER | read_only_udm.metadata.product_version | 值取自原始日志中的 HKUAPVER 字段 |
HKUDVCID | read_only_udm.principal.asset_id | 值取自原始日志中的 HKUDVCID 字段,格式为 Device ID:{HKUDVCID} |
HKUOSNAM | read_only_udm.principal.platform | 值取自原始日志中的 HKUOSNAM 字段,并根据值映射到 WINDOWS 、MAC 、LINUX 或 UNKNOWN_PLATFORM |
HKUOSVER | read_only_udm.principal.platform_version | 值取自原始日志中的 HKUOSVER 字段 |
INSTANCEURN | read_only_udm.intermediary.hostname | 值取自原始日志中的 INSTANCEURN 字段 |
IP | read_only_udm.target.ip | 值取自原始日志中的 IP 字段。如果值包含 / ,则会拆分为两个 IP 地址。如果该值包含 , ,则会拆分为多个 IP 地址。 |
LOGINERROR | read_only_udm.security_result.summary | 值取自原始日志中的 LOGINERROR 字段 |
LOGIN_CONTEXT | read_only_udm.metadata.description | 值取自原始日志中的 LOGIN_CONTEXT 字段 |
LOGIN_DEVICE | read_only_udm.additional.fields.login_device.value.string_value | 值取自原始日志中的 LOGIN_DEVICE 字段 |
LOGIN_LDAP_ID | read_only_udm.principal.user.userid | 值取自原始日志中的 LOGIN_LDAP_ID 字段 |
LOGIN_REASON | read_only_udm.security_result.summary | 值取自原始日志中的 LOGIN_REASON 字段 |
LOGIN_REVAL | read_only_udm.additional.fields.login_reval.value.string_value | 值取自原始日志中的 LOGIN_REVAL 字段 |
MASKMODE | read_only_udm.additional.fields.masked_mode.value.string_value | 值取自原始日志中的 MASKMODE 字段 |
MYCACCT | read_only_udm.principal.user.userid | 值取自原始日志中的 MYCACCT 字段 |
NEWDEPARTMENT | read_only_udm.principal.user.department | 查看 DEP 字段的逻辑 |
NEWUSER | 此字段未映射到 UDM | |
NSC | read_only_udm.additional.fields.nsc.value.string_value | 值取自原始日志中的 NSC 字段 |
OSUSR | read_only_udm.target.user.userid | 值取自原始日志中的 OSUSR 字段 |
患者 | read_only_udm.target.user.userid | 值取自原始日志中的 PATIENT 字段 |
PREVDEPARTMENT | read_only_udm.principal.user.department | 查看 DEP 字段的逻辑 |
PREVPROVIDER | 此字段未映射到 UDM | |
PREVUSER | read_only_udm.principal.resource.attribute.labels.prev_user.value | 值取自原始日志中的 PREVUSER 字段 |
PWREASON | read_only_udm.metadata.description | 值取自原始日志中的 PWREASON 字段 |
角色 | read_only_udm.principal.user.attribute.roles.name | 值取自原始日志中的 ROLE 字段 |
资源 | read_only_udm.target.hostname | 值取自原始日志中的资源字段 |
SERVICEID | read_only_udm.additional.fields.service_id.value.string_value | 值取自原始日志中的 SERVICEID 字段 |
SERVICECATEGORY | read_only_udm.additional.fields.service_category.value.string_value | 值取自原始日志中的 SERVICECATEGORY 字段 |
SERVICEMSGID | 此字段未映射到 UDM | |
SERVICENAME | read_only_udm.target.resource.name | 值取自原始日志中的 SERVICENAME 字段 |
SERVICETYPE | read_only_udm.target.resource.type | 值取自原始日志中的 SERVICETYPE 字段。如果 event_id 为 PHI_CLIENT_FILE ,则值设置为 FILE |
SERVICE_USER | read_only_udm.target.user.userid | 值取自原始日志中的 SERVICE_USER 字段 |
SERVICE_USERTYP | read_only_udm.additional.fields.service_user_type.value.string_value | 值取自原始日志中的 SERVICE_USERTYP 字段 |
sev | read_only_udm.security_result.severity | 值取自原始日志中的 sev 字段,并根据值映射到 LOW 、HIGH 或 CRITICAL |
shost | read_only_udm.target.resource.attribute.labels.workstation_type.value | 值取自原始日志中的 shost 字段 |
来源 | read_only_udm.additional.fields.login_source.value.string_value | 值取自原始日志中的 SOURCE 字段 |
SUCCESS | read_only_udm.additional.fields.success_yes_no.value.string_value | 值取自原始日志中的 SUCCESS 字段 |
TIMEOUT | read_only_udm.additional.fields.time_out.value.string_value | 值取自原始日志中的 TIMEOUT 字段 |
UID | read_only_udm.principal.user.userid | 值取自原始日志中的 UID 字段 |
USERJOB | 此字段未映射到 UDM | |
usrName | read_only_udm.principal.user.userid, read_only_udm.principal.user.user_display_name | 如果原始日志中存在 UID 或 LOGIN_LDAP_ID 字段,则 usrName 用于 read_only_udm.principal.user.user_display_name,而另一个字段用于 read_only_udm.principal.user.userid。否则,将使用 usrName 来表示 read_only_udm.principal.user.userid |
WEBLGAPP | read_only_udm.target.application | 值取自原始日志中的 WEBLGAPP 字段 |
read_only_udm.extensions.auth.type | 如果 LOGIN_LDAP_ID 不为空,则值设为 SSO 。否则,该值设置为 AUTHTYPE_UNSPECIFIED 。 |
|
read_only_udm.intermediary.ip | 值设置为日志来源的 IP 地址。 | |
read_only_udm.metadata.event_type | 如果 event_id 为 IC_SERVICE_AUDIT 、AC_BREAK_THE_GLASS_FAILED_ACCESS 、AC_BREAK_THE_GLASS_INAPPROPRIATE_ATTEMPT 、AC_BREAK_THE_GLASS_ACCESS 或 MCMEMEDISA 之一,并且 target_ip_set 为 true 或 resource 不为空,则值设为 RESOURCE_READ 。如果 event_id 为 FAILEDLOGIN 、LOGIN 、ROVER_FAILED_LOGIN 、SWITCHUSER 、AUTHENTICATION 、EW_LOGIN 、ROVER_LOGIN 、CTO_FAILED_LOGIN 、CTO_LOGIN 、HKU_FAILED_LOGIN 、HKU_LOGIN 、WPSEC_SEC_AUTH_OPT_OUT 、WPSEC_SEC_AUTH_OPT_IN 、BCA_LOGIN_FAILURE 、BCA_LOGIN_SUCCESS 、BCA_USER_LOCKED 、WPSEC_LOGIN_FAIL 或 WPSEC_LOGIN_SUCCESS 之一,并且 target_ip_set、resource、SERVICENAME、SERVICETYPE 或 shost 中至少有一个不为空,则值设为 USER_LOGIN 。如果 event_id 为 E_ADMINPASSWORDCHANGE 、E_FAILEDPASSWORDCHANGE 、E_SELFPASSWORDCHANGE 、WPSEC_USER_PASSWORD_CHANGE_FAIL 或 WPSEC_USER_PASSWORD_CHANGE 之一,则值设为 USER_CHANGE_PASSWORD 。如果 event_id 为 CONTEXTCHANGE ,则值设置为 USER_UNCATEGORIZED 。如果 event_id 为 SECURE 、UNSECURE 、MASKED_DATA_DISPLAY 或 MASKED_DATA_PRINTING 之一,则值设为 USER_RESOURCE_ACCESS 。如果 event_id 为 PHI_CLIENT_FILE ,则值设置为 USER_RESOURCE_UPDATE_CONTENT 。如果 CLIENTNAME 不为空,则值设置为 STATUS_UPDATE 。如果 prin_usr_id 不为空,则值设为 USER_UNCATEGORIZED 。否则,该值设置为 GENERIC_EVENT 。 |
|
read_only_udm.metadata.log_type | 值设置为 EPIC 。 |
|
read_only_udm.metadata.product_name | 值设置为 Epic Systems 。 |
|
read_only_udm.metadata.vendor_name | 值设置为 EPIC 。 |
|
read_only_udm.network.ip_protocol | 值派生自原始日志中的 proto 字段,并映射到相应的 IP 协议名称。 | |
read_only_udm.principal.resource.attribute.labels.workstation_type.key | 值设置为 Workstation ID/Type 。 |
|
read_only_udm.principal.resource.attribute.labels.prev_user.key | 值设置为 Prev User 。 |
|
read_only_udm.security_result.action | 如果原始日志中存在 ERRMSG 或 LOGINERROR 字段,则将值设为 BLOCK 。 |
变化
2024-07-01
增强功能:
- 通过从字段
devTime
中提取年份,将metadata.event_timestamp
的映射从devTime
更改为timestamp
。 - 将
devTime
映射到additional.fields
。
2022-10-31
bug 修复:
- 添加了对多个事件的支持。
2022-06-09
bug 修复:
- 添加了对包含中心圆点
·
的多个事件的支持。 - 为字段
devTime
、usrName
、shost
、sev
、IP
添加了条件检查。
2022-04-14
bug 修复:
- 添加了对多个事件的支持。
需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。