איסוף יומנים של Microsoft PowerShell

נתמך ב:

במסמך הזה מוסבר איך להטמיע יומני רישום של Microsoft PowerShell ב-Google Security Operations באמצעות סוכן Bindplane.

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

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

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

  • מופע של Google SecOps
  • ‫Windows Server 2016 ואילך
  • קישוריות רשת בין המארח של Windows לבין Google SecOps
  • אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
  • גישת אדמין למארח Windows כדי להגדיר רישום ביומן של PowerShell ולהתקין את סוכן Bindplane

הגדרת רישום ביומן ב-PowerShell

כדי לאסוף יומנים, צריך להפעיל את הרישום ביומן של PowerShell במארחי Windows. כברירת מחדל, הרישום ביומן של PowerShell הוא מינימלי. כדי לתעד פעילות מפורטת ב-PowerShell, מפעילים את Script Block Logging.

הפעלת רישום ביומן של חסימת סקריפטים באמצעות מדיניות קבוצתית

  1. פותחים את Local Group Policy Editor (הכלי לעריכת מדיניות קבוצתית מקומית) על ידי הפעלת gpedit.msc כאדמין.
  2. עוברים אל Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell (הגדרת המחשב > תבניות אדמיניסטרטיביות > רכיבי Windows > Windows PowerShell).
  3. לוחצים לחיצה כפולה על הפעלה של רישום ביומן של בלוק סקריפט PowerShell.
  4. בוחרים באפשרות מופעל.
  5. אופציונלי: מסמנים את התיבה רישום ביומן של אירועי התחלה / הפסקה של הפעלת בלוק סקריפט כדי לתעד אירועי התחלה ואירועי הפסקה של כל בלוק סקריפט. הערה: האפשרות הזו יוצרת נפח גדול של יומנים.
  6. לוחצים על OK.
  7. פותחים את שורת הפקודה כאדמין ומריצים את הפקודה gpupdate /force כדי להחיל את המדיניות באופן מיידי.

הפעלת רישום ביומן של חסימת סקריפטים באמצעות הרישום

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

  1. פותחים את עורך הרישום על ידי הפעלת regedit כאדמין.
  2. נווט אל HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  3. אם המפתח לא קיים, יוצרים אותו.
  4. יוצרים ערך DWORD (32-bit) חדש בשם EnableScriptBlockLogging ומגדירים את הערך שלו ל-1.
  5. כדי שהשינוי ייכנס לתוקף, צריך להפעיל מחדש את סשני PowerShell.

רישום ביומן של בלוק סקריפט ב-PowerShell כותב אירועים לערוץ יומן האירועים Microsoft-Windows-PowerShell/Operational עם מזהה האירוע 4104.

אופציונלי: הפעלת רישום ביומן של מודולים

במודול Logging מתועדים פרטי ההרצה של צינורות עיבוד נתונים עבור מודולים ספציפיים. כדי להפעיל את Module Logging (רישום ביומן של מודולים) לכל המודולים:

  1. בעורך מדיניות הקבוצה המקומית, עוברים אל הגדרת המחשב > תבניות ניהול > רכיבי Windows > Windows PowerShell.
  2. לוחצים לחיצה כפולה על הפעלת רישום ביומן של מודול.
  3. בוחרים באפשרות מופעל.
  4. לוחצים על הצגה לצד שמות המודולים.
  5. מזינים * כדי לרשום את כל המודולים.
  6. לוחצים על אישור בחלון שמות המודולים.
  7. לוחצים על אישור בחלון Module Logging (רישום ביומן של מודולים).
  8. מריצים את הפקודה gpupdate /force כדי להחיל את המדיניות.

אירועים של רישום ביומן של מודולים נכתבים ביומן האירועים של Windows PowerShell עם מזהה האירוע 4103.

אופציונלי: הפעלת תמלול

