Epic Systems 로그 수집

다음에서 지원:

이 문서에서는 Bindplane 에이전트를 사용하여 Epic Systems 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 원시 Epic EMR/EHR 시스템 로그를 통합 데이터 모델 (UDM)로 변환합니다. 먼저 로그 메시지를 정리하고 구조화한 후 키-값 쌍을 추출하고 추출된 필드를 상응하는 UDM 필드에 매핑하여 다양한 로그 형식과 데이터 불일치를 처리하여 포괄적이고 표준화된 데이터 표현을 보장합니다.

시작하기 전에

  • Google Security Operations 인스턴스가 있는지 확인합니다.
  • Windows 2016 이상을 사용 중이거나 systemd와 함께 Linux 호스트를 사용하고 있는지 확인합니다.
  • 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
  • Epic Systems에 대한 액세스 권한이 있는지 확인합니다.

Google SecOps 처리 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 처리 인증 파일을 다운로드합니다. Bindplane가 설치될 시스템에 파일을 안전하게 저장합니다.

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

Bindplane 에이전트 설치

Windows 설치

  1. 관리자 권한으로 명령 프롬프트 또는 PowerShell을 엽니다.
  2. 다음 명령어를 실행합니다.

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

Linux 설치

  1. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

추가 설치 리소스

Syslog를 수집하고 Google SecOps로 전송하도록 Bindplane 에이전트 구성

  1. 구성 파일에 액세스합니다.

    1. config.yaml 파일을 찾습니다. 일반적으로 Linux의 /etc/bindplane-agent/ 디렉터리 또는 Windows의 설치 디렉터리에 있습니다.
    2. 텍스트 편집기 (예: nano, vi, 메모장)를 사용하여 파일을 엽니다.
  2. 다음과 같이 config.yaml 파일을 수정합니다.

    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. 인프라에서 필요에 따라 포트와 IP 주소를 바꿉니다.

  4. <customer_id>를 실제 고객 ID로 바꿉니다.

  5. Google SecOps 처리 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로 /path/to/ingestion-authentication-file.json를 업데이트합니다.

Bindplane 에이전트를 다시 시작하여 변경사항 적용

  • Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.

    sudo systemctl restart bindplane-agent
    
  • Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.

    net stop BindPlaneAgent && net start BindPlaneAgent
    

SendSIEMSyslogAudit 서비스 구성

  1. Epic Systems 콘솔에 로그인합니다.
  2. 시작 > Epic > Interconnect > <your instance> > 구성 편집기로 이동합니다.
  3. 비즈니스 서비스 양식을 선택합니다.
  4. 서비스 카테고리 탭에서 SendSIEMSyslogAudit를 선택합니다.
  5. 저장을 클릭합니다.

syslog를 내보내도록 Epic Systems 구성

  1. Epic 시스템 정의 > 보안 > 감사 옵션 > SIEM syslog 설정으로 이동합니다.
  2. 다음 구성 세부정보를 제공합니다.
    • 호스트: Bindplane 에이전트 IP 주소를 입력합니다.
    • 포트: Bindplane 에이전트 포트 번호를 입력합니다.
    • SIEM 형식: CEF (공통 이벤트 형식)를 선택합니다.
    • Syslog 종료 문자: 새 줄 "\n"을 선택합니다.
  3. SIEM syslog 설정 메뉴에서 SIEM syslog를 선택합니다.
  4. 사용 설정됨을 클릭합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
