איסוף יומנים של טביעות אצבע
גרסת מנתח הנתונים: 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
יצירת הפיד
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
FingerprintJS Identification Events). - בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות FingerprintJS בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- תו מפריד לפיצול (אופציונלי): משאירים את השדה ריק. כל בקשת webhook מכילה אירוע זיהוי יחיד.
- מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
- לוחצים על הבא.
- בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
יצירה ושמירה של מפתח סודי
אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:
- בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
- בתיבת דו-שיח מוצג המפתח הסודי.
- מעתיקים את המפתח הסודי ושומרים אותו בצורה מאובטחת.
חשוב: המפתח הסודי מוצג רק פעם אחת, ואי אפשר לאחזר אותו מאוחר יותר. אם מאבדים אותו, צריך ליצור מפתח סודי חדש.
קבלת כתובת ה-URL של נקודת הקצה של הפיד
- עוברים לכרטיסייה פרטים של הפיד.
- בקטע Endpoint Information, מעתיקים את Feed endpoint URL.
הפורמט של כתובת ה-URL הוא:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateאו
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateשומרים את כתובת ה-URL הזו כדי לבצע את השלבים הבאים.
לוחצים על סיום.
יצירת מפתח Google Cloud API
כדי לבצע אימות ב-Chronicle, צריך מפתח API. יוצרים מפתח API מוגבל במסוף Google Cloud.
יצירת מפתח API
- נכנסים אל הדף Credentials במסוף Google Cloud.
- בוחרים את הפרויקט (הפרויקט שמשויך למופע Chronicle).
- לוחצים על Create credentials > API key.
- מפתח API נוצר ומוצג בתיבת דו-שיח.
- לוחצים על Edit API key כדי להגביל את המפתח.
הגבלת מפתח ה-API
- בדף ההגדרות API key:
- שם: מזינים שם תיאורי (לדוגמה,
Chronicle FingerprintJS Webhook API Key).
- שם: מזינים שם תיאורי (לדוגמה,
- בקטע API restrictions (הגבלות על API):
- בוחרים באפשרות הגבלת המקש.
- בתפריט הנפתח Select APIs (בחירת ממשקי API), מחפשים ובוחרים באפשרות Google SecOps API (או Chronicle API).
- לוחצים על Save.
- מעתיקים את הערך של מפתח ה-API מהשדה API key (מפתח API) בחלק העליון של הדף.
שומרים את מפתח ה-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
- נכנסים אל מרכז הבקרה של FingerprintJS.
- עוברים אל לוח הבקרה > Webhooks.
- לוחצים על Add webhook (הוספת webhook).
- מזינים את פרטי ההגדרה הבאים:
- כתובת URL: מדביקים את כתובת ה-URL המלאה של נקודת הקצה עם מפתח ה-API שמופיע למעלה.
- סביבה (אופציונלי): אם בוחרים סביבה, ה-webhook ידווח רק על אירועים מסביבה תואמת. משאירים את השדה ריק כדי לקבל אירועים מכל הסביבות.
- אימות בסיסי (אופציונלי): מרחיבים את אימות בסיסי אם רוצים להוסיף אימות נוסף. לשילוב עם Chronicle, אפשר להשאיר את השדה הזה ריק כי האימות מתבצע באמצעות מפתח ה-API והמפתח הסודי.
- לוחצים על יצירת Webhook.
- יוצג חלון קופץ עם ההודעה Webhooks created (נוצרו וווב-הוקים).
- חשוב: אם אתם משתמשים בחתימות של 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:
- במרכז הבקרה של FingerprintJS, עוברים אל Dashboard > Webhooks.
- מחפשים את ה-webhook בטבלה ולוחצים על סמל העריכה.
- מעדכנים את השדה URL עם כתובת ה-URL המלאה, כולל מפתח ה-API והמפתח הסודי.
- לוחצים על עריכת webhook.
בדיקת ה-webhook
- במרכז הבקרה של FingerprintJS, עוברים אל Dashboard > Webhooks.
- מחפשים את ה-webhook בטבלה.
- לוחצים על שליחת אירוע לבדיקה.
- מחכים לאישור שאירוע הבדיקה נשלח בהצלחה.
מוודאים שהסטטוס של העברת ה-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.