איסוף יומני Apache

גרסת כלי הניתוח: 20.0

נתמך ב:

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

שרת Apache HTTP הוא שרת אינטרנט בקוד פתוח שמטפל בבקשות HTTP ויוצר יומני גישה ושגיאות. הכלי לניתוח מטפל בפורמטים סטנדרטיים של יומנים משולבים/נפוצים וביומנים בפורמט JSON, ומחלץ פרטים של בקשות HTTP, קודי תגובה ופרטי לקוח.

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

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

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

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

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents.
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן 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
    
  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
    
  3. מחכים שההתקנה תסתיים.

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

    sudo systemctl status observiq-otel-collector
    

    השירות צריך להופיע כפעיל (פועל).

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

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

הגדרה של סוכן Bindplane להטמעה של syslog ושליחה אל Google SecOps

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

  • ‫Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • ‫Windows:

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

עריכת קובץ ההגדרות

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

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/apache:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: APACHE
            raw_log_field: body
    
    service:
        pipelines:
            logs/apache_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/apache
    

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

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

  • הגדרת מקלט:

    • ‫listen_address: כתובת ה-IP והיציאה להאזנה:
      • ‫0.0.0.0 כדי להאזין בכל הממשקים (מומלץ)
      • יציאה 514 היא יציאת syslog רגילה (נדרשת הרשאת root ב-Linux; אפשר להשתמש ב-1514 ללא הרשאת root)
  • הגדרת כלי הייצוא:

    • ‫creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:
      • ‫Linux: /etc/bindplane-agent/ingestion-auth.json
      • ‫Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • ‫customer_id: מספר הלקוח שהועתק ממסוף Google SecOps
    • ‫endpoint: כתובת ה-URL של נקודת הקצה האזורית:
      • ארה"ב: malachiteingestion-pa.googleapis.com
      • אירופה: europe-malachiteingestion-pa.googleapis.com
      • אסיה: asia-southeast1-malachiteingestion-pa.googleapis.com
      • רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.

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

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • ‫Linux: מקישים על Ctrl+O, אחר כך על Enter ואז על Ctrl+X.
    • ‫Windows: לוחצים על קובץ > שמירה.

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

  • כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:

    sudo systemctl restart observiq-otel-collector
    
    1. מוודאים שהשירות פועל:

      sudo systemctl status observiq-otel-collector
      
    2. בודקים אם יש שגיאות ביומנים:

      sudo journalctl -u observiq-otel-collector -f
      
  • כדי להפעיל מחדש את סוכן 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"
        

