איסוף יומנים של Microsoft SQL Server

נתמך ב:

במסמך הזה מוסבר איך להטמיע יומנים של Microsoft SQL Server ב-Google Security Operations באמצעות Bindplane. הכלי לניתוח מטפל ביומנים מובְנים (JSON, צמדי מפתח/ערך) וביומנים חצי-מובְנים (syslog) של Microsoft SQL Server. הוא מחלץ שדות, מבצע נרמול של חותמות זמן, מטפל בפורמטים שונים של יומנים על סמך תוכן של SourceModuleType ו-Message (כולל אירועים של ביקורת, התחברות ומסדי נתונים) וממפה אותם ל-UDM. בנוסף, הוא מבצע לוגיקת ניתוח ספציפית לרשומות ביקורת, לניסיונות כניסה ולפעולות במסד הנתונים, ומוסיף לנתונים הקשר ומידע על חומרת הבעיה.הוא אוסף יומני ביקורת ושגיאות של SQL Server מיומן האירועים של Windows באמצעות מעביר syslog ‏ (NXLog) ושולח אותם לסוכן BindPlane לצורך העברה אל Google SecOps.

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

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

  • מופע של Google SecOps
  • מארח Windows Server 2016 ואילך שמופעל בו Microsoft SQL Server
  • גישת אדמין להתקנה ולהגדרה של BindPlane Agent ו-NXLog
  • אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane

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

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

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

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

התקנת סוכן Bindplane

מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.

התקנת Windows

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

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

אפשרויות התקנה נוספות מפורטות במדריך ההתקנה.

הגדרת סוכן Bindplane להטמעה של Syslog ושליחה ל-Google SecOps

  1. ניגשים לקובץ ההגדרות:
    • מאתרים את הקובץ config.yaml. בדרך כלל, הוא נמצא בספרייה `C:\Program Files\observIQ\bindplane-agent` ב-Windows.
    • פותחים את הקובץ באמצעות כלי לעריכת טקסט (לדוגמה, nano,‏ vi או פנקס רשימות).
  2. עורכים את הקובץ config.yaml באופן הבא:

      receivers:
      udplog:
         # Replace the port and IP address as required
         listen_address: "0.0.0.0:1514"
    
      exporters:
      chronicle/chronicle_w_labels:
         compression: gzip
         # Adjust the path to the credentials file you downloaded in Step 1
         creds_file_path: '/path/to/ingestion-authentication-file.json'
         # Replace with your actual customer ID from Step 2
         customer_id: <YOUR_CUSTOMER_ID>
         endpoint: malachiteingestion-pa.googleapis.com
         # Add optional ingestion labels for better organization
         log_type: 'MICROSOFT_SQL'
         raw_log_field: body
         ingestion_labels:
    
      service:
      pipelines:
         logs/source0__chronicle_w_labels-0:
            receivers:
            - udplog
            exporters:
            - chronicle/chronicle_w_labels
    
    • מחליפים את היציאה ואת כתובת ה-IP לפי הצורך בתשתית.
    • מחליפים את <customer_id> במזהה הלקוח בפועל.
    • מעדכנים את /path/to/ingestion-authentication-file.json לנתיב שבו קובץ האימות נשמר בקטע קבלת קובץ אימות להעברה ל-Google SecOps.

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

  • כדי להפעיל מחדש את סוכן Bindplane ב-Windows, אפשר להשתמש במסוף Services או להזין את הפקודה הבאה:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

הפעלת ביקורת של SQL Server ביומן האירועים של Windows

אפשר להפעיל את התכונה SQL Server Audit באמצעות ממשק המשתמש הגרפי של SQL Server Management Studio ‏ (SSMS) או באמצעות פקודות T-SQL. בוחרים את האפשרות שהכי מתאימה לסביבה שלכם.

אפשרות 1: הפעלת SQL Server Audit באמצעות SSMS GUI

יצירת ביקורת שרת בממשק המשתמש של SQL Server Management Studio

  1. פותחים את SQL Server Management Studio (SSMS) ומתחברים למופע של SQL Server.
  2. ב-Object Explorer, מרחיבים את מופע השרת.
  3. מרחיבים את התיקייה Security (אבטחה).
  4. לוחצים לחיצה ימנית על Audits (ביקורות) ובוחרים באפשרות New Audit (ביקורת חדשה).
  5. בתיבת הדו-שיח Create Audit, מציינים את פרטי ההגדרה הבאים:
    • שם הביקורת: מזינים ChronicleAudit.
    • השהיה בתור (באלפיות השנייה): מזינים 1000.
    • במקרה של כשל ביומן הביקורת: בוחרים באפשרות המשך.
    • יעד הביקורת: בוחרים באפשרות יומן האפליקציות.
  6. לוחצים על אישור כדי ליצור את הביקורת.
  7. ב-Object Explorer, לוחצים לחיצה ימנית על ChronicleAudit שנוצר לאחרונה ובוחרים באפשרות Enable Audit.

