איסוף יומני CEF של Imperva

נתמך ב:

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

המנתח מחלץ שדות מיומנים בפורמט Imperva syslog ב-CEF (פורמט אירועים נפוץ). הוא משתמש ב-grok או ב-kv כדי לנתח את הודעת ה-CEF, ואז ממפה את הערכים האלה למודל הנתונים המאוחד (UDM). בנוסף, הוא מגדיר ערכי ברירת מחדל של מטא-נתונים למקור ולסוג האירוע.

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

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

  • מופע של Google SecOps
  • מארח עם Windows 2016 ואילך או Linux עם systemd
  • אם השרת פועל מאחורי שרת proxy, צריך לוודא שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
  • גישה עם הרשאות למסוף הניהול או למכשיר של Imperva

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

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

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות מדור קודם: אפשר להמשיך להשתמש בקובץ האימות של ה-API להעברת נתונים (אפשרות 2) עד שה-API להעברת נתונים יפסיק לפעול ב-20 ביולי 2027.
  1. נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על יצירת חשבון שירות.
  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 Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.

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

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

התקנת סוכן Bindplane

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

התקנה ב-Windows

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

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

התקנה ב-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
    

מקורות מידע נוספים להתקנה

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

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

  1. ניגשים לקובץ התצורה:

    • מאתרים את הקובץ config.yaml. בדרך כלל, הוא נמצא בספרייה /opt/observiq-otel-collector/ ב-Linux או בספריית ההתקנה ב-Windows.
    • פותחים את הקובץ באמצעות כלי לעריכת טקסט (לדוגמה, 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:
        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
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: <CUSTOMER_ID>
        endpoint: chronicle.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'IMPERVA_CEF'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • מחליפים את היציאה ואת כתובת ה-IP לפי הצורך בתשתית.
    • מחליפים את <LOCATION> באזור של מכונת Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). המייצא מוסיף את הערך הזה בתחילת chronicle.googleapis.com.
    • מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • מחליפים את <CUSTOMER_ID> במספר הלקוח בפועל.
    • מעדכנים את /path/to/ingestion-authentication-file.json לנתיב הקובץ שבו נשמר קובץ המפתח של חשבון השירות (אפשרות 1) בשלב 1.

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

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

    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/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
        log_type: 'IMPERVA_CEF'
        raw_log_field: body
        ingestion_labels:
    

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

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

    sudo systemctl restart observiq-otel-collector
    
  2. כדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, אפשר להשתמש במסוף Services או להזין את הפקודה הבאה:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

הגדרת Imperva WAF Gateway (SecureSphere)‎ לשליחת CEF דרך syslog

  1. במסוף MX, יוצרים קבוצת פעולות:

    • עוברים אל Policies > Action Sets.
    • לוחצים על חדש ונותנים לו שם (לדוגמה, Google SecOps CEF).
  2. מוסיפים את ממשק הפעולה של CEF syslog:

    • בקטע Available Action Interfaces (ממשקי פעולות זמינים), פותחים את System Log (יומן מערכת) ומוסיפים אחת או יותר מהאפשרויות הבאות (לפי הצורך):
      • רישום אירוע אבטחה ביומן המערכת (syslog) באמצעות תקן CEF
      • רישום אירוע של אבטחת רשת ביומן המערכת (syslog) באמצעות תקן CEF
      • רישום אירוע מערכת ביומן המערכת (syslog) באמצעות תקן CEF
      • רישום אירוע אבטחה מותאם אישית ביומן המערכת (syslog) באמצעות תקן CEF
  3. מגדירים את הפרמטרים של ממשק הפעולה:

    • Syslog Host: מזינים את כתובת ה-IP של סוכן Bindplane. כדי להשתמש ביציאה שאינה ברירת המחדל, מוסיפים :PORT (ברירת המחדל היא 514 אם לא מציינים יציאה). לדוגמה: 10.0.0.10:514.
    • מתקן / רמת יומן: הגדרה בהתאם לדרישות המדיניות.
    • הודעה: משאירים את ברירות המחדל של הספק ל-CEF, אלא אם יש לכם מיפוי בהתאמה אישית.
  4. מצרפים את קבוצת הפעולות לכללי המדיניות:

    • לאירועים מסוג Security / אבטחת רשת: פותחים את המדיניות הרלוונטית ומגדירים את Followed Action ל-Action Set שלכם.
    • עבור System Events: יוצרים או מאמתים מדיניות של System Events ומגדירים את Followed Action לקבוצת הפעולות שלכם, כדי שהאירועים האלה יישלחו גם דרך CEF.
  5. (אופציונלי) מגדירים יעדים ספציפיים לשער:

    • אם קבוצות שונות של שערים צריכות לשלוח לשרתי syslog שונים, מגדירים כל קבוצת שערים > כלי רישום חיצוני ומפעילים את האפשרות "שימוש בהגדרת השער אם היא קיימת" במדיניות.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