הגדרת syslog ב-Apache

  1. מתחברים לשרת שמארח את Apache באמצעות SSH.
  2. יוצרים קובץ בתיקייה /etc/rsyslog.d/ בשם 02-apache2.conf:

    vim /etc/rsyslog.d/02-apache2.conf
    
  3. מוסיפים את הקוד הבא לקובץ:

    module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog")
    
    input(type="imfile"
        File="/var/log/apache2/access.log"
        Tag="http_access"
        Severity="info"
        Facility="local6")
    
    Local6.info @<BINDPLANE_IP>:<BINDPLANE_PORT>
    
    module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog")
    
    input(type="imfile"
        File="/var/log/apache2/error.log"
        Tag="http_error"
        Severity="error"
        Facility="local7")
    
    Local7.error @<BINDPLANE_IP>:<BINDPLANE_PORT>
    
    • מחליפים את <BINDPLANE_IP> ואת <BINDPLANE_PORT> בכתובת ה-IP ובמספר היציאה שהוגדרו לסוכן Bindplane.
    • אם אתם משתמשים בפרוטוקול TCP, צריך להוסיף עוד @ לשורת המארח (לדוגמה, @@<BINDPLANE_IP>:<BINDPLANE_PORT>).
  4. מפעילים מחדש את שירותי rsyslog:

    sudo service rsyslog restart
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
bytes network.received_bytes מספר הבייטים שהתקבלו מהלקוח.
bytes network.sent_bytes מספר הבייטים שנשלחו ללקוח.
bytes_out network.sent_bytes מספר הבייטים שנשלחו ללקוח.
bytes_received network.received_bytes מספר הבייטים שהתקבלו מהלקוח.
Content network.http.method ה-method של ה-HTTP חולצה מהשדה 'Content'.
Content target.url כתובת ה-URL של היעד חולצה מהשדה 'תוכן'.
cookie additional.fields.value.string_value הערך של השדה 'קובץ Cookie'.
dest_ip target.ip כתובת ה-IP של היעד.
dest_name target.hostname שם המארח של היעד.
dest_port target.port היציאה של היעד.
description metadata.description תיאור האירוע.
duration_microseconds additional.fields.value.string_value הערך של השדה duration_microseconds.
file_full_path target.file.full_path הנתיב המלא של קובץ היעד.
hostname target.hostname שם המארח של היעד.
http_content_type additional.fields.value.string_value הערך של השדה http_content_type.
http_host principal.hostname שם המארח של החשבון הראשי.
http_method network.http.method שיטת HTTP.
http_referrer network.http.referral_url כתובת URL של מקור ההפניה (referrer) מסוג HTTP.
http_user_agent network.http.user_agent סוכן משתמש HTTP.
ID metadata.id מזהה האירוע.
insertId metadata.product_log_id מזהה יומן המוצר.
ip principal.ip כתובת ה-IP של חשבון המשתמש.
jsonPayload.cIP target.ip כתובת ה-IP של היעד.
jsonPayload.cPort target.port היציאה של היעד.
jsonPayload.csBytes network.sent_bytes מספר הבייטים שנשלחו ללקוח.
jsonPayload.csMethod network.http.method שיטת HTTP.
jsonPayload.csMimeType target.file.mime_type סוג ה-MIME של קובץ היעד.
jsonPayload.csReferer network.http.referral_url כתובת URL של מקור ההפניה (referrer) מסוג HTTP.
jsonPayload.csURL target.url כתובת ה-URL ליעד.
jsonPayload.csUserAgent network.http.user_agent סוכן משתמש HTTP.
jsonPayload.sHierarchy additional.fields.value.string_value הערך של השדה sHierarchy.
jsonPayload.sHostname principal.hostname שם המארח של החשבון הראשי.
jsonPayload.sIP principal.ip כתובת ה-IP של חשבון המשתמש.
jsonPayload.scBytes network.received_bytes מספר הבייטים שהתקבלו מהלקוח.
jsonPayload.scHTTPStatus network.http.response_code קוד תגובת HTTP.
jsonPayload.scResultCode additional.fields.value.string_value הערך של השדה scResultCode.
LastStatus network.http.response_code קוד תגובת HTTP.
log_level security_result.severity רמת החומרה של תוצאת האבטחה.
logName security_result.category_details פרטי הקטגוריה של תוצאת האבטחה.
method network.http.method שיטת HTTP.
pid principal.process.pid מזהה התהליך של הישות המורשית.
Port target.port היציאה של היעד.
proto network.application_protocol פרוטוקול האפליקציה.
referer network.http.referral_url כתובת URL של מקור ההפניה (referrer) מסוג HTTP.
RemoteHost principal.ip כתובת ה-IP של חשבון המשתמש.
RemoteUser principal.user.userid מזהה המשתמש של הגורם העיקרי.
resource.labels.instance_id target.resource.product_object_id מזהה אובייקט המוצר של משאב היעד.
resource.labels.project_id target.resource.attribute.labels.value הערך של התווית project_id.
resource.labels.zone target.resource.attribute.cloud.availability_zone אזור הזמינות של משאב היעד.
resource.type target.resource.resource_type סוג המשאב של היעד.
response network.http.response_code קוד תגובת HTTP.
SizeBytes network.received_bytes מספר הבייטים שהתקבלו מהלקוח.
src_ip principal.ip כתובת ה-IP של חשבון המשתמש.
src_port principal.port היציאה של המנהל.
ssl_cipher network.tls.cipher הצפנה ב-TLS.
ssl_version network.tls.version_protocol פרוטוקול גרסת TLS.
status network.http.response_code קוד תגובת HTTP.
target target.url כתובת ה-URL ליעד.
target_ip target.ip כתובת ה-IP של היעד.
target_port target.port היציאה של היעד.
time metadata.event_timestamp חותמת הזמן של האירוע.
uri_path target.process.file.full_path הנתיב המלא של קובץ היעד.
user principal.user.userid מזהה המשתמש של הגורם העיקרי.
useragent network.http.user_agent סוכן משתמש HTTP.
version_protocol network.tls.version_protocol פרוטוקול גרסת TLS.
Workername principal.hostname שם המארח של החשבון הראשי.
x_forwarded_for הערך של הכותרת X-Forwarded-For.
metadata.log_type הערך מוגדר כ-APACHE בקוד של כלי הניתוח.
metadata.product_name הערך מוגדר כ-Apache Web Server בקוד של כלי הניתוח.
metadata.vendor_name הערך מוגדר כ-Apache בקוד של כלי הניתוח.
metadata.event_type הערך נקבע על סמך נוכחות של מידע על הגורם המבצע ועל היעד. אם יש גם עיקרון וגם יעד, סוג האירוע מוגדר כ-NETWORK_HTTP. אם קיים רק העיקרון, סוג האירוע מוגדר כ-STATUS_UPDATE. אחרת, הערך הוא GENERIC_EVENT.
additional.fields.key המפתח מוגדר ל-keep_alive,‏ duration_microseconds,‏ cookie,‏ http_content_type,‏ sHierarchy,‏ scResultCode בקוד של כלי הניתוח על סמך השדה.
target.port אם השדה proto הוא HTTP, היציאה מוגדרת ל-80. אם השדה proto הוא HTTPS, היציאה מוגדרת ל-443. אם השדה proto הוא FTP, היציאה מוגדרת כ-21.
target.resource.attribute.labels.key המפתח מוגדר כ-project_id בקוד של כלי הניתוח.
client_ip_address event.idm.read_only_udm.principal.ip וגם event.idm.read_only_udm.principal.asset.ip מופה מיומן השינויים
server event.idm.read_only_udm.target.hostname וגם event.idm.read_only_udm.target.asset.hostname מופה מיומן השינויים
bytes_in event.idm.read_only_udm.network.received_bytes מופה מיומן השינויים
PHPSESSID event.idm.read_only_udm.additional.fields מופה מיומן השינויים
AuthToken event.idm.read_only_udm.additional.fields מופה מיומן השינויים
response_time_microseconds event.idm.read_only_udm.additional.fields מופה מיומן השינויים
hostname event.idm.read_only_udm.intermediary.hostname מופה מיומן השינויים
Filename event.idm.read_only_udm.principal.process.file.full_path מופה מיומן השינויים
kv_key event.idm.read_only_udm.additional.fields מופה מיומן השינויים
info event.idm.read_only_udm.additional.fields מופה מיומן השינויים
SourceModuleName event.idm.read_only_udm.additional.fields מופה מיומן השינויים
SourceModuleType event.idm.read_only_udm.additional.fields מופה מיומן השינויים
src_ip event.idm.read_only_udm.target.ip וגם event.idm.read_only_udm.target.asset.ip מופה מיומן השינויים
tls_version event.idm.read_only_udm.network.tls.version מופה מיומן השינויים
version_protocol event.idm.read_only_udm.network.tls.version_protocol מופה מיומן השינויים
syncAccuracy event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
isSynced event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
tzKnown event.idm.read_only_udm.additional.fields מופה מיומן השינויים
user_location principal.location.country_or_region מופה מיומן השינויים
proto", "proto_version", "uri_path", and "uri_query additional.fields מופה מיומן השינויים
ip_msg principal.ip מופה מיומן השינויים
msg_method network.http.method מופה מיומן השינויים
useragentvalue network.http.user_agent מופה מיומן השינויים
bytes_out network.sent.bytes מופה מיומן השינויים
XForwardedForIP" and "RemoteHost principal.ip מופה מיומן השינויים
Remoteuser principal.user.userid מופה מיומן השינויים

יומן שינויים

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

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