איסוף יומנים של Windows AppLocker

נתמך ב:

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

‫Windows AppLocker הוא תכונה מובנית ב-Windows לבקרת אפליקציות, שיוצרת אירועים של אכיפת מדיניות, ביקורת והרצת אפליקציות. ‫AppLocker כותב את האירועים האלה לארבעה ערוצים של יומן האירועים של Windows בקטע Applications and Services Logs > Microsoft > Windows > AppLocker: EXE and DLL,‏ MSI and Script,‏ Packaged app-Deployment ו-Packaged app-Execution.

אפשר להגדיר הטמעה באחת משתי השיטות הנתמכות:

  • שיטה 1: העברה מ-NXLog לסוכן Bindplane (מומלץ). ‫NXLog קורא את הערוצים של AppLocker בכל נקודת קצה ומעביר את האירועים כ-syslog עם מטען ייעודי (payload) של JSON לסוכן Bindplane, ששולח אותם ל-Google SecOps בסוג היומן WINDOWS_APPLOCKER. זה הפורמט שמנתח הנתונים של WINDOWS_APPLOCKER מצפה לקבל, והוא שומר על הכלל של AppLocker ועל שדות הקובץ.
  • שיטה 2: קריאה ישירה של ערוץ סוכן Bindplane. הסוכן של Bindplane בכל נקודת קצה קורא את הערוצים של AppLocker באופן מקורי ושולח את קובץ ה-XML הגולמי של אירוע Windows אל Google SecOps בסוג היומן WINEVTLOG. אין צורך לייצא קובץ או להשתמש בסוכן נוסף, אבל האירועים מנותחים על ידי המנתח הגנרי של יומן האירועים של Windows.

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

חשוב לוודא שיש לכם את הדברים הבאים:

  • מכונה של Google SecOps
  • ‫Windows Server 2016 ואילך, או Windows 10 ואילך, עם כללי מדיניות מוגדרים של AppLocker
  • גישת אדמין לנקודות הקצה של Windows
  • אם אתם משתמשים בשרת proxy, ודאו שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
  • בשיטה 1: מארח Windows או Linux לסוכן Bindplane שנקודות הקצה יכולות להגיע אליו ביציאת TCP‏ 514

קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane

כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים באחת מהשיטות הבאות:

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
  1. נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על Create service account.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • Service account description: מזינים תיאור (לדוגמה, Bindplane agent log ingestion).
  5. לוחצים על Create and continue.
  6. בקטע Grant this service account access to project, לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
  7. לוחצים על המשך ואז על סיום.
  8. לוחצים על חשבון השירות שיצרתם ועוברים לכרטיסייה Keys.
  9. לוחצים על Add key > Create new key.
  10. בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
  11. שומרים את קובץ המפתח בתור ingestion-auth.json בספריית Bindplane collector (/opt/observiq-otel-collector/ingestion-auth.json ב-Linux או C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json ב-Windows), או מעדכנים את creds_file_path ב-config.yaml כך שיתאים לנתיב שבו שמרתם אותו.
  12. עוברים אל IAM & Admin > Settings ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את הייצוא.

אפשרות 2: הורדה של קובץ האימות להטמעת נתונים (גרסה קודמת)

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

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

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

התקנת הסוכן של Bindplane

מתקינים את הסוכן של Bindplane לפי ההוראות הבאות. בשיטה 1, מתקינים אותו במארח שמקבל את syslog מ-NXLog. בשיטה 2, מתקינים אותו בכל נקודת קצה שרוצים לאסוף את אירועי AppLocker שלה.

התקנת חלונות

  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.

התקנה ב-Linux

  1. פותחים טרמינל עם הרשאות root או sudo.
  2. מריצים את הפקודה הבאה:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

מקורות מידע נוספים בנושא התקנה

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

שיטה 1: העברה מ-NXLog לסוכן Bindplane

הגדרת הסוכן של Bindplane לקבלת syslog ושליחה אל Google SecOps

  1. פותחים את קובץ התצורה במארח של סוכן Bindplane:

    Windows:

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

    Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  2. מחליפים את כל התוכן של config.yaml בהגדרות הבאות:

    receivers:
      tcplog/applocker:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/windows_applocker:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: WINDOWS_APPLOCKER
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/applocker_to_chronicle:
          receivers:
            - tcplog/applocker
          exporters:
            - chronicle/windows_applocker
    
  3. מחליפים את ה-placeholders הבאים:

    • ‫listen_address: כתובת ה-IP והיציאה שהסוכן מאזין להן. ‫0.0.0.0:514 מקבל syslog בכל ממשק ביציאת TCP ‏514. אם הסוכן לא פועל כמשתמש root, צריך להשתמש ביציאה גבוהה מ-1024 ב-Linux ולפתוח את היציאה בחומת האש של המארח.
    • ‫creds_file_path: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
    • ‫<customer_id>: מספר הלקוח מהקטע "איתור מספר הלקוח ב-Google SecOps"
    • ‫location: מחליפים את <LOCATION> באזור של המכונה של Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). המייצא מוסיף את הערך הזה בתחילת chronicle.googleapis.com. לרשימה המלאה, ראו נקודות קצה אזוריות.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: משאירים את הערך chronicle.googleapis.com.
    • ‫ingestion_labels: תוויות אופציונליות בפורמט YAML (לדוגמה, env: production)
  4. שומרים את הקובץ.

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

    Windows:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

    Linux:

    sudo systemctl restart observiq-otel-collector
    