act security_result.action נגזרת. אם הערך של act הוא "allowed",‏ "alert", מתחיל ב-"REQ_PASSED" או מתחיל ב-"REQ_CACHED", אז הערך של action הוא "ALLOW". אם act הוא deny,‏ blocked, מתחיל ב-REQ_BLOCKED או מתחיל ב-REQ_CHALLENGE, אז action הוא BLOCK. אם act תואם לביטוי הרגולרי (?i)REQ_BAD, אז action הוא "FAIL". אחרת, הערך של action הוא "UNKNOWN_ACTION". הערך של security_result.action מוגדר לערך של action.
act security_result.action_details נגזרת. המערכת יוצרת תיאור מפורט על סמך הערך של act. דוגמאות: REQ_CACHED_FRESH: response was returned from the data center's cache,‏ REQ_BLOCKED: the request was blocked.
app network.application_protocol ממופה ישירות אחרי ההמרה לאותיות רישיות.
cs1 security_result.detection_fields.value מיפוי מותנה אם השדה cs1 לא ריק או לא מכיל את הערך "NA". הערך של security_result.detection_fields.key מוגדר כ-cs1Label.
cs1Label security_result.detection_fields.key מיפוי מותנה אם השדה cs1 לא ריק או לא מכיל את הערך "NA". הערך של security_result.detection_fields.value מוגדר כ-cs1.
cs2 security_result.detection_fields.value אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כ-cs2Label.
cs2Label security_result.detection_fields.key אם התא cs2 לא ריק, המיפוי מתבצע על סמך תנאי. הערך של security_result.detection_fields.value מוגדר כערך של cs2.
cs3 security_result.detection_fields.value מיפוי מותנה אם השדה לא ריק או לא מכיל "-". הערך של security_result.detection_fields.key מוגדר לערך של cs3Label.
cs3Label security_result.detection_fields.key מיפוי מותנה אם cs3 לא ריק או לא מכיל את הערך '-'. הערך של security_result.detection_fields.value מוגדר לערך של cs3.
cs4 security_result.detection_fields.value מיפוי מותנה אם השדה לא ריק. הערך של security_result.detection_fields.key מוגדר כ-cs4Label.
cs4Label security_result.detection_fields.key מיפוי מותנה אם cs4 לא ריק. הערך של security_result.detection_fields.value מוגדר כערך של cs4.
cs5 security_result.detection_fields.value אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כערך של cs5Label.
cs5Label security_result.detection_fields.key מיפוי מותנה אם השדה cs5 לא ריק. הערך של security_result.detection_fields.value מוגדר כ-cs5.
cs6 security_result.detection_fields.value אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כערך של cs6Label.
cs6Label security_result.detection_fields.key מיפוי מותנה אם cs6 לא ריק. הערך של security_result.detection_fields.value מוגדר כ-cs6.
cs7 principal.location.region_latitude מיפוי מותנה אם הערך של cs7Label הוא "latitude".
cs8 principal.location.region_longitude מיפוי מותנה אם cs8Label הוא "קו אורך".
cn1 security_result.detection_fields.value ממופה באופן מותנה אם הוא לא ריק ו-cn1Label לא ריק. הערך של security_result.detection_fields.key מוגדר כערך של cn1Label.
cn1Label security_result.detection_fields.key מיפוי מותנה אם השדות cn1 ו-cn1Label לא ריקים. הערך של security_result.detection_fields.value מוגדר כערך של cn1.
fileType security_result.detection_fields.value אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כ-"fileType".
filePermission security_result.detection_fields.value אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key הוא "filePermission".
request target.url מיפוי ישיר.
requestClientApplication network.http.user_agent מיפוי מותנה אם השדה לא ריק. הפעולה הזו מחליפה את הערך שממופה מהשדה user_agent שחולץ מצמדי המפתח/ערך requestContext או requestClientApplication ב-CEF payload.
requestMethod network.http.method ממופים ישירות.
siteid security_result.detection_fields.value מיפוי מותנה אם השדה לא ריק. הערך של security_result.detection_fields.key מוגדר כ-"siteid".
sourceServiceName target.hostname מיפוי ישיר. מחליף את הערך של dhost אם הוא קיים.
src principal.ip ממופים ישירות.
start metadata.event_timestamp.seconds חולץ באמצעות תבנית grok והומר לחותמת זמן. הוא משמש כגיבוי ל-deviceReceiptTime אם הוא לא קיים. אם גם deviceReceiptTime וגם start ריקים, המערכת משתמשת בחותמת הזמן של היומן.
suid principal.user.userid מיפוי מותנה אם השדה לא ריק.
לא רלוונטי metadata.event_type מקודד באופן קשיח ל-"NETWORK_HTTP".
לא רלוונטי metadata.log_type ממופה ישירות מהשדה log_type ברמה העליונה.
לא רלוונטי metadata.product_event_type ממופה מ-csv.event_id אם לא ריק.
לא רלוונטי metadata.product_name מקודד באופן קשיח ל-"Web Application Firewall".
לא רלוונטי metadata.vendor_name מקודד באופן קשיח ל-Imperva.
kv.act event.idm.read_only_udm.security_result.action_details מופה מיומן השינויים
kv.sourceServiceName event.idm.read_only_udm.target.resource.name מופה מיומן השינויים
cicode event.idm.read_only_udm.principal.location.city מופה מיומן השינויים
ccode event.idm.read_only_udm.principal.location.country_or_region מופה מיומן השינויים
Customer event.idm.read_only_udm.network.organization_name מופה מיומן השינויים
tls_cipher event.idm.read_only_udm.network.tls.cipher מופה מיומן השינויים
cpt event.idm.read_only_udm.target.port מופה מיומן השינויים
fileId event.idm.read_only_udm.target.resource.product_object_id מופה מיומן השינויים
dproc event.idm.read_only_udm.security_result.category_details מופה מיומן השינויים
deviceFacility event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
deviceExternalId event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
end event.idm.read_only_udm.metadata.collected_timestamp מופה מיומן השינויים

יומן שינויים

צפייה ביומן השינויים של המנתח הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.