לדלג לתוכן

טבעות ההרשאה של המעבד מוסברות - CPU Rings ו-Privilege Levels

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

מה זה בעצם טבעת הרשאה

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

הטבעת הכי מהימנה - מקום הקרנל, Ring 0

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

הטבעת של תוכניות המשתמש - Ring 3

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

מה עם הטבעות באמצע

בין שתי הטבעות הקיצוניות האלה קיימות גם Ring 1 ו-Ring 2, שנועדו במקור לרמות הרשאה ביניים - למשל למנהלי התקנים שצריכים יותר גישה מתוכנית משתמש רגילה אבל פחות מהקרנל עצמו. בפועל, מערכות ההפעלה הנפוצות היום כמעט ולא משתמשות בהן, ומסתפקות בהפרדה הפשוטה יותר בין Ring 0 ל-Ring 3. חלק מטכנולוגיות הווירטואליזציה המודרניות דווקא כן עושות שימוש ברעיון דומה, כדי להפריד בין הקרנל של מערכת ההפעלה האורחת לבין ה-Hypervisor שמנהל אותה.

למה ההפרדה הזאת קיימת בכלל

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

איך תוכנית משתמש בכל זאת מקבלת שירות מהקרנל

כמובן שתוכניות משתמש כן צריכות לפעמים גישה למשאבים שרק הקרנל שולט בהם - לפתוח קובץ, לשלוח מידע ברשת, להקצות זיכרון. בשביל זה קיים מנגנון שנקרא syscall, או קריאת מערכת. במקום לגשת ישירות לחומרה, התוכנית "מבקשת" מהקרנל לבצע את הפעולה בשמה, דרך מעבר מבוקר ומוגדר היטב בין הטבעות. המעבד עובר באופן זמני ומבוקר ל-Ring 0, מריץ את הקוד המהימן של הקרנל שמבצע את הפעולה בפועל, ואז חוזר בחזרה ל-Ring 3 עם התוצאה. כל בקשה כזו עוברת בדיקות של הקרנל בדרך, כדי לוודא שהיא לגיטימית.

הקשר לפרצות אבטחה

בדיוק כאן נכנסת אחת המשפחות המסוכנות ביותר של פרצות אבטחה - הסלמת הרשאות, או Privilege Escalation. מדובר במצב שבו תוקף מצליח לגרום לקוד שאמור לרוץ ב-Ring 3 לקבל בפועל הרשאות של Ring 0, בדרך כלל דרך ניצול חולשה בקרנל עצמו או במנגנון ה-syscall. ברגע שהתוקף "קופץ" בין הטבעות בצורה לא מורשית, הוא בעצם עוקף את כל ההגנות שההפרדה הזו נועדה לספק, ומקבל שליטה כמעט מלאה על המערכת. זו הסיבה שקרנל מערכת הפעלה נחשב לאחד המקומות הרגישים ביותר לחיפוש חולשות בעולם מחקר האבטחה.

איפה לומדים את זה לעומק

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

קורס ליבת המחשב

לסיכום

מעבדים מודרניים מחלקים את הקוד שרץ עליהם לרמות הרשאה שונות, כשהעיקריות שבהן הן Ring 0 עבור הקרנל ו-Ring 3 עבור תוכניות משתמש. המעבר המבוקר בין הטבעות, דרך syscall, הוא מה שמאפשר לתוכניות רגילות לקבל שירותים מהמערכת בלי לקבל שליטה מלאה עליה. וכשההפרדה הזו נשברת, בין אם דרך באג או ניצול מכוון, זו בדיוק הנקודה שבה נולדות חלק מהפרצות החמורות ביותר שקיימות.

יש לכם שאלות על איך בדיוק כל זה מתממש בפועל? בואו לדבר על זה בקהילה.

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