יצירת מפרט לביקורת שרת באמצעות ממשק משתמש גרפי של SSMS

  1. בסייר האובייקטים, מרחיבים את אבטחה.
  2. לוחצים לחיצה ימנית על Server Audit Specifications (מפרטים של ביקורת שרת) ובוחרים באפשרות New Server Audit Specification (מפרט חדש של ביקורת שרת).
  3. בתיבת הדו-שיח Create Server Audit Specification (יצירת מפרט לביקורת שרת), מציינים את פרטי ההגדרה הבאים:
    • שם: מזינים ChronicleAuditSpec.
    • ביקורת: בתפריט, בוחרים באפשרות ChronicleAudit.
  4. בקטע סוג פעולת הביקורת, לוחצים על הוספה ובוחרים את קבוצות פעולות הביקורת הבאות (מוסיפים כל אחת בנפרד על ידי לחיצה על הוספה אחרי הבחירה):
    • FAILED_LOGIN_GROUP
    • SUCCESSFUL_LOGIN_GROUP
    • LOGOUT_GROUP
    • SERVER_ROLE_MEMBER_CHANGE_GROUP
    • DATABASE_OBJECT_CHANGE_GROUP
    • DATABASE_PRINCIPAL_CHANGE_GROUP
    • SCHEMA_OBJECT_CHANGE_GROUP
    • DATABASE_PERMISSION_CHANGE_GROUP
  5. לוחצים על אישור כדי ליצור את הגדרת הביקורת.
  6. ב-Object Explorer (סייר האובייקטים), לוחצים לחיצה ימנית על ChronicleAuditSpec שנוצר ובוחרים באפשרות Enable Server Audit Specification (הפעלת מפרט ביקורת של השרת).

אימות הגדרות הביקורת

  1. בסייר האובייקטים, מרחיבים את אבטחה > ביקורות.
  2. לוחצים לחיצה ימנית על ChronicleAudit ובוחרים באפשרות Properties (מאפיינים).
  3. מוודאים שבסטטוס מופיע התחיל או מופעל.
  4. מרחיבים את Security > Server Audit Specifications (אבטחה > מפרטים של ביקורת שרת).
  5. לוחצים לחיצה ימנית על ChronicleAuditSpec ובוחרים באפשרות Properties (מאפיינים).
  6. מוודאים שכל שמונה קבוצות הפעולות לביקורת מופיעות ושהמפרט מופעל.

אפשרות 2: הפעלת SQL Server Audit באמצעות T-SQL

  1. פותחים את SQL Server Management Studio (SSMS) ומתחברים למופע של SQL Server.
  2. מריצים את פקודות T-SQL הבאות כדי ליצור ביקורת שרת שכותבת ליומן האפליקציות של Windows:

    USE master;
    GO
    
    CREATE SERVER AUDIT ChronicleAudit
    TO APPLICATION_LOG
    WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
    GO
    
    ALTER SERVER AUDIT ChronicleAudit WITH (STATE = ON);
    GO
    
  3. יוצרים מפרט ביקורת כדי לתעד אירועים רלוונטיים שקשורים לאבטחה:

    CREATE SERVER AUDIT SPECIFICATION ChronicleAuditSpec
    FOR SERVER AUDIT ChronicleAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (LOGOUT_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP);
    GO
    
    ALTER SERVER AUDIT SPECIFICATION ChronicleAuditSpec WITH (STATE = ON);
    GO
    

ההגדרה הזו מבטיחה שאירועי אימות, שינויים בהרשאות ושינויים באובייקטים יתועדו ביומן האירועים של Windows.

