איסוף יומנים של Halcyon Anti-Ransomware
במאמר הזה מוסבר איך להטמיע יומני רישום של Halcyon Anti-Ransomware ב-Google Security Operations באמצעות Google Cloud Storage V2.
Halcyon היא פלטפורמה למניעת תוכנות כופר שמשתמשת ב-AI כדי לזהות מתקפות של תוכנות כופר, למנוע אותן ולשחזר נתונים שנפגעו. הוא יוצר התראות לגבי אירועים של זיהוי תוכנות כופר, ניסיונות הצפנה ופעולות שחזור. הכלי לניתוח מחלק שדות יומן בפורמט JSON למודל נתונים מאוחד (UDM), ומטפל בסוגי אירועים כמו פעולות על קבצים, פעילות משתמשים ותוצאות אבטחה.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- פרויקט ב-GCP שבו מופעל Cloud Storage API
- הרשאות ליצירה ולניהול של קטגוריות GCS ומדיניות IAM
- גישה עם הרשאות למסוף Halcyon עם יכולות ייצוא יומנים
יצירת קטגוריה של Google Cloud Storage
- נכנסים אל מסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket מזינים שם ייחודי גלובלית (לדוגמה, halcyon-logs)סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים) Location בוחרים את המיקום (לדוגמה, us-central1)סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות) בקרת גישה אחידה (מומלץ) כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
ייצוא יומנים של Halcyon ל-Google Cloud Storage
Halcyon תומך בייצוא נתוני יומן בפורמט JSON. כדי להעביר יומנים ל-GCS, אפשר להשתמש באחת מהגישות הבאות.
אפשרות א': ייצוא יומנים באמצעות Halcyon API והעלאה ל-GCS
- נכנסים למסוף הניהול של Halcyon.
- עוברים אל הגדרות > גישת API ויוצרים מפתח API עם הרשאות קריאה.
- מעתיקים את מפתח ה-API ושומרים אותו.
- משתמשים בסקריפט מתוזמן או בפונקציית Cloud Run כדי לקרוא ל-Halcyon API בארכיטקטורת REST, לאחזר יומני אירועים ולכתוב אותם ב-GCS בפורמט JSON.
אפשרות ב': הגדרת שילוב עם SIEM והעברה ל-GCS
- נכנסים למסוף הניהול של Halcyon.
- עוברים אל הגדרות > שילובים > SIEM.
- מגדירים את יעד ייצוא היומן כדי לכתוב אירועים בפורמט JSON לספרייה מקומית או לאחסון ביניים.
משתמשים בפונקציית Cloud Run כדי להעלות יומנים מדי פעם לקטגוריה של GCS.
- מוודאים שהקבצים שיוצאו הם בפורמט JSON.
- כל קובץ צריך להכיל רשומת אירוע אחת או יותר.
אחזור חשבון השירות של Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על Configure a single feed (הגדרת פיד יחיד).
- בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Halcyon Anti Ransomware בתור סוג היומן.
לוחצים על קבלת חשבון שירות. תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו. תשתמשו בו בשלב הבא.
הקצאת הרשאות IAM לחשבון השירות של Google SecOps
- עוברים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מספקים את פרטי ההגדרה הבאים:
- הוספת חשבונות משתמשים: מדביקים את כתובת האימייל של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
לוחצים על Save.
- אם אתם מתכננים להשתמש באפשרות המחיקה (מחיקת קבצים שהועברו), צריך להעניק את התפקיד Storage Object Admin במקום Storage Object Viewer.
הגדרת פיד ב-Google SecOps להטמעה של יומנים של Halcyon Anti-Ransomware
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- לוחצים על Configure a single feed (הגדרת פיד יחיד).
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Halcyon Anti-Ransomware logs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Halcyon Anti Ransomware בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
שדה ערך URI של קטגוריית אחסון gs://halcyon-logs/halcyon/events/אפשרות למחיקת מקור בוחרים את אפשרות המחיקה הרצויה. גיל מקסימלי של הקובץ (ימים) ברירת המחדל היא 180 ימים מרחב שמות של נכס מרחב השמות של הנכס תוויות הטמעה התווית שתתווסף לאירועים מהפיד הזה - מחליפים את
halcyon-logsבשם האמיתי של קטגוריית GCS. - תמיד צריך לכלול את הקו הנטוי (
/) בסוף ה-URI.
- מחליפים את
לוחצים על הבא.
בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| sshd, tty, euid, dataType, filterName, totalOccurrences, occurredAt, count, occurrences.IncorrectPasswords, occurrences.FailedPassword, occurrences.AuthFailure, policyMode, action | additional.fields | אם יש תוויות שנוצרו מכל שדה, הן ימוזגו עם התוויות האלה. השדות totalOccurrences, count ו-occurrences יומרו למחרוזת. |
| dnsArtifact.uri | network.dns.questions | מוזג עם מערך השאלות שמכיל את השם |
| asset.id | principal.asset.asset_id | מחובר כמחרוזת 'ASSET:' + asset.id |
| asset.kind | principal.asset.attribute.labels | הנכס מוזג עם asset_kind_label שנוצר מ-asset.kind |
| asset.name | principal.asset.hostname | הערך הועתק ישירות |
| ipArtifact.ipAddress | principal.asset.ip | הערך הועתק ישירות |
| summary.applicationName | principal.application | הערך הועתק ישירות |
| phost, asset.name | principal.hostname | הערך מ-phost אם הוא קיים, ומוחלף על ידי asset.name אם הוא קיים |
| ipArtifact.ipAddress | principal.ip | הערך הועתק ישירות |
| process.commandLine | principal.process.command_line | הערך הועתק ישירות |
| modifiedFilePath, artifact.filePath, process.artifact.filePath, processes.artifact.filePath | principal.process.file.full_path | הערך מוגדר ל-modifiedFilePath אם הוא קיים, מוחלף על ידי artifact.filePath אם הוא קיים, מוחלף על ידי process.artifact.filePath אם הוא קיים, מוחלף על ידי processes.artifact.filePath אם הוא קיים (המרכאות הוסרו עבור processes.artifact.filePath) |
| lastOccurredAt | principal.process.file.last_seen_time | ההמרה בוצעה באמצעות מסנן תאריכים בפורמט ISO8601 |
| process.artifact.kind, artifact.kind, primaryProcess.artifact.kind | principal.process.file.mime_type | הערך של process.artifact.kind אם הוא קיים, מוחלף על ידי artifact.kind אם הוא קיים, מוחלף על ידי primaryProcess.artifact.kind אם הוא קיים |
| artifact.sha256, process.artifact.sha256, processes.artifact.sha256 | principal.process.file.sha256 | הערך מ-artifact.sha256 אם הוא קיים, מוחלף על ידי process.artifact.sha256 אם הוא קיים, מוחלף על ידי processes.artifact.sha256 אם הוא קיים |
| process.parentPid | principal.process.parent_pid | הערך הועתק ישירות |
| process.pid | principal.process.pid | הערך הועתק ישירות |
| user_displayname | principal.user.user_display_name | הערך הועתק ישירות |
| משתמש | principal.user.userid | הערך הועתק ישירות |
| summary.artifact.filePath | target.file.full_path | הערך הועתק ישירות |
| summary.artifact.sha256 | target.file.sha256 | הערך הועתק ישירות |
| primaryProcess.commandLine | target.process.command_line | הערך מועתק ישירות אחרי הסרת המירכאות |
| primaryProcess.kind | target.process.file.mime_type | הערך הועתק ישירות |
| primaryProcess.parentPid | target.process.parent_process.pid | הערך הועתק ישירות |
| primaryProcess.pid | target.process.pid | הערך הועתק ישירות |
| uid | target.user.userid | הערך הועתק ישירות |
| id | target.asset_id | המחרוזת שנוצרת היא 'ASSET:' + מזהה |
| פעולה | security_result.action | באותיות רישיות אם הפעולה היא 'חסימה' או 'אישור' |
| reason.exitCode | security_result.action_details | הערך הועתק ישירות |
| dxpRule, monitoringReason, tenantId | security_result.detection_fields | אם יש תוויות שנוצרו מכל שדה, הן ימוזגו עם התוויות האלה. אם יש תוויות שנוצרו מ-dxpRule, הן ימוזגו עם התוויות האלה. |
| dxpRuleType | security_result.rule_type | הערך הועתק ישירות |
| ipArtifact.version | security_result.rule_version | הערך הועתק ישירות |
| msg, reason.cause | security_result.summary | הערך מההודעה אם הוא קיים, מוחלף על ידי הסיבה.הגורם אם הוא קיים |
| חותמת זמן | metadata.event_timestamp | ההמרה מתבצעת באמצעות מסנן תאריכים עם הפורמטים MMM dd HH:mm:ss או MMM d HH:mm:ss |
| phost, ipArtifact.ipAddress, asset.name, user, uid, summary.artifact.sha256, summary.artifact.filePath | metadata.event_type | הערך הוא FILE_UNCATEGORIZED אם יש has_principal ו-has_target_file; הערך הוא USER_UNCATEGORIZED אם יש has_principal ו-has_target; הערך הוא STATUS_UPDATE אם יש has_principal; אחרת הערך הוא GENERIC_EVENT (הדגלים נגזרים ממקורות) |
| סיווג | metadata.product_event_type | הערך הועתק ישירות |
| gupid, guid | metadata.product_log_id | הערך מ-gupid אם הוא קיים, או הערך מ-guid אם הוא קיים |
| metadata.product_name | צריך להגדיר את "Halcyon Anti Ransomware" | |
| metadata.vendor_name | הגדרה ל-Halcyon | |
primaryProcess.kind |
event.idm.read_only_udm.target.process.file.mime_type |
מופה מיומן השינויים |
primaryProcess.artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
מופה מיומן השינויים |
processes.artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
מופה מיומן השינויים |
processes.artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
מופה מיומן השינויים |
action |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
filterName |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
policyMode |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
euid |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
occurrences.AuthFailure |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
occurrences.FailedPassword |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
occurredAt |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
occurrences.IncorrectPasswords |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
guid |
event.idm.read_only_udm.metadata.product_log_id |
מופה מיומן השינויים |
gupid |
event.idm.read_only_udm.metadata.product_log_id |
מופה מיומן השינויים |
count |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
מופה מיומן השינויים |
artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
מופה מיומן השינויים |
artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
מופה מיומן השינויים |
monitoringReason |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
dxpRule |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
modifiedFilePath |
event.idm.read_only_udm.principal.process.file.full_path |
מופה מיומן השינויים |
ipArtifact.version |
event.idm.read_only_udm.security_result.rule_version |
מופה מיומן השינויים |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.ip |
מופה מיומן השינויים |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.asset.ip |
מופה מיומן השינויים |
process.parentPid |
event.idm.read_only_udm.principal.process.parent_pid |
מופה מיומן השינויים |
dxpRuleType |
event.idm.read_only_udm.security_result.rule_type |
מופה מיומן השינויים |
summary.applicationName |
event.idm.read_only_udm.principal.application |
מופה מיומן השינויים |
process.pid |
event.idm.read_only_udm.principal.process.pid |
מופה מיומן השינויים |
reason.exitCode |
event.idm.read_only_udm.security_result.action_details |
מופה מיומן השינויים |
reason.cause |
event.idm.read_only_udm.security_result.summary |
מופה מיומן השינויים |
dnsArtifact_uri |
event.idm.read_only_udm.network.dns.questions |
מופה מיומן השינויים |
uid |
event.idm.read_only_udm.target.user.userid |
מופה מיומן השינויים |
tty |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
sshd |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
phost |
event.idm.read_only_udm.principal.hostname |
מופה מיומן השינויים |
user_displayname |
event.idm.read_only_udm.principal.user.user_display_name |
מופה מיומן השינויים |
msg |
event.idm.read_only_udm.security_result.summary |
מופה מיומן השינויים |
timestamp |
event.idm.read_only_udm.metadata.event_timestamp |
מופה מיומן השינויים |
user |
event.idm.read_only_udm.principal.user.userid |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.