גוגל מפתחת חלקים מאנדרואיד ב-Rust כדי לשפר את האבטחה

click fraud protection

גוגל כותבת ומשכתבת חלקים מאנדרואיד ב-Rust כדי לשפר את האבטחה של מערכת ההפעלה כולה, לעומת C ו-C++. המשך לקרוא כדי לדעת יותר!

אנדרואיד כפתרון מערכת הפעלה שלם כולל הרבה חלקים נעים. בגדול מאוד, החלקים האלה הם המערכת האקולוגית של האפליקציה ולאחר מכן מערכת ההפעלה עצמה. כמפתח, שפת התכנות הרצויה שלך משתנה בהתאם לחלק של אנדרואיד עליו אתה עובד. עבור מפתחי אפליקציות, Java ו-Kotlin הן אפשרויות פופולריות. עבור מפתחים העובדים על מערכת ההפעלה והרמות הנמוכות בתוכה, C ו-C++ היו אפשרויות פופולריות עד כה. כיום, גוגל מוסיפה אפשרות שלישית למפתחי מערכת ההפעלה, מכיוון שפרויקט הקוד הפתוח של Android תומך כעת בשפת התכנות Rust לפיתוח מערכת ההפעלה עצמה.

מגבלות של C ו-C++

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

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

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

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

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

כאן נכנס לתמונה המעבר לשפה בטוחה בזיכרון כמו Rust.

חלודה ויתרונותיה

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

אמנם ל-Rust יש את היתרונות שלה, אבל זה לא אפשרי להחליף את כל מערכת ההפעלה של אנדרואיד ל-Rust בן לילה. וזה אולי אפילו לא נחוץ, מכיוון שרוב באגי הזיכרון של אנדרואיד מתרחשים בקוד חדש או ששונה לאחרונה, כאשר כ-50% בני פחות משנה. גוגל מאמינה שמאמצי השפה הבטוחים בזיכרון שלה מתמקדים בצורה הטובה ביותר בפיתוחים חדשים במקום בשכתוב קוד C ו-C++ בוגר.

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

מה המשמעות של המעבר ל-Rust עבור אנדרואיד?

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

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

ממה שאנו יכולים לראות, גוגל כבר משתמשת ב- Rust בכמה מקומות. שכתוב מחסנית ה-Bluetooth החדשה של אנדרואיד בשם הקוד "גאבלדורשה" נכתב ב- Rust. העבודה החלה על Gabeldorsche בסביבות הזמן של אנדרואיד 11 אך עדיין לא בשימוש. של אנדרואיד מאגר מפתחות 2.0 המודול כתוב ב-Rust, וכך גם החלק של מרחב המשתמש ב-Binder, מנהל התקן ה-IPC של אנדרואיד. אמנם לא קשור לאנדרואיד, ורוד פוקסיהחדש netstack נכתב גם ב- Rust.

עבור מפתחי אפליקציות, המתג לא משנה דבר לגבי האופן שבו אתה, כמפתח אפליקציות, כותב אפליקציות או כיצד פועלים ממשקי API של המסגרת. מתג זה משפיע רק על אופן הכתיבה של מערכת ההפעלה. לדברי חבר בצוות ה-Android Developer Relations, גוגל גם לא מתכננת לשחרר Rust NDK כרגע. השפות הנתמכות לפיתוח אפליקציות ימשיכו להיות Kotlin, Java, C ו-C++.