איסוף יומנים של טביעות אצבע

גרסת מנתח הנתונים: 1.0

נתמך ב:

במאמר הזה מוסבר איך להגדיר את Fingerprint (לשעבר FingerprintJS) כדי לשלוח יומנים ל-Google Security Operations באמצעות ווּבְּהוּקים.

‫Fingerprint היא פלטפורמת בינה למכשירים שמספקת יכולות של זיהוי מבקרים וזיהוי תרמיות. הכלי יוצר מזהים ייחודיים של מבקרים ומספק אותות חכמים, כולל זיהוי בוטים, זיהוי VPN, זיהוי מצב גלישה בסתר ותובנות אחרות לגבי המכשיר. כשמבקר מזוהה באמצעות סוכן JavaScript של FingerprintJS, אפשר להשתמש ב-webhooks כדי לשלוח את נתוני אירוע הזיהוי ל-Google Security Operations בזמן אמת.

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

חשוב לוודא שמתקיימות דרישות הסף הבאות:

  • מופע של Google SecOps
  • חשבון FingerprintJS עם תמיכה ב-webhook
  • גישה למסוף Google Cloud (ליצירת מפתח API)
  • סוכן JavaScript של FingerprintJS מותקן באתר או באפליקציה

יצירת פיד של webhook ב-Google SecOps

יצירת הפיד

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, FingerprintJS Identification Events).
  5. בוחרים באפשרות Webhook בתור סוג המקור.
  6. בוחרים באפשרות FingerprintJS בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:
    • תו מפריד לפיצול (אופציונלי): משאירים את השדה ריק. כל בקשת webhook מכילה אירוע זיהוי יחיד.
    • מרחב השמות של הנכס: מרחב השמות של הנכס.
    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
  9. לוחצים על הבא.
  10. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

יצירה ושמירה של מפתח סודי

אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:

  1. בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
  2. בתיבת דו-שיח מוצג המפתח הסודי.
  3. מעתיקים את המפתח הסודי ושומרים אותו בצורה מאובטחת.

חשוב: המפתח הסודי מוצג רק פעם אחת, ואי אפשר לאחזר אותו מאוחר יותר. אם מאבדים אותו, צריך ליצור מפתח סודי חדש.

קבלת כתובת ה-URL של נקודת הקצה של הפיד

  1. עוברים לכרטיסייה פרטים של הפיד.
  2. בקטע Endpoint Information, מעתיקים את Feed endpoint URL.
  3. הפורמט של כתובת ה-URL הוא:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    או

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. שומרים את כתובת ה-URL הזו כדי לבצע את השלבים הבאים.

  5. לוחצים על סיום.

יצירת מפתח Google Cloud API

כדי לבצע אימות ב-Chronicle, צריך מפתח API. יוצרים מפתח API מוגבל במסוף Google Cloud.

יצירת מפתח API

  1. נכנסים אל הדף Credentials במסוף Google Cloud.
  2. בוחרים את הפרויקט (הפרויקט שמשויך למופע Chronicle).
  3. לוחצים על Create credentials > API key.
  4. מפתח API נוצר ומוצג בתיבת דו-שיח.
  5. לוחצים על Edit API key כדי להגביל את המפתח.

הגבלת מפתח ה-API

  1. בדף ההגדרות API key:
    • שם: מזינים שם תיאורי (לדוגמה, Chronicle FingerprintJS Webhook API Key).
  2. בקטע API restrictions (הגבלות על API):
    1. בוחרים באפשרות הגבלת המקש.
    2. בתפריט הנפתח Select APIs (בחירת ממשקי API), מחפשים ובוחרים באפשרות Google SecOps API (או Chronicle API).
  3. לוחצים על Save.
  4. מעתיקים את הערך של מפתח ה-API מהשדה API key (מפתח API) בחלק העליון של הדף.
  5. שומרים את מפתח ה-API בצורה מאובטחת.

הגדרת webhook של FingerprintJS

הרכבת ה-webhook URL

  • משלבים את כתובת ה-URL של נקודת הקצה של Chronicle ואת מפתח ה-API:

    <ENDPOINT_URL>?key=<API_KEY>
    
    • לדוגמה:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
      

