איסוף יומנים של DHS IOC
גרסת כלי הניתוח: 1.0
במאמר הזה מוסבר איך להטמיע יומני IOC של Department of Homeland Security (DHS) ב-Google Security Operations באמצעות Google Cloud Storage V2.
משרד ביטחון המולדת (DHS) מפיץ מודיעין איומי סייבר באמצעות התוכנית Automated Indicator Sharing (שיתוף אוטומטי של אינדיקטורים, AIS), ומספק סימנים מחשידים (IoC) כמו כתובות IP זדוניות, דומיינים, כתובות URL וגיבוב קבצים בפורמט STIX/TAXII. מכיוון ש-AIS מספק נתוני IOC כחבילות STIX שאפשר להוריד, צריך לייצא את הקבצים האלה לקטגוריה של Google Cloud Storage (GCS) ואז להגדיר פיד של Google SecOps כדי להטמיע אותם.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- פרויקט בענן של Google Cloud שמופעל בו Cloud Storage API
- הרשאות ליצירה ולניהול של מאגרי GCS
- הרשאות לניהול מדיניות IAM בקטגוריות GCS
- חשבון פעיל ב-DHS AIS עם גישה לשרת TAXII או לפורטל AIS
- קובצי אישור לקוח ומפתח פרטי של AIS לאימות שרת TAXII
יצירת קטגוריה של Google Cloud Storage
- נכנסים אל מסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, dhs-ioc-logs)סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים) Location בוחרים את המיקום הכי קרוב למופע של Google SecOps (לדוגמה, us-central1)סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות) בקרת גישה אחיד (מומלץ) כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
הגדרת ייצוא אוטומטי של נתוני IOC של DHS ל-GCS
משרד DHS מפיץ נתוני IOC בפורמט STIX דרך שרת ה-TAXII של AIS. הגדרת צינור אוטומטי לשליפת אינדיקטורים לפי לוח זמנים ולכתיבתם ישירות ל-GCS.
אפשרות 1: Cloud Scheduler עם Cloud Build (מומלץ)
שימוש ב-Cloud Build שמופעל על ידי Cloud Scheduler כדי להריץ משימה בקונטיינר שמביאה חבילות STIX משרת AIS TAXII וכותבת אותן ל-GCS.
מאחסנים את אישור הלקוח ואת המפתח של AIS ב-Secret Manager:
- במסוף GCP, עוברים אל Security > Secret Manager (אבטחה > ניהול סודות).
- לוחצים על Create Secret (יצירת סוד).
- יוצרים שני סודות:
- Name:
ais-client-cert, Value: התוכן של קובץ ה-PEM של אישור הלקוח שלכם ב-AIS. - Name:
ais-client-key, Value: התוכן של קובץ ה-PEM של המפתח הפרטי של לקוח AIS.
- Name:
יוצרים חשבון שירות למשימת הייצוא:
- במסוף GCP, עוברים אל IAM & Admin > Service Accounts.
- לוחצים על יצירת חשבון שירות.
- מספקים את פרטי ההגדרה הבאים:
- שם חשבון השירות: מזינים
dhs-ioc-export-sa - תיאור חשבון השירות: מזינים
Service account for automated DHS IOC export to GCS
- שם חשבון השירות: מזינים
- לוחצים על יצירה והמשך.
- מוסיפים את התפקידים הבאים:
- אדמין של אובייקט אחסון (לכתיבת קבצים ב-GCS)
- עריכה ב-Cloud Build (להרצת משימות של Cloud Build)
- Secret Manager Secret Accessor (לקריאת אישורי AIS)
- לוחצים על סיום.
יוצרים קובץ תצורת build של Cloud Build (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | apt-get update && apt-get install -y curl # Retrieve AIS certificates from Secret Manager gcloud secrets versions access latest --secret=ais-client-cert > /tmp/ais-cert.pem gcloud secrets versions access latest --secret=ais-client-key > /tmp/ais-key.pem # Fetch IOC data from AIS TAXII server TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert /tmp/ais-cert.pem --key /tmp/ais-key.pem \ -H "Accept: application/taxii+json;version=2.1" \ "https://ais2.cisa.dhs.gov/taxii2/ais2/collections/${_COLLECTION_ID}/objects?added_after=$${FROM}" \ -o /workspace/dhs_ioc_$${TIMESTAMP}.json # Upload to GCS gcloud storage cp /workspace/dhs_ioc_$${TIMESTAMP}.json \ gs://${_BUCKET_NAME}/ioc-data/ # Clean up certificates rm -f /tmp/ais-cert.pem /tmp/ais-key.pem substitutions: _BUCKET_NAME: 'dhs-ioc-logs' _COLLECTION_ID: 'YOUR_AIS_COLLECTION_ID'יוצרים משימה של Cloud Scheduler כדי להפעיל את הבנייה:
- במסוף GCP, עוברים אל Cloud Scheduler.
- לוחצים על Create Job (יצירת משימה).
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך שם dhs-ioc-export-hourlyאזור בוחרים את אותו אזור שבו נמצא מאגר GCS תדירות 0 * * * *(כל שעה)אזור זמן UTC (מומלץ) סוג הטירגוט HTTP כתובת URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsשיטת HTTP POST כותרת אימות הוספת טוקן OAuth חשבון שירות dhs-ioc-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.comלוחצים על יצירה.
אפשרות 2: מכונה וירטואלית ב-Compute Engine עם cron (אפשרות חלופית)
אם Cloud Build לא זמין, אפשר להשתמש במכונה וירטואלית קטנה ב-Compute Engine עם משימת cron כדי לשלוף נתוני IOC ולכתוב אותם ל-GCS.
יצירת מכונה וירטואלית ב-Compute Engine:
- במסוף GCP, עוברים אל Compute Engine > VM instances.
- לוחצים על Create instance.
- בוחרים סוג מכונה קטן (לדוגמה,
e2-micro). - בקטע Identity and API access (זהות וגישה ל-API), בוחרים חשבון שירות עם התפקיד Storage Object Admin (אדמין אובייקט אחסון).
- לוחצים על יצירה.
מתחברים למכונה הווירטואלית באמצעות SSH ויוצרים סקריפט ייצוא (
/opt/dhs-ioc/export.sh):#!/usr/bin/env bash set -euo pipefail TAXII_URL="https://ais2.cisa.dhs.gov/taxii2" API_ROOT="ais2" COLLECTION_ID="YOUR_AIS_COLLECTION_ID" CERT="/etc/ais/client-cert.pem" KEY="/etc/ais/client-key.pem" BUCKET="dhs-ioc-logs" TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert "$CERT" --key "$KEY" \ -H "Accept: application/taxii+json;version=2.1" \ "${TAXII_URL}/${API_ROOT}/collections/${COLLECTION_ID}/objects?added_after=${FROM}" \ -o "/tmp/dhs_ioc_${TIMESTAMP}.json" gcloud storage cp "/tmp/dhs_ioc_${TIMESTAMP}.json" "gs://${BUCKET}/ioc-data/" rm -f "/tmp/dhs_ioc_${TIMESTAMP}.json"הופכים את הסקריפט לסקריפט שניתן להפעלה ומתזמנים אותו באמצעות cron:
chmod +x /opt/dhs-ioc/export.sh (crontab -l ; echo "0 * * * * /opt/dhs-ioc/export.sh >> /var/log/dhs-ioc-export.log 2>&1") | crontab -
אחזור חשבון השירות של Google SecOps
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על Configure a single feed (הגדרת פיד יחיד).
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
DHS IOC Feed). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Department of Homeland Security (המשרד לביטחון המולדת) בתור סוג היומן.
- לוחצים על קבלת חשבון שירות.
תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.
הענקת הרשאות IAM לחשבון השירות של Google SecOps
לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריה של GCS.
- עוברים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה (לדוגמה,
dhs-ioc-logs). - עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מספקים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps (לדוגמה,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com). - הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps (לדוגמה,
לוחצים על Save.
הגדרת הפיד של Google SecOps
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על Configure a single feed (הגדרת פיד יחיד).
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
DHS IOC Feed). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Department of Homeland Security (המשרד לביטחון המולדת) בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS:
gs://dhs-ioc-logs/ioc-data/- מחליפים את
dhs-ioc-logsבשם של קטגוריית GCS. - מחליפים את
ioc-dataבנתיב הקידומת שהגדרתם.
- מחליפים את
אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| entity.application | שם או מזהה של אפליקציה | |
| observable_id | entity.asset.asset_id | מזהה נכס |
| object_id | entity.asset.product_object_id | מזהה אובייקט של מוצר |
| hash_value | entity.file.md5 | גיבוב MD5 של הקובץ |
| hash_value | entity.file.sha1 | גיבוב SHA1 של הקובץ |
| hash_value | entity.file.sha256 | גיבוב SHA256 של הקובץ |
| file_size | entity.file.size | גודל הקובץ בבייטים |
| fuzzy_hash_value | entity.file.ssdeep | גיבוב SSDEEP של הקובץ |
| file_path | entity.file.full_path | נתיב הקובץ המלא |
| ip_address_value | entity.ip | כתובת IP |
| מדינה | entity.location.country_or_region | מדינה או אזור |
| administrativeArea | entity.location.state | מדינה או מחוז |
| יציאה | entity.port | מספר יציאה |
| file_name_label | entity.resource.attribute.labels | תוויות מאפיינים של המשאב |
| url | entity.url | כתובת URL |
| organisationInfo | entity.user.department | מחלקה |
| email_address, email | entity.user.email_addresses | כתובות אימייל |
| organisationName | entity.user.userid | מזהה משתמש |
| ioc.domain_and_ports.domain | שם דומיין | |
| indicator_type, confidence_value | ioc.feed_name | שם הפיד |
| ip_address_value, target_ip | ioc.ip_and_ports.ip_address | כתובת IP |
| יציאה | ioc.ip_and_ports.ports | יציאות |
| description, desc1, ttp_description | metadata.description | תיאור |
| entity_type | metadata.entity_type | סוג הישות |
| start_time | metadata.interval.start_time | שעת ההתחלה של מרווח הזמן |
| object_id | metadata.product_entity_id | מזהה ישות מוצר |
| sightings_count_label | metadata.source_labels | תוויות של מקור |
| security_result_data, ttp_security_result | metadata.threat | פרטים על סכנות |
| metadata.vendor_name | שם הספק או שם חברה | |
| metadata.product_name | שם המוצר | |
| address_label, subject_label, file_label | security_result.about.labels | תוויות לגבי תוצאת האבטחה |
| indicator_type | security_result_data.category_details | פרטי הקטגוריה |
| desc1 | security_result_data.description | תיאור |
| confidence_value | security_result_data.severity | רמת החומרה |
| host, domain_name | target.hostname | שם המארח של היעד |
| target_ip | target.ip | כתובת ה-IP של היעד |
| domain_name | target.url | כתובת URL של יעד |
| malware_category | ttp_security_result.category_details | פרטי הקטגוריה של TTP |
| ttp_id_label | ttp_security_result.detection_fields | שדות זיהוי של TTP |
| ttp_description | ttp_security_result.description | תיאור של TTP |
| ttp_summary | ttp_security_result.summary | סיכום של TTP |
יומן שינויים
צפייה ביומן השינויים של מנתח התוכן הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.