guestfs-security - מקוון בענן

זוהי הפקודה guestfs-security שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו בחינם כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

תָכְנִית:

שֵׁם


guestfs-security - אבטחת libguestfs

תיאור


דף מדריך זה דן בהשלכות האבטחה של השימוש ב-libguestfs, במיוחד עם
אורחים לא מהימנים או זדוניים או תמונות דיסק.

אבטחה OF הַרכָּבָה מערכות קבצים
לעולם אל תעלה מערכת קבצים אורח לא מהימנה ישירות על ליבת המארח שלך (למשל.
באמצעות loopback או kpartx).

כאשר אתה מעלה מערכת קבצים, ניתן להעלות טעויות במערכת הקבצים של הליבה (VFS).
ניצול על ידי תוקפים היוצרים מערכת קבצים זדונית. מעללים אלה הם חמורים מאוד עבור
שתי סיבות. ראשית יש הרבה מאוד מנהלי התקנים של מערכת הקבצים בקרנל, ורבים מהם
הם נמצאים בשימוש נדיר ולא הרבה תשומת לב מפתחים ניתנה לקוד.
מרחב המשתמש של לינוקס עוזר לקרקרים פוטנציאליים על ידי זיהוי סוג מערכת הקבצים ו
בחירה אוטומטית במנהל התקן VFS הנכון, גם אם סוג מערכת הקבצים הזה לא צפוי.
שנית, ניצול ברמת הקרנל הוא כמו ניצול שורש מקומי (גרוע יותר במובנים מסוימים), נתינה
גישה מיידית ומוחלטת למערכת עד לרמת החומרה.

