איסוף יומנים מ-Area 1

גרסת המנתח: 3.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע ב-Google Security Operations יומנים של Area 1 Email Security (של Cloudflare) באמצעות AWS S3. מנתח הנתונים מעבד את היומנים בפורמט JSON. הוא מחלץ שדות רלוונטיים ממבנה ה-JSON המקונן, ממפה אותם למודל הנתונים המאוחד (UDM) ומעשיר את הנתונים במידע גיאוגרפי ובפרטי אבטחה כמו גיבובים וסיווגים של קבצים מצורפים.

לפני שמתחילים

חשוב לוודא שיש לכם את הדברים הבאים:

  • מופע של Google SecOps
  • מארח עם Windows 2016 ואילך או עם Linux, עם systemd
  • אם אתם משתמשים בשרת proxy, היציאות של חומת האש פתוחות
  • גישה מורחבת ל-Area 1 Email Security (by Cloudflare)

הגדרת AWS IAM וקטגוריית S3

  1. יוצרים קטגוריה של Amazon S3 לפי המדריך למשתמש: יצירת קטגוריה
  2. נכנסים למסוף AWS.
  3. עוברים אל S3 > Create bucket.
  4. נותנים שם לקטגוריה (לדוגמה, area1-security-logs).
  5. משאירים את שאר ברירות המחדל (או מגדירים הצפנה וניהול גרסאות, אם צריך).
  6. לוחצים על יצירה.
  7. שומרים את הערכים של Name ו-Region של הקטגוריה לשימוש עתידי.
  8. יוצרים משתמש לפי המדריך למשתמש: יצירת משתמש IAM.
  9. בוחרים את המשתמש שנוצר.
  10. לוחצים על הכרטיסייה פרטי כניסה מאובטחים.
  11. לוחצים על Create Access Key בקטע Access Keys.
  12. בקטע Use case, בוחרים באפשרות Third-party service.
  13. לוחצים על הבא.
  14. אופציונלי: מוסיפים תג תיאור.
  15. לוחצים על יצירת מפתח גישה.
  16. לוחצים על Download CSV file ושומרים את Access Key ואת Secret Access Key לשימוש עתידי.
  17. לוחצים על סיום.
  18. לוחצים על הכרטיסייה הרשאות.
  19. בקטע מדיניות הרשאות, לוחצים על הוספת הרשאות.
  20. בוחרים באפשרות Attach policies directly.
  21. מחפשים את המדיניות AmazonS3FullAccess.
  22. בוחרים את המדיניות.
  23. לוחצים על הבא.
  24. לוחצים על הוספת הרשאות.

קבלת פרטי כניסה ל-API של Area 1

  1. נכנסים למרכז הבקרה של Area 1 Security (Cloudflare).
  2. עוברים אל הגדרות > גישה ל-API.
  3. יוצרים את מפתח ה-API (האסימון).
  4. מעתיקים את האסימון ושומרים אותו במקום מאובטח.

הגדרת חבילות Python הנדרשות

  1. נכנסים למארח של איסוף היומנים (לדוגמה, AWS VM) ומריצים את הפקודה הבאה כדי להגדיר את פרטי הכניסה ל-AWS:

    pip install boto3 requests
    aws configure
    

