במאמר הזה מוסבר מהי CIS Benchmark, איך היא קשורה למערכת הפעלה שמותאמת לקונטיינרים (COS), איך לבדוק את סטטוס התאימות במכונה ואיך לפתור בעיות במקרה של כשל.
סקירה כללית
המרכז לאבטחת אינטרנט (CIS) מפרסם מדדים להשוואה של המלצות לשיטות מומלצות לאבטחה בפלטפורמות שונות. ה-CIS Benchmark של מערכת הפעלה שמותאמת לקונטיינרים הוא סדרה של המלצות להגדרת מכונות שמשתמשות במערכת הפעלה שמותאמת לקונטיינרים כדי לתמוך במצב אבטחה חזק. התמונות של COS x86 ו-ARM תואמות ל-CIS.
גישה להשוואה לשוק
המדד של CIS למערכת הפעלה שמותאמת לקונטיינרים זמין באתר CIS:
- עוברים אל דף ההורדות של CIS Benchmarks.
- מחפשים את CIS Google Container-Optimized OS Benchmark.
- לוחצים על הורדת קובץ PDF.
רמות של המלצות אבטחה
ב-CIS מוגדרות רמות ההמלצות הבאות למערכת הפעלה שמותאמת לקונטיינרים.
רמה 1
ההמלצות ברמה הזו אמורות להיות רלוונטיות לרוב הסביבות. הרמה הזו כוללת המלצות כמו:
- האפשרות 'הקצאה אקראית של פריסת מרחב כתובות' מופעלת
- אי אפשר להשתמש ב-
/tmpכדי להריץ קבצים בינאריים להפעלה - השליחה של הפניית מנות מושבתת
רמה 2
ההמלצות ברמה הזו הן הרחבה של ההמלצות ברמה 1, והן יוצרות סביבת אבטחה מחמירה יותר. ההמלצות ברמה 2 לא בהכרח רלוונטיות לכל המקרים, כי יכול להיות שיידרשו שינויים באפליקציה. מומלץ להעריך את ההמלצות ברמה 2 לגבי הסביבה שלכם לפני שמיישמים אותן. הרמה הזו כוללת המלצות כמו:
- קיימים כללים בחומת האש לכל היציאות הפתוחות
- לא מתקבלים ניתובים אוטומטיים של ICMP ומודעות של נתבים
- זמן הקצוב לתפוגה של מעטפת המשתמש שמוגדר כברירת מחדל הוא 900 שניות או פחות
איך מערכת ההפעלה שמותאמת לקונטיינרים עומדת בדרישות של CIS Benchmarks
החל מMilestone 97, קובצי אימג' של מערכת הפעלה שמותאמת לקונטיינרים תואמים ל-CIS Level 1 כברירת מחדל, ומספקים אפשרות לתאימות ל-CIS Level 2. אנחנו מספקים גם סורק שבעזרתו אפשר לבדוק את המופע שלכם בהשוואה לרמות המומלצות של CIS.
ההגדרה של CIS שמגדירה את ההמלצות נמצאת בכתובת /usr/share/google/security/cis-compliance/cis_config.textproto. סורק CIS משתמש בהגדרה כדי לבדוק את סטטוס התאימות של המופע. התוצאות של כל הרצה של סורק התאימות לרמת CIS נכתבות אל /var/lib/google/cis_scanner_scan_result.textproto. הקובץ הזה מוחלף בכל הפעלה של סורק CIS. אם אחת מהסריקות ברמה 1 או ברמה 2 של CIS נכשלת, הקובץ cis_scanner_scan_result.textproto יכיל רשימה של כל הבדיקות שנכשלו.
בדיקת סטטוס התאימות של מופע
תמונות של מערכת הפעלה שמותאמת לקונטיינרים מספקות את שירותי systemd הבאים לבדיקת תאימות ולהגדרה:
- cis-level1.service: מופעל כברירת מחדל ומתחיל באתחול. כשהשירות מתחיל, הוא בודק אם המופע עומד בדרישות של CIS רמה 1.
- cis-level2.service: מושבת כברירת מחדל. השירות הזה מאפשר לכם להגדיר את המופע כך שיתאים לרמה 2 של CIS, ולבדוק את סטטוס התאימות לרמה 1 ולרמה 2.
בקטעים הבאים מוסבר איך בודקים את סטטוס התאימות של המופע ואיך מבצעים אוטומציה של תהליך הביקורת.
בדיקת סטטוס התאימות לרמה 1 של CIS
כדי לראות אם המופע שלכם תואם ל-CIS רמה 1, בודקים את הסטטוס של cis-level1.service:
systemctl status cis-level1
הפלט אמור להיראות כך:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 62 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
אם נמצאו בדיקות שלא עומדות בדרישות, אפשר לעיין במאמר הבדיקה של רמה 1 או רמה 2 של תאימות ל-CIS נכשלה.
הבדיקה cis-level1.service מתבצעת רק פעם אחת, כשמופעלת הדוגמה, כדי לוודא שהיא עומדת בדרישות של CIS רמה 1. כדי להגדיר בדיקה תקופתית של התאימות לתקן CIS, אפשר לעיין במאמר בנושא בדיקה תקופתית של סטטוס התאימות לתקן CIS.
הגדרה של תאימות לרמה 2 של CIS ובדיקת הסטטוס
אפשר להשתמש בשירות cis-level2 כדי להגדיר את המופע כך שיעמוד בדרישות של CIS רמה 2, ולבדוק את סטטוס התאימות לרמה 1 ולרמה 2. שירות systemd תומך בכל ההמלצות של CIS ברמה 2 למעט ההמלצות הבאות:
4.1.1.2 מוודאים שהרישום ביומן פועל (מזהה: logging-service-running)
ההמלצה הזו מושבתת כברירת מחדל, אבל אפשר להפעיל אותה מחדש על ידי מחיקת המזהה מרשימת ההשבתה שנמצאת בקובץ
/etc/cis-scanner/env_vars. הבדיקה הזו קיימת רק באבני דרך מגרסה 109 ואילך. בשלבים מוקדמים יותר, הפעלת הרישום בעצמכם תעזור לכם לעמוד בהמלצה הזו. אם מבטלים את ההסכמה, הפעלת השירותcis-level2מריצה סקריפט שמתחיל רישום ביומן של fluent-bit. אם אתם לא רוצים להשתמש ברישום ברירת המחדל שלנו או שאתם רוצים להשתמש ברישום משלכם, אתם צריכים להשאיר אתlogging-service-runningבמצב השבתה.
בהמלצות הבאות, cis-level2 מגדיר את המופע אבל לא בודק את סטטוס התאימות:
105 ומטה:
- 3.3.1.1 הקפדה על מדיניות ברירת מחדל של דחייה בחומת אש ב-IPv6
- 3.3.1.2 מוודאים שתנועת ה-loopback של IPv6 מוגדרת
- 3.3.1.3 מוודאים שמוגדרים חיבורים יוצאים וחיבורים קיימים של IPv6
- 3.3.1.4 מוודאים שקיימים כללים לחומת אש של IPv6 לכל היציאות הפתוחות
- 3.3.2.1 מוודאים שמדיניות ברירת המחדל של חומת האש היא דחייה
- 3.3.2.2 מוודאים שתנועת הנתונים ב-loopback מוגדרת
- 3.3.2.3 מוודאים שהחיבורים היוצאים והחיבורים שנוצרו מוגדרים
109 ואילך:
- 3.3.1.4 מוודאים שקיימים כללים לחומת אש של IPv6 לכל היציאות הפתוחות
השירות cis-level2 מושבת כברירת מחדל. כדי להפעיל את השירות, מריצים את הפקודה הבאה:
systemctl start cis-level2.service
כדי לבדוק אם המכונה שלכם הוגדרה בהצלחה ועומדת בהמלצות של CIS ברמה 2, צריך לבדוק את הסטטוס של cis-level2.service:
systemctl status cis-level2
הפלט אמור להיראות כך:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 112 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
אם הגדרת המופע נכשלת או אם נמצאו בדיקות לא תואמות, אפשר להיעזר במאמר פתרון בעיות.
שירות cis-level2 מגדיר את המופע ובודק את התאימות לתקן CIS Level 2 רק פעם אחת. כדי להגדיר בדיקה תקופתית של התאימות לתקן CIS, אפשר לעיין במאמר בנושא בדיקה תקופתית של סטטוס התאימות לתקן CIS.
בדיקה תקופתית של סטטוס התאימות לתקן CIS
תמונות של מערכת הפעלה שמותאמת לקונטיינרים כוללות את השירותים הבאים, שבודקים מעת לעת את התאימות ל-CIS:
- cis-compliance-scanner.service: בודק את סטטוס התאימות על סמך משתני סביבה שמוגדרים ב-
/etc/cis-scanner/env_vars. כברירת מחדל, השירות הזה בודק תאימות ל-CIS רמה 1 ומושבת. - cis-compliance-scanner.timer: מופעל
cis-compliance-scanner.serviceמעת לעת. תקופת ברירת המחדל היא פעם ביום.
הגדרת שירות הסורק
הקובץ cis-compliance-scanner.service אחראי לבדיקת הסטטוס של התאימות ל-CIS על סמך משתני הסביבה שמוגדרים ב-/etc/cis-scanner/env_vars. כברירת מחדל, השירות הזה בודק את התאימות לרמה 1 של CIS.
כדי לבדוק את התאימות לרמה 2 של CIS, מגדירים את משתנה הסביבה LEVEL ב-/etc/cis-scanner/env_vars לערך 2. קובץ /etc/cis-scanner/env_vars אמור להיראות כך:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="2"
# Extra options that can be passed to cis_scanner
# For valid options, see output of `cis_scanner -h`
EXTRA_OPTIONS=""
הגדרת הטיימר
כדי להגדיר סריקה תקופתית של תאימות, מתחילים את יחידת הלימוד cis-compliance-scanner.timer:
systemctl start cis-compliance-scanner.timer
כברירת מחדל, cis-compliance-scanner.timer מתחיל cis-compliance-scanner.service פעם ביום. כדי לשנות את תקופת הסריקה, מחליפים את הערך בשדה OnUnitActiveSec של יחידת cis-compliance-scanner.timer:
sudo mkdir /etc/systemd/system/cis-compliance-scanner.timer.d
sudo tee /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf <<EOF
[Unit]
Description=Run CIS Scanner once an hour
[Timer]
OnUnitActiveSec=1h
EOF
בדוגמה הזו, התקופה שמוגדרת לסורק היא פעם בשעה.
כדי להחיל את השינויים, צריך לטעון מחדש את יחידות systemd:
systemctl daemon-reload
ביטול הסכמה לבדיקות תאימות ספציפיות של CIS
ההמלצות של CIS ברמה 1 וברמה 2 מיועדות להיות רלוונטיות לרוב הסביבות. עם זאת ,יכול להיות שחלק מההמלצות לא רלוונטיות לסביבה הספציפית שלכם. כדי לבטל את ההסכמה לקבלת המלצות ספציפיות, משתמשים במשתנה הסביבה EXTRA_OPTIONS ב-/etc/cis-scanner/env_vars.
בדוגמה הבאה, קובץ env_vars לא נכלל בהמלצה etc-passwd-permissions:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="1"
# Extra options that can be passed to cis_scanner
# For valid options:`cis_scanner -h`
EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"
אוטומציה של הפעלה ובדיקה של סטטוס התאימות ל-CIS
אפשר להשתמש ב-cloud-init או במדיניות מערכת ההפעלה כדי להגדיר שהתהליך של בדיקת התאימות של המופעים יבוצע אוטומטית. בדוגמאות הבאות מוצגים כמה תרחישי שימוש בכל כלי:
- דוגמה 1: בדיקת התאימות לרמה 1 של CIS פעם ביום.
- דוגמה 2: בדיקת התאימות לרמה 1 של CIS פעם בשעה.
- דוגמה 3: בדיקת התאימות לרמה 2 של CIS פעם ביום.
- דוגמה 4: ביטול הסכמה לבדיקת תאימות ספציפית של CIS.
שימוש ב-cloud-init
לפני שמנסים את הדוגמאות הבאות, חשוב לוודא שאתם יודעים איך להגדיר מכונת COS באמצעות cloud-init. לשם כך, אפשר לעיין בהוראות שבמאמר שימוש ב-cloud-init עם פורמט הגדרות Cloud.
דוגמה 1
הגדרת הדוגמה הבאה מתחילה סריקה תקופתית ברמה 1 של CIS עם תקופת ברירת המחדל של פעם ביום.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
דוגמה 2
בדוגמה הבאה מוגדרת סריקה תקופתית ברמה 1 של CIS פעם בשעה.
#cloud-config # Override cis-compliance-scanner.timer with 1 hour frequency. write_files: - path: /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf permissions: 0600 owner: root content: | [Unit] Description=Run CIS Scanner once an hour [Timer] OnUnitActiveSec=1h runcmd: # Reload systemd units. - systemctl daemon-reload # Check the compliance status of the instance once an hour. - systemctl start cis-compliance-scanner.timer
דוגמה 3
בדוגמה הבאה מוגדרת סריקה תקופתית ברמה 2 של CIS עם תקופת ברירת המחדל של פעם ביום.
#cloud-config runcmd: # Configure the instance for CIS level 2. - systemctl start cis-level2.service # Change the scan level to CIS Level 2. - sed -i 's/^LEVEL=.*$/LEVEL="2"/' /etc/cis-scanner/env_vars # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
דוגמה 4
בדוגמה הבאה מוגדר שהסורק יפעל פעם ביום, ומוגדרת ביטול הסכמה להמלצה ספציפית של CIS.
#cloud-config runcmd: # Opt-out of the etc-passwd-permissions check. - sed -i 's/^EXTRA.*$/EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"/' /etc/cis-scanner/env_vars # Check the compliance of the instance once a day. - systemctl start cis-compliance-scanner.timer
שימוש במדיניות OS
אתם יכולים להשתמש במדיניות מערכת ההפעלה כדי להגדיר סריקה של CIS Benchmark. לפני שמתחילים, חשוב לוודא שאתם מכירים את מדיניות OS, כולל הנקודות הבאות:
בנוסף, צריך להוסיף את האפשרויות instanceFilter ו-rollout בדוגמאות הבאות לפריסה.
דוגמה 1
הגדרת הדוגמה הבאה מתחילה סריקה תקופתית ברמה 1 של CIS עם תקופת ברירת המחדל של פעם ביום.
דוגמה 2
בדוגמה הבאה מוגדרת סריקה תקופתית ברמה 1 של CIS פעם בשעה.
דוגמה 3
בדוגמה הבאה מוגדרת סריקה תקופתית ברמה 2 של CIS עם תקופת ברירת המחדל של פעם ביום.
דוגמה 4
בדוגמה הבאה מוגדר שהסורק יפעל פעם ביום, ומוגדרת ביטול הסכמה להמלצה ספציפית של CIS.
פתרון בעיות
בקטע הזה מוסבר איך לפתור בעיות שקשורות לסריקת CIS benchmark.
הגדרת מופע בהתאם להמלצות CIS רמה 2 נכשלת
שירות cis-level2 קודם מגדיר את המופע כך שיתאים להמלצות של CIS ברמה 2, ואז בודק את התאימות לרמה 1 ולרמה 2 של CIS. אם הגדרת המופע נכשלת, שירות cis-level2 יוצא עם הודעת השגיאה הבאה:
Job for cis-level2.service failed because the control process exited with error code.
See "systemctl status cis-level2.service" and "journalctl -xeu cis-level2.service" for details.
ביומני הרישום יופיעו ההמלצות שלא הוחלו על המופע, והן גרמו לכשל בשירות cis-level2 systemd.
בדיקת התאימות ל-CIS ברמה 1 או ברמה 2 נכשלת
תוצאות הסריקה של כל הפעלה של תאימות לרמת CIS נכתבות ב-/var/lib/google/cis_scanner_scan_result.textproto. אם אחת מהבדיקות ברמה 1 או ברמה 2 של CIS נכשלת, קובץ ה-textproto יכיל את רשימת כל הבדיקות שנכשלו, כמו בדוגמה הבאה:
cat /var/lib/google/cis_scanner_scan_result.textproto
# Output
start_time: {
seconds: 1648241700
nanos: 763152171
}
end_time: {
seconds: 1648241700
nanos: 812992527
}
scanner_version: "1.1.4.3"
benchmark_version: "1.0.0"
status: {
status: SUCCEEDED
}
non_compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {
non_compliant_files: {
path: "/etc/passwd"
reason: "File permission is 0664, expected the following bits to be set: 0444 and the following bits to be clear: 0133"
}
}
}
compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {}
}
כדי לטפל בבדיקות שנכשלו, משתמשים ב-CIS Benchmark ופועלים לפי השלבים בקטע Remediation של הבדיקה שנכשלה כדי להפוך את המופע לתואם. כדי לגלות איזו המלצה מתאימה לבדיקה שנכשלה ב-CIS Benchmark, מחפשים את מזהה non_compliant_benchmark's בקובץ ההגדרות של סורק CIS שנמצא במיקום /usr/share/google/security/cis-compliance/cis_config.textproto.