איסוף יומני 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
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מקבלים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collectorהשירות אמור להופיע עם הערך RUNNING.
התקנה של Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collectorהשירות צריך להופיע כפעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של Bindplane agent להטמעה של syslog ושליחה אל Google SecOps
איתור קובץ התצורה
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
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
- Linux:
-
customer_id: מספר הלקוח שהועתק ממסוף Google SecOps endpoint: Regional endpoint URL:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
-
שמירת קובץ ההגדרות
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
שורת פקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorמסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מחפשים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- מקישים על
הגדרת syslog ב-Apache
- נכנסים לשרת שמארח את Apache באמצעות SSH.
יוצרים קובץ בתיקייה
/etc/rsyslog.d/בשם02-apache2.conf:vim /etc/rsyslog.d/02-apache2.confמוסיפים את הקוד הבא לקובץ:
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>).
- מחליפים את
מפעילים מחדש את שירותי 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 |
שיטת ה-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 |
כתובת היעד. |
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 |
כתובת היעד. |
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.