Coletar registros do Epic Systems
Este documento explica como coletar registros do Epic Systems para as Operações de segurança do Google usando um agente do Bindplane. O analisador transforma os registros brutos do sistema Epic EMR/EHR em um modelo de dados unificado (UDM). Primeiro, ele limpa e estrutura as mensagens de registro, extrai pares de chave-valor e, em seguida, mapeia os campos extraídos para os campos do UDM correspondentes, processando vários formatos de registro e inconsistências de dados para garantir uma representação abrangente e padronizada dos dados.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se 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.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de 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 raiz 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 processar o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está 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
,vi
ou Notepad).
- Localize o arquivo
Edite o arquivo
config.yaml
da 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_labels
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de transferência 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-agent
Para reiniciar o agente do Bindplane no Windows, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o serviço SendSIEMSyslogAudit
- Faça login no console da Epic Systems.
- Acesse Iniciar > Epic > Interconnect >
<your instance>
> Editor de configuração. - Selecione o formulário Serviços comerciais.
- Na guia Categoria de serviço, selecione SendSIEMSyslogAudit.
- Clique em Salvar.
Configurar o Epic Systems para exportar syslog
- Acesse Definições do sistema Epic > 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 SIEM: selecione CEF (Formato de evento comum).
- 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 de 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 é retirado do campo APPLICATIONID no registro bruto |
PPA | read_only_udm.target.application | O valor é retirado do campo APP no registro bruto |
SESSÃO DE AUDITORIA | read_only_udm.network.session_id | O valor é retirado 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 é retirado do campo BTGEXPLANATION no registro bruto |
BTGNOACCESSREAS | read_only_udm.security_result.summary | O valor é retirado 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 é retirado do campo CLIENTNAME no registro bruto |
CSISESS_TOKEN | read_only_udm.network.session_id | O valor é retirado do campo CSISESS_TOKEN no registro bruto. |
CTXT | read_only_udm.metadata.description | O valor é retirado do campo CTXT no registro bruto |
CVG | read_only_udm.additional.fields.cvg.value.string_value | O valor é retirado 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 é retirado 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 é retirado do campo E3MID no registro bruto |
ENCERRADO | read_only_udm.additional.fields.encrypt.value.string_value | O valor é retirado do campo ENCRYPTED no registro bruto |
ERRMSG | read_only_udm.security_result.summary | O valor é retirado 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 é retirado 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 é retirado do campo de indicador no registro bruto, e todos os - iniciais e finais são removidos |
HKUAPVER | read_only_udm.metadata.product_version | O valor é retirado do campo HKUAPVER no registro bruto |
HKUDVCID | read_only_udm.principal.asset_id | O valor é retirado 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 é retirado do campo HKUOSVER no registro bruto. |
INSTANCEURN | read_only_udm.intermediary.hostname | O valor é retirado do campo INSTANCEURN no registro bruto |
IP | read_only_udm.target.ip | O valor é extraído do campo 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 é retirado do campo LOGINERROR no registro bruto |
LOGIN_CONTEXT | read_only_udm.metadata.description | O valor é retirado 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 é retirado do campo LOGIN_LDAP_ID no registro bruto. |
LOGIN_REASON | read_only_udm.security_result.summary | O valor é retirado do campo LOGIN_REASON no registro bruto |
LOGIN_REVAL | read_only_udm.additional.fields.login_reval.value.string_value | O valor é retirado do campo LOGIN_REVAL no registro bruto |
MASKMODE | read_only_udm.additional.fields.masked_mode.value.string_value | O valor é retirado do campo MASKMODE no registro bruto |
MYCACCT | read_only_udm.principal.user.userid | O valor é retirado do campo MYCACCT no registro bruto |
NEWDEPARTMENT | read_only_udm.principal.user.department | Conferir 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 é retirado do campo NSC no registro bruto |
OSUSR | read_only_udm.target.user.userid | O valor é retirado do campo OSUSR no registro bruto |
PACIENTE | read_only_udm.target.user.userid | O valor é retirado do campo PATIENT no registro bruto |
PREVDEPARTMENT | read_only_udm.principal.user.department | Conferir 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 é retirado do campo PWREASON no registro bruto |
FUNÇÃO | read_only_udm.principal.user.attribute.roles.name | O valor é retirado da campo ROLE no registro bruto |
recurso | read_only_udm.target.hostname | O valor é retirado do campo de recurso no registro bruto |
SERVICEID | read_only_udm.additional.fields.service_id.value.string_value | O valor é retirado do campo SERVICEID no registro bruto |
SERVICECATEGORY | read_only_udm.additional.fields.service_category.value.string_value | O valor é retirado 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 é retirado do campo SERVICENAME no registro bruto |
SERVICETYPE | read_only_udm.target.resource.type | O valor é retirado 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 é retirado do campo SERVICE_USER no registro bruto |
SERVICE_USERTYP | read_only_udm.additional.fields.service_user_type.value.string_value | O valor é retirado do campo SERVICE_USERTYP no registro bruto |
sev | read_only_udm.security_result.severity | O valor é retirado 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 é retirado do campo shost no registro bruto |
ORIGEM | read_only_udm.additional.fields.login_source.value.string_value | O valor é retirado 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 é retirado 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 é 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 será 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 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 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 estiver vazio: target_ip_set, resource, SERVICENAME, SERVICETYPE ou shost. O valor é definido como USER_CHANGE_PASSWORD se event_id for 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. |
Alterações
2024-07-01
Melhoria:
- O mapeamento de
metadata.event_timestamp
foi alterado dedevTime
paratimestamp
com a extração do ano do campodevTime
. devTime
foi mapeado paraadditional.fields
.
2022-10-31
Correção de bugs:
- Adição de suporte a vários eventos.
2022-06-09
Correção de bugs:
- Adição de suporte a vários eventos que contêm o ponto central
·
. - Foram adicionadas verificações condicionais para os campos
devTime
,usrName
,shost
,sev
eIP
.
2022-04-14
Correção de bugs:
- Adição de suporte a vários eventos.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.