APIID read_only_udm.additional.fields.api.value.string_value 값은 원시 로그의 APIID 필드에서 가져옵니다.
APPLICATIONID read_only_udm.additional.fields.application_id.value.string_value 값은 원시 로그의 APPLICATIONID 필드에서 가져옵니다.
read_only_udm.target.application 값은 원시 로그의 APP 필드에서 가져옵니다.
세션 감사 read_only_udm.network.session_id 값은 원시 로그의 AUDIT SESSION 필드에서 가져옵니다.
AUTH_SOURCE 이 필드는 UDM에 매핑되지 않습니다.
BCAPCS read_only_udm.target.application 값은 원시 로그의 BCAPCS 필드에서 가져옵니다.
BTGEXPLANATION read_only_udm.security_result.description 값은 원시 로그의 BTGEXPLANATION 필드에서 가져옵니다.
BTGNOACCESSREAS read_only_udm.security_result.summary 값은 원시 로그의 BTGNOACCESSREAS 필드에서 가져옵니다.
BTGREASON read_only_udm.security_result.summary 값은 원시 로그의 BTGREASON 필드에서 가져옵니다.
CLIENTNAME read_only_udm.principal.hostname 값은 원시 로그의 CLIENTNAME 필드에서 가져옵니다.
CSISESS_TOKEN read_only_udm.network.session_id 값은 원시 로그의 CSISESS_TOKEN 필드에서 가져옵니다.
CTXT read_only_udm.metadata.description 값은 원시 로그의 CTXT 필드에서 가져옵니다.
CVG read_only_udm.additional.fields.cvg.value.string_value 값은 원시 로그의 CVG 필드에서 가져옵니다.
DAT 이 필드는 UDM에 매핑되지 않습니다.
DEP read_only_udm.principal.user.department 값은 원시 로그의 DEP 필드에서 가져옵니다. 원시 로그에 NEWDEPARTMENT 및 PREVDEPARTMENT 필드가 모두 있으면 값은 PREVDEPARTMENT:-{PREVDEPARTMENT}, NEWDEPARTMENT:-{NEWDEPARTMENT}입니다. NEWDEPARTMENT만 있는 경우 값은 PREVDEPARTMENT:-NONE, NEWDEPARTMENT:{NEWDEPARTMENT}입니다. PREVDEPARTMENT만 있으면 값은 PREVDEPARTMENT:{PREVDEPARTMENT}, NEWDEPARTMENT:-NONE입니다.
devTime read_only_udm.metadata.event_timestamp 값은 원시 로그의 devTime 필드에서 가져와 에포크 이후 초로 변환됩니다.
devTimeFormat 이 필드는 UDM에 매핑되지 않습니다.
E3MID read_only_udm.network.session_id 값은 원시 로그의 E3MID 필드에서 가져옵니다.
ENCRYPTED read_only_udm.additional.fields.encrypt.value.string_value 값은 원시 로그의 ENCRYPTED 필드에서 가져옵니다.
ERRMSG read_only_udm.security_result.summary 값은 원시 로그의 ERRMSG 필드에서 가져옵니다.
eventCnt 이 필드는 UDM에 매핑되지 않습니다.
FILENAME read_only_udm.target.file.full_path 값은 원시 로그의 FILENAME 필드에서 가져오며 \\\\가 나오는 모든 위치가 \로 대체됩니다.
플래그 read_only_udm.security_result.description 값은 원시 로그의 플래그 필드에서 가져오며 선행 및 후행 -가 모두 삭제됩니다.
HKUAPVER read_only_udm.metadata.product_version 값은 원시 로그의 HKUAPVER 필드에서 가져옵니다.
HKUDVCID read_only_udm.principal.asset_id 값은 원시 로그의 HKUDVCID 필드에서 가져와 Device ID:{HKUDVCID} 형식으로 지정됩니다.
HKUOSNAM read_only_udm.principal.platform 값은 원시 로그의 HKUOSNAM 필드에서 가져와 값에 따라 WINDOWS, MAC, LINUX 또는 UNKNOWN_PLATFORM에 매핑됩니다.
HKUOSVER read_only_udm.principal.platform_version 값은 원시 로그의 HKUOSVER 필드에서 가져옵니다.
INSTANCEURN read_only_udm.intermediary.hostname 값은 원시 로그의 INSTANCEURN 필드에서 가져옵니다.
IP read_only_udm.target.ip 값은 원시 로그의 IP 필드에서 가져옵니다. 값에 /가 포함된 경우 두 IP 주소로 분할됩니다. 값에 ,가 포함된 경우 여러 IP 주소로 분할됩니다.
LOGINERROR read_only_udm.security_result.summary 값은 원시 로그의 LOGINERROR 필드에서 가져옵니다.
LOGIN_CONTEXT read_only_udm.metadata.description 값은 원시 로그의 LOGIN_CONTEXT 필드에서 가져옵니다.
LOGIN_DEVICE read_only_udm.additional.fields.login_device.value.string_value 값은 원시 로그의 LOGIN_DEVICE 필드에서 가져옵니다.
LOGIN_LDAP_ID read_only_udm.principal.user.userid 값은 원시 로그의 LOGIN_LDAP_ID 필드에서 가져옵니다.
LOGIN_REASON read_only_udm.security_result.summary 값은 원시 로그의 LOGIN_REASON 필드에서 가져옵니다.
LOGIN_REVAL read_only_udm.additional.fields.login_reval.value.string_value 값은 원시 로그의 LOGIN_REVAL 필드에서 가져옵니다.
MASKMODE read_only_udm.additional.fields.masked_mode.value.string_value 값은 원시 로그의 MASKMODE 필드에서 가져옵니다.
MYCACCT read_only_udm.principal.user.userid 값은 원시 로그의 MYCACCT 필드에서 가져옵니다.
NEWDEPARTMENT read_only_udm.principal.user.department DEP 필드의 로직 참고
NEWUSER 이 필드는 UDM에 매핑되지 않습니다.
NSC read_only_udm.additional.fields.nsc.value.string_value 값은 원시 로그의 NSC 필드에서 가져옵니다.
OSUSR read_only_udm.target.user.userid 값은 원시 로그의 OSUSR 필드에서 가져옵니다.
환자 read_only_udm.target.user.userid 값은 원시 로그의 PATIENT 필드에서 가져옵니다.
PREVDEPARTMENT read_only_udm.principal.user.department DEP 필드의 로직 참고
PREVPROVIDER 이 필드는 UDM에 매핑되지 않습니다.
PREVUSER read_only_udm.principal.resource.attribute.labels.prev_user.value 값은 원시 로그의 PREVUSER 필드에서 가져옵니다.
PWREASON read_only_udm.metadata.description 값은 원시 로그의 PWREASON 필드에서 가져옵니다.
역할 read_only_udm.principal.user.attribute.roles.name 값은 원시 로그의 ROLE 필드에서 가져옵니다.
리소스 read_only_udm.target.hostname 값은 원시 로그의 리소스 필드에서 가져옵니다.
SERVICEID read_only_udm.additional.fields.service_id.value.string_value 값은 원시 로그의 SERVICEID 필드에서 가져옵니다.
SERVICECATEGORY read_only_udm.additional.fields.service_category.value.string_value 값은 원시 로그의 SERVICECATEGORY 필드에서 가져옵니다.
SERVICEMSGID 이 필드는 UDM에 매핑되지 않습니다.
SERVICENAME read_only_udm.target.resource.name 값은 원시 로그의 SERVICENAME 필드에서 가져옵니다.
SERVICETYPE read_only_udm.target.resource.type 값은 원시 로그의 SERVICETYPE 필드에서 가져옵니다. event_id가 PHI_CLIENT_FILE인 경우 값이 FILE로 설정됩니다.
SERVICE_USER read_only_udm.target.user.userid 값은 원시 로그의 SERVICE_USER 필드에서 가져옵니다.
SERVICE_USERTYP read_only_udm.additional.fields.service_user_type.value.string_value 값은 원시 로그의 SERVICE_USERTYP 필드에서 가져옵니다.
sev read_only_udm.security_result.severity 값은 원시 로그의 sev 필드에서 가져와 값에 따라 LOW, HIGH 또는 CRITICAL에 매핑됩니다.
shost read_only_udm.target.resource.attribute.labels.workstation_type.value 값은 원시 로그의 shost 필드에서 가져옵니다.
소스 read_only_udm.additional.fields.login_source.value.string_value 값은 원시 로그의 SOURCE 필드에서 가져옵니다.
성공 read_only_udm.additional.fields.success_yes_no.value.string_value 값은 원시 로그의 SUCCESS 필드에서 가져옵니다.
시간 초과 read_only_udm.additional.fields.time_out.value.string_value 값은 원시 로그의 TIMEOUT 필드에서 가져옵니다.
UID read_only_udm.principal.user.userid 값은 원시 로그의 UID 필드에서 가져옵니다.
USERJOB 이 필드는 UDM에 매핑되지 않습니다.
usrName read_only_udm.principal.user.userid, read_only_udm.principal.user.user_display_name 원시 로그에 UID 또는 LOGIN_LDAP_ID 필드가 있는 경우 usrName은 read_only_udm.principal.user.user_display_name에 사용되고 다른 필드는 read_only_udm.principal.user.userid에 사용됩니다. 그렇지 않으면 usrName이 read_only_udm.principal.user.userid에 사용됩니다.
WEBLGAPP read_only_udm.target.application 값은 원시 로그의 WEBLGAPP 필드에서 가져옵니다.
read_only_udm.extensions.auth.type LOGIN_LDAP_ID가 비어 있지 않으면 값이 SSO로 설정됩니다. 그 외에는 값이 AUTHTYPE_UNSPECIFIED로 설정됩니다.
read_only_udm.intermediary.ip 값은 로그 소스의 IP 주소로 설정됩니다.
read_only_udm.metadata.event_type event_id가 IC_SERVICE_AUDIT, AC_BREAK_THE_GLASS_FAILED_ACCESS, AC_BREAK_THE_GLASS_INAPPROPRIATE_ATTEMPT, AC_BREAK_THE_GLASS_ACCESS 또는 MCMEMEDISA 중 하나이고 target_ip_set이 true이거나 리소스가 비어 있지 않으면 값이 RESOURCE_READ로 설정됩니다. event_id가 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 또는 WPSEC_LOGIN_SUCCESS 중 하나이고 target_ip_set, resource, SERVICENAME, SERVICETYPE 또는 shost 중 하나 이상이 비어 있지 않으면 값이 USER_LOGIN로 설정됩니다. event_id가 E_ADMINPASSWORDCHANGE, E_FAILEDPASSWORDCHANGE, E_SELFPASSWORDCHANGE, WPSEC_USER_PASSWORD_CHANGE_FAIL, WPSEC_USER_PASSWORD_CHANGE 중 하나인 경우 값은 USER_CHANGE_PASSWORD로 설정됩니다. event_id가 CONTEXTCHANGE인 경우 값이 USER_UNCATEGORIZED로 설정됩니다. event_id가 SECURE, UNSECURE, MASKED_DATA_DISPLAY, MASKED_DATA_PRINTING 중 하나인 경우 값은 USER_RESOURCE_ACCESS로 설정됩니다. event_id가 PHI_CLIENT_FILE인 경우 값이 USER_RESOURCE_UPDATE_CONTENT로 설정됩니다. CLIENTNAME이 비어 있지 않으면 값이 STATUS_UPDATE로 설정됩니다. prin_usr_id가 비어 있지 않으면 값이 USER_UNCATEGORIZED로 설정됩니다. 그 외에는 값이 GENERIC_EVENT로 설정됩니다.
read_only_udm.metadata.log_type 값이 EPIC로 설정됩니다.
read_only_udm.metadata.product_name 값이 Epic Systems로 설정됩니다.
read_only_udm.metadata.vendor_name 값이 EPIC로 설정됩니다.
read_only_udm.network.ip_protocol 값은 원시 로그의 proto 필드에서 파생되며 상응하는 IP 프로토콜 이름에 매핑됩니다.
read_only_udm.principal.resource.attribute.labels.workstation_type.key 값이 Workstation ID/Type로 설정됩니다.
read_only_udm.principal.resource.attribute.labels.prev_user.key 값이 Prev User로 설정됩니다.
read_only_udm.security_result.action 원시 로그에 ERRMSG 또는 LOGINERROR 필드가 있는 경우 값이 BLOCK로 설정됩니다.

변경사항

2024-07-01

개선사항:

  • devTime 필드에서 연도를 추출하여 metadata.event_timestamp 매핑을 devTime에서 timestamp로 변경했습니다.
  • devTimeadditional.fields에 매핑했습니다.

2022-10-31

버그 수정:

  • 여러 이벤트 지원을 추가했습니다.

2022-06-09

버그 수정:

  • 가운데 점 ·이 포함된 여러 이벤트에 대한 지원이 추가되었습니다.
  • devTime, usrName, shost, sev, IP 필드에 조건부 검사를 추가했습니다.

2022-04-14

버그 수정:

  • 여러 이벤트 지원을 추가했습니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받아 보세요.