איסוף יומני מערכת של Epic Systems

גרסת המנתח: 4.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני מערכת של Epic Systems ב-Google Security Operations באמצעות סוכן Bindplane.

‫Epic Systems היא פלטפורמה של תיקים רפואיים ממוחשבים (EHR) שיוצרת הודעות syslog בפורמט CEF לאירועי ביקורת, התחברות/התנתקות של משתמשים, גישה של מטופלים ופעולות על קבצים. המנתח מחלץ צמדי מפתח/ערך וממפה אותם למודל הנתונים המאוחד (UDM).

לפני שמתחילים

  • חשוב לוודא שיש לכם את הדברים הבאים:

  • מכונה של Google SecOps

  • ‫Windows Server 2016 ואילך, או מארח Linux עם systemd

  • קישוריות רשת בין סוכן Bindplane לבין שרת Epic Systems

  • אם אתם משתמשים בשרת proxy, ודאו שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.

  • גישה מיוחדת ל-Epic Systems

קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane

כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים באחת מהשיטות הבאות:

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
  1. נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על Create service account.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • Service account description: מזינים תיאור (לדוגמה, Bindplane agent log ingestion).
  5. לוחצים על Create and continue.
  6. בקטע Grant this service account access to project, לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
  7. לוחצים על המשך ואז על סיום.
  8. לוחצים על חשבון השירות שיצרתם ועוברים לכרטיסייה Keys.
  9. לוחצים על Add key > Create new key.
  10. בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
  11. שומרים את קובץ המפתח בתור ingestion-auth.json בספריית Bindplane collector (/opt/observiq-otel-collector/ingestion-auth.json ב-Linux או C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json ב-Windows), או מעדכנים את creds_file_path ב-config.yaml כך שיתאים לנתיב שבו שמרתם אותו.
  12. עוברים אל IAM & Admin > Settings ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את הייצוא.

אפשרות 2: הורדה של קובץ האימות להטמעת נתונים (גרסה קודמת)

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל הגדרות > ניהול נתונים > סוכני איסוף. אם אתם משתמשים בפלטפורמת SIEM בלבד, עוברים אל הגדרות > סוכני איסוף.
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

איך מקבלים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל הגדרות > ניהול > פרופיל. אם אתם משתמשים בפלטפורמה של SIEM בלבד, עוברים אל הגדרות > פרופיל.
  3. מעתיקים את מספר הלקוח מהקטע פרטי הארגון ושומרים אותו.

התקנת הסוכן של Bindplane

מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.

התקנת חלונות

  1. פותחים את שורת הפקודה או את PowerShell כאדמין.
  2. מריצים את הפקודה הבאה:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. מחכים שההתקנה תסתיים.

  4. כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:

    sc query observiq-otel-collector
    

    השירות אמור להופיע כ-RUNNING.

התקנה ב-Linux

  1. פותחים טרמינל עם הרשאות root או sudo.
  2. מריצים את הפקודה הבאה:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. מחכים שההתקנה תסתיים.

  4. כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:

    sudo systemctl status observiq-otel-collector
    

    השירות אמור להופיע כפעיל (פועל).

מקורות מידע נוספים בנושא התקנה

לאפשרויות התקנה נוספות ולפתרון בעיות, עיינו במדריך להתקנת סוכן Bindplane.

הגדרת סוכן Bindplane להטמעת syslog ושליחה אל Google SecOps

מאתרים את קובץ התצורה

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

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

עריכת קובץ התצורה

  • מחליפים את כל התוכן של config.yaml בהגדרות הבאות:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/epic:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.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: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • ‫customer_id: מספר הלקוח שהועתק ממסוף Google SecOps
    • ‫location: מחליפים את <LOCATION> באזור של המכונה של Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). המייצא מוסיף את הערך הזה בתחילת chronicle.googleapis.com. לרשימה המלאה, ראו נקודות קצה אזוריות.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: משאירים את הערך chronicle.googleapis.com.

מייצא API להטמעה מדור קודם

  • אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק exporters בקוד הבא. מגדירים את creds_file_path לנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/epic:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: EPIC
        raw_log_field: body
    

שמירת קובץ התצורה

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • Linux: לוחצים על Ctrl+O, אחר כך על Enter ואז על Ctrl+X
    • Windows: לוחצים על קובץ > שמירה

מפעילים מחדש את הסוכן של Bindplane כדי להחיל את השינויים.

  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Linux, מריצים את הפקודה הבאה:

    sudo systemctl restart observiq-otel-collector
    
    1. מוודאים שהשירות פועל:

      sudo systemctl status observiq-otel-collector
      
    2. בודקים אם יש שגיאות ביומנים:

      sudo journalctl -u observiq-otel-collector -f
      
  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:

    • שורת הפקודה או PowerShell כאדמין:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • מסוף השירותים:

      1. לוחצים על Win+R, מקלידים services.msc ולוחצים על Enter.
      2. מאתרים את observIQ OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
      4. מוודאים שהשירות פועל:

        sc query observiq-otel-collector
        
      5. בודקים אם יש שגיאות ביומנים:

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

הגדרת השירות SendSIEMSyslogAudit

  1. נכנסים למסוף Epic Systems.
  2. עוברים אל Start > Epic > Interconnect > <your instance> > Configuration editor.
  3. בוחרים בטופס שירותים עסקיים.
  4. בכרטיסייה קטגוריית שירות, בוחרים באפשרות SendSIEMSyslogAudit.
  5. לוחצים על Save.

הגדרת Epic Systems לייצוא של syslog

  1. עוברים אל Epic system definitions > Security > Auditing options > SIEM syslog settings.
  2. מזינים את פרטי ההגדרה הבאים:
    • ‫Host: מזינים את כתובת ה-IP של סוכן Bindplane.
    • יציאה: מזינים את מספר היציאה של סוכן Bindplane.
    • פורמט SIEM: בוחרים באפשרות CEF (פורמט אירועים נפוץ).
    • תו סיום של Syslog: בוחרים באפשרות שורה חדשה "\n".
  3. בתפריט הגדרות של יומן מערכת SIEM, בוחרים באפשרות יומן מערכת SIEM.
  4. לוחצים על מופעל.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
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 ביומן הגולמי ומומר לשניות מאז תחילת התקופה
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 ביומן הגולמי
מטופל/ת 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 הערך מוגדר כ-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 או שהמשאב לא ריק. הערך מוגדר כ-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 הערך נגזר מהשדה 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 הערך מוגדר כ-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.