Coletar registros do Epic Systems

Compatível com:

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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. 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

Configurar o agente do Bindplane para processar o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    1. 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.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Notepad).
  2. 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
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID real do cliente.

  5. 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

  1. Faça login no console da Epic Systems.
  2. Acesse Iniciar > Epic > Interconnect > <your instance> > Editor de configuração.
  3. Selecione o formulário Serviços comerciais.
  4. Na guia Categoria de serviço, selecione SendSIEMSyslogAudit.
  5. Clique em Salvar.

Configurar o Epic Systems para exportar syslog

  1. Acesse Definições do sistema Epic > Segurança > Opções de auditoria > Configurações de syslog do SIEM.
  2. 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".
  3. No menu Configurações do syslog do SIEM, selecione Syslog do SIEM.
  4. 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 de devTime para timestamp com a extração do ano do campo devTime.
  • devTime foi mapeado para additional.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 e IP.

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.