התקנה והגדרה של NXLog להעברת אירועים אל Bindplane

  1. מורידים את NXLog Community Edition מהכתובת nxlog.co/downloads.
  2. מפעילים את קובץ ההתקנה ופועלים לפי ההוראות באשף ההתקנה.
  3. פותחים את קובץ ההגדרות של NXLog שנמצא במיקום:

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. מחליפים את התוכן בהגדרה הבאה:

    define ROOT C:\Program Files\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    
    <Extension _json>
       Module      xm_json
    </Extension>
    
    <Input in_eventlog>
       Module      im_msvistalog
       Query       <QueryList>\
                      <Query Id="0">\
                            <Select Path="Application">*[System[Provider[@Name='MSSQLSERVER']]]</Select>\
                      </Query>\
                   </QueryList>
    </Input>
    
    <Output out_syslog>
       Module      om_udp
       Host        127.0.0.1
       Port        1514
       Exec        to_json();
    </Output>
    
    <Route r1>
       Path        in_eventlog => out_syslog
    </Route>
    
    • מחליפים את הערך הנוכחי של מארח, 127.0.0.1, בכתובת ה-IP של סוכן Bindplane.
    • מוודאים שהערך של Port זהה לערך של יציאת המקלט udplog שהוגדרה קודם ב-Bindplane.
  5. שומרים את הקובץ ומפעילים מחדש את שירות NXLog:

    net stop nxlog && net start nxlog
    

טבלת מיפוי UDM

