מי יכול לפרש פסקה על פרצה בלינוקס ? - לינוקס, Mac ומערכות הפעלה אחרות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מי יכול לפרש פסקה על פרצה בלינוקס ?


alex.turovsky

Recommended Posts

בקצת נפנופי ידיים (כי אני לא מתעסק באבטחה)

יש פונקציה ב header,(קובץ ה .h) בקרנל של , בסגנון

int foo();

בלי מימוש, כך שהפונקציה מצביעה לnull, כך שכשקוראים לה, מונה ההרצה (מה שאחראי להגיד מה המיקוד של חתיכת הקוד שרצה), מצביע על null, ומנסה להריץ את הקוד שנמצא שם.

לטענת הכותב, קל להשתמש בזה כדי להריץ מה שבא לך, באיזו יוזר שאתה רוצה (כולל כמובן root).

תוכל בבקשה לקשר למקור? תודה!

קישור לתוכן
שתף באתרים אחרים

אכן באג שהתגלה לאחרונה וניתן לממש בעזרתו מה שנקרא local privilege escalation

אני מניח שאלכס יודע לחפש בגוגל

זה בעצם ניצול הפריבילגיות של הקרנל במקרה הספציפי להרצת אי זה קוד זדוני אשר ירצו אנשים שינסו לנצל את החור הזה

בהחלט באג הרסני בפתח, אבל יתוקן מהר.

קישור לתוכן
שתף באתרים אחרים

בקצת נפנופי ידיים (כי אני לא מתעסק באבטחה)

יש פונקציה ב header,(קובץ ה .h) בקרנל של לינוקס, בסגנון

int foo();

בלי מימוש, כך שהפונקציה מצביעה לnull, כך שכשקוראים לה, מונה ההרצה (מה שאחראי להגיד מה המיקוד של חתיכת הקוד שרצה), מצביע על null, ומנסה להריץ את הקוד שנמצא שם.

לטענת הכותב, קל להשתמש בזה כדי להריץ מה שבא לך, באיזו יוזר שאתה רוצה (כולל כמובן root).

תוכל בבקשה לקשר למקור? תודה!

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-2692

קישור לתוכן
שתף באתרים אחרים

וקצת יותר לעומק, לגבי דרך הפעולה של ניצול החולשה-

מה שקרה כאן הוא באג בקרנל שמאפשר ליוזר להגיע לרמת הרשאות גבוהה יותר ממה שיש לו (=local privilege escalation), מה שדורש מראש יוזר במערכת בשביל לנצל את הפרצה. מה שכן, בשילוב של באגים ידועים באפליקציות web למינהן, אפשר להגיע ליוזר לוקאלי, ומשם לנצל את הפרצה.

הבאג בעצם גורם לקרנל לעשות null pointer dereference ובעצם לנסות להריץ קוד מpage 0 בזכרון.

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

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

במקרה זה, היוזר צריך לגרום לכך שהקרנל יבצע sendpage על socket מסויים. (פשוט נורא, sendfile עושה את זה לדוגמא, יש עוד מלא פונקציות כאלה)

קישור לתוכן
שתף באתרים אחרים

עוד משהו, הפרצה לא פגעה כלל ב-Linuxים שאין בהם משתמש רגיל וששינו בהם את המשתמשים הבסיסיים ורמת ההרשאות ויצרו BASH נוסף כמו SPLAT שזה Secure Platform שיש כסביבה לחומות אש וappliances מבית צ'ק פוינט.

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

קישור לתוכן
שתף באתרים אחרים

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

במקום root יש לו expert, אבל עם כמעט אותן הראשות.

בכל מקרה גם SELINUX, וApparmor של נובל מקשיחים מיפוי ידני של דפי .

null pointer dereference בד"כ גורם לקריסת התוכנה, כל מי שקימפל משהו בשפה מנוהלת מכיר את השגיאה "xyz cannot be null", למרות שגם שפות מנוהלות ממש לא חסינות בעניין זה.