ניצולים אלה יכולים להיות נוכחים בקרנל במשך זמן רב מאוד
(https://lwn.net/Articles/538898/).

Libguestfs מספקת גישה שכבתית להגנה עליך מפני ניצולים:

מערכת קבצים לא מהימנה
--------------------------------------
ליבת מכשיר
--------------------------------------
תהליך qemu פועל כלא שורש
--------------------------------------
sVirt [אם אתה משתמש ב-libvirt + SELinux]
--------------------------------------
גרעין מארח

אנו מפעילים ליבת לינוקס בתוך מכונה וירטואלית של qemu, בדרך כלל פועלת כמשתמש שאינו שורש.
התוקף יצטרך לכתוב מערכת קבצים שתחילה ניצלה את הליבה, ולאחר מכן
ניצלו או וירטואליזציה של qemu (למשל מנהל התקן qemu פגום) או את ה-libguestfs
פרוטוקול, ולבסוף כדי להיות רציני כמו ניצול ליבת המארח שהוא יצטרך
להסלים את ההרשאות שלו לשורש. בנוסף אם אתה משתמש ב-libvirt back end ו
SELinux, sVirt משמש כדי להגביל את תהליך ה-qemu. הסלמה רב-שלבית זו, בוצעה
לפי פיסת נתונים סטטית, נחשב קשה מאוד לביצוע, למרות שלעולם איננו אומרים
'אף פעם' בנושאי אבטחה.

מתקשרים יכולים גם לצמצם את משטח ההתקפה על ידי כפיית סוג מערכת הקבצים בעת ההרכבה
(השתמש ב-"guestfs_mount_vfs").

כללי אבטחה שיקולים
היזהר עם כל קבצים או נתונים שאתה מוריד מאורח (ב"הורדה" אנו מתכוונים
לא רק הפקודה "guestfs_download" אלא כל פקודה שקוראת קבצים, שמות קבצים,
ספריות או כל דבר אחר מתמונת דיסק). תוקף יכול לתמרן את הנתונים
להטעות את התוכנית שלך לעשות את הדבר הלא נכון. שקול מקרים כגון:

· הנתונים (הקובץ וכו') אינם קיימים

· להיות נוכח אך ריק

· להיות הרבה יותר גדול מהרגיל

· המכיל נתונים שרירותיים של 8 סיביות

· להיות בקידוד תו בלתי צפוי

· המכיל הומגליפים.

נוהל אבטחה
הפרוטוקול תוכנן להיות מאובטח, בהתבסס על RFC 4506 (XDR) עם חלק עליון מוגדר
גודל ההודעה. עם זאת תוכנית המשתמשת ב-libguestfs חייבת גם לדאוג - למשל
אתה יכול לכתוב תוכנית שמורידה קובץ בינארי מתמונת דיסק ומבצעת אותו באופן מקומי,
ושום כמות של אבטחת פרוטוקול לא תציל אותך מההשלכות.

בדיקה אבטחה
חלקים מ-API לבדיקה (ראה "INSPECTION") מחזירים מחרוזות לא מהימנות ישירות מה-
guest, ואלה יכולים להכיל כל נתוני 8 סיביות. המתקשרים צריכים להיזהר להימלט מאלה
לפני הדפסתם לקובץ מובנה (לדוגמה, השתמש ב-HTML escaping אם אתה יוצר א
עמוד אינטרנט).

תצורת האורח עשויה להשתנות בדרכים חריגות על ידי מנהל הווירטואלי
מכונה, ועשויים שלא לשקף את המציאות (במיוחד עבור לא מהימנים או זדוניים פעילים
אורחים). לדוגמה, אנו מנתחים את שם המארח מקובצי תצורה כמו
/etc/sysconfig/network שאנו מוצאים באורח, אך מנהל האורח יכול בקלות
לתפעל את הקבצים האלה כדי לספק את שם המארח השגוי.

ממשק API לבדיקה מנתח את תצורת האורח באמצעות שתי ספריות חיצוניות: Augeas (Linux
תצורה) ו-hivex (רישום Windows). שניהם נועדו להיות חזקים בפנים
של נתונים זדוניים, למרות שהתקפות מניעת שירות עדיין אפשריות, למשל עם
קבצי תצורה גדולים מדי.

רץ לא אמון GUEST פקודות
היזהר מאוד בהפעלת פקודות מהאורח. על ידי הפעלת פקודה ב-
guest, אתה נותן זמן CPU לקובץ בינארי שאינך שולט בו, תחת אותו משתמש
חשבון בתור הספרייה, אם כי עטופה בווירטואליזציה של qemu. מידע נוסף ו
ניתן למצוא חלופות בסעיף "הפעלת פקודות".

CVE-2010-3851
https://bugzilla.redhat.com/642934

באג אבטחה זה נוגע לאיתור פורמט הדיסק האוטומטי ש-qemu עושה בדיסק
תמונות.

תמונת דיסק גולמית היא רק הבתים הגולמיים, אין כותרת. תמונות דיסק אחרות כמו qcow2
מכיל כותרת מיוחדת. Qemu מתמודד עם זה על ידי חיפוש אחד מהכותרות הידועות,
ואם אף אחד לא נמצא אז בהנחה שתמונת הדיסק חייבת להיות גולמית.

זה מאפשר לאורח שקיבל תמונת דיסק גולמית לכתוב כותרת אחרת. בְּ
האתחול הבא (או כאשר תמונת הדיסק נגישה על ידי libguestfs) qemu יבצע זיהוי אוטומטי
ולחשוב שפורמט תמונת הדיסק היה, נניח, qcow2 בהתבסס על הכותרת שנכתבה על ידי האורח.

זו כשלעצמה לא תהיה בעיה, אבל qcow2 מציעה תכונות רבות, אחת מהן היא
אפשר לתמונת דיסק להתייחס לתמונה אחרת (המכונה "דיסק גיבוי"). זה עושה זאת על ידי
הנחת הנתיב לדיסק הגיבוי לכותרת qcow2. נתיב זה אינו מאומת
ויכול להצביע על כל קובץ מארח (למשל "/ etc / passwdלאחר מכן, הדיסק הגיבוי נחשף
דרך "חורים" בתמונת הדיסק של qcow2, שהיא כמובן לגמרי בשליטה
של התוקף.

ב-libguestfs זה די קשה לניצול מלבד בשתי נסיבות:

1. הפעלת את הרשת או פתחת את הדיסק במצב כתיבה.

2. אתה גם מפעיל קוד לא מהימן מהאורח (ראה "הפעלת פקודות").

הדרך להימנע מכך היא לציין את פורמט הדיסק הצפוי בעת הוספת דיסקים (ה
אפשרות "פורמט" אופציונלית ל-"guestfs_add_drive_opts"). אתה תמיד צריך לעשות זאת אם
דיסק הוא פורמט גולמי, וזה רעיון טוב גם למקרים אחרים. (ראה גם "תמונת דיסק
פורמטים").

עבור דיסקים שנוספו מ-libvirt באמצעות קריאות כמו "guestfs_add_domain", הפורמט מובא
מ-libvirt ועבר דרך.

עבור כלי libguestfs, השתמש ב- --פוּרמָט פרמטר שורת הפקודה לפי הצורך.

CVE-2011-4127
https://bugzilla.redhat.com/752375

זהו באג בקרנל שאיפשר לאורחים להחליף חלקים מהכוננים של המארח
שבדרך כלל לא אמורה להיות להם גישה אליו.

זה מספיק לעדכן את libguestfs לכל גרסה ≥ 1.16 המכילה שינוי
מקל על הבעיה.

CVE-2012-2690
https://bugzilla.redhat.com/831117

גרסאות ישנות של virt-edit ושל פקודת guestfish "עריכה" יצרו קובץ חדש
מכיל את השינויים אך לא הגדיר את ההרשאות וכו' של הקובץ החדש כך שיתאימו ל
ישן. התוצאה של זה הייתה שאם ערכת קובץ רגיש לאבטחה כגון
/ וכו '/ צל אז הוא יישאר קריא בעולם לאחר העריכה.

זה מספיק לעדכן libguestfs לכל גרסה ≥ 1.16.

CVE-2013-2124
https://bugzilla.redhat.com/968306

באג אבטחה זה היה פגם בבדיקה שבה אורח לא מהימן משתמש במיוחד
קובץ בעל מבנה במערכת ההפעלה האורחת עלול לגרום ל-double free בספריית C (הכחשה של
שֵׁרוּת).

מספיק לעדכן את libguestfs לגרסה שאינה פגיעה: libguestfs ≥
1.20.8, ≥ 1.22.2 או ≥ 1.23.2.

CVE-2013-4419
https://bugzilla.redhat.com/1016960

בעת שימוש דג אורח(1) --מְרוּחָק או דג אורח --להקשיב אפשרויות, דג אורח היה יוצר
שקע במיקום ידוע (/tmp/.guestfish-$UID/socket-$PID).

המיקום חייב להיות ידוע כדי ששני הקצוות יתקשרו. אולם לא
נעשתה בדיקה שהספרייה המכילה (/tmp/.guestfish-$UID) בבעלות ה
מִשׁתַמֵשׁ. כך משתמש אחר יכול ליצור את הספרייה הזו ועלול לחטוף שקעים שבבעלותם
על ידי לקוח או שרת guestfish של משתמש אחר.

מספיק לעדכן את libguestfs לגרסה שאינה פגיעה: libguestfs ≥
1.20.12, ≥ 1.22.7 או ≥ 1.24.

הכחשה of שרות מתי בודק דיסק תמונות עם מושחת btrfs כרכים
ניתן היה לקרוס את libguestfs (ותכניות המשתמשות ב-libguestfs כספרייה) על ידי
הצגת תמונת דיסק המכילה אמצעי אחסון btrfs פגום.

הדבר נגרם כתוצאה מהפניית מצביע NULL שגרמה למניעת שירות, ואינו
נחשב לניצול עוד יותר.

ראה commit d70ceb4cbea165c960710576efac5a5716055486 לתיקון. תיקון זה כלול ב
ענפים יציבים של libguestfs ≥ 1.26.0, ≥ 1.24.6 ו≥ 1.22.8, וגם ב-RHEL ≥ 7.0.
גרסאות קודמות של libguestfs אינן פגיעות.

CVE-2014-0191
Libguestfs השתמש בעבר בממשקי API לא בטוחים של libxml2 לניתוח libvirt XML. ממשקי API אלה
ברירת המחדל היא לאפשר חיבורי רשת כאשר היו מסמכי XML מסוימים
הוצג. באמצעות מסמך XML פגום ניתן היה גם למצות את כל ה-CPU, הזיכרון
או מתארי קבצים במכונה.

מכיוון שה- libvirt XML מגיע ממקור מהימן (דמון libvirt), לא חושבים על כך
שאפשר היה לנצל את זה.

זה תוקן ב-libguestfs ≥ 1.27.9 והתיקון הועבר לגרסאות יציבות ≥
1.26.2, ≥ 1.24.9, ≥ 1.22.10 ו-≥ 1.20.13.

הלם קרב (לַחֲבוֹט CVE-2014-6271)
באג הבאש הזה משפיע בעקיפין על libguestfs. למידע נוסף ראה:
https://www.redhat.com/archives/libguestfs/2014-September/msg00252.html

CVE-2014-8484
CVE-2014-8485
שני הבאגים האלה ב-binutils משפיעים על ה-GNU מחרוזות(1) תוכנית, ובכך
ממשקי API של "guestfs_strings" ו-"guestfs_strings_e" ב-libguestfs. הפעלת מיתרים על א
קובץ לא מהימן עלול לגרום לביצוע קוד שרירותי (מוגבל ל-libguestfs
מַכשִׁיר).

ב-libguestfs ≥ 1.29.5 ו-≥ 1.28.3, libguestfs משתמש ב"מחרוזות" -a אפשרות להימנע מ-BFD
ניתוח על הקובץ.

CVE-2015-5745
https://bugzilla.redhat.com/show_bug.cgi?id=1251157

זו לא נקודת תורפה ב-libguestfs, אלא בגלל שאנחנו תמיד נותנים יציאה וירטיו-טורית
לכל אורח (מכיוון שכך מתרחשת תקשורת אורח-מארח), הסלמה מה-
התאמה לתהליך ה-qemu המארח אפשרי. זה יכול להשפיע עליך אם:

· תוכנית libguestfs שלך מריצה תוכניות לא מהימנות מחוץ לאורח (באמצעות "guestfs_sh"
וכו'), או

· נמצא ניצול נוסף (לדוגמה) בקוד מערכת הקבצים של הליבה שאיפשר א
מערכת קבצים פגומה כדי להשתלט על המכשיר.

אם אתה משתמש ב-sVirt כדי להגביל את ה-qemu, זה יסכל כמה התקפות.

הרשאות of .ssh ו .ssh/autorized_keys
https://bugzilla.redhat.com/1260778

הכלים וירט-התאמה אישית(1), virt-sysprep(1) ו בונה וירט(1) יש --ssh-inject
אפשרות להזרקת מפתח SSH לתמונות דיסק של מכונות וירטואליות. הם עשויים ליצור א
~user/.ssh מדריך ו ~user/.ssh/authorized_keys קובץ באורח כדי לעשות זאת.

ב-libguestfs < 1.31.5 ו-libguestfs < 1.30.2, הספרייה והקובץ החדשים יקבלו מצב
0755 ומצב 0644 בהתאמה. עם זאת הרשאות אלה (במיוחד עבור ~user/.ssh)
רחבים יותר מההרשאות שבהן משתמש OpenSSH. ב-libguestfs הנוכחי, הספרייה
וקובץ נוצרים עם מצב 0700 ומצב 0600.

השתמש ב-guestfs-security באינטרנט באמצעות שירותי onworks.net



התוכניות המקוונות האחרונות של לינוקס ו-Windows