איסוף יומני ביקורת של Tanium
במאמר הזה מוסבר איך להטמיע יומני ביקורת של Tanium ב-Google Security Operations באמצעות Amazon S3, באמצעות יכולת הייצוא המובנית של Tanium Connect ל-S3. הכלי לניתוח מחלץ את היומנים, ובהתחלה מנקה שדות רבים שמוגדרים כברירת מחדל. לאחר מכן, הוא מנתח את הודעת היומן באמצעות grok ומסנן json, ומחלץ שדות כמו חותמת זמן, כתובת IP של המכשיר ופרטי ביקורת. הכלי לניתוח נתונים ממפה את השדות שחולצו ל-UDM, ומטפל בסוגי נתונים שונים ובלוגיקה מותנית כדי לאכלס שדות UDM מתאימים על סמך הנוכחות והערכים של מאפיינים ספציפיים ביומן הביקורת של Tanium.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- גישת אדמין ל-Tanium Connect ול-Tanium Console
- גישת אדמין ל-AWS (S3, IAM)
יצירת קטגוריה ב-Amazon S3
- פותחים את מסוף Amazon S3.
- אם צריך, אפשר לשנות את האזור.
- בסרגל הניווט, בוחרים את האזור שבו רוצים שיומני הביקורת של Tanium יישמרו.
- לוחצים על Create Bucket.
- שם הקטגוריה: מזינים שם בעל משמעות לקטגוריה (לדוגמה,
tanium-audit-logs). - אזור: בוחרים את האזור המועדף (לדוגמה,
us-east-1). - לוחצים על יצירה.
- שם הקטגוריה: מזינים שם בעל משמעות לקטגוריה (לדוגמה,
יצירת משתמש IAM עם גישה מלאה ל-Amazon S3
- פותחים את מסוף IAM.
- לוחצים על משתמשים > הוספת משתמש.
- מזינים שם משתמש (לדוגמה,
tanium-connect-s3-user). - בוחרים באפשרות Programmatic access (גישה באמצעות תוכנה) או באפשרות AWS Management Console access (גישה ל-AWS Management Console), או בשתיהן, לפי הצורך.
- בוחרים באפשרות סיסמה שנוצרה אוטומטית או באפשרות סיסמה בהתאמה אישית.
- לוחצים על הבא: הרשאות.
- בוחרים באפשרות צירוף מדיניות קיימת ישירות.
- מחפשים את המדיניות AmazonS3FullAccess ובוחרים בה עבור המשתמש.
- לוחצים על הבא: תגים.
- לוחצים על הבא: בדיקה.
- לוחצים על יצירת משתמש.
- מעתיקים ושומרים את המזהה של מפתח הגישה ואת מפתח הגישה הסודי לעיון בעתיד.
הגדרת הרשאות בקטגוריית Amazon S3
- במסוף Amazon S3, בוחרים את הקטגוריה שיצרתם קודם.
- לוחצים על הרשאות > מדיניות של מאגר.
בעורך מדיניות הקטגוריה, מוסיפים את המדיניות הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }מחליפים את המשתנים הבאים:
- משנים את
YOUR_ACCOUNT_IDלמזהה החשבון ב-AWS. - אם השם שונה, מחליפים את
tanium-audit-logsבשם הקטגוריה בפועל. - אם שם המשתמש שונה, מחליפים את
tanium-connect-s3-userבשם המשתמש בפועל ב-IAM.
- משנים את
לוחצים על Save.
הגדרת Tanium Connect לייצוא ל-S3
יצירת חיבור ל-AWS S3 ב-Tanium Connect
- נכנסים לTanium Console כאדמינים.
- עוברים אל Tanium Connect > Connections.
- לוחצים על יצירת חיבור.
- בקטע General Information (מידע כללי), מציינים את פרטי ההגדרה הבאים:
- שם: מזינים שם תיאורי (לדוגמה,
Tanium Audit to S3). - תיאור: מזינים תיאור משמעותי (לדוגמה,
Export Tanium audit logs to S3 for Google SecOps ingestion). - הפעלה: בוחרים באפשרות הזו כדי להפעיל את החיבור.
- רמת היומן: בוחרים באפשרות מידע (ברירת מחדל) או משנים לפי הצורך.
- שם: מזינים שם תיאורי (לדוגמה,
הגדרת מקור החיבור
- בקטע Configuration, בוחרים באפשרות Tanium Audit בשדה Source.
- קובעים את ההגדרות של מקור הביקורת:
- מספר הימים של היסטוריה שאוחזרו: מזינים את מספר הימים של נתוני ביקורת היסטוריים שרוצים לאחזר (לדוגמה,
7לשבוע אחד). - סוגי ביקורת: בוחרים את סוגי הביקורת שרוצים לייצא. בוחרים באחת מהאפשרויות הבאות:
- היסטוריית פעולות: פעולות שהונפקו על ידי מפעילי מסוף.
- אימות: אירועים של אימות משתמשים.
- תוכן: שינויים ותיקונים בתוכן.
- קבוצות: שינויים בקבוצות מחשבים.
- חבילות: פעילויות שקשורות לחבילות.
- חיישנים: שינויים בחיישנים.
- הגדרות המערכת: שינויים בהגדרות המערכת.
- משתמשים: פעילויות שקשורות לניהול משתמשים.
- מספר הימים של היסטוריה שאוחזרו: מזינים את מספר הימים של נתוני ביקורת היסטוריים שרוצים לאחזר (לדוגמה,
הגדרת היעד AWS S3
- בקטע Destination (יעד), בוחרים באפשרות AWS S3.
- מספקים את פרטי ההגדרה הבאים:
- שם היעד: מזינים שם (לדוגמה,
Google SecOps S3 Bucket). - מפתח גישה ל-AWS: מזינים את מזהה מפתח הגישה של משתמש ה-IAM שנוצר קודם.
- מפתח סודי של AWS: מזינים את מפתח הגישה הסודי של משתמש IAM שנוצר קודם.
- שם הקטגוריה: מזינים את שם הקטגוריה ב-S3 (לדוגמה,
tanium-audit-logs). - Bucket Path (נתיב לדלי): אופציונלי. מזינים קידומת נתיב (לדוגמה,
tanium/audit/). - אזור: בוחרים את האזור ב-AWS שבו נמצאת הקטגוריה (לדוגמה,
us-east-1).
- שם היעד: מזינים שם (לדוגמה,
הגדרת הפורמט ולוח הזמנים
- בקטע Format (פורמט), מגדירים את פורמט הפלט:
- סוג הפורמט: בוחרים באפשרות JSON.
- כולל כותרות עמודות: בוחרים אם רוצים לכלול כותרות עמודות.
- יצירת מסמך: מבטלים את הסימון של האפשרות הזו כדי לשלוח נתוני JSON גולמיים.
- בקטע Schedule (תזמון), מגדירים מתי החיבור יפעל:
- סוג התזמון: בוחרים באפשרות Cron.
- ביטוי Cron: מזינים ביטוי Cron לייצוא קבוע (לדוגמה,
0 */1 * * *לייצוא כל שעה). - תאריך התחלה: הגדרת תאריך ההתחלה של התזמון.
- לוחצים על שמירת השינויים.
בדיקה והרצה של החיבור
- בדף Connect Overview (סקירה כללית של Connect), עוברים אל Connections (חיבורים).
- לוחצים על החיבור שיצרתם (Tanium Audit to S3).
- לוחצים על Run Now (הפעלה עכשיו) כדי לבדוק את החיבור.
- מאשרים שרוצים להפעיל את החיבור.
- עוקבים אחרי סטטוס החיבור ומוודאים שיומני הביקורת מיוצאים לדלי S3.
אופציונלי: יצירת משתמש IAM ומפתחות עם הרשאת קריאה בלבד ל-Google SecOps
- עוברים אל AWS Console > IAM > Users > Add users.
- לוחצים על הוספת משתמשים.
- מספקים את פרטי ההגדרה הבאים:
- משתמש: מזינים
secops-reader. - סוג הגישה: בוחרים באפשרות מפתח גישה – גישה פרוגרמטית.
- משתמש: מזינים
- לוחצים על יצירת משתמש.
- מצרפים מדיניות קריאה מינימלית (מותאמת אישית): משתמשים > secops-reader > הרשאות > הוספת הרשאות > צירוף מדיניות ישירות > יצירת מדיניות.
בעורך ה-JSON, מזינים את המדיניות הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }מגדירים את השם ל-
secops-reader-policy.עוברים אל יצירת מדיניות > מחפשים או בוחרים > הבא > הוספת הרשאות.
עוברים אל Security credentials > Access keys > Create access key (פרטי כניסה לאבטחה > מפתחות גישה > יצירת מפתח גישה).
מורידים את קובץ ה-CSV (הערכים האלה מוזנים לפיד).
הגדרה של פיד ב-Google SecOps להטמעה של יומני ביקורת של Tanium
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על + הוספת פיד חדש.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Tanium Audit logs). - בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
- בוחרים באפשרות Tanium Audit בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- S3 URI:
s3://tanium-audit-logs/tanium/audit/(צריך לשנות את הנתיב אם השתמשתם בשם או בנתיב אחרים של קטגוריה). - אפשרויות למחיקת המקור: בוחרים את אפשרות המחיקה הרצויה.
- הגיל המקסימלי של הקובץ: כולל קבצים שעברו שינוי במספר הימים האחרון. ברירת המחדל היא 180 ימים.
- מזהה מפתח גישה: מפתח גישה של משתמש עם גישה לקטגוריית S3 (מהמשתמש עם הרשאת קריאה בלבד שנוצר למעלה).
- מפתח גישה סודי: מפתח סודי של משתמש עם גישה לקטגוריית S3 (מהמשתמש עם הרשאת קריאה בלבד שנוצר למעלה).
- מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
- S3 URI:
- לוחצים על הבא.
- בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
ActionId |
metadata.product_log_id |
ממופה ישירות מהשדה ActionId. |
ActionName |
security_result.action_details |
ממופה ישירות מהשדה ActionName. |
Approver |
additional.fields[Approver].value.string_value |
ממופה ישירות מהשדה Approver. |
Approver |
principal.user.userid |
ממופה מהשדה Approver אם הפרמטר Issuer לא קיים. |
audit_name |
metadata.description |
ממופה ישירות מהשדה audit_name. |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
ממופה ישירות מהשדה audit_row_id. |
audit_type |
additional.fields[audit_type].value.string_value |
ממופה ישירות מהשדה audit_type. |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
ממופה ישירות מהשדה authentication_type שחולץ מהשדה details. |
Command |
principal.process.command_line |
ממופה ישירות מהשדה Command אחרי פענוח כתובת ה-URL. |
creation_time |
target.resource.attribute.creation_time |
ממופה ישירות מהשדה creation_time. |
details |
network.session_id |
הערך חולץ מהשדה details באמצעות ניתוח של צמדי מפתח/ערך. |
details |
principal.user.attribute.labels[authentication_type].value |
הערך חולץ מהשדה details באמצעות ניתוח של צמדי מפתח/ערך. |
details |
principal.asset.ip, principal.ip |
כתובת ה-IP מחולצת מהשדה details באמצעות ניתוח של צמדי מפתח/ערך, וממופה לשדות principal.asset.ip ו-principal.ip. |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
ממופה ישירות מהשדה DistributeOver. |
dvc_ip |
intermediary.hostname |
ממופה ישירות מהשדה dvc_ip שחולץ מהודעת ה-syslog. |
dvc_ip |
observer.ip |
ממופה ישירות מהשדה dvc_ip אם השדה logstash.collect.host לא קיים. |
Expiration |
additional.fields[Expiration].value.string_value |
ממופה ישירות מהשדה Expiration. |
host.architecture |
target.asset.hardware.cpu_platform |
ממופה ישירות מהשדה host.architecture. |
host.id |
target.asset.asset_id |
מופה ישירות מהשדה host.id, עם הקידומת Host ID:. |
host.ip |
target.ip |
ממופה ישירות מהשדה host.ip. |
host.mac |
target.mac |
ממופה ישירות מהשדה host.mac. |
host.name |
target.hostname |
ממופה ישירות מהשדה host.name אם הפרמטר host.hostname לא קיים. |
host.os.kernel |
target.platform_patch_level |
ממופה ישירות מהשדה host.os.kernel. |
host.os.name |
additional.fields[os_name].value.string_value |
ממופה ישירות מהשדה host.os.name. |
host.os.version |
target.platform_version |
ממופה ישירות מהשדה host.os.version. |
InsertTime |
additional.fields[InsertTime].value.string_value |
ממופה ישירות מהשדה InsertTime. |
Issuer |
additional.fields[Issuer].value.string_value |
ממופה ישירות מהשדה Issuer. |
Issuer |
principal.user.userid |
ממופה ישירות מהשדה Issuer אם הוא קיים. |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
ממופה ישירות מהשדה last_modified_by. |
log.source.address |
principal.ip |
כתובת ה-IP מחולצת מהשדה log.source.address וממופה ל-principal.ip. |
log.source.address |
principal.port |
היציאה מחולצת מהשדה log.source.address. |
logstash.collect.host |
observer.ip |
ממופה ישירות מהשדה logstash.collect.host אם הוא קיים. |
logstash.collect.timestamp |
metadata.collected_timestamp |
ממופה ישירות מהשדה logstash.collect.timestamp. |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
ממופה ישירות מהשדה logstash.ingest.timestamp. |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
ממופה ישירות מהשדה logstash.irm_environment. |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
ממופה ישירות מהשדה logstash.irm_region. |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
ממופה ישירות מהשדה logstash.irm_site. |
logstash.process.host |
intermediary.hostname |
ממופה ישירות מהשדה logstash.process.host. |
message |
dvc_ip, json_data, timestamp |
הניתוח בוצע באמצעות grok כדי לחלץ את dvc_ip, json_data ו-timestamp. |
modification_time |
target.resource.attribute.last_update_time |
ממופה ישירות מהשדה modification_time. |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
ממופה ישירות מהשדה modifier_user_id. |
object_id |
target.resource.product_object_id |
ממופה ישירות מהשדה object_id. |
object_name |
target.resource.name |
ממופה ישירות מהשדה object_name. |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
ממופה ישירות מהשדה object_type_name. |
PackageName |
additional.fields[PackageName].value.string_value |
ממופה ישירות מהשדה PackageName. |
SourceId |
additional.fields[SourceId].value.string_value |
ממופה ישירות מהשדה SourceId. |
StartTime |
additional.fields[StartTime].value.string_value |
ממופה ישירות מהשדה StartTime. |
Status |
security_result.action |
מופה ל-'BLOCK' אם Status הוא 'Closed', ל-'ALLOW' אם Status הוא 'Open'. |
Status |
security_result.summary |
ממופה ישירות מהשדה Status. |
tanium_audit_type |
metadata.product_event_type |
ממופה ישירות מהשדה tanium_audit_type. |
timestamp |
metadata.event_timestamp |
ממופה ישירות מהשדה timestamp שחולץ מהודעת ה-syslog או מהשדה message. |
type |
additional.fields[type].value.string_value |
ממופה ישירות מהשדה type. |
type_name |
metadata.product_event_type |
ממופה ישירות מהשדה type_name. |
User |
principal.user.userid |
ממופה ישירות מהשדה User. הערך נקבע על ידי לוגיקת הניתוח על סמך הנוכחות של src_ip, has_target ו-has_user. הערך יכול להיות NETWORK_CONNECTION, USER_RESOURCE_ACCESS, STATUS_UPDATE או GENERIC_EVENT. הערך מוטמע כ-"TANIUM_AUDIT". הערך מוטמע בקוד כ-'cybersecurity'. הערך מוטמע כ-"TANIUM_AUDIT". |
@version |
metadata.product_version |
ממופה ישירות מהשדה @version. |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
ממופה ישירות מהשדה agent.ephemeral_id. |
agent.id |
observer.asset_id |
מופה ישירות מהשדה agent.id, עם הקידומת filebeat:. |
agent.type |
observer.application |
ממופה ישירות מהשדה agent.type. |
agent.version |
observer.platform_version |
ממופה ישירות מהשדה agent.version. |
Comment |
security_result.description |
ממופה ישירות מהשדה Comment. |
host.hostname |
target.hostname |
ממופה ישירות מהשדה host.hostname אם הוא קיים. |
input.type |
network.ip_protocol |
מופה ל-TCP אם input.type הוא tcp או TCP. |
syslog_severity |
security_result.severity |
הערך שמופה הוא HIGH אם הערך של syslog_severity הוא error או warning, MEDIUM אם הערך הוא notice, LOW אם הערך הוא information או info. |
syslog_severity |
security_result.severity_details |
ממופה ישירות מהשדה syslog_severity. |
יומן שינויים
צפייה ביומן השינויים של מנתח התוכן הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.