שדה היומן מיפוי UDM לוגיקה
AccountName principal.user.userid הוא משמש ל-principal.user.userid אם הוא מופיע ביומנים כמו Starting up database או Log was backed up.
AgentDevice additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח AgentDevice.
AgentLogFile additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח AgentLogFile.
agent.hostname observer.asset.hostname מיפוי לשם המארח של הצופה.
agent.id observer.asset_id התוצאה של שרשור עם agent.type היא observer.asset_id.
agent.type observer.asset_id הוצמד ל-agent.id כדי ליצור את observer.asset_id.
agent.version observer.platform_version מיפוי לגרסת פלטפורמת הצופה.
ApplicationName principal.application מיפוי לאפליקציה העיקרית.
application_name target.application מיפוי לאפליקציית היעד.
client_address principal.ip הפרמטר הזה משמש לכתובת ה-IP העיקרית אם היא שונה מהמארח ולא מקומית או צינור בעל שם.
client_ip principal.ip מיפוי לכתובת ה-IP הראשית.
computer_name about.hostname ממפה לשם המארח about.
correlationId security_result.detection_fields נוספה כצמד מפתח/ערך ל-security_result.detection_fields עם המפתח correlationId.
Date metadata.event_timestamp השילוב עם Time מאפשר ליצור את חותמת הזמן של האירוע.
database_name target.resource_ancestors.name השם של ישות האב של משאב היעד, אם הוא מופיע ביומני ביקורת.
durationMs network.session_duration.seconds הנתונים הומרו ממילישניות לשניות ומופו.
ecs.version metadata.product_version מיפוי לגרסת המוצר.
error security_result.detection_fields התווסף כצמד מפתח/ערך ל-security_result.detection_fields עם המפתח error.
err_msg security_result.description מיפוי לתיאור תוצאת האבטחה.
EventID metadata.product_event_type השדה הזה משמש ליצירת סוג אירוע של מוצר אם שדות אחרים לא זמינים. התחילית של השדה היא EventID:.
event.action Source הערך הזה משמש כמקור אם הוא קיים.
event.code metadata.product_event_type בשילוב עם event.provider נוצר metadata.product_event_type.
event.provider metadata.product_event_type בשילוב עם event.code נוצר metadata.product_event_type.
EventReceivedTime metadata.ingested_timestamp הנתונים מנותחים ומשמשים כחותמת זמן של הנתונים שהועברו.
event_time metadata.event_timestamp הערך הזה מנותח ומשמש כחותמת הזמן של האירוע.
file_name principal.process.file.full_path מיפוי לנתיב המלא של קובץ התהליך של חשבון המשתמש.
file_path target.file.full_path הנתיב המלא של קובץ היעד, אם הוא נמצא ביומני הגיבוי.
first_lsn target.resource.attribute.labels התווסף כצמד מפתח/ערך אל target.resource.attribute.labels עם המפתח 'מספר LSN ראשון'.
host principal.hostname, observer.hostname משמש לשם המארח של המנהל או הצופה אם הוא לא כתובת IP. משמש גם לשם מארח או לכתובת IP של היעד, בהתאם לסוג הכתובת.
host.ip principal.ip מוזגה לכתובת ה-IP הראשית.
host.name host הערך הזה משמש כמארח אם הוא קיים.
Hostname principal.hostname, target.hostname הערך הזה משמש לשם המארח הראשי או שם המארח של היעד, אם הם קיימים.
hostinfo.architecture principal.asset.hardware.cpu_platform מיפוי לפלטפורמת ה-CPU של חומרת הנכס העיקרי.
hostinfo.os.build additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח os_build.
hostinfo.os.kernel principal.platform_patch_level מיפוי לרמת הטלאי העיקרית של הפלטפורמה.
hostinfo.os.name additional.fields הפרמטר מתווסף כצמד מפתח/ערך ל-additional.fields עם המפתח os_name.
hostinfo.os.platform principal.platform באותיות רישיות וממופה לפלטפורמה העיקרית.
hostinfo.os.version principal.platform_version מיפוי לגרסה העיקרית של הפלטפורמה.
last_lsn target.resource.attribute.labels נוסף כצמד מפתח/ערך ל-target.resource.attribute.labels עם המפתח Last LSN.
level security_result.severity אם הערך הוא Informational,‏ security_result.severity מוגדר כ-INFORMATIONAL.
log.level security_result.severity_details מיפוי לפרטים על חומרת תוצאת האבטחה.
LoginName principal.user.userid השדה הזה משמש לציון מזהה המשתמש העיקרי אם הוא מופיע ביומני KV.
login_result security_result.action קובע את הפעולה שמתבצעת כתוצאה מאבטחה (ALLOW או BLOCK).
logon_user principal.user.userid הערך הזה משמש לזיהוי מזהה המשתמש הראשי אם הוא מופיע ביומני הכניסה.
logstash.process.host intermediary.hostname מיפוי לשם מארח של מתווך.
Message metadata.description, security_result.description השדה הזה משמש לתיאור האירוע או לתיאור תוצאת האבטחה, בהתאם לסוג היומן.
msg metadata.description משמש לתיאור האירוע, אם הוא קיים.
ObjectName target.resource.name מיפוי לשם משאב היעד.
object_name target.resource.name השדה הזה משמש לשם משאב היעד אם הוא מופיע ביומני הביקורת.
ObjectType target.resource.type מיפוי לסוג משאב היעד.
operationId security_result.detection_fields התווסף כצמד מפתח/ערך ל-security_result.detection_fields עם המפתח operationId.
operationName metadata.product_event_type מיפוי לסוג אירוע מוצר.
operationVersion additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח operationVersion.
ProcessInfo additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח ProcessInfo.
properties.apiVersion metadata.product_version מיפוי לגרסת המוצר.
properties.appId target.resource.product_object_id ממופה למזהה אובייקט המוצר של משאב היעד.
properties.clientAuthMethod extensions.auth.auth_details הוא משמש לקביעת פרטי האימות.
properties.clientRequestId additional.fields הפרמטר מתווסף כצמד מפתח/ערך ל-additional.fields עם המפתח clientRequestId.
properties.durationMs network.session_duration.seconds הומר לשניות ומופה.
properties.identityProvider security_result.detection_fields התווסף כצמד מפתח/ערך אל security_result.detection_fields עם המפתח identityProvider.
properties.ipAddress principal.ip, principal.asset.ip ה-IP מנותח וממוזג עם ה-IP העיקרי ועם ה-IP של הנכס העיקרי.
properties.location principal.location.name מיפוי לשם המיקום הראשי.
properties.operationId security_result.detection_fields התווסף כצמד מפתח/ערך ל-security_result.detection_fields עם המפתח operationId.
properties.requestId metadata.product_log_id ממופה למזהה יומן המוצר.
properties.requestMethod network.http.method מיפוי ל-method של HTTP ברשת.
properties.requestUri target.url מיפוי לכתובת יעד.
properties.responseSizeBytes network.received_bytes הומר למספר שלם לא חתום ומופה.
properties.responseStatusCode network.http.response_code הומר למספר שלם ומופה.
properties.roles additional.fields התווסף כצמד מפתח/ערך אל additional.fields עם המפתח roles.
properties.servicePrincipalId principal.user.userid הפרמטר הזה משמש כמזהה המשתמש העיקרי אם הפרמטר properties.userId לא מופיע.
properties.signInActivityId network.session_id מיפוי למזהה סשן ברשת.
properties.tenantId metadata.product_deployment_id מיפוי למזהה פריסת המוצר.
properties.tokenIssuedAt additional.fields התווסף כצמד מפתח/ערך ל-additional.fields עם המפתח tokenIssuedAt.
properties.userAgent network.http.user_agent מיפוי לסוכן משתמש HTTP ברשת.
properties.userId principal.user.userid הערך הזה משמש כמזהה המשתמש הראשי, אם הוא קיים.
properties.wids security_result.detection_fields התווסף כצמד מפתח/ערך אל security_result.detection_fields עם המפתח wids.
reason security_result.summary השדה הזה משמש לסיכום תוצאות האבטחה באירועי התחברות.
resourceId target.resource.attribute.labels התווסף כצמד מפתח/ערך ל-target.resource.attribute.labels עם המפתח Resource ID.
schema_name target.resource_ancestors.resource_subtype השדה הזה משמש לסוג משנה של ישות אב של משאב היעד, אם הוא מופיע ביומני הביקורת.
security_result.description metadata.description משמש לתיאור אירוע אם הוא לא אירוע ביקורת.
security_result.severity security_result.severity מפות ישירות אם קיימות. מוגדר כ-LOW עבור יומני KV, כ-INFORMATIONAL עבור הודעות שגיאה מסוימות, ונגזר מהשדות level או Severity.
security_result.severity_details security_result.severity_details מפות ישירות אם הן קיימות.
security_result.summary security_result.summary מפות ישירות אם הן קיימות. הערך שמוגדר הוא 'החיבור נוצר באמצעות אימות Windows' או סיבות ספציפיות מאירועי התחברות, או 'רשומה של ביקורת ב-SQL Server' לאירועי ביקורת.
security_result_action security_result.action מוזג לתוך security_result.action. ברוב האירועים, הערך הוא ALLOW, ובאירועי התחברות הוא נגזר מ-login_result.
server_instance_name target.hostname הוא משמש לשם המארח של היעד אם הוא מופיע ביומני הביקורת.
server_principal_name principal.user.userid משמש לזיהוי מזהה המשתמש הראשי אם הוא מופיע ביומני הביקורת.
server_principal_sid principal.asset_id משמש ליצירת מזהה נכס ראשי, עם הקידומת server SID:.
session_id network.session_id הפרמטר הזה משמש למזהה של סשן ברשת, אם הוא מופיע ביומני הביקורת.
sev security_result.severity המדד הזה משמש לקביעת רמת החומרה של תוצאת האבטחה.
Severity security_result.severity המדד הזה משמש לקביעת רמת החומרה של תוצאת האבטחה.
Source additional.fields נוסף כצמד מפתח/ערך ל-additional.fields עם המפתח Source.
source principal.resource.attribute.labels נוסף כצמד מפתח/ערך ל-principal.resource.attribute.labels עם המפתח 'מקור'.
SourceModuleType observer.application ממופה לאפליקציית הצופה.
SourceModuleName additional.fields הפרמטר מתווסף כצמד מפתח/ערך ל-additional.fields עם המפתח SourceModuleName.
source_module_name observer.labels הפרמטר מתווסף כצמד מפתח/ערך ל-observer.labels עם המפתח SourceModuleName.
source_module_type observer.application ממופה לאפליקציית הצופה.
SPID network.session_id מיפוי למזהה סשן ברשת.
statement target.process.command_line הערך הזה משמש לשורת הפקודה של תהליך היעד אם הוא מופיע ביומני הביקורת.
TextData security_result.description, metadata.description משמש לתיאור תוצאת האבטחה אם זה לא אירוע התחברות, או לתיאור האירוע אם זה כן אירוע התחברות.
time metadata.event_timestamp הערך הזה מנותח ומשמש כחותמת הזמן של האירוע.
Time metadata.event_timestamp השילוב עם Date מאפשר ליצור את חותמת הזמן של האירוע.
transaction_id target.resource.attribute.labels הערך מתווסף כצמד מפתח/ערך ל-target.resource.attribute.labels עם המפתח transaction_id.
UserID principal.user.windows_sid המאפיין הזה משמש לציון מזהה אבטחה (SID) של משתמש ראשי ב-Windows, אם הוא קיים ובפורמט הנכון.
user_id principal.user.userid הערך הזה משמש כמזהה המשתמש הראשי, אם הוא קיים.
metadata.log_type metadata.log_type הערך מוטמע בקוד כ-MICROSOFT_SQL.
metadata.vendor_name metadata.vendor_name הערך מוטמע בקוד כ-Microsoft.
metadata.product_name metadata.product_name הערך מוטמע כ-SQL Server.
metadata.event_type metadata.event_type הערך שמוגדר משתנה בהתאם לתוכן היומן, כולל USER_LOGIN,‏ USER_LOGOUT,‏ STATUS_STARTUP,‏ STATUS_SHUTDOWN,‏ NETWORK_HTTP,‏ GENERIC_EVENT ו-STATUS_UNCATEGORIZED כברירת מחדל.
extensions.auth.type extensions.auth.type מגדירים את הערך MACHINE לאירועי התחברות והתנתקות.

שנה רישום

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

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