איסוף יומנים של Epic Systems
גרסת כלי הניתוח: 4.0
במאמר הזה מוסבר איך להטמיע יומנים של Epic Systems ב-Google Security Operations באמצעות סוכן Bindplane.
Epic Systems היא פלטפורמה של רשומות רפואיות אלקטרוניות (EHR) שמייצרת הודעות CEF syslog לאירועים בביקורת, לכניסה/יציאה של משתמשים, לגישת מטופלים ולפעולות על קבצים. הכלי לניתוח מחלץ צמדי מפתח/ערך וממפה אותם למודל הנתונים המאוחד (UDM).
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
מופע של Google SecOps
Windows Server 2016 ואילך, או מארח Linux עם
systemdקישוריות לרשת בין סוכן Bindplane לבין שרת Epic Systems
אם מריצים מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
גישה מיוחדת ל-Epic Systems
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנה ב-Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collectorהשירות צריך להופיע עם הערך RUNNING.
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collectorהשירות צריך להופיע כפעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane לקליטת syslog ושליחה ל-Google SecOps
איתור קובץ ההגדרות
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ ההגדרות
מחליפים את כל התוכן של
config.yamlבהגדרה הבאה: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
פרמטרים להגדרה
מחליפים את ה-placeholders הבאים:
הגדרת מקלט:
-
listen_address: כתובת ה-IP והיציאה להאזנה:-
0.0.0.0כדי להאזין בכל הממשקים (מומלץ) - יציאה
514היא יציאת syslog רגילה (נדרשת הרשאת root ב-Linux; אפשר להשתמש ב-1514ללא הרשאת root)
-
-
הגדרת כלי הייצוא:
-
creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
-
customer_id: מספר הלקוח שהועתק ממסוף Google SecOps -
endpoint: כתובת ה-URL של נקודת הקצה האזורית:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
-
שמירת קובץ ההגדרות
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X. - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
שורת הפקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorמסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מחפשים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- מקישים על
הגדרת השירות SendSIEMSyslogAudit
- נכנסים למסוף של Epic Systems.
- עוברים אל התחל > Epic > Interconnect >
<your instance>> עורך ההגדרות. - בוחרים בטופס שירותים לעסקים.
- בכרטיסייה Service category (קטגוריית שירות), בוחרים באפשרות SendSIEMSyslogAudit (שליחת ביקורת של Syslog ל-SIEM).
- לוחצים על Save.
הגדרת Epic Systems לייצוא של syslog
- עוברים אל Epic system definitions > Security > Auditing options > SIEM syslog settings (הגדרות syslog של SIEM).
- מספקים את פרטי ההגדרה הבאים:
- מארח: מזינים את כתובת ה-IP של סוכן Bindplane.
- יציאה: מזינים את מספר היציאה של סוכן Bindplane.
- פורמט SIEM: בוחרים באפשרות CEF (Common Event Format).
- תו הסיום של Syslog: בוחרים באפשרות שורה חדשה '\n'.
- בתפריט SIEM syslog settings (הגדרות 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 ביומן הגולמי |
| APP | 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 ביומן הגולמי והומר לשניות מאז תקופת ה-epoch |
| devTimeFormat | השדה הזה לא ממופה ל-UDM | |
| E3MID | read_only_udm.network.session_id | הערך נלקח מהשדה E3MID ביומן הגולמי |
| מוצפן | 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 ביומן הגולמי, וכל המופעים של \\\\ מוחלפים ב-\ |
| אפשרות בשורת הפקודה (flag) | 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 ביומן הגולמי |
| PATIENT | 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 | הערך נלקח משדה המקור ביומן הגולמי |
| בוצע בהצלחה | read_only_udm.additional.fields.success_yes_no.value.string_value | הערך נלקח מהשדה SUCCESS ביומן הגולמי |
| TIMEOUT | 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 | הערך הוא SSO אם LOGIN_LDAP_ID לא ריק. אחרת, הערך הוא AUTHTYPE_UNSPECIFIED. |
|
| read_only_udm.intermediary.ip | הערך הוא כתובת ה-IP של מקור היומן. | |
| read_only_udm.metadata.event_type | הערך מוגדר כ-RESOURCE_READ אם 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 לא ריק. הערך מוגדר כ-USER_LOGIN אם 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_CHANGE_PASSWORD אם event_id הוא אחד מהערכים E_ADMINPASSWORDCHANGE, E_FAILEDPASSWORDCHANGE, E_SELFPASSWORDCHANGE, WPSEC_USER_PASSWORD_CHANGE_FAIL או WPSEC_USER_PASSWORD_CHANGE. הערך הוא USER_UNCATEGORIZED אם event_id הוא CONTEXTCHANGE. הערך הוא USER_RESOURCE_ACCESS אם event_id הוא אחד מהערכים SECURE, UNSECURE, MASKED_DATA_DISPLAY או MASKED_DATA_PRINTING. הערך הוא USER_RESOURCE_UPDATE_CONTENT אם event_id הוא PHI_CLIENT_FILE. הערך מוגדר כ-STATUS_UPDATE אם CLIENTNAME לא ריק. הערך מוגדר כ-USER_UNCATEGORIZED אם prin_usr_id לא ריק. אחרת, הערך הוא 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 | הערך נגזר משדה הפרוטו בפרוטוקול הגולמי וממופה לשם פרוטוקול ה-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 | הערך מוגדר כ-BLOCK אם השדות ERRMSG או LOGINERROR קיימים ביומן הגולמי. |
|
REMOTEIP |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
CLIENTTYPE |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
INTERNETAREA |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
LOGINCLIENTID |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
LOGINCONTEXT |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
PERIMAUTHST |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
HYPACCESSID |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
UNRECDEVICE |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של מנתח התוכן הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.