איסוף יומנים של MongoDB
במאמר הזה מוסבר איך להטמיע יומני MongoDB ב-Google Security Operations באמצעות Bindplane.
MongoDB הוא מסד נתונים מסוג NoSQL לאחסון מסמכים שיוצר יומני ביקורת לפעולות CRUD, לאירועי אימות, לפקודות של מסד הנתונים ולפעולות של קבוצת העתקים. MongoDB כותב קובצי יומן מובְנים בפורמט JSON באופן מקומי, וסוכן Bindplane יכול לאסוף אותם ישירות ממערכת הקבצים.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות רשת בין סוכן Bindplane לבין שרת MongoDB
- אם השרת פועל מאחורי שרת proxy, צריך לוודא שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
- גישה עם הרשאות לשרת MongoDB (תפקיד אדמין של מסד נתונים או הרשאות בסיס)
- MongoDB Enterprise או MongoDB Community Edition עם רישום ביומן ביקורת מופעל
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל הגדרות SIEM > סוכני איסוף.
מורידים את קובץ האימות להטמעת נתונים. שומרים את הקובץ באופן מאובטח במערכת שבה יותקן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile.
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת הסוכן של Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת חלונות
- פותחים את שורת הפקודה או את 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 להטמעה של יומנים ושליחה שלהם אל Google SecOps
איתור קובץ ההגדרות
Linux:
sudo systemctl status observiq-otel-collectorWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ ההגדרות
מחליפים את כל התוכן של
config.yamlבהגדרות הבאות:receivers: filelog: include: - /var/log/mongodb/auditLog.json start_at: beginning exporters: chronicle/mongodb: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: MONGO_DB raw_log_field: body ingestion_labels: env: production service: pipelines: logs/mongodb_to_chronicle: receivers: - filelog exporters: - chronicle/mongodb
פרמטרים להגדרה
מחליפים את ה-placeholders הבאים:
הגדרת מקלט:
filelog: סוג המקלט לאיסוף קובצי יומן מהדיסק-
include: רשימת נתיבי קבצים למעקב:- Linux:
/var/log/mongodb/auditLog.json(נתיב ברירת המחדל של יומן הביקורת של MongoDB) - Windows:
C:\data\log\auditLog.jsonאו הנתיב שהגדרתם ליומן הביקורת
- Linux:
-
start_at: מגדירים את הערךbeginningכדי לקרוא יומנים קיימים, או את הערךendכדי לקרוא רק רשומות חדשות
הגדרת כלי הייצוא:
-
mongodb: שם תיאורי של הכלי לייצוא -
creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
-
<customer_id>: מספר הלקוח מהשלב הקודם -
endpoint: כתובת ה-URL של נקודת הקצה האזורית:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
-
MONGO_DB: סוג היומן בדיוק כמו שהוא מופיע ב-Chronicle -
ingestion_labels: תוויות אופציונליות בפורמט YAML (לדוגמה,env: production)
-
הגדרת צינור עיבוד הנתונים:
-
mongodb_to_chronicle: שם תיאורי לצינור עיבוד הנתונים
-
שמירת קובץ התצורה
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- 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"
הגדרת MongoDB ליצירת יומני ביקורת
- נכנסים לשרת MongoDB עם הרשאות אדמין או הרשאות root.
- פותחים את קובץ התצורה של MongoDB (
mongod.conf). מיקומי ברירת המחדל:- Linux:
/etc/mongod.conf - Windows:
C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
- Linux:
מוודאים שרישום ביומן ביקורת מופעל. בקובץ
mongod.conf, מוודאים שההגדרות הבאות מוגדרות:- הערך של
auditLog.destinationהואfile. - הערך של
auditLog.formatהואJSON. שימו לב ל
auditLog.path(לדוגמה,/var/log/mongodb/auditLog.json).אם רישום ביומן הביקורת לא מופעל, מוסיפים את הקוד הבא לקובץ
mongod.conf:auditLog: destination: file format: JSON path: /var/log/mongodb/auditLog.json
- הערך של
מפעילים מחדש את שירות MongoDB כדי להחיל את ההגדרה:
Linux:
sudo systemctl restart mongodWindows:
net stop MongoDB && net start MongoDB
מוודאים שקובץ יומן הביקורת נכתב בנתיב שהוגדר (לדוגמה,
/var/log/mongodb/auditLog.json).מוודאים שהנתיב של סוכן Bindplane
includeב-config.yamlתואם ל-auditLog.pathשהוגדר ב-mongod.conf.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| ctx, connectionId, connectionCount, attr.protocol, attr.storage.data.bytesRead, attr.storage.data.timeReadingMicros, attr.command.$readPreference.mode, attr.queryHash, param_old, cluster_node, param.indexName, temp_db_value | additional.fields | מיזוג משדות שונים על סמך תנאים |
| db_mechanism, param.mechanism | extensions.auth.auth_details | ערך מ-db_mechanism אם הוא לא ריק, אחרת param.mechanism |
| extensions.auth.mechanism | ההגדרה היא MECHANISM_OTHER | |
| extensions.auth.type | הערך שמוגדר הוא AUTHTYPE_UNSPECIFIED | |
| lb_hostname, src_hostname | intermediary.hostname | הערך מ-lb_hostname אם הוא לא ריק, אחרת הערך מ-src_hostname |
| lb_port, src_port | intermediary.port | הערך מ-lb_port אם הוא לא ריק, אחרת src_port (מומר למספר שלם) |
| msg | metadata.description | הערך הועתק ישירות |
| metadata.event_type | ההגדרה מתבצעת על סמך התנאים msg_atype, category, param_passwordChanged, param_command, remote_ip | |
| msg_atype, category | metadata.product_event_type | ערך מ-msg_atype אם הוא לא ריק, אחרת הערך הוא category |
| id, type, traceId | metadata.product_log_id | הערך מ-id אם הוא לא ריק, אחרת uuid.$binary אם type == "04", אחרת traceId |
| metadata.product_name | מגדירים את האפשרות MongoDB Enterprise. | |
| metadata.vendor_name | מגדירים את האפשרות MongoDB. | |
| application_name | principal.application | הערך הועתק ישירות |
| accessLog.hostname | principal.asset.hostname | הערך הועתק ישירות |
| remote_ip | principal.asset.ip | הערך הועתק ישירות |
| software_label | principal.asset.software | המיזוג בוצע מ-software_label |
| accessLog.hostname | principal.hostname | הערך הועתק ישירות |
| remote_ip | principal.ip | הערך הועתק ישירות |
| os_type | principal.platform | הערך WINDOWS אם התוצאה תואמת ל-Windows, MAC אם התוצאה תואמת ל-OSX או ל-Mac, LINUX אם התוצאה תואמת ל-Linux |
| os_name, param.clientMetadata.os.name | principal.platform_patch_level | הערך מ-os_name אם הוא לא ריק, אחרת param.clientMetadata.os.name |
| os_version, param.clientMetadata.os.version | principal.platform_version | הערך מ-os_version אם הוא לא ריק, אחרת הערך מ-param.clientMetadata.os.version |
| remote_port | principal.port | ההמרה למספר שלם בוצעה |
| principal_userid | principal.user.userid | הערך הועתק ישירות |
| sr_action | security_result.action | הערך הועתק ישירות |
| param.reason, param.indexBuildState | security_result.description | הערך מ-param.reason אם msg_atype == "logout"; מ-param.indexBuildState אם msg_atype in ["createIndex", "dropIndex"] |
| severity, level | security_result.severity | הערך INFORMATIONAL אם חומרת הבעיה היא [i, I] או הרמה היא [INFO, DEBUG]; הערך ERROR אם חומרת הבעיה היא [e, E] או הרמה היא ERROR; הערך MEDIUM אם חומרת הבעיה היא [w, W, f, F] |
| msg_result, attr.error, attr.planSummary, reason, attr.msg_data | security_result.summary | ההגדרה מתבצעת על סמך התנאים msg_result, attr.error, attr.planSummary, reason, attr.msg_data |
| db_value | target.administrative_domain | הערך הועתק ישירות |
| application_name | target.application | הערך הועתק ישירות |
| local_ip | target.asset.ip | הערך הועתק ישירות |
| host_group | target.group.group_display_name | הערך הועתק ישירות |
| local_ip | target.ip | הערך הועתק ישירות |
| local_port | target.port | הומר למספר שלם |
| old_name_label, cluster_node_label, mode_label, query_hash_label, bytes_read_label, time_reading_micro_label, environment_label, area_label | target.resource.attribute.labels | מיזוג משדות שונים של תוויות |
| param_ns, db_value, param_new, param.args.find | target.resource.name | הגדרה על סמך התנאים msg_atype ו-param_command |
| target.resource.resource_subtype | מגדירים את הערך 'MongoDB Database' לאירועים של מסד נתונים או משתמש, את הערך 'MongoDB Collection' לאירועים של אוסף ואת הערך 'MongoDB Index' לאירועים של אינדקס | |
| target.resource.resource_type | הערך צריך להיות DATABASE לאירועים של מסד נתונים או משתמש, ו-TABLE לאירועים של אוסף או אינדקס. | |
| db_user, param.user | target.user.userid | הערך מ-db_user אם הוא לא ריק, אחרת param.user |
service.name |
event.idm.read_only_udm.target.application |
מופה מיומן השינויים |
host.name |
event.idm.read_only_udm.principal.hostname |
מופה מיומן השינויים |
host.name |
event.idm.read_only_udm.principal.asset.hostname |
מופה מיומן השינויים |
mongodb.group.id |
event.idm.read_only_udm.principal.group.product_object_id |
מופה מיומן השינויים |
mongodb.cluster.name |
event.idm.read_only_udm.target.resource.attribute.labels |
מופה מיומן השינויים |
mongodb.customer.cluster.name |
event.idm.read_only_udm.target.resource.attribute.labels |
מופה מיומן השינויים |
timestamp |
event.idm.read_only_udm.metadata.event_timestamp |
מופה מיומן השינויים |
ts.date |
event.idm.read_only_udm.metadata.event_timestamp |
מופה מיומן השינויים |
uuid.binary |
event.idm.read_only_udm.metadata.product_log_id |
מופה מיומן השינויים |
users.1.user |
event.idm.read_only_udm.principal.user.userid |
מופה מיומן השינויים |
remote.ip |
event.idm.read_only_udm.principal.ip וגם event.idm.read_only_udm.principal.asset.ip |
מופה מיומן השינויים |
remote.port |
event.idm.read_only_udm.principal.port |
מופה מיומן השינויים |
local.ip |
event.idm.read_only_udm.target.ip וגם event.idm.read_only_udm.target.asset.ip |
מופה מיומן השינויים |
local.port |
event.idm.read_only_udm.target.port |
מופה מיומן השינויים |
roles.role |
event.idm.read_only_udm.principal.user.attribute.roles |
מופה מיומן השינויים |
param.args.client.application.name |
event.idm.read_only_udm.principal.application |
מופה מיומן השינויים |
param.args.client.os.type |
event.idm.read_only_udm.principal.asset.platform_software.platform |
מופה מיומן השינויים |
param.args.client.os.version |
event.idm.read_only_udm.principal.platform_version |
מופה מיומן השינויים |
param.args.client.os.architecture |
event.idm.read_only_udm.principal.asset.hardware |
מופה מיומן השינויים |
atype |
event.idm.read_only_udm.metadata.product_event_type |
מופה מיומן השינויים |
param.command |
event.idm.read_only_udm.metadata.product_event_type |
מופה מיומן השינויים |
param.ns |
event.idm.read_only_udm.target.resource.name |
מופה מיומן השינויים |
result |
event.idm.read_only_udm.security_result.action |
מופה מיומן השינויים |
mongodb.log.type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.db |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
uuid.type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.clientOperationKey.type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.clientOperationKey.binary |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.aggregate |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.mayBypassWriteBlocking |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.configTime.timestamp.t |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.topologyTime.timestamp.t |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.audit |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.cursor.batchSize.numberLong |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.includeQueryStatsMetrics |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.fromMongos |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.readConcern.provenance |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.readConcern.level |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.writeConcern.provenance |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.writeConcern.level |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.platform |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.driver.name |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.driver.version |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.os.name |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.clusterTime |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.lsid.id.type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.lsid.uid.binary |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.users.1.db |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.mongos.version |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.writeConcern.w |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.writeConcern.wtimeout |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.lsid.uid.type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.pipeline.1.match.managedClusterType |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.pipeline.2.group.n.sum.const |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.pipeline.2.group._id.const |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.client.mongos.client.port |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
param.args.audit.impersonatedRoles |
event.idm.read_only_udm.principal.user.attribute.roles |
מופה מיומן השינויים |
param.args.audit.impersonatedUser |
event.idm.read_only_udm.principal.user.attribute.labels |
מופה מיומן השינויים |
param.args.client.mongos.client |
event.idm.read_only_udm.principal.ip וגם event.idm.read_only_udm.principal.asset.ip |
מופה מיומן השינויים |
param.args.client.mongos.host |
event.idm.read_only_udm.intermediary.ip |
מופה מיומן השינויים |
param.args.client.mongos.host |
event.idm.read_only_udm.intermediary.port |
מופה מיומן השינויים |
accessLog.authResult |
additional.fields |
מופה מיומן השינויים |
accessLog.authSource |
additional.fields |
מופה מיומן השינויים |
accessLog.failureReason |
additional.fields |
מופה מיומן השינויים |
accessLog.groupId |
target.resource.product_object_id |
מופה מיומן השינויים |
accessLog.ipAddress |
intermediary.ip |
מופה מיומן השינויים |
accessLog.logLine.t.$date |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.s |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.c |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.id |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.ctx |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.msg |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.client |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.isSpeculative |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.isClusterMember |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.mechanism |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.user |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.db |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.result |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.metrics.conversation_duration.micros |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.metrics.conversation_duration.summary.step |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total |
additional.fields |
מופה מיומן השינויים |
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros |
additional.fields |
מופה מיומן השינויים |
accessLog.username |
target.user.user_display_name |
מופה מיומן השינויים |
accessLog.timestamp |
additional.fields |
מופה מיומן השינויים |
roles.db |
principal.user.attribute.roles |
מופה מיומן השינויים |
roles.db |
target.user.attribute.roles |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.