Vectra
במאמר הזה מוסבר איך לשלב את Vectra עם Google SecOps.
תרחישים לדוגמה
- להטמיע זיהויים של Vectra כדי ליצור התראות ב-Google Security Operations. בשלב הבא, אפשר להשתמש בהתראות ב-Google SecOps כדי לבצע תזמורים באמצעות פלייבוקים או ניתוח ידני.
- ביצוע פעולות העשרה – קבלת נתונים מ-Vectra כדי להעשיר את הנתונים בהתראות של Google SecOps.
הרשאת מוצר
כדי לקבל אסימון API, צריך לעבור לדף הפרופיל ולהעתיק אותו.

הגדרת השילוב של Vectra ב-Google SecOps
איך מגדירים שילובים ב-Google SecOps
פרמטרים של שילוב
כדי להגדיר את השילוב, משתמשים בפרמטרים הבאים:
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| שם המכונה | String | לא רלוונטי | לא | שם המכונה שרוצים להגדיר לה את השילוב. |
| תיאור | String | לא רלוונטי | לא | תיאור המכונה. |
| הרמה הבסיסית (root) של ה-API | String | https://{address}:{port} | כן | שורש ה-API של שרת Vectra. |
| טוקן API | סיסמה | לא רלוונטי | כן | טוקן ה-API של חשבון Vectra. |
| אימות SSL | תיבת סימון | סימן אישור | כן | אם ההגדרה מופעלת, צריך לוודא שאישור ה-SSL של החיבור לשרת Vectra תקף. |
| הפעלה מרחוק | תיבת סימון | התיבה לא מסומנת | לא | מסמנים את התיבה כדי להפעיל את השילוב שהוגדר מרחוק. אחרי שמסמנים את התיבה, מופיעה האפשרות לבחור את המשתמש המרוחק (הנציג). |
פעולות
פינג
תיאור
בודקים את הקישוריות ל-Vectra באמצעות הפרמטרים שצוינו בדף הגדרת השילוב בדף Google SecOps Content Hub.
ריצה
הפעולה לא פועלת על ישויות.
תוצאות הפעולה
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההרצה של הפלייבוק: אם התהליך הצליח: הדפסת ההודעה "Successfully connected to the Vectra server with the provided connection parameters!" הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסה של "החיבור לשרת Vectra נכשל! השגיאה היא {0}".format(exception.stacktrace) |
כללי |
נקודת קצה (endpoint) להעשרה
תיאור
אחזור פרטי המערכת של נקודת הקצה לפי שם המארח או כתובת ה-IP שלה.
ריצה
הפעולה הזו פועלת על הישויות הבאות:
- כתובת IP
- שם המארח
תוצאות הפעולה
העשרת ישויות
| שם שדה ההעשרה | מקור (מפתח JSON) | לוגיקה – מתי להחיל |
|---|---|---|
| Vectra_id | results/id | כשהוא זמין ב-JSON |
| Vectra_name | results/name | כשהוא זמין ב-JSON |
| Vectra_state | results/state | כשהוא זמין ב-JSON |
| Vectra_threat | results/threat | כשהוא זמין ב-JSON |
| Vectra_certainty | תוצאות/ודאות | כשהוא זמין ב-JSON |
| Vectra_ip | results/last_source | כשהוא זמין ב-JSON |
| Vectra_tags | {results/tags} מופרדים ברווחים | כשהוא זמין ב-JSON |
| Vectra_note | תוצאות/הערה | כשהוא זמין ב-JSON |
| Vectra_url | results/url | כשהוא זמין ב-JSON |
| Vectra_last_modified | results/last_modified | כשהוא זמין ב-JSON |
| Vectra_groups | {results/groups} מופרדים ברווחים | כשהוא זמין ב-JSON |
| Vectra_is_key_asset | results/is_key_asset | כשהוא זמין ב-JSON |
| Vectra_has_active_traffic | results/has_active_traffic | כשהוא זמין ב-JSON |
| Vectra_is_targeting_key_asset | results/is_targeting_key_asset | כשהוא זמין ב-JSON |
| Vectra_privilege_level | results/privilege_level | כשהוא זמין ב-JSON |
| Vectra_previous_ip | {results/previous_ips} מופרדים ברווחים | כשהוא זמין ב-JSON |
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
תוצאת JSON
{
"id": 131,
"name": "DESKTOP-DAIOS7J",
"active_traffic": false,
"has_active_traffic": false,
"t_score": 0,
"threat": 0,
"c_score": 0,
"certainty": 0,
"severity": null,
"last_source": "10.0.2.68",
"ip": "10.0.2.68",
"previous_ips": [],
"last_detection_timestamp": "2019-10-08T17:13:57Z",
"key_asset": false,
"is_key_asset": false,
"state": "inactive",
"targets_key_asset": false,
"is_targeting_key_asset": false,
"detection_set": [],
"host_artifact_set": [
{
"type": "netbios",
"value": "DESKTOP-DAIOS7J",
"source": null,
"siem": false
}
],
"sensor": "YLq09aHU",
"sensor_name": "Vectra X",
"tags": [],
"note": null,
"note_modified_by": null,
"note_modified_timestamp": null,
"url": "https://70.54.200.216:64443/api/v2.1/hosts/131",
"host_url": "https://70.54.200.216:64443/api/v2.1/hosts/131",
"last_modified": "2020-02-12T13:41:51Z",
"assigned_to": null,
"assigned_date": null,
"groups": [],
"has_custom_model": false,
"privilege_level": null,
"privilege_category": null,
"probable_owner": null,
"detection_profile": null,
"host_session_luids": [],
"host_luid": "e0M-jygN"
}
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם הבקשה הצליחה ולפחות אחת מהישויות שסופקו הועשרה (is_success = true): Print "Successfully enriched the following endpoints from Vectra: \n {0}".format(entity.identifier list) אם הפעולה מצאה כמה התאמות ב-Vectra לישויות מסוימות ב-Google SecOps, ההתאמה הראשונה נלקחה כדי להעשיר את נקודת הקצה: הדפסה "נמצאו כמה התאמות ב-Vectra, ההתאמה הראשונה נבחרה עבור הישויות הבאות:/n {0}".format(entity.identifiers list) אם לא הצלחתי להעשיר ישויות ספציפיות(is_success = true): הדפסת ההודעה "No entities were enriched" (לא הועשרו ישויות). הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "Error executing action "Enrich Endpoint". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
הוספת תגים
תיאור
מוסיפים תגים לנקודת הקצה או לזיהוי ב-Vectra.
פרמטרים
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| סוג פריט | תפריט נפתח | נקודת קצה (endpoint) ערכים אפשריים: זיהוי |
כן | בוחרים לאיזה סוג פריט רוצים להוסיף תגים. |
| מזהה פריט | String | לא רלוונטי | כן | מציינים את המזהה של הזיהוי או של נקודת הקצה. |
| תגים | CSV | לא רלוונטי | כן | מציינים אילו תגים רוצים להוסיף לזיהוי או לנקודת הקצה. צריך להפריד בין התגים באמצעות פסיק, לדוגמה: תג1, תג2. |
ריצה
הפעולה הזו לא פועלת על ישויות.
תוצאות הפעולה
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם נמצא זיהוי או נקודת קצה והתגים עודכנו בהצלחה (is_success = true): Print "Successfully added tags {0} to {1} with ID {2}.format(tags, Item Type, Item ID) אם נמצא זיהוי או נקודת קצה, אבל לא נוספו תגים (is_success=False): הדפסה "הפעולה לא הצליחה להוסיף את התגים {0} אל {1} עם המזהה {2}. הסיבה: {3}. format(tags, סוג פריט, מזהה פריט, tags parameter from response)". אם לא נמצא זיהוי או נקודת קצה (is_success=False): הדפסה של "{0} עם מזהה {1} לא נמצאה.format(סוג פריט, מזהה פריט)" II is_success=false בלי מצב ספציפי, וזו לא שגיאה קריטית: הדפסת "הפעולה לא הצליחה להוסיף תגים אל {0} עם המזהה {1}.format(Item Type, Item ID)": הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "שגיאה בביצוע הפעולה 'הוספת תגים'". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
הסרת תגים
תיאור
מסירים את התגים מנקודת הקצה או מהזיהוי ב-Vectra.
פרמטרים
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| סוג פריט | תפריט נפתח | נקודת קצה (endpoint) ערכים אפשריים: זיהוי |
כן | בוחרים את סוג הפריט שממנו רוצים להסיר תגים. |
| מזהה פריט | String | לא רלוונטי | כן | מציינים את המזהה של הזיהוי או של נקודת הקצה. |
| תגים | CSV | לא רלוונטי | כן | ציינו אילו תגים אתם רוצים להסיר מהזיהוי או מנקודת הקצה. צריך להפריד בין התגים באמצעות פסיק, לדוגמה: תג1, תג2. |
ריצה
הפעולה הזו לא פועלת על ישויות.
תוצאות הפעולה
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם נמצא זיהוי או נקודת קצה והתגים עודכנו בהצלחה (is_success = true): הדפסה של "התגים {0} הוסרו בהצלחה מ-{1} עם המזהה {2}.format(tags, Item Type, Item ID) אם הזיהוי או נקודת הקצה לא נמצאו (is_success=False): Print "{0} with ID {1} was not found.".format(Item Type, Item ID)." אם נמצא זיהוי/נקודת קצה, אבל לא נמצא תג (is_success=False): הדפסה של "Tags {0} don't exist in {1} with ID {2}.".format(list of tags that were not found separated by comma, Item Type, Item ID)." אם is_success=false בלי מצב ספציפי וזו לא שגיאה קריטית: מדפיסים את ההודעה "Action wasn't able to remove tags from {0} with ID {1}.format(Item Type, Item ID)": הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "Error executing action "Remove Tags". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
עדכון הפתק
תיאור
עדכון הערה לגבי נקודת הקצה או הזיהוי.
פרמטרים
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| סוג פריט | תפריט נפתח | נקודת קצה (endpoint) ערכים אפשריים: זיהוי |
כן | בוחרים את סוג הפריט שרוצים לעדכן בו הערה. |
| מזהה פריט | String | לא רלוונטי | כן | מציינים את המזהה של הזיהוי או של נקודת הקצה. |
| נתונים | String | לא רלוונטי | כן | מציינים איזו הערה רוצים להוסיף לזיהוי או לנקודת הקצה. |
ריצה
הפעולה הזו לא פועלת על ישויות.
תוצאות הפעולה
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם הזיהוי או נקודת הקצה נמצאו וההערה עודכנה בהצלחה (is_success = true): הדפסת ההודעה "Successfully updated note on {1} with ID {2}.format(Item Type, Item ID) אם הזיהוי או נקודת הקצה לא נמצאו (is_success=False): Print "{0} with ID {1} was not found.".format(Item Type, Item ID)." אם is_success=false בלי מצב ספציפי וזו לא שגיאה קריטית: הדפסת "הפעולה לא הצליחה לעדכן את ההערה ב-{0} עם המזהה {1}.format(סוג פריט, מזהה פריט)": הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "שגיאה בהפעלת הפעולה 'עדכון הפתק'". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
עדכון סטטוס הזיהוי
תיאור
עדכון הסטטוס של הזיהוי.
פרמטרים
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| מזהה הזיהוי | מספר שלם | לא רלוונטי | כן | מציינים את מזהה הזיהוי שרוצים לעדכן את הסטטוס שלו. |
| סטטוס | DDL | תוקן ערכים אפשריים: טופלה פעיל |
כן | מציינים איזה סטטוס להגדיר לזיהוי. |
ריצה
הפעולה הזו לא פועלת על ישויות.
תוצאות הפעולה
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט\* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם נמצא זיהוי והסטטוס עודכן בהצלחה (is_success = true): Print "Successfully updated status to '{0}' on detection with ID {1}.format(Status, Detection ID)
אם לא נמצא זיהוי (is_success=False): Print "Detection with ID {1} was not found.".format(Detection ID)." אם is_success=false בלי מצב ספציפי וזו לא שגיאה קריטית: מדפיסים את ההודעה "Action wasn't able to update status on detection with ID {1}.format(detection ID)": הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "Error executing action "Update Detection Status". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
קבלת פרטים על כלל המיון
תיאור
מידע מפורט על כללי המיון.
פרמטרים
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| מזהי כללי המיון | מספר שלם | לא רלוונטי | כן | צריך לציין רשימה מופרדת בפסיקים של מזהי כללי מיון. דוגמה: 28,29 |
| יצירת תובנות | תיבת סימון | True | כן | אם ההגדרה מופעלת, הפעולה תיצור תובנה נפרדת לכל כלל מיון שעבר עיבוד. |
ריצה
הפעולה הזו לא פועלת על ישויות.
תוצאות הפעולה
תובנה
| כותרת התובנה | תיאור התובנה |
|---|---|
| "Triage Rule {0}".format(triage_rule) | "Detection Category: {0}\n Triage Category: {1}\n Detection: {2} \n Description: {3}".format(detection_category, triage_category, detection, description) |
תוצאת הסקריפט
| שם תוצאת הסקריפט | אפשרויות של ערכים | דוגמה |
|---|---|---|
| is_success | נכון/לא נכון | is_success:False |
תוצאת JSON
{
"id": 28,
"url": "https://api.demo.vectranetworks.com/api/v2.1/rules/28",
"description": "whatever",
"enabled": true,
"created_timestamp": "2020-10-01T17:21:19Z",
"last_timestamp": "2020-10-01T17:21:19Z",
"is_whitelist": false,
"priority": 1,
"active_detections": 1,
"total_detections": 1,
"template": false,
"additional_conditions": {
"OR": [
{
"AND": [
{
"ANY_OF": {
"field": "remote1_ip",
"values": [
{
"url": null,
"value": "35.166.75.118",
"label": "35.166.75.118"
}
],
"groups": [],
"label": "C&C Server IP"
}
}
]
}
]
},
"source_conditions": {
"OR": [
{
"AND": [
{
"ANY_OF": {
"field": "host",
"values": [
{
"url": "https://api.demo.vectranetworks.com/api/v2.1/hosts/142",
"value": 142,
"label": "IP-10.10.100.10"
}
],
"groups": [],
"label": "Host"
}
}
]
}
]
},
"detection_category": "COMMAND & CONTROL",
"triage_category": "triage rule 1",
"detection": "Hidden HTTPS Tunnel"
קיר נרתיקים
| סוג התוצאה | ערך / תיאור | סוג |
|---|---|---|
| הודעת פלט* | הפעולה לא אמורה להיכשל או להפסיק את ההפעלה של הפלייבוק: אם הפעולה הצליחה ולפחות אחד ממזהי הכללים שסופקו הועשר (is_success = true): Print "Successfully retrieved information about the following triage rules from Vectra: \n {0}".format(processed rule ids) אם העשרת ישויות ספציפיות נכשלה(is_success = true): Print "Action was not able to retrieve information about the following triage rules\n: {0}".format(not processed rule ids) אם ההעשרה נכשלה בכל הישויות (is_success = false): מדפיסים את ההודעה "לא אוחזר מידע על כללי המיון". הפעולה אמורה להיכשל ולעצור את ההפעלה של הפלייבוק: הדפסת ההודעה "שגיאה בהפעלת הפעולה 'קבלת פרטים של כלל המיון'". הסיבה: {0}''.format(error.Stacktrace) |
כללי |
| שולחן קיר עם ארונית | שם הטבלה: פרטי כללי המיון עמודות בטבלה: מזהה (ממופה בתור id) מופעל (ממופה כמופעל) קטגוריית זיהוי (ממופה בתור detection_category) קטגוריית מיון (ממופה כ-triage_category) זיהוי (ממופה כזיהוי) רשימת היתרים (ממופה כ-is_whitelist) עדיפות (ממופה כעדיפות) נוצר בתאריך (ממופה כ-created_timestamp) |
כללי |
מחברים
Vectra – מחבר זיהויים
הגדרת Vectra – מחבר זיהויים ב-Google SecOps
הוראות מפורטות להגדרת מחבר ב-Google SecOps מופיעות במאמר הגדרת המחבר.
פרמטרים של מחברים
כדי להגדיר את המחבר, משתמשים בפרמטרים הבאים:
| שם הפרמטר לתצוגה | סוג | ערך ברירת המחדל | חובה | תיאור |
|---|---|---|---|---|
| שם שדה המוצר | String | שם המוצר | כן | מזינים את שם השדה של המקור כדי לאחזר את שם השדה של המוצר. |
| שם השדה של האירוע | String | eventType | כן | מזינים את שם שדה המקור כדי לאחזר את שם שדה האירוע. |
שם השדה של הסביבה |
String | "" | לא | מתאר את שם השדה שבו מאוחסן שם הסביבה. אם שדה הסביבה לא נמצא, הסביבה היא סביבת ברירת המחדל. |
תבנית ביטוי רגולרי של סביבה |
String | .* | לא | תבנית של ביטוי רגולרי להפעלה על הערך שנמצא בשדה "שם השדה של הסביבה". ברירת המחדל היא .* כדי לכלול את הכול ולהחזיר את הערך ללא שינוי. משמש כדי לאפשר למשתמש לשנות את שדה הסביבה באמצעות לוגיקה של ביטויים רגולריים. אם תבנית הביטוי הרגולרי היא null או ריקה, או אם ערך הסביבה הוא null, תוצאת הסביבה הסופית היא סביבת ברירת המחדל. |
| זמן קצוב לתפוגה של סקריפט (בשניות) | מספר שלם | 180 | כן | מגבלת הזמן הקצוב לתהליך Python שמריץ את הסקריפט הנוכחי. |
| הרמה הבסיסית (root) של ה-API | String | https://x.x.x.x:x:x | כן | שורש ה-API של שרת Vectra. |
| טוקן API | סיסמה | לא רלוונטי | כן | טוקן ה-API של חשבון Vectra. |
| ציון האיום הנמוך ביותר לאחזור | מספר שלם | 50 | כן | ציון האיום הנמוך ביותר שישמש לאחזור זיהויים. מינימום: 0 מקסימום: 100 |
| ציון הוודאות הנמוך ביותר לאחזור | מספר שלם | 0 | לא | ציון הוודאות הנמוך ביותר שישמש לאחזור זיהויים. מינימום: 0 מקסימום: 100 |
| סינון לפי קטגוריות | ערכים מופרדים בפסיקים (CSV) | פקודות ואמצעי בקרה,רשת בוטים ,שלב איסוף המידע,תנועה רוחבית,זליגת מידע,מידע | מציינים אילו קטגוריות של זיהויים להטמיע ב-Google SecOps. ערכים אפשריים: פקודות ואמצעי בקרה Botnet שלב איסוף המידע תנועה רוחבית זליגת נתונים מידע |
|
| אחזור שעות מקסימליות אחורה | מספר שלם | 1 | לא | מספר השעות שמהן צריך לאחזר איומים. |
| מספר הזיהויים המקסימלי לאחזור | מספר שלם | 25 | לא | כמה זיהויים לעבד בכל איטרציה של מחבר. המגבלה היא 5,000. זו מגבלה של Vectra. |
| שימוש ברשימת ההיתרים כרשימת חסימה | תיבת סימון | התיבה לא מסומנת | כן | אם המדיניות מופעלת, רשימת ההיתרים תשמש כרשימת חסימה. |
| אימות SSL | תיבת סימון | סימן אישור | כן | אם ההגדרה מופעלת, צריך לוודא שאישור ה-SSL של החיבור לשרת Vectra תקף. |
| כתובת שרת ה-Proxy | String | לא רלוונטי | לא | הכתובת של שרת ה-Proxy שבו רוצים להשתמש. |
| שם המשתמש בשרת ה-proxy | String | לא רלוונטי | לא | שם המשתמש של שרת ה-proxy לאימות. |
| סיסמת שרת ה-Proxy | סיסמה | לא רלוונטי | לא | הסיסמה לאימות מול שרת ה-proxy. |
כללי מחברים
תמיכה בשרת proxy
המחבר תומך בשרת proxy.
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.