איסוף יומנים של HackerOne

נתמך ב:

במאמר הזה מוסבר איך להגדיר את HackerOne כך שישלח יומנים ל-Google Security Operations באמצעות תגובות לפעולה מאתר אחר (webhooks).

‫HackerOne היא פלטפורמה לתיאום נקודות חולשה ולתגמול על מציאת באגים, שמקשרת בין ארגונים לבין חוקרי אבטחה כדי לזהות נקודות חולשה באבטחה ולתקן אותן. הפלטפורמה מספקת תוכניות לתגמול על מציאת באגים, תוכניות לחשיפת נקודות חולשה, בדיקות חדירה ובדיקות אבטחה שוטפות לאורך מחזור החיים של פיתוח התוכנה.

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

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

  • מופע של Google SecOps

  • תוכנית HackerOne עם רמת Professional או Enterprise (תגובות לפעולות אינטרנט זמינות רק ברמות האלה)

  • הרשאת אדמין בהגדרות התוכנית שלכם ב-HackerOne

  • גישה למסוף Google Cloud (ליצירת מפתח API)

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

יצירת הפיד

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

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

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

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

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

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

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

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

    או לנקודות קצה אזוריות:

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

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

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

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

יצירת מפתח ה-API

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

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

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

הגדרת webhook של HackerOne

הרכבת כתובת ה-URL של ה-webhook

משלבים את כתובת ה-URL של נקודת הקצה של Google SecOps, מפתח ה-API והמפתח הסודי לכתובת URL אחת. צריך לצרף את מפתח ה-API ואת המפתח הסודי כפרמטרים של שאילתה.

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

```none
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
```

לדוגמה:

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

מחליפים את הערכים הבאים: - <ENDPOINT_URL>: כתובת נקודת הקצה של הפיד מהקטע קבלת כתובת נקודת הקצה של הפיד. ‫– <API_KEY>: מפתח Google Cloud API מהקטע יצירת מפתח Google Cloud API. ‫- <SECRET_KEY>: המפתח הסודי מהקטע יצירה ושמירה של מפתח סודי.

חשוב: אל תזינו את המפתח הסודי של Google SecOps בשדה Secret של HackerOne. השדה Secret של HackerOne משמש לאימות חתימת המטען הייעודי (payload) של HMAC (כותרת X-H1-Signature), שהוא מנגנון נפרד מאימות ה-webhook של Google SecOps. אם תזינו את הסוד של Google SecOps בשדה Secret של HackerOne, תקבלו שגיאה 403 Forbidden כי HackerOne לא מעביר את הערך הזה כפרטי כניסה לאימות של Google SecOps. במקום זאת, מוסיפים את key ואת secret כפרמטרים של שאילתה בכתובת ה-URL של מטען הייעודי.

יצירת webhook ב-HackerOne

  1. נכנסים ל-HackerOne ועוברים לתוכנית שלכם.
  2. עוברים אל Engagements (אינטראקציות), לוחצים על סמל האפשרויות הנוספות (שלוש נקודות) של התוכנית שרוצים להגדיר ואז על Settings (הגדרות).
  3. עוברים אל Automation > Webhooks.
  4. לוחצים על New webhook (יצירת webhook חדש).
  5. מספקים את פרטי ההגדרה הבאים:
    • ‫Payload URL (כתובת ה-URL של המטען הייעודי): מדביקים את כתובת ה-URL המלאה עם מפתח ה-API והסוד מהשלב הקודם (לדוגמה, https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...).
    • סוד: משאירים את השדה הזה ריק.
  6. בוחרים אילו אירועים יפעילו את ה-webhook. בוחרים באחת מהאפשרויות הבאות:
    • Send me everything (שליחת כל הנתונים): כל האירועים יפעילו את ה-webhook.
    • אני רוצה לציין אירועים ספציפיים: בוחרים את האירועים הספציפיים שרוצים לשלוח ל-Google SecOps.
  7. לוחצים על Add webhook (הוספת תגובה לפעולה מאתר אחר).

בדיקת ה-webhook

  1. בדף ההגדרות של ה-webhook, לוחצים על Test request (בדיקת בקשה) כדי לשלוח בקשה לדוגמה לכתובת ה-URL של מטען הייעודי (payload) שהוגדרה.
  2. מוודאים שהתשובה היא HTTP 200.
  3. לוחצים על ה-webhook כדי לראות את הפרטים.
  4. בקטע Recent deliveries, מוודאים שהמסירות האחרונות מציגות סטטוס הצלחה (HTTP 200).
  5. לוחצים על כל מסירה כדי לראות את בקשת המטען הייעודי (payload) של POST.