מייצא API להטמעה מדור קודם

  • אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק exporters בקוד הבא. מגדירים את creds_file_path לנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/windows_applocker:
        compression: gzip
        creds_file_path: '/path/to/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: WINDOWS_APPLOCKER
        raw_log_field: body
        ingestion_labels:
          env: production
    

התקנת NXLog בנקודות הקצה של Windows

  1. מורידים את NXLog Agent (לשעבר NXLog Enterprise Edition) ל-Windows מאתר NXLog.
  2. מריצים את תוכנת ההתקנה בכל נקודת קצה שרוצים לאסוף ממנה אירועי AppLocker, ומאשרים את ספריית ההתקנה שמוגדרת כברירת מחדל (C:\Program Files\nxlog).

הגדרת NXLog להעברת אירועי AppLocker

  1. פותחים את סייר הקבצים ועוברים אל C:\Program Files\nxlog\conf.
  2. פותחים את הקובץ nxlog.conf בפנקס הרשימות או בכלי לעריכת טקסט עם הרשאות אדמין.
  3. מחליפים את כל התוכן בהגדרות הבאות:

    define ROOT C:\Program Files\nxlog
    define LOGDIR %ROOT%\data
    define LOGFILE %LOGDIR%\nxlog.log
    
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %LOGFILE%
    
    <Extension json>
        Module      xm_json
    </Extension>
    
    <Extension xml>
        Module      xm_xml
    </Extension>
    
    <Extension syslog>
        Module      xm_syslog
    </Extension>
    
    <Input applocker_events>
        Module      im_msvistalog
        <QueryXML>
            <QueryList>
                <Query Id="0">
                    <Select Path="Microsoft-Windows-AppLocker/EXE and DLL">*</Select>
                    <Select Path="Microsoft-Windows-AppLocker/MSI and Script">*</Select>
                    <Select Path="Microsoft-Windows-AppLocker/Packaged app-Deployment">*</Select>
                    <Select Path="Microsoft-Windows-AppLocker/Packaged app-Execution">*</Select>
                </Query>
            </QueryList>
        </QueryXML>
        <Exec>
            # AppLocker keeps the rule and file details in the UserData part of the
            # event. parse_xml() turns them into RuleAndFileData.* fields, which
            # the parser expects.
            if $UserData parse_xml($UserData);
            $Message = to_json();
            to_syslog_bsd();
        </Exec>
    </Input>
    
    <Output bindplane_syslog>
        Module      om_tcp
        Host        <BINDPLANE_AGENT_IP>
        Port        514
    </Output>
    
    <Route applocker_to_bindplane>
        Path        applocker_events => bindplane_syslog
    </Route>
    
  4. מחליפים את <BINDPLANE_AGENT_IP> בכתובת ה-IP של המארח של סוכן Bindplane, ואת 514 ביציאה מ-listen_address אם שיניתם אותה.

  5. שומרים את קובץ ה-nxlog.conf.

הפעלה מחדש של שירות NXLog

  1. פותחים את Services (שירותים) על ידי לחיצה על Win+R, הקלדת services.msc ולחיצה על Enter.
  2. מאתרים את nxlog ברשימת השירותים.
  3. לוחצים לחיצה ימנית על nxlog ובוחרים באפשרות Restart (הפעלה מחדש).
  4. מוודאים שסטטוס השירות הוא פועל.
  • לחלופין, אפשר להפעיל מחדש את NXLog משורת הפקודה כאדמין:

    net stop nxlog && net start nxlog
    

מוודאים שאירועי AppLocker מועברים

  1. פותחים את מציג האירועים בנקודת הקצה של Windows.
  2. עוברים אל Applications and Services Logs > Microsoft > Windows > AppLocker > EXE and DLL.
  3. מוודאים שאירועי AppLocker (לדוגמה, מזהי אירועים 8002, 8003 או 8004) קיימים. אם היומן ריק, צריך לוודא שמדיניות AppLocker מופעלת וששירות Application Identity פועל.
  4. בודקים אם יש שגיאות או אזהרות בקובץ היומן של NXLog בכתובת C:\Program Files\nxlog\data\nxlog.log.
  5. במארח של סוכן Bindplane, בודקים אם יש שגיאות ביומן של הסוכן:

    Windows:

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

    Linux:

    sudo tail -f /opt/observiq-otel-collector/log/collector.log
    