יצירת הסקריפט Area 1 Log Puller

  1. יוצרים את הקובץ הבא על ידי הזנת sudo vi area1_to_s3.py, ואז מעתיקים את הקוד הבא:

    • משנים את ההגדרות הבאות:
    #!/usr/bin/env python3
    import os
    import requests
    import boto3
    import datetime
    import json
    
    # Configuration
    AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN")  # Load securely from env
    AWS_PROFILE = os.environ.get("AWS_PROFILE", None)    # Optional, for named profiles
    S3_BUCKET_NAME = "area1-security-logs"
    LOG_TYPE = "events"
    
    # Time range
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(days=1)
    
    def fetch_area1_logs():
        url = f"https://api.area1security.com/v1/{LOG_TYPE}"
        headers = {
            "Authorization": f"Bearer {AREA1_API_TOKEN}",
            "Accept": "application/json"
        }
        params = {
            "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"),
            "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        return response.json()
    
    def upload_to_s3(data):
        filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json"
    
        session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session()
        s3 = session.client("s3")
    
        s3.put_object(
            Bucket=S3_BUCKET_NAME,
            Key=f"logs/{filename}",
            Body=json.dumps(data).encode("utf-8"),
            ContentType="application/json"
        )
        print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/")
    
    if __name__ == "__main__":
        logs = fetch_area1_logs()
        upload_to_s3(logs)
    
  2. שמירה ויציאה מ-vi: לוחצים על esc ואז מקלידים :wq.

אחסון משתני הסביבה

  1. יוצרים קובץ מאובטח לאחסון משתני סביבה ב-/etc/area1.env (או ב-/home/user/.area1.env)

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. מוודאים שהקובץ מאובטח:

    chmod 600 /etc/area1.env
    

הרצה ובדיקה של הסקריפט

  1. מריצים את הסקריפט הבא:

    python3 area1_to_s3.py
    
  2. אמור להופיע:

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

אוטומציה באמצעות Cron

  1. כדי ליצור סקריפט wrapper ל-Cron, מריצים את הפקודה sudo vi /usr/local/bin/run_area1.sh ואז מעתיקים את הקוד הבא:

    #!/usr/bin/env bash
    set -euo pipefail
    
    source /etc/area1.env
    /usr/bin/python3 /opt/scripts/area1_to_s3.py
    
  2. הופכים את הקובץ לקובץ להפעלה:

    chmod +x /usr/local/bin/run_area1.sh
    
  3. מוגדר לפעול מדי יום בשעה 01:00 (שעון UTC):

    crontab -e
    0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
    

הגדרת פידים

יש שתי נקודות כניסה שונות להגדרת פידים בפלטפורמת Google SecOps:

  • הגדרות > ניהול נתונים > פידים > הוספת פיד חדש (בפלטפורמה של SIEM בלבד, הגדרות > פידים > הוספת פיד חדש)
  • מרכז התוכן > חבילות תוכן > מתחילים

כדי להגדיר פידים, עוברים אל "הגדרות" > "ניהול נתונים" > "פידים"