אם מופיעה שגיאה: - HTTP 403: מוודאים שמפתח ה-API והמפתח הסודי מצורפים בצורה נכונה כפרמטרים של שאילתה בכתובת ה-URL של מטען הייעודי (Payload). מוודאים שהשדה Secret ב-HackerOne ריק. ‫– HTTP 401: צריך לוודא שמפתח ה-API תקין ומוגבל לממשק ה-API של Google SecOps. ‫– HTTP 404: מוודאים שכתובת ה-URL של נקודת הקצה נכונה וכוללת את הנתיב המלא (/v2/unstructuredlogentries:batchCreate).

אימות ההטמעה ב-Google SecOps

  1. עוברים אל SIEM Settings (הגדרות SIEM) > Feeds (פידים) ב-Google SecOps.
  2. מאתרים את פיד ה-webhook של HackerOne.
  3. בודקים את העמודה סטטוס (הסטטוס צריך להיות פעיל).
  4. בודקים את הספירה של אירועים שהתקבלו (הספירה צריכה לעלות).
  5. בודקים את חותמת הזמן של הפעולה האחרונה שהצליחה (צריכה להיות עדכנית).

מגבלות ושיטות מומלצות לשימוש ב-Webhook

מגבלות על בקשות

| Limit | Value |
|-------|-------|
| **Max request size** | 4 MB |
| **Max QPS (queries per second)** | 15,000 |
| **Request timeout** | 30 seconds |
| **Retry behavior** | Automatic with exponential backoff |

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
attributes.cleared, attributes.rules_of_engagement_signed, attributes.identity_verified, attributes.background_checked, attributes.citizenship_verified, attributes.residency_verified, type, attributes.title, attributes.main_state, attributes.state, relationships.reporter.data.type, relationships.reporter.data.attributes.reputation, relationships.reporter.data.attributes.signal, relationships.reporter.data.attributes.impact, relationships.reporter.data.attributes.disabled, relationships.reporter.data.attributes.profile_picture.62x62, relationships.reporter.data.attributes.profile_picture.82x82, relationships.reporter.data.attributes.profile_picture.110x110, relationships.reporter.data.attributes.profile_picture.260x260, relationships.reporter.data.attributes.hackerone_triager, relationships.program.data.id, relationships.program.data.type, relationships.program.data.attributes.handle, relationships.severity.data.type, relationships.severity.data.attributes.rating, relationships.severity.data.attributes.author_type, relationships.severity.data.attributes.calculation_method, relationships.weakness.data.id, relationships.weakness.data.type, relationships.weakness.data.attributes.name, relationships.weakness.data.attributes.description, relationships.weakness.data.attributes.external_id, relationships.structured_scope.data.id, relationships.structured_scope.data.type, relationships.structured_scope.data.attributes.asset_type, relationships.structured_scope.data.attributes.eligible_for_bounty, relationships.structured_scope.data.attributes.eligible_for_submission, relationships.structured_scope.data.attributes.instruction, relationships.structured_scope.data.attributes.max_severity, relationships.structured_scope.data.attributes.confidentiality_requirement, relationships.structured_scope.data.attributes.integrity_requirement, relationships.structured_scope.data.attributes.availability_requirement, relationships.inboxes.data.id, relationships.inboxes.data.type, relationships.inboxes.data.attributes.name, relationships.inboxes.data.attributes.type additional.fields מיזוג כתוויות של צמדי מפתח/ערך
חותמת זמן metadata.event_timestamp הניתוח מתבצע באמצעות מסנן תאריכים בפורמט yyyy-MM-dd'T'HH:mm:ss.SSSZ
metadata.event_type הערך הוא STATUS_UPDATE אם has_principal הוא true, הערך הוא USER_UNCATEGORIZED אם has_principal_user_user הוא true, אחרת הערך הוא GENERIC_EVENT
id metadata.product_log_id הערך הועתק ישירות
relationships.structured_scope.data.attributes.asset_identifier principal.asset.asset_id עם הקידומת "ASSET:"
attributes.email_alias principal.user.email_addresses ממוזג
relationships.reporter.data.id principal.user.employee_id הערך הועתק ישירות
relationships.reporter.data.attributes.name principal.user.first_name הערך הועתק ישירות
attributes.username, relationships.reporter.data.attributes.username principal.user.user_display_name הערך של relationships.reporter.data.attributes.username אם הוא לא ריק, אחרת attributes.username
relationships.severity.data.attributes.user_id principal.user.userid הערך הועתק ישירות
relationships.severity.data.id security_result.rule_id הערך הועתק ישירות
relationships.severity.data.attributes.max_severity security_result.severity הומר לאותיות רישיות
attributes.vulnerability_information security_result.summary הערך הועתק ישירות

יומן שינויים

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

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