שיטה 2: קריאה ישירה של ערוץ הסוכן של Bindplane

השתמשו בשיטה הזו אם אתם לא רוצים לפרוס את NXLog. סוכן Bindplane שמותקן בכל נקודת קצה קורא את ערוצי AppLocker ישירות מיומן האירועים של Windows ושולח את קובץ ה-XML הגולמי של האירוע אל Google SecOps בסוג היומן WINEVTLOG.

הגדרת הסוכן של Bindplane לקריאת הערוצים של AppLocker

  1. בנקודת הקצה של Windows, פותחים את קובץ התצורה:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    
  2. מחליפים את כל התוכן של config.yaml בהגדרות הבאות:

    receivers:
      windowseventlog/applocker_exe_dll:
        channel: Microsoft-Windows-AppLocker/EXE and DLL
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
      windowseventlog/applocker_msi_script:
        channel: Microsoft-Windows-AppLocker/MSI and Script
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
      windowseventlog/applocker_packaged_deployment:
        channel: Microsoft-Windows-AppLocker/Packaged app-Deployment
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
      windowseventlog/applocker_packaged_execution:
        channel: Microsoft-Windows-AppLocker/Packaged app-Execution
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
    exporters:
      chronicle/winevtlog:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: WINEVTLOG
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/applocker_to_chronicle:
          receivers:
            - windowseventlog/applocker_exe_dll
            - windowseventlog/applocker_msi_script
            - windowseventlog/applocker_packaged_deployment
            - windowseventlog/applocker_packaged_execution
          exporters:
            - chronicle/winevtlog
    
  3. מחליפים את ה-placeholders הבאים:

    • ‫<customer_id>: מספר הלקוח מהקטע "איתור מספר הלקוח ב-Google SecOps"
    • ‫endpoint: כתובת ה-URL של נקודת הקצה האזורית, כמו שמופיעה בשיטה 1
    • ‫ingestion_labels: תוויות אופציונליות בפורמט YAML (לדוגמה, env: production)
    • start_at: מגדירים את הערך end כדי לאסוף רק אירועים חדשים, או את הערך beginning כדי לאסוף גם את האירועים שכבר קיימים בערוצים
  4. שומרים את הקובץ.

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

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  6. מוודאים שהשירות פועל ובודקים אם יש שגיאות ביומן הפעילות של סוכן:

    sc query observiq-otel-collector
    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

מייצא API להטמעה מדור קודם

  • אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק exporters בקוד הבא. מגדירים את creds_file_path לנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/winevtlog:
        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: WINEVTLOG
        raw_log_field: body
        ingestion_labels:
          env: production
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
syslog_ts metadata.event_timestamp נותח בתור yyyy-MM-ddTHH:mm:ss Z
event_type metadata.event_type מיפוי ישיר
EventID metadata.product_event_type מיפוי ישיר
sourceName metadata.product_name מיפוי ישיר
SourceModuleType observer.application שינוי שם/מיפוי
Domain principal.administrative_domain שינוי שם/מיפוי
Hostname principal.hostname שינוי שם/מיפוי
principal_ip1 principal.ip ממוזג
roles principal.user.attribute.roles ממוזג
AccountName principal.user.userid שינוי שם/מיפוי
EventID security_result.about.labels מופה: 8002,8005, 8006, 8020 ← ssdl
ssdl security_result.about.labels ממוזג
message1 security_result.action מופה: allowed to run ← security_action
security_action security_result.action ממוזג
message1 security_result.description מיפוי ישיר
RuleAndFileData.RuleId security_result.rule_id שינוי שם/מיפוי
EventID security_result.rule_name מיפוי ישיר
RuleAndFileData.RuleName security_result.rule_name שינוי שם/מיפוי
EventType security_result.severity מופה: INFO ← INFORMATIONAL, WARNING ← LOW
RuleAndFileData.PolicyName security_result.summary שינוי שם/מיפוי
ThreadID security_result.threat_id שינוי שם/מיפוי
RuleAndFileData.FullFilePath target.process.file.full_path שינוי שם/מיפוי
filePath target.process.file.full_path שינוי שם/מיפוי
ProcessID target.process.pid מיפוי ישיר
RuleAndFileData.TargetProcessId target.process.pid שינוי שם/מיפוי
ProviderGuid target.resource.product_object_id שינוי שם/מיפוי
UserID target.user.userid שינוי שם/מיפוי
לא רלוונטי metadata.vendor_name קבוע: Microsoft
לא רלוונטי security_result.severity קבוע: INFORMATIONAL

יומן שינויים

הצגת יומן השינויים של המנתח הזה

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