יצירת webhook בלוח הבקרה של FingerprintJS

  1. נכנסים אל מרכז הבקרה של FingerprintJS.
  2. עוברים אל לוח הבקרה > Webhooks.
  3. לוחצים על Add webhook (הוספת webhook).
  4. מזינים את פרטי ההגדרה הבאים:
    • כתובת URL: מדביקים את כתובת ה-URL המלאה של נקודת הקצה עם מפתח ה-API שמופיע למעלה.
    • סביבה (אופציונלי): אם בוחרים סביבה, ה-webhook ידווח רק על אירועים מסביבה תואמת. משאירים את השדה ריק כדי לקבל אירועים מכל הסביבות.
    • אימות בסיסי (אופציונלי): מרחיבים את אימות בסיסי אם רוצים להוסיף אימות נוסף. לשילוב עם Chronicle, אפשר להשאיר את השדה הזה ריק כי האימות מתבצע באמצעות מפתח ה-API והמפתח הסודי.
  5. לוחצים על יצירת Webhook.
  6. יוצג חלון קופץ עם ההודעה Webhooks created (נוצרו וווב-הוקים).
  7. חשוב: אם אתם משתמשים בחתימות של webhook (רק בתוכנית Enterprise), צריך להעתיק ולשמור את מפתח ההצפנה שמוצג בחלון הקופץ של ההצלחה. המפתח מוצג רק פעם אחת.

הוספת מפתח סודי של Chronicle ל-Webhook

‫FingerprintJS לא תומך בכותרות HTTP מותאמות אישית במהלך יצירת webhook. צריך להוסיף את מפתח הסוד של Chronicle כפרמטר שאילתה בכתובת ה-URL של ה-webhook.

  • מעדכנים את כתובת ה-URL של ה-Webhook כך שתכלול את המפתח הסודי:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
    • לדוגמה:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
      

כדי לעדכן את כתובת ה-Webhook:

  1. במרכז הבקרה של FingerprintJS, עוברים אל Dashboard > Webhooks.
  2. מחפשים את ה-webhook בטבלה ולוחצים על סמל העריכה.
  3. מעדכנים את השדה URL עם כתובת ה-URL המלאה, כולל מפתח ה-API והמפתח הסודי.
  4. לוחצים על עריכת webhook.

בדיקת ה-webhook

  1. במרכז הבקרה של FingerprintJS, עוברים אל Dashboard > Webhooks.
  2. מחפשים את ה-webhook בטבלה.
  3. לוחצים על שליחת אירוע לבדיקה.
  4. מחכים לאישור שאירוע הבדיקה נשלח בהצלחה.
  5. מוודאים שהסטטוס של העברת ה-webhook הוא 'העברה בוצעה בהצלחה'.

הפניה לשיטות אימות

פידים של וווב-הוק ב-Chronicle תומכים בכמה שיטות אימות. ב-webhooks של FingerprintJS נעשה שימוש בפרמטרים של שאילתות לצורך אימות.

שיטת פרמטרים של שאילתה

‫FingerprintJS לא תומך בכותרות HTTP מותאמות אישית במהלך יצירת webhook, לכן צריך לצרף את פרטי הכניסה לכתובת ה-URL.

  • פורמט כתובת ה-URL:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
    • לדוגמה:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
      
  • פורמט הבקשה:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
      "visitorId": "3HNey93AkBW6CRbxV6xP",
      "requestId": "1708102555327.NLOjmg",
      "timestamp": 1582299576512
    }
    

טבלת מיפוי UDM