null pointer dereference קורה כשמשתנה מסויים מצביע על כתובת ריקה, בתכנות נכון תמיד מוודאים שהמשתנה לא מצביע על כתובת ריקה(ערך 0=! כתובת ריקה) או כתובת זכרון לא תקנית.

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

קישור לתוכן
שתף באתרים אחרים

אני יכול לצרף לך את החלקים הרלוונטים של הexploit אם זה יעזור לך (אבל זה דורש היכרות לא רעה עם C)

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

בכל מקרה, הנה כמה לינקים טובים שיעזרו לך להבין את מהות הבעיה יותר לעומק:

http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html

http://kbase.redhat.com/faq/docs/DOC-18042

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

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

http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html

בשורה התחתונה, יש פה ניצול של שתי בעיות, אחת היא הבאג שגורם לקרנל לגשת לpage0, השניה היא שיוזר יכול למפות ולכתוב אל האזור הזה, ע"י טעינה של ספריה לתוכנה שרצה עם setuid (במקרה שלנו, pulseaudio).

בנוגע לsplat, אני לא מכיר את הפלטפורמה לעומק, ואם הבאג הספציפי קיים בה או לא. יש הרבה מקומות בהם אתה יכול למצוא רשימה של הפצות שפגיעות לבעיה הזו.

קישור לתוכן
שתף באתרים אחרים

אני יכול לצרף לך את החלקים הרלוונטים של הexploit אם זה יעזור לך (אבל זה דורש היכרות לא רעה עם C)

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

בכל מקרה, הנה כמה לינקים טובים שיעזרו לך להבין את מהות הבעיה יותר לעומק:

http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html

http://kbase.redhat.com/faq/docs/DOC-18042

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

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

http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html

בשורה התחתונה, יש פה ניצול של שתי בעיות, אחת היא הבאג שגורם לקרנל לגשת לpage0, השניה היא שיוזר יכול למפות ולכתוב אל האזור הזה, ע"י טעינה של ספריה לתוכנה שרצה עם setuid (במקרה שלנו, pulseaudio).

בנוגע לsplat, אני לא מכיר את הפלטפורמה לעומק, ואם הבאג הספציפי קיים בה או לא. יש הרבה מקומות בהם אתה יכול למצוא רשימה של הפצות שפגיעות לבעיה הזו.

גישה לShell

הרשאות לmmap

במקרה ויש SELinux או Apparmor או כל דבר דומה, הרשאות לבטל אותם, או פרצה לבטל אותם.

זאת לא פרצת ברמה שאפשר למשל לשלוח פאקט עם Error code לא מתאים, או תוכן כלשהו שמאפשר לך להריץ קוד זדוני.

בסופו של דבר אתה צריך גישה פיזית לשרת ויוזר שעובד על השרת, לזה קוראים הרשאות דיי גבוהות.

קישור לתוכן
שתף באתרים אחרים

זאת לא פרצת שמאפשר לך להריץ קוד זדוני מרחוק, ולכן היא מקוטלגת כlocal privilege escalation.

ואם כבר יש לך shell, ברוב כמעט מוחלט של הפעמים אתה תוכל לעשות mmap.

וההערה על SELinux וחבורתו לא רלוונטית, כי הexploit שקיים משתמש בפרצה ידועה בSELinux.

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

קישור לתוכן
שתף באתרים אחרים

ה-exploit הקיים משתמש בכמה פרצות, שוב SElinux זה סוכן ההקשחה הנפוץ ביותר ללינוקס, אבל הוא לא היחידי.

וכרגע אף אחד לא קיטלג את זה בתור פרצה קריטית, LPE כמעט אף פעם לא מקוטלג ככה, SElinux זה נחמד וטוב, אבל יש מספיק פתרונות שלא מאפשרים גם לROOT להריץ שום פקודה ללא אישור.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...