התמלול יוצר תיעוד מבוסס-טקסט של כל הקלט והפלט של סשן PowerShell. כדי להפעיל את התמלול:

  1. בעורך מדיניות הקבוצה המקומית, עוברים אל הגדרת המחשב > תבניות ניהול > רכיבי Windows > Windows PowerShell.
  2. לוחצים לחיצה כפולה על Turn on PowerShell Transcription (הפעלה של תמלול ב-PowerShell).
  3. בוחרים באפשרות מופעל.
  4. אפשר גם לציין ספריית פלט של תמליל. אם לא מציינים תיקייה, התמלילים נשמרים בתיקיית המסמכים של כל משתמש.
  5. מסמנים את התיבה Include invocation headers (הכללת כותרות של הפעלות) כדי לכלול חותמות זמן ומטא-נתונים.
  6. לוחצים על OK.
  7. מריצים את הפקודה gpupdate /force כדי להחיל את המדיניות.

תמלילים נכתבים בקובצי טקסט שהשמות שלהם מתחילים ב-PowerShell_transcript.

קבלת קובץ אימות להטמעת נתונים ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agent (הגדרות SIEM > סוכן איסוף).
  3. לוחצים על הורדה כדי להוריד את קובץ אימות ההעלאה.
  4. שומרים את הקובץ בצורה מאובטחת במארח Windows שבו יותקן סוכן Bindplane.

איך מקבלים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
  3. מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.

התקנת סוכן Bindplane

מבצעים את ההוראות הבאות כדי להתקין את סוכן Bindplane במארח Windows.

התקנת Windows

  1. פותחים את שורת הפקודה או את PowerShell כאדמין.
  2. מריצים את הפקודה הבאה:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. מחכים שההתקנה תסתיים.

  4. כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:

    sc query observiq-otel-collector
    

    השירות אמור להופיע עם הערך RUNNING.

מקורות מידע נוספים להתקנה

אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.

הגדרת סוכן Bindplane לאיסוף יומני PowerShell

איתור קובץ ההגדרות של Windows

  • מאתרים את קובץ התצורה של Windows באופן הבא:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

עריכת קובץ התצורה

  • מחליפים את כל התוכן של config.yaml בהגדרה הבאה:

    receivers:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    
    service:
      pipelines:
        logs/powershell:
          receivers:
            - windowseventlog/powershell
          processors:
            - batch
          exporters:
            - chronicle/powershell
    

פרמטרים להגדרה

מחליפים את ה-placeholders הבאים:

  • הגדרת מקלט:

    • channel: הערוץ ביומן האירועים של Windows שממנו ייאספו הנתונים. לרישום ביומן של בלוק סקריפט PowerShell, משתמשים ב-Microsoft-Windows-PowerShell/Operational. לרישום ביומן של מודולים, משתמשים ב-Windows PowerShell.
    • raw: מוגדר ל-true כדי לשלוח XML של יומן אירועים גולמי של Windows אל Google SecOps.
    • start_at: מגדירים את הערך end כדי לאסוף רק אירועים חדשים אחרי שהסוכן מתחיל. מגדירים את הערך beginning כדי לאסוף את כל האירועים הקיימים.
  • הגדרות של הכלי לייצוא:

    • <CUSTOMER_ID>: מחליפים במזהה הלקוח מהשלב הקודם.
    • creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים. מעתיקים את קובץ האימות שהורד למיקום הזה.
    • endpoint: כתובת URL של נקודת קצה אזורית. משתמשים בנקודת הקצה של האזור ב-Google SecOps:

      • ארה"ב: malachiteingestion-pa.googleapis.com
      • אירופה: europe-malachiteingestion-pa.googleapis.com
      • אסיה: asia-southeast1-malachiteingestion-pa.googleapis.com
      • רשימה מלאה מופיעה במאמר נקודות קצה אזוריות.
    • log_type: אם מגדירים את הערך POWERSHELL, נעשה שימוש במנתח PowerShell.

שמירת קובץ ההגדרות

אחרי שמסיימים לערוך, שומרים את הקובץ בלחיצה על קובץ > שמירה.

מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.

Windows

  • באמצעות שורת הפקודה או PowerShell כאדמין:

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  • או באמצעות מסוף השירותים:

    1. מקישים על Win+R, מקלידים services.msc ומקישים על Enter.
    2. מחפשים את observIQ OpenTelemetry Collector.
    3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
    4. מוודאים שהשירות פועל:

      sc query observiq-otel-collector
      
    5. בודקים אם יש שגיאות ביומנים:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

אימות של הכנסת יומנים