שדה היומן מיפוי UDM לוגיקה
rawDeviceAttributes.architecture.value, ‏ rawDeviceAttributes.audio.value, ‏ rawDeviceAttributes.colorDepth.value, ‏ rawDeviceAttributes.colorGamut.value, ‏ rawDeviceAttributes.contrast.value, ‏ rawDeviceAttributes.cookiesEnabled.value, ‏ rawDeviceAttributes.deviceMemory.value, ‏ rawDeviceAttributes.fonts.value, ‏ rawDeviceAttributes.forcedColors.value, ‏ rawDeviceAttributes.hardwareConcurrency.value, ‏ rawDeviceAttributes.hdr.value, ‏ rawDeviceAttributes.indexedDB.value, ‏ rawDeviceAttributes.localStorage.value, ‏ rawDeviceAttributes.math.value, ‏ rawDeviceAttributes.monochrome.value, ‏ rawDeviceAttributes.openDatabase.value, ‏ rawDeviceAttributes.pdfViewerEnabled.value, ‏ rawDeviceAttributes.reducedMotion.value, ‏ rawDeviceAttributes.screenFrame.value, ‏ rawDeviceAttributes.screenResolution.value, ‏ rawDeviceAttributes.sessionStorage.value, ‏ rawDeviceAttributes.touchSupport.value.maxTouchPoints, ‏ rawDeviceAttributes.languages.value, ‏ rawDeviceAttributes.vendorFlavors.value, ‏ rawDeviceAttributes.fontPreferences.value.apple, ‏ rawDeviceAttributes.fontPreferences.value.default, ‏ rawDeviceAttributes.fontPreferences.value.min, ‏ rawDeviceAttributes.fontPreferences.value.mono, ‏ rawDeviceAttributes.fontPreferences.value.sans, ‏ rawDeviceAttributes.fontPreferences.value.serif, ‏ rawDeviceAttributes.fontPreferences.value.system additional.fields מוזגו מתוויות שנוצרו משדות מקור
has_principal, has_target, has_target_resource metadata.event_type הערך הוא NETWORK_CONNECTION אם has_principal ו-has_target הם true, אחרת הערך הוא USER_RESOURCE_ACCESS אם has_target_resource הוא true, אחרת הערך הוא STATUS_UPDATE אם has_principal הוא true, אחרת הערך הוא GENERIC_EVENT
source_type metadata.product_event_type הערך הועתק ישירות
requestId metadata.product_log_id הערך הועתק ישירות
browserDetails.userAgent network.http.parsed_user_agent הניתוח מתבצע מתוך browserDetails.userAgent
browserDetails.browserName network.http.parsed_user_agent.browser הערך הועתק ישירות
browserDetails.browserFullVersion network.http.parsed_user_agent.browser_version הערך הועתק ישירות
browserDetails.device network.http.parsed_user_agent.device הערך הועתק ישירות
network.http.parsed_user_agent.family הערך שמוגדר הוא USER_DEFINED
browserDetails.os network.http.parsed_user_agent.os הערך הועתק ישירות
browserDetails.clientReferrer network.http.referral_url הערך הועתק ישירות
browserDetails.userAgent, userAgent network.http.user_agent הערך מ-userAgent אם הוא לא ריק, אחרת הערך מ-browserDetails.userAgent
tag.session network.session_id הערך הועתק ישירות
rawDeviceAttributes.vendor.value principal.administrative_domain הערך הועתק ישירות
ip principal.asset.ip הערך הועתק ישירות
ip principal.ip הערך הועתק ישירות
ipInfo.v4.geolocation.city.name principal.location.city הערך הועתק ישירות
ipInfo.v4.geolocation.country.name principal.location.country_or_region הערך הועתק ישירות
ipInfo.v4.geolocation.latitude principal.location.region_coordinates.latitude הומר לצף
ipInfo.v4.geolocation.longitude principal.location.region_coordinates.longitude הומר לצף
browserDetails.osVersion, rawDeviceAttributes.platform.value principal.platform_version הערך מ-rawDeviceAttributes.platform.value אם הוא לא ריק, אחרת הערך מ-browserDetails.osVersion
ipInfo.v4.asn.asn, ipInfo.v4.asn.network, ipInfo.v4.asn.name, ipInfo.v4.geolocation.accuracyRadius, ipInfo.v4.geolocation.continent.name, ipInfo.v4.geolocation.timezone, ipInfo.v4.geolocation.subdivisions.isoCode, ipInfo.v4.geolocation.subdivisions.name principal.resource.attribute.labels מוזגו מתוויות שנוצרו משדות מקור
bot.result, browserDetails.browserMajorVersion, confidence.score, confidence.revision, developerTools.result, highActivity.result, incognito, ipBlocklist.result, ipBlocklist.details.attackSource, ipBlocklist.details.emailSpam, visitorFound, visitorId, tag.request, privacySettings.result, proxy.result, suspectScore.result, tor.result, virtualMachine.result, tampering.anomalyScore, tampering.antiDetectBrowser, tampering.result, vpn.confidence, vpn.originCountry, vpn.originTimezone, vpn.result, vpn.methods.auxiliaryMobile, vpn.methods.osMismatch, vpn.methods.publicVPN, vpn.methods.timezoneMismatch, velocity.distinctCountry.intervals.1h, velocity.distinctCountry.intervals.24h, velocity.distinctCountry.intervals.5m, velocity.distinctIp.intervals.1h, velocity.distinctIp.intervals.24h, velocity.distinctIp.intervals.5m, velocity.events.intervals.1h, velocity.events.intervals.24h, velocity.events.intervals.5m, velocity.ipEvents.intervals.1h, velocity.ipEvents.intervals.24h, velocity.ipEvents.intervals.5m, rawDeviceAttributes.webGlBasics.value.renderer, rawDeviceAttributes.webGlBasics.value.rendererUnmasked, rawDeviceAttributes.webGlBasics.value.vendorUnmasked, rawDeviceAttributes.webGlBasics.value.shadingLanguageVersion, rawDeviceAttributes.webGlExtensions.value.contextAttributes, rawDeviceAttributes.webGlExtensions.value.extensions, rawDeviceAttributes.webGlExtensions.value.extensionParameters, rawDeviceAttributes.webGlExtensions.value.parameters, rawDeviceAttributes.webGlExtensions.value.shaderPrecisions, rawDeviceAttributes.mathML.value.bottom, rawDeviceAttributes.mathML.value.top, rawDeviceAttributes.mathML.value.left, rawDeviceAttributes.mathML.value.right, rawDeviceAttributes.mathML.value.width, rawDeviceAttributes.mathML.value.height, rawDeviceAttributes.mathML.value.font, rawDeviceAttributes.mathML.value.x, rawDeviceAttributes.mathML.value.y, rawDeviceAttributes.emoji.value.bottom, rawDeviceAttributes.emoji.value.top, rawDeviceAttributes.emoji.value.left, rawDeviceAttributes.emoji.value.right, rawDeviceAttributes.emoji.value.width, rawDeviceAttributes.emoji.value.height, rawDeviceAttributes.emoji.value.font, rawDeviceAttributes.emoji.value.x, rawDeviceAttributes.emoji.value.y, rawDeviceAttributes.canvas.value.Geometry, rawDeviceAttributes.canvas.value.Text, rawDeviceAttributes.canvas.value.Winding security_result.detection_fields מוזגו מתוויות שנוצרו משדות מקור
rawDeviceAttributes.webGlBasics.value.vendor target.administrative_domain הערך הועתק ישירות
ipInfo.v6.address target.asset.ip הערך הועתק ישירות
ipInfo.v6.address target.ip הערך הועתק ישירות
ipInfo.v6.geolocation.city.name target.location.city הערך הועתק ישירות
ipInfo.v6.geolocation.country.name target.location.country_or_region הערך הועתק ישירות
ipInfo.v6.geolocation.latitude target.location.region_coordinates.latitude הומר לצף
ipInfo.v6.geolocation.longitude target.location.region_coordinates.longitude הומר לצף
נתיב target.path הערך הועתק ישירות
rawDeviceAttributes.webGlBasics.value.version target.platform_version הערך הועתק ישירות
ipInfo.v6.asn.asn, ipInfo.v6.asn.network, ipInfo.v6.asn.name, ipInfo.v6.geolocation.accuracyRadius, ipInfo.v6.geolocation.continent.name, ipInfo.v6.geolocation.timezone, ipInfo.v6.geolocation.subdivisions.isoCode, ipInfo.v6.geolocation.subdivisions.name target.resource.attribute.labels מוזגו מתוויות שנוצרו משדות מקור
url target.url הערך הועתק ישירות
metadata.product_name הערך שמוגדר הוא FINGERPRINT_JS
metadata.vendor_name ההגדרה היא FINGERPRINT_JS

שנה רישום

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

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