Epic Systems 로그 수집
이 문서에서는 Bindplane 에이전트를 사용하여 Epic Systems 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 원시 Epic EMR/EHR 시스템 로그를 통합 데이터 모델 (UDM)로 변환합니다. 먼저 로그 메시지를 정리하고 구조화한 후 키-값 쌍을 추출하고 추출된 필드를 상응하는 UDM 필드에 매핑하여 다양한 로그 형식과 데이터 불일치를 처리하여 포괄적이고 표준화된 데이터 표현을 보장합니다.
시작하기 전에
- Google Security Operations 인스턴스가 있는지 확인합니다.
- Windows 2016 이상을 사용 중이거나
systemd
와 함께 Linux 호스트를 사용하고 있는지 확인합니다. - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
- Epic Systems에 대한 액세스 권한이 있는지 확인합니다.
Google SecOps 처리 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 처리 인증 파일을 다운로드합니다. Bindplane가 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
Windows 설치
- 관리자 권한으로 명령 프롬프트 또는 PowerShell을 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
- 추가 설치 옵션은 이 설치 가이드를 참고하세요.
Syslog를 수집하고 Google SecOps로 전송하도록 Bindplane 에이전트 구성
구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux의/etc/bindplane-agent/
디렉터리 또는 Windows의 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
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
인프라에서 필요에 따라 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.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 서비스 구성
- Epic Systems 콘솔에 로그인합니다.
- 시작 > Epic > Interconnect >
<your instance>
> 구성 편집기로 이동합니다. - 비즈니스 서비스 양식을 선택합니다.
- 서비스 카테고리 탭에서 SendSIEMSyslogAudit를 선택합니다.
- 저장을 클릭합니다.
syslog를 내보내도록 Epic Systems 구성
- Epic 시스템 정의 > 보안 > 감사 옵션 > SIEM syslog 설정으로 이동합니다.
- 다음 구성 세부정보를 제공합니다.
- 호스트: Bindplane 에이전트 IP 주소를 입력합니다.
- 포트: Bindplane 에이전트 포트 번호를 입력합니다.
- SIEM 형식: CEF (공통 이벤트 형식)를 선택합니다.
- Syslog 종료 문자: 새 줄 "\n"을 선택합니다.
- SIEM syslog 설정 메뉴에서 SIEM syslog를 선택합니다.
- 사용 설정됨을 클릭합니다.
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
로 변경했습니다.devTime
를additional.fields
에 매핑했습니다.
2022-10-31
버그 수정:
- 여러 이벤트 지원을 추가했습니다.
2022-06-09
버그 수정:
- 가운데 점
·
이 포함된 여러 이벤트에 대한 지원이 추가되었습니다. devTime
,usrName
,shost
,sev
,IP
필드에 조건부 검사를 추가했습니다.
2022-04-14
버그 수정:
- 여러 이벤트 지원을 추가했습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받아 보세요.