אחרי שמגדירים את סוכן Bindplane ומפעילים מחדש את השירות, היומנים של PowerShell אמורים להתחיל לזרום אל Google SecOps.

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל חקירה > חיפוש.
  3. מריצים את החיפוש הבא כדי לוודא שיומני PowerShell נקלטים:

    metadata.log_type = "POWERSHELL"
    
  4. מוודאים שהאירועים מופיעים עם חותמות זמן עדכניות.

אירועים של רישום ביומן של בלוקים של סקריפט PowerShell (מזהה אירוע 4104) יופיעו עם פרטים של בלוקים של סקריפט שהופעלו, כולל תוכן הסקריפט, מזהה הבלוק של הסקריפט והקשר הביצוע.

טבלת מיפוי UDM

שדה היומן מיפוי UDM לוגיקה
HostId principal.resource.product_object_id המזהה הייחודי של אובייקט המוצר שמשויך למשאב העיקרי
System.Version metadata.product_version הגרסה של המוצר שיצרה את האירוע
System.EventId, ‏ EventID, ‏ winlog.event_id metadata.product_event_type סוג האירוע כפי שהוא מוגדר במוצר
מחשב, System.Computer, מחשב, winlog.computer_name principal.hostname שם המארח של הישות הראשית
מחשב, System.Computer, מחשב, winlog.computer_name principal.asset.hostname שם המארח של הנכס שמשויך לישות הראשית
System.EventRecordID, RecordNumber, winlog.record_id metadata.product_log_id מזהה ייחודי של רשומת היומן במערכת הרישום של המוצר
System.Opcode, opcode, winlog.opcode metadata.description תיאור האירוע או הקשר נוסף
ProviderGuid, winlog.provider_guid metadata.product_deployment_id מזהה ייחודי של פריסת המוצר
System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid principal.process.pid מזהה התהליך הראשי
SourceModuleName principal.resource.name השם של המשאב שמשויך לחשבון הראשי
SourceModuleType principal.resource.resource_subtype סוג המשנה של המשאב שמשויך לגורם הראשי
security.user_id, UserID, winlog.user.identifier principal.user.windows_sid מזהה האבטחה (SID) של Windows עבור המשתמש הראשי
metadata.event_type סוג האירוע (למשל, USER_LOGIN, ‏ NETWORK_CONNECTION)
SourceName, winlog.provider_name metadata.product_name שם המוצר שיצר את האירוע
AccountName, Username, UserName, winlog.user.name principal.user.userid מזהה המשתמש של המשתמש הראשי
דומיין, winlog.user.domain principal.administrative_domain הדומיין האדמיניסטרטיבי של הגורם המרכזי
Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path target.process.file.full_path הנתיב המלא לקובץ שמשויך לתהליך היעד
שם המארח, powershell.שם המארח, ContextInfo_שם המארח target.hostname שם המארח של ישות היעד
שם המארח, powershell.שם המארח, ContextInfo_שם המארח target.asset.hostname שם המארח של הנכס שמשויך ליעד
מזהה המארח, HostID, ‏ ContextInfo_Host ID target.asset.asset_id המזהה הייחודי של נכס היעד
Nombre_de_comando, ContextInfo_Command Name, CommandName target.application שם האפליקציה שמשויכת ליעד
HostApplication, ContextInfo_Host Application target.process.command_line שורת הפקודה ששימשה להפעלת תהליך היעד
ScriptBlockText target.process.command_line שורת הפקודה ששימשה להפעלת תהליך היעד
MessageSourceAddress principal.ip כתובת ה-IP של הגורם המרכזי
MessageSourceAddress principal.asset.ip כתובת ה-IP של הנכס שמשויך למשתמש הראשי
Nombre_de_host principal.application שם האפליקציה שמשויכת לחשבון המשתמש
Version_de_host principal.platform_version הגרסה של הפלטפורמה שמשויכת לגורם המרכזי
Id_de_host principal.resource.id מזהה ייחודי של משאב המנהל
Application_host principal.process.file.full_path הנתיב המלא לקובץ שמשויך לתהליך העיקרי
HostApplication principal.process.command_line שורת הפקודה ששימשה להפעלת התהליך העיקרי
Usuario, admin_domain principal.user.userid מזהה המשתמש של המשתמש הראשי
Usuario, admin_domain principal.administrative_domain הדומיין האדמיניסטרטיבי של הגורם המרכזי
CommandLine principal.process.command_line שורת הפקודה ששימשה להפעלת התהליך העיקרי
מכונה, machine_id principal.asset.asset_id מזהה ייחודי של הנכס הראשי
מכונה, platform_software principal.asset.platform_software.platform סוג הפלטפורמה של הנכס (למשל: WINDOWS,‏ LINUX)
מכונה, platform_software principal.asset.platform_software.platform_version גרסת תוכנת הפלטפורמה בנכס
MessageSourceAddress intermediary.ip כתובת ה-IP של הגורם המתווך
MessageSourceAddress, Hostname intermediary.hostname שם המארח של הישות המתווכת
MessageSourceAddress, Hostname intermediary.asset.hostname שם המארח של הנכס שמשויך למתווך
MessageSourceAddress intermediary.port מספר היציאה שבו נעשה שימוש על ידי המתווך
HostApplication target.process.command_line שורת הפקודה ששימשה להפעלת תהליך היעד
HostId target.asset.asset_id המזהה הייחודי של נכס היעד
מספר סידורי, מספר סידורי של פרטי ההקשר, מספר סידורי security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
ProviderName principal.resource.attribute.labels תוויות או מאפיינים שמשויכים למשאב העיקרי
NewEngineState additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
PreviousEngineState additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
ScriptName additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
ManagementGroupName additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
מקור additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
RenderedDescription security_result.description תיאור של תוצאת האבטחה או הפעולה שבוצעה
TenantId additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
שם משתמש principal.user.userid מזהה המשתמש של המשתמש הראשי
ActivityID security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
ExecutionThreadID, execution.thread_id, winlog.process.thread.id security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
תשובה security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
נתונים security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
Data_1 additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
data_1 security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
Data_2 security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
winlog.activity_id security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
winlog.api additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
winlog.channel principal.resource.attribute.labels תוויות או מאפיינים שמשויכים למשאב העיקרי
טווח זמן additional.fields שדות מותאמים אישית נוספים שלא נכללים בסכימת UDM רגילה
SeverityValue security_result.detection_fields צמדים של מפתח/ערך של פרטי זיהוי נוספים
מתווך מתווך פרטים על ישויות ביניים שמעורבות באירוע
security_result security_result תוצאת האבטחה הכוללת, כולל פעולות, רמות חומרה וזיהויים
metadata.vendor_name שם הספק שיצר את האירוע
SourceName metadata.product_name שם המוצר שיצר את האירוע
syslog_host event.idm.read_only_udm.intermediary.hostname מופה מיומן השינויים
Computer event.idm.read_only_udm.intermediary.hostname מופה מיומן השינויים
Version event.idm.read_only_udm.metadata.product_version מופה מיומן השינויים
Task event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
OpcodeValue event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
ThreadID event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
AccountType event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
Offset event1.idm.read_only_udm.additional.fields מופה מיומן השינויים
SeverityValue event1.idm.read_only_udm.additional.fields מופה מיומן השינויים
NewEngineState", "PreviousEngineState", "HostVersion", "RunspaceId", "SequenceNumber", "EngineVersion" and "PipelineId additional.fields מופה מיומן השינויים
Payload security_result.detection_fields מופה מיומן השינויים
Script Name target.file.full_path מופה מיומן השינויים
SystemTime metadata.event_timestamp מופה מיומן השינויים
channel", "keywords", "MessageNumber", "MessageTotal", and "ScriptBlockId security_result.detection_fields מופה מיומן השינויים
System.ProviderName principal.resource.attribute.labels מופה מיומן השינויים
HostVersion", "RunspaceId", "PipelineId", "EngineVersion", "DetailSequence", "DetailTotal", "SequenceNumber", and "ScriptName additional.fields מופה מיומן השינויים
System.EventRecordID", "System.Task", "System.Keywords", "System.Opcode", and "System.ThreadID security.detection_fields מופה מיומן השינויים
EventLevelName security_result.severity מופה מיומן השינויים
ManagementGroupName", "Source", "TenantId additional_fields מופה מיומן השינויים

שנה רישום

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

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