כדי להגדיר פיד:

  1. עוברים אל הגדרות > ניהול נתונים > פידים. אם אתם משתמשים בפלטפורמה של SIEM בלבד, עוברים אל הגדרות > פידים.
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Area1 Logs).
  5. בוחרים באפשרות Amazon S3 בתור סוג המקור.
  6. בוחרים באפשרות Area1 Security בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

    • אזור: האזור שבו נמצאת הקטגוריה של Amazon S3.
    • ‫S3 URI: ה-URI של הקטגוריה (הפורמט צריך להיות: s3://<your-log-bucket-name>). מחליפים את הערכים הבאים:
      • ‫your-log-bucket-name: שם הקטגוריה.
    • URI is a: בוחרים באפשרות Directory which includes subdirectories.
    • אפשרויות למחיקת מקור: בוחרים את אפשרות המחיקה הרצויה.
    • מזהה מפתח הגישה: מפתח הגישה של המשתמש עם גישה לקטגוריית S3.
    • מפתח גישה סודי: המפתח הסודי של המשתמש עם גישה לקטגוריית S3.
  9. לוחצים על הבא.

  10. בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.

הגדרת פידים ממרכז התוכן

מציינים ערכים בשדות הבאים:

  • אזור: האזור שבו נמצאת הקטגוריה של Amazon S3.

    • ‫S3 URI: ה-URI של הקטגוריה (הפורמט צריך להיות: s3://<your-log-bucket-name>). מחליפים את הערכים הבאים:
      • ‫your-log-bucket-name: שם הקטגוריה.
    • URI is a: בוחרים באפשרות Directory which includes subdirectories.
    • אפשרויות למחיקת מקור: בוחרים את אפשרות המחיקה הרצויה.
    • מזהה מפתח הגישה: מפתח הגישה של המשתמש עם גישה לקטגוריית S3.
    • מפתח גישה סודי: המפתח הסודי של המשתמש עם גישה לקטגוריית S3.§

אפשרויות מתקדמות

  • שם הפיד: ערך שמולא מראש ומזהה את הפיד.
  • סוג המקור: השיטה שבה משתמשים כדי לאסוף יומנים ב-Google SecOps.
  • מרחב השמות של הנכס: מרחב השמות שמשויך לפיד.
  • תוויות הטמעה: תוויות שנוספו לכל האירועים מהפיד הזה.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
alert_id security_result.rule_id הערך נלקח מהשדה alert_id.
alert_reasons security_result.description הערך נלקח מהשדה alert_reasons.
attachments.att_size security_result.about.file.size הערך נלקח מהשדה attachments.att_size ומומר למספר שלם ללא סימן.
attachments.disposition security_result.about.user.attribute.labels.value הערך נלקח מהשדה attachments.disposition.
attachments.extension security_result.about.file.mime_type הערך נלקח מהשדה attachments.extension.
attachments.md5 security_result.about.file.md5 הערך נלקח מהשדה attachments.md5.
attachments.name security_result.about.file.full_path הערך נלקח מהשדה attachments.name.
attachments.sha1 security_result.about.file.sha1 הערך נלקח מהשדה attachments.sha1.
attachments.sha256 security_result.about.file.sha256 הערך נלקח מהשדה attachments.sha256.
attachments.ssdeep security_result.about.file.ssdeep הערך נלקח מהשדה attachments.ssdeep.
delivery_mode security_result.detection_fields.value הערך נלקח מהשדה delivery_mode.
envelope_from principal.user.email_addresses, network.email.from הערך נלקח מהשדה envelope_from.
envelope_to network.email.to, target.user.email_addresses הערך נלקח מהשדה envelope_to.
final_disposition security_result.category_details הערך נלקח מהשדה final_disposition.
message_id metadata.product_log_id הערך נלקח מהשדה message_id אחרי הסרת התווים "<" ו-">".
replyto network.email.bounce_address הערך נלקח מהשדה replyto.
smtp_helo_server_ip principal.ip הערך נלקח מהשדה smtp_helo_server_ip.
smtp_helo_server_ip_as_name principal.location.name הערך נלקח מהשדה smtp_helo_server_ip_as_name.
smtp_helo_server_ip_as_number principal.asset_id הערך נלקח מהשדה smtp_helo_server_ip_as_number, ונוסף לו הקידומת asset_id:.
smtp_helo_server_ip_geo principal.location.country_or_region, principal.location.state, principal.location.city הערך נשלף מהשדה smtp_helo_server_ip_geo באמצעות תבנית Grok.
smtp_helo_server_name principal.administrative_domain הערך נלקח מהשדה smtp_helo_server_name.
מקור metadata.vendor_name הערך נלקח מהשדה source. אם השדה ריק, הערך מוגדר כ-area1security.
נושא network.email.subject הערך נלקח מהשדה subject.
פעם metadata.event_timestamp הערך נלקח מהשדה time ומומר לחותמת זמן.
metadata.event_type הערך הוא EMAIL_TRANSACTION.
metadata.product_name הערך הוא AREA1.
metadata.log_type הערך הוא AREA1.
security_result.about.user.attribute.labels.key הערך הוא disposition.
security_result.category הערך הוא SOFTWARE_MALICIOUS.
security_result.detection_fields.key הערך הוא delivery_mode.
envelope_to.0" instead of "replyto network.email.to מופה מיומן השינויים

יומן שינויים

הצגת יומן השינויים של המנתח הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.