Coletar registros do Epic Systems
Este documento explica como coletar registros do Epic Systems para o Google Security Operations usando um agente do Bindplane. O analisador transforma registros brutos do sistema EMR/EHR do Epic em um modelo de dados unificado (UDM). Primeiro, ele limpa e estrutura as mensagens de registro, extrai pares de chave-valor e mapeia os campos extraídos para os campos correspondentes do UDM, processando vários formatos de registro e inconsistências de dados para garantir uma representação de dados abrangente e padronizada.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Use o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd. - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Verifique se você tem acesso privilegiado ao Epic Systems.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml. Normalmente, ele fica no diretório/etc/bindplane-agent/no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda seguinte forma: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_labelsSubstitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>pelo ID do cliente real.Atualize
/path/to/ingestion-authentication-file.jsonpara o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agentPara reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o serviço SendSIEMSyslogAudit
- Faça login no console da Epic Systems.
- Acesse Começar > Epic > Interconnect >
<your instance>> Editor de configuração. - Selecione o formulário Serviços comerciais.
- Na guia Categoria do serviço, selecione SendSIEMSyslogAudit.
- Clique em Salvar.
Configurar o Epic Systems para exportar o syslog
- Acesse Definições do sistema épico > Segurança > Opções de auditoria > Configurações de syslog do SIEM.
- Informe os seguintes detalhes de configuração:
- Host: insira o endereço IP do agente do Bindplane.
- Porta: insira o número da porta do agente do Bindplane.
- Formato do SIEM: selecione CEF (Common Event Format).
- Caractere final do Syslog: selecione Nova linha "\n".
- No menu Configurações do syslog do SIEM, selecione Syslog do SIEM.
- Clique em Ativado.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento da UDM | Lógica |
|---|---|---|
| APIID | read_only_udm.additional.fields.api.value.string_value | O valor é extraído do campo APIID no registro bruto. |
| APPLICATIONID | read_only_udm.additional.fields.application_id.value.string_value | O valor é extraído do campo APPLICATIONID no registro bruto. |
| PPA | read_only_udm.target.application | O valor é extraído do campo APP no registro bruto. |
| SESSÃO DE AUDITORIA | read_only_udm.network.session_id | O valor é extraído do campo "AUDIT SESSION" no registro bruto. |
| AUTH_SOURCE | Este campo não está mapeado para a UDM | |
| BCAPCS | read_only_udm.target.application | O valor é extraído do campo BCAPCS no registro bruto. |
| BTGEXPLANATION | read_only_udm.security_result.description | O valor é extraído do campo BTGEXPLANATION no registro bruto. |
| BTGNOACCESSREAS | read_only_udm.security_result.summary | O valor é extraído do campo BTGNOACCESSREAS no registro bruto. |
| BTGREASON | read_only_udm.security_result.summary | O valor é extraído do campo BTGREASON no registro bruto. |
| CLIENTNAME | read_only_udm.principal.hostname | O valor é extraído do campo CLIENTNAME no registro bruto. |
| CSISESS_TOKEN | read_only_udm.network.session_id | O valor é extraído do campo CSISESS_TOKEN no registro bruto. |
| CTXT | read_only_udm.metadata.description | O valor é extraído do campo CTXT no registro bruto. |
| CVG | read_only_udm.additional.fields.cvg.value.string_value | O valor é extraído do campo CVG no registro bruto. |
| DAT | Este campo não está mapeado para a UDM | |
| DEP | read_only_udm.principal.user.department | O valor é extraído do campo DEP no registro bruto. Se os campos NEWDEPARTMENT e PREVDEPARTMENT existirem no registro bruto, o valor será PREVDEPARTMENT:-{PREVDEPARTMENT}, NEWDEPARTMENT:-{NEWDEPARTMENT}. Se apenas NEWDEPARTMENT existir, o valor será PREVDEPARTMENT:-NONE, NEWDEPARTMENT:{NEWDEPARTMENT}. Se apenas PREVDEPARTMENT existir, o valor será PREVDEPARTMENT:{PREVDEPARTMENT}, NEWDEPARTMENT:-NONE |
| devTime | read_only_udm.metadata.event_timestamp | O valor é extraído do campo "devTime" no registro bruto e convertido em segundos desde a época. |
| devTimeFormat | Este campo não está mapeado para a UDM | |
| E3MID | read_only_udm.network.session_id | O valor é extraído do campo E3MID no registro bruto. |
| ENCRYPTED | read_only_udm.additional.fields.encrypt.value.string_value | O valor é extraído do campo ENCRYPTED no registro bruto. |
| ERRMSG | read_only_udm.security_result.summary | O valor é extraído do campo ERRMSG no registro bruto. |
| eventCnt | Este campo não está mapeado para a UDM | |
| FILENAME | read_only_udm.target.file.full_path | O valor é extraído do campo FILENAME no registro bruto, e todas as ocorrências de \\\\ são substituídas por \. |
| flag | read_only_udm.security_result.description | O valor é extraído do campo de flag no registro bruto, e todos os - iniciais e finais são removidos. |
| HKUAPVER | read_only_udm.metadata.product_version | O valor é extraído do campo HKUAPVER no registro bruto. |
| HKUDVCID | read_only_udm.principal.asset_id | O valor é extraído do campo HKUDVCID no registro bruto e formatado como Device ID:{HKUDVCID}. |
| HKUOSNAM | read_only_udm.principal.platform | O valor é extraído do campo HKUOSNAM no registro bruto e mapeado para WINDOWS, MAC, LINUX ou UNKNOWN_PLATFORM com base no valor. |
| HKUOSVER | read_only_udm.principal.platform_version | O valor é extraído do campo HKUOSVER no registro bruto. |
| INSTANCEURN | read_only_udm.intermediary.hostname | O valor é extraído do campo INSTANCEURN no registro bruto. |
| IP | read_only_udm.target.ip | O valor é extraído do campo de IP no registro bruto. Se o valor contiver /, ele será dividido em dois endereços IP. Se o valor contiver ,, ele será dividido em vários endereços IP. |
| LOGINERROR | read_only_udm.security_result.summary | O valor é extraído do campo LOGINERROR no registro bruto. |
| LOGIN_CONTEXT | read_only_udm.metadata.description | O valor é extraído do campo LOGIN_CONTEXT no registro bruto. |
| LOGIN_DEVICE | read_only_udm.additional.fields.login_device.value.string_value | O valor é extraído do campo LOGIN_DEVICE no registro bruto. |
| LOGIN_LDAP_ID | read_only_udm.principal.user.userid | O valor é extraído do campo LOGIN_LDAP_ID no registro bruto. |
| LOGIN_REASON | read_only_udm.security_result.summary | O valor é extraído do campo LOGIN_REASON no registro bruto. |
| LOGIN_REVAL | read_only_udm.additional.fields.login_reval.value.string_value | O valor é extraído do campo LOGIN_REVAL no registro bruto. |
| MASKMODE | read_only_udm.additional.fields.masked_mode.value.string_value | O valor é extraído do campo MASKMODE no registro bruto. |
| MYCACCT | read_only_udm.principal.user.userid | O valor é extraído do campo MYCACCT no registro bruto. |
| NEWDEPARTMENT | read_only_udm.principal.user.department | Consulte a lógica do campo DEP |
| NEWUSER | Este campo não está mapeado para a UDM | |
| NSC | read_only_udm.additional.fields.nsc.value.string_value | O valor é extraído do campo NSC no registro bruto. |
| OSUSR | read_only_udm.target.user.userid | O valor é extraído do campo OSUSR no registro bruto. |
| PACIENTE | read_only_udm.target.user.userid | O valor é extraído do campo PATIENT no registro bruto. |
| PREVDEPARTMENT | read_only_udm.principal.user.department | Consulte a lógica do campo DEP |
| PREVPROVIDER | Este campo não está mapeado para a UDM | |
| PREVUSER | read_only_udm.principal.resource.attribute.labels.prev_user.value | O valor é extraído do campo PREVUSER no registro bruto. |
| PWREASON | read_only_udm.metadata.description | O valor é extraído do campo PWREASON no registro bruto. |
| FUNÇÃO | read_only_udm.principal.user.attribute.roles.name | O valor é extraído do campo "ROLE" no registro bruto. |
| recurso | read_only_udm.target.hostname | O valor é extraído do campo de recurso no registro bruto. |
| SERVICEID | read_only_udm.additional.fields.service_id.value.string_value | O valor é extraído do campo SERVICEID no registro bruto. |
| SERVICECATEGORY | read_only_udm.additional.fields.service_category.value.string_value | O valor é extraído do campo "SERVICECATEGORY" no registro bruto. |
| SERVICEMSGID | Este campo não está mapeado para a UDM | |
| SERVICENAME | read_only_udm.target.resource.name | O valor é extraído do campo SERVICENAME no registro bruto. |
| SERVICETYPE | read_only_udm.target.resource.type | O valor é extraído do campo SERVICETYPE no registro bruto. Se event_id for PHI_CLIENT_FILE, o valor será definido como FILE |
| SERVICE_USER | read_only_udm.target.user.userid | O valor é extraído do campo SERVICE_USER no registro bruto. |
| SERVICE_USERTYP | read_only_udm.additional.fields.service_user_type.value.string_value | O valor é extraído do campo SERVICE_USERTYP no registro bruto. |
| sev | read_only_udm.security_result.severity | O valor é extraído do campo "sev" no registro bruto e mapeado para LOW, HIGH ou CRITICAL com base no valor. |
| shost | read_only_udm.target.resource.attribute.labels.workstation_type.value | O valor é extraído do campo "shost" no registro bruto. |
| ORIGEM | read_only_udm.additional.fields.login_source.value.string_value | O valor é extraído do campo "SOURCE" no registro bruto. |
| SUCESSO | read_only_udm.additional.fields.success_yes_no.value.string_value | O valor é extraído do campo "SUCCESS" no registro bruto. |
| TEMPO LIMITE | read_only_udm.additional.fields.time_out.value.string_value | O valor é extraído do campo "TIMEOUT" no registro bruto. |
| UID | read_only_udm.principal.user.userid | O valor é extraído do campo UID no registro bruto. |
| USERJOB | Este campo não está mapeado para a UDM | |
| usrName | read_only_udm.principal.user.userid, read_only_udm.principal.user.user_display_name | Se os campos UID ou LOGIN_LDAP_ID existirem no registro bruto, usrName será usado para read_only_udm.principal.user.user_display_name, e o outro campo será usado para read_only_udm.principal.user.userid. Caso contrário, usrName será usado para read_only_udm.principal.user.userid. |
| WEBLGAPP | read_only_udm.target.application | O valor é retirado do campo WEBLGAPP no registro bruto. |
| read_only_udm.extensions.auth.type | O valor é definido como SSO se LOGIN_LDAP_ID não estiver vazio. Caso contrário, o valor será definido como AUTHTYPE_UNSPECIFIED. |
|
| read_only_udm.intermediary.ip | O valor é definido como o endereço IP da origem do registro. | |
| read_only_udm.metadata.event_type | O valor é definido como RESOURCE_READ se event_id for um dos seguintes: IC_SERVICE_AUDIT, AC_BREAK_THE_GLASS_FAILED_ACCESS, AC_BREAK_THE_GLASS_INAPPROPRIATE_ATTEMPT, AC_BREAK_THE_GLASS_ACCESS ou MCMEMEDISA, e target_ip_set for true ou o recurso não estiver vazio. O valor é definido como USER_LOGIN se event_id for um dos seguintes: 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 ou WPSEC_LOGIN_SUCCESS, e pelo menos um dos seguintes campos não está vazio: target_ip_set, resource, SERVICENAME, SERVICETYPE ou shost. O valor é definido como USER_CHANGE_PASSWORD se event_id for um dos seguintes: E_ADMINPASSWORDCHANGE, E_FAILEDPASSWORDCHANGE, E_SELFPASSWORDCHANGE, WPSEC_USER_PASSWORD_CHANGE_FAIL ou WPSEC_USER_PASSWORD_CHANGE. O valor é definido como USER_UNCATEGORIZED se event_id for CONTEXTCHANGE. O valor é definido como USER_RESOURCE_ACCESS se event_id for SECURE, UNSECURE, MASKED_DATA_DISPLAY ou MASKED_DATA_PRINTING. O valor é definido como USER_RESOURCE_UPDATE_CONTENT se event_id for PHI_CLIENT_FILE. O valor é definido como STATUS_UPDATE se CLIENTNAME não estiver vazio. O valor é definido como USER_UNCATEGORIZED se prin_usr_id não estiver vazio. Caso contrário, o valor será definido como GENERIC_EVENT. |
|
| read_only_udm.metadata.log_type | O valor é definido como EPIC. |
|
| read_only_udm.metadata.product_name | O valor é definido como Epic Systems. |
|
| read_only_udm.metadata.vendor_name | O valor é definido como EPIC. |
|
| read_only_udm.network.ip_protocol | O valor é derivado do campo proto no registro bruto e mapeado para o nome do protocolo IP correspondente. | |
| read_only_udm.principal.resource.attribute.labels.workstation_type.key | O valor é definido como Workstation ID/Type. |
|
| read_only_udm.principal.resource.attribute.labels.prev_user.key | O valor é definido como Prev User. |
|
| read_only_udm.security_result.action | O valor é definido como BLOCK se os campos ERRMSG ou LOGINERROR existirem no registro bruto. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.