Raccogliere i log di Epic Systems
Questo documento spiega come importare i log di Epic Systems in Google Security Operations utilizzando l'agente Bindplane.
Epic Systems è una piattaforma di cartelle cliniche elettroniche (EHR) che genera messaggi syslog CEF per eventi di controllo, accesso/disconnessione degli utenti, accesso dei pazienti e operazioni sui file. Il parser estrae le coppie chiave-valore e le mappa al modello UDM (Unified Data Model).
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
Un'istanza Google SecOps
Windows Server 2016 o versioni successive oppure host Linux con
systemdConnettività di rete tra l'agente Bindplane e il server Epic Systems
Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
Accesso con privilegi ai sistemi Epic
Recuperare il file di autenticazione dell'importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione.
Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri Prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collectorIl servizio dovrebbe essere visualizzato come IN ESECUZIONE.
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sudo systemctl status observiq-otel-collectorIl servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione: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
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
listen_address: Indirizzo IP e porta da ascoltare:0.0.0.0per ascoltare su tutte le interfacce (consigliato)- La porta
514è la porta syslog standard (richiede l'accesso root su Linux; utilizza1514per l'accesso non root)
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione dell'acquisizione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID cliente copiato dalla console Google SecOpsendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per un elenco completo, vedi Endpoint regionali.
- Stati Uniti:
Salvare il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole dei servizi:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
- Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configura il servizio SendSIEMSyslogAudit
- Accedi alla console Epic Systems.
- Vai a Start > Epic > Interconnect >
<your instance>> Editor di configurazione. - Seleziona il modulo Servizi aziendali.
- Nella scheda Categoria di servizio, seleziona SendSIEMSyslogAudit.
- Fai clic su Salva.
Configura Epic Systems per esportare syslog
- Vai a Definizioni di sistema Epic > Sicurezza > Opzioni di controllo > Impostazioni syslog SIEM.
- Fornisci i seguenti dettagli di configurazione:
- Host: inserisci l'indirizzo IP dell'agente Bindplane.
- Porta: inserisci il numero di porta dell'agente Bindplane.
- Formato SIEM: seleziona CEF (Common Event Format).
- Carattere di fine riga Syslog: seleziona Nuova riga "\n".
- Dal menu Impostazioni syslog SIEM, seleziona Syslog SIEM.
- Fai clic su Attivata.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
| APIID | read_only_udm.additional.fields.api.value.string_value | Il valore viene estratto dal campo APIID nel log non elaborato |
| APPLICATIONID | read_only_udm.additional.fields.application_id.value.string_value | Il valore viene estratto dal campo APPLICATIONID nel log non elaborato |
| APP | read_only_udm.target.application | Il valore viene estratto dal campo APP nel log non elaborato |
| SESSIONE DI CONTROLLO | read_only_udm.network.session_id | Il valore viene estratto dal campo AUDIT SESSION nel log non elaborato |
| AUTH_SOURCE | Questo campo non è mappato a UDM | |
| BCAPCS | read_only_udm.target.application | Il valore viene estratto dal campo BCAPCS nel log non elaborato |
| BTGEXPLANATION | read_only_udm.security_result.description | Il valore viene estratto dal campo BTGEXPLANATION nel log non elaborato |
| BTGNOACCESSREAS | read_only_udm.security_result.summary | Il valore viene preso dal campo BTGNOACCESSREAS nel log non elaborato |
| BTGREASON | read_only_udm.security_result.summary | Il valore viene estratto dal campo BTGREASON nel log non elaborato |
| CLIENTNAME | read_only_udm.principal.hostname | Il valore viene estratto dal campo CLIENTNAME nel log non elaborato |
| CSISESS_TOKEN | read_only_udm.network.session_id | Il valore viene estratto dal campo CSISESS_TOKEN nel log non elaborato |
| CTXT | read_only_udm.metadata.description | Il valore viene estratto dal campo CTXT nel log non elaborato |
| CVG | read_only_udm.additional.fields.cvg.value.string_value | Il valore viene estratto dal campo CVG nel log non elaborato |
| DAT | Questo campo non è mappato a UDM | |
| DEP | read_only_udm.principal.user.department | Il valore viene estratto dal campo DEP nel log non elaborato. Se nel log non elaborato sono presenti entrambi i campi NEWDEPARTMENT e PREVDEPARTMENT, il valore sarà PREVDEPARTMENT:-{PREVDEPARTMENT}, NEWDEPARTMENT:-{NEWDEPARTMENT}. Se esiste solo NEWDEPARTMENT, il valore sarà PREVDEPARTMENT:-NONE, NEWDEPARTMENT:{NEWDEPARTMENT}. Se esiste solo PREVDEPARTMENT, il valore sarà PREVDEPARTMENT:{PREVDEPARTMENT}, NEWDEPARTMENT:-NONE |
| devTime | read_only_udm.metadata.event_timestamp | Il valore viene estratto dal campo devTime nel log non elaborato e convertito in secondi trascorsi da epoca |
| devTimeFormat | Questo campo non è mappato a UDM | |
| E3MID | read_only_udm.network.session_id | Il valore viene estratto dal campo E3MID nel log non elaborato |
| CRITTOGRAFATO | read_only_udm.additional.fields.encrypt.value.string_value | Il valore viene estratto dal campo ENCRYPTED nel log non elaborato |
| ERRMSG | read_only_udm.security_result.summary | Il valore viene estratto dal campo ERRMSG nel log non elaborato |
| eventCnt | Questo campo non è mappato a UDM | |
| FILENAME | read_only_udm.target.file.full_path | Il valore viene estratto dal campo FILENAME nel log non elaborato e tutte le occorrenze di \\\\ vengono sostituite con \ |
| flag | read_only_udm.security_result.description | Il valore viene estratto dal campo del flag nel log non elaborato e tutti i - iniziali e finali vengono rimossi |
| HKUAPVER | read_only_udm.metadata.product_version | Il valore viene estratto dal campo HKUAPVER nel log non elaborato |
| HKUDVCID | read_only_udm.principal.asset_id | Il valore viene estratto dal campo HKUDVCID nel log non elaborato e formattato come Device ID:{HKUDVCID} |
| HKUOSNAM | read_only_udm.principal.platform | Il valore viene estratto dal campo HKUOSNAM nel log non elaborato e mappato a WINDOWS, MAC, LINUX o UNKNOWN_PLATFORM in base al valore |
| HKUOSVER | read_only_udm.principal.platform_version | Il valore viene estratto dal campo HKUOSVER nel log non elaborato |
| INSTANCEURN | read_only_udm.intermediary.hostname | Il valore viene estratto dal campo INSTANCEURN nel log non elaborato |
| IP | read_only_udm.target.ip | Il valore viene estratto dal campo IP nel log non elaborato. Se il valore contiene /, viene suddiviso in due indirizzi IP. Se il valore contiene ,, viene suddiviso in più indirizzi IP. |
| LOGINERROR | read_only_udm.security_result.summary | Il valore viene estratto dal campo LOGINERROR nel log non elaborato |
| LOGIN_CONTEXT | read_only_udm.metadata.description | Il valore viene estratto dal campo LOGIN_CONTEXT nel log non elaborato |
| LOGIN_DEVICE | read_only_udm.additional.fields.login_device.value.string_value | Il valore viene estratto dal campo LOGIN_DEVICE nel log non elaborato |
| LOGIN_LDAP_ID | read_only_udm.principal.user.userid | Il valore viene estratto dal campo LOGIN_LDAP_ID nel log non elaborato |
| LOGIN_REASON | read_only_udm.security_result.summary | Il valore viene estratto dal campo LOGIN_REASON nel log non elaborato |
| LOGIN_REVAL | read_only_udm.additional.fields.login_reval.value.string_value | Il valore viene estratto dal campo LOGIN_REVAL nel log non elaborato |
| MASKMODE | read_only_udm.additional.fields.masked_mode.value.string_value | Il valore viene estratto dal campo MASKMODE nel log non elaborato |
| MYCACCT | read_only_udm.principal.user.userid | Il valore viene estratto dal campo MYCACCT nel log non elaborato |
| NEWDEPARTMENT | read_only_udm.principal.user.department | Visualizza la logica per il campo DEP |
| NEWUSER | Questo campo non è mappato a UDM | |
| NSC | read_only_udm.additional.fields.nsc.value.string_value | Il valore viene estratto dal campo NSC nel log non elaborato |
| OSUSR | read_only_udm.target.user.userid | Il valore viene estratto dal campo OSUSR nel log non elaborato |
| PATIENT | read_only_udm.target.user.userid | Il valore viene estratto dal campo PATIENT nel log non elaborato |
| PREVDEPARTMENT | read_only_udm.principal.user.department | Visualizza la logica per il campo DEP |
| PREVPROVIDER | Questo campo non è mappato a UDM | |
| PREVUSER | read_only_udm.principal.resource.attribute.labels.prev_user.value | Il valore viene estratto dal campo PREVUSER nel log non elaborato |
| PWREASON | read_only_udm.metadata.description | Il valore viene estratto dal campo PWREASON nel log non elaborato |
| RUOLO | read_only_udm.principal.user.attribute.roles.name | Il valore viene estratto dal campo ROLE nel log non elaborato |
| risorsa | read_only_udm.target.hostname | Il valore viene estratto dal campo della risorsa nel log non elaborato |
| SERVICEID | read_only_udm.additional.fields.service_id.value.string_value | Il valore viene estratto dal campo SERVICEID nel log non elaborato |
| SERVICECATEGORY | read_only_udm.additional.fields.service_category.value.string_value | Il valore viene estratto dal campo SERVICECATEGORY nel log non elaborato |
| SERVICEMSGID | Questo campo non è mappato a UDM | |
| SERVICENAME | read_only_udm.target.resource.name | Il valore viene estratto dal campo SERVICENAME nel log non elaborato |
| SERVICETYPE | read_only_udm.target.resource.type | Il valore viene estratto dal campo SERVICETYPE nel log non elaborato. Se event_id è PHI_CLIENT_FILE, il valore è impostato su FILE |
| SERVICE_USER | read_only_udm.target.user.userid | Il valore viene estratto dal campo SERVICE_USER nel log non elaborato |
| SERVICE_USERTYP | read_only_udm.additional.fields.service_user_type.value.string_value | Il valore viene estratto dal campo SERVICE_USERTYP nel log non elaborato |
| sev | read_only_udm.security_result.severity | Il valore viene estratto dal campo sev nel log non elaborato e mappato su LOW, HIGH o CRITICAL in base al valore |
| spettro | read_only_udm.target.resource.attribute.labels.workstation_type.value | Il valore viene estratto dal campo shost nel log non elaborato |
| ORIGINE | read_only_udm.additional.fields.login_source.value.string_value | Il valore viene estratto dal campo SOURCE nel log non elaborato |
| SUCCESS | read_only_udm.additional.fields.success_yes_no.value.string_value | Il valore viene estratto dal campo SUCCESS nel log non elaborato |
| TIMEOUT | read_only_udm.additional.fields.time_out.value.string_value | Il valore viene estratto dal campo TIMEOUT nel log non elaborato |
| UID | read_only_udm.principal.user.userid | Il valore viene estratto dal campo UID nel log non elaborato |
| USERJOB | Questo campo non è mappato a UDM | |
| usrName | read_only_udm.principal.user.userid, read_only_udm.principal.user.user_display_name | Se nel log non elaborato esistono i campi UID o LOGIN_LDAP_ID, usrName viene utilizzato per read_only_udm.principal.user.user_display_name e l'altro campo viene utilizzato per read_only_udm.principal.user.userid. In caso contrario, usrName viene utilizzato per read_only_udm.principal.user.userid |
| WEBLGAPP | read_only_udm.target.application | Il valore viene estratto dal campo WEBLGAPP nel log non elaborato |
| read_only_udm.extensions.auth.type | Il valore è impostato su SSO se LOGIN_LDAP_ID non è vuoto. In caso contrario, il valore viene impostato su AUTHTYPE_UNSPECIFIED. |
|
| read_only_udm.intermediary.ip | Il valore è impostato sull'indirizzo IP dell'origine log. | |
| read_only_udm.metadata.event_type | Il valore è impostato su RESOURCE_READ se event_id è uno tra IC_SERVICE_AUDIT, AC_BREAK_THE_GLASS_FAILED_ACCESS, AC_BREAK_THE_GLASS_INAPPROPRIATE_ATTEMPT, AC_BREAK_THE_GLASS_ACCESS o MCMEMEDISA e target_ip_set è true o resource non è vuoto. Il valore è impostato su USER_LOGIN se event_id è uno dei seguenti: 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 o WPSEC_LOGIN_SUCCESS e almeno uno tra target_ip_set, resource, SERVICENAME, SERVICETYPE o shost non è vuoto. Il valore è impostato su USER_CHANGE_PASSWORD se event_id è uno tra E_ADMINPASSWORDCHANGE, E_FAILEDPASSWORDCHANGE, E_SELFPASSWORDCHANGE, WPSEC_USER_PASSWORD_CHANGE_FAIL o WPSEC_USER_PASSWORD_CHANGE. Il valore è impostato su USER_UNCATEGORIZED se event_id è CONTEXTCHANGE. Il valore è impostato su USER_RESOURCE_ACCESS se event_id è uno tra SECURE, UNSECURE, MASKED_DATA_DISPLAY o MASKED_DATA_PRINTING. Il valore è impostato su USER_RESOURCE_UPDATE_CONTENT se event_id è PHI_CLIENT_FILE. Il valore è impostato su STATUS_UPDATE se CLIENTNAME non è vuoto. Il valore è impostato su USER_UNCATEGORIZED se prin_usr_id non è vuoto. In caso contrario, il valore viene impostato su GENERIC_EVENT. |
|
| read_only_udm.metadata.log_type | Il valore è impostato su EPIC. |
|
| read_only_udm.metadata.product_name | Il valore è impostato su Epic Systems. |
|
| read_only_udm.metadata.vendor_name | Il valore è impostato su EPIC. |
|
| read_only_udm.network.ip_protocol | Il valore viene derivato dal campo proto nel log non elaborato e mappato al nome del protocollo IP corrispondente. | |
| read_only_udm.principal.resource.attribute.labels.workstation_type.key | Il valore è impostato su Workstation ID/Type. |
|
| read_only_udm.principal.resource.attribute.labels.prev_user.key | Il valore è impostato su Prev User. |
|
| read_only_udm.security_result.action | Il valore è impostato su BLOCK se nel log non elaborato sono presenti i campi ERRMSG o LOGINERROR. |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.