איסוף יומני 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.
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן 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 להטמעה של 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: כתובת ה-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 |
ה-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.