Coletar registros do Epic Systems

Versão do analisador:4.0

Compatível com:

Este documento explica como ingerir registros do Epic Systems no Google Security Operations usando o agente do Bindplane.

A Epic Systems é uma plataforma de registro eletrônico de saúde (EHR, na sigla em inglês) que gera mensagens syslog CEF para eventos de auditoria, login/logout de usuários, acesso de pacientes e operações de arquivos. O analisador extrai pares de chave-valor e os mapeia para o modelo de dados unificado (UDM).

Antes de começar

  • Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps

  • Windows Server 2016 ou mais recente ou host Linux com systemd

  • Conectividade de rede entre o agente do Bindplane e o servidor da Epic Systems

  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.

  • Acesso privilegiado aos sistemas da Epic

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. Baixe o arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do 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

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

    O serviço vai aparecer como EM EXECUÇÃO.

Instalação do Linux

  1. Abra um terminal com privilégios de root 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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

    O serviço vai aparecer como ativo (em execução).

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.

Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps

Localizar o arquivo de configuração

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/epic:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: EPIC
            raw_log_field: body
    
    service:
        pipelines:
            logs/epic_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/epic
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • listen_address: endereço IP e porta a serem detectados:
      • 0.0.0.0 para detectar em todas as interfaces (recomendado)
      • A porta 514 é a porta padrão do syslog. Ela exige acesso root no Linux. Use 1514 para acesso não root.
  • Configuração do exportador:

    • creds_file_path: caminho completo para o arquivo de autenticação de ingestão:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID do cliente copiado do console do Google SecOps
    • endpoint: URL do endpoint regional:
      • EUA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Ásia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Consulte a lista completa em Endpoints regionais.

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, Enter e Ctrl+X.
    • Windows: clique em Arquivo > Salvar.

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 observiq-otel-collector
    
    1. Verifique se o serviço está em execução:

      sudo systemctl status observiq-otel-collector
      
    2. Verifique se há erros nos registros:

      sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar o agente do Bindplane no Windows, escolha uma das seguintes opções:

    • Prompt de comando ou PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o Coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

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 do 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: digite 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".
  3. No menu Configurações do syslog do SIEM, selecione Syslog do SIEM.
  4. Clique em Ativado.

Tabela de mapeamento de 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 é 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 "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 estiver 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.
REMOTEIP event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
CLIENTTYPE event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
INTERNETAREA event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
LOGINCLIENTID event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
LOGINCONTEXT event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
PERIMAUTHST event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
HYPACCESSID event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
UNRECDEVICE event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças

Registro de alterações

Ver o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.