בדף הזה מוסבר על באגים וכלים שקשורים לבטיחות הזיכרון.
חוסר בטיחות בזיכרון
באגים שקשורים לבטיחות הזיכרון, שגיאות בטיפול בזיכרון בשפות תכנות Native, הם הבעיה הנפוצה ביותר בבסיסי הקוד של Android. הן אחראיות ליותר מ-60% מנקודות החולשה באבטחה ברמת סיכון גבוהה, ולקריסות שגלויות למיליוני משתמשים.
איור 1. באגים שקשורים לבטיחות הזיכרון וההשפעה השלילית שלהם על האיכות, האבטחה והעלויות.
באגים שקשורים לבטיחות הזיכרון משפיעים לרעה על האיכות והיציבות, והם אחראים לחלק ניכר מהקריסות שנצפות במכשירי משתמשי הקצה. לכן, צפיפות גבוהה של באגים שקשורים לבטיחות הזיכרון קשורה ישירות לחוויית משתמש גרועה.
קוד Native, שנכתב בשפות לא בטוחות בזיכרון כמו C, C++ ו-Assembly, מייצג יותר מ-70% מהקוד של פלטפורמת Android, וקיים בכ-50% מהאפליקציות בחנות Google Play.
בהתחשב במורכבות הגוברת של הקוד, אם לא מטפלים בבאגים של בטיחות הזיכרון, הם יתרבו עם הזמן. לכן, כדי להבטיח את ההצלחה שלנו בטווח הארוך, חשוב לנו לספק לסביבה העסקית שלנו כלים וטכנולוגיות שיכולים לזהות באגים כאלה ולצמצם את ההשפעה שלהם.
בשנים האחרונות אנחנו עובדים בשיתוף פעולה הדוק עם שותפי החומרה שלנו כדי לפתח טכנולוגיות חומרה כמו תיוג זיכרון של Arm, והטמענו את Rust בבסיס הקוד של Android.
הטכנולוגיות האלה יאיצו את התהליך שלנו להשגת בטיחות זיכרון ויעזרו לתעשיית התוכנה הרחבה יותר לטפל בתחום בעייתי מרכזי.
באגים שקשורים לבטיחות הזיכרון משפיעים לרעה על האיכות
באגים סמויים שקשורים לבטיחות הזיכרון עלולים לגרום לתוצאות לא דטרמיניסטיות, בהתאם למצב המערכת. ההתנהגות הבלתי צפויה הזו מובילה לקריסות ולתסכול בקרב המשתמשים שלנו.
אנחנו עוקבים מדי יום אחרי מיליוני קריסות מקוריות במכשירי משתמשי קצה, ומאז שהשקנו את GWP-ASan, גילינו שרוב הקריסות האלה נגרמות מבאגים שקשורים לבטיחות הזיכרון.
נקודת הנתונים הזו מאמתת את המתאם בין האיכות לבין הצפיפות של באגים שקשורים לבטיחות הזיכרון, והיא תואמת למה שנצפה על ידי הקולגות שלנו ב-Chrome (ראו את רשימת הבאגים הדחופים של GWP-ASan ב-Chrome).
באגים שקשורים לבטיחות הזיכרון משפיעים לרעה על האבטחה
באגים שקשורים לבטיחות הזיכרון היו תמיד הגורם העיקרי לפרצות אבטחה ב-Android, עוד מהגרסה הראשונה של Android.
איור 2. באגים שקשורים לבטיחות הזיכרון תורמים לנקודות חולשה ב-Android.
למרות שמעודד לדעת שזו לא רק בעיה ב-Android (אפשר לעיין בנתונים של Chrome ושל Microsoft), אנחנו צריכים לעשות יותר כדי לשמור על בטיחות המשתמשים שלנו.
צוות Project Zero של Google עוקב אחרי ניצול לרעה של נקודות חולשה למתקפות אפס ימים שנעשה בהן שימוש במתקפות אמיתיות נגד משתמשים. אלה לא באגים היפותטיים, אלא ניצול לרעה שנעשה בו שימוש פעיל במתקפות נגד משתמשים. באגים שקשורים לבטיחות הזיכרון (השחתת זיכרון ו-use-after-free) מהווים את הרוב המכריע.
באגים שקשורים לבטיחות הזיכרון מגדילים את העלויות
עדכון המכשירים בתיקוני אבטחה עוזר לנו לשמור על בטיחות המשתמשים, אבל יש לכך עלות כספית לסביבת הפעולה שלנו.
הצפיפות הגבוהה של באגים שקשורים לבטיחות הזיכרון בקוד ספקים ברמה נמוכה, שלעתים קרובות כולל שינויים בהתאמה אישית, מגדילה באופן משמעותי את העלויות של התיקון והבדיקות. עם זאת, אם מזהים את הבאגים האלה בשלב מוקדם במחזור הפיתוח, אפשר להקטין את העלויות האלה.
מחקרים מראים שזיהוי באגים בשלב מוקדם יותר יכול להוזיל את העלויות עד פי שישה. עם זאת, בהתחשב במורכבות של המערכת האקולוגית שלנו, במספר הממוצע של בסיסי קוד שספק מתחזק ובמורכבות הגוברת של התוכנה, החיסכון יכול להיות גבוה יותר.
בטיחות הזיכרון
Android 12 ואילך כולל שינויים מערכתיים שמטרתם לצמצם את הצפיפות של באגים שקשורים לבטיחות הזיכרון בבסיסי הקוד של Android. אנחנו מרחיבים את הכלים לאבטחת הזיכרון ב-Android ומוסיפים דרישות חדשות שמטרתן לעודד את הסביבה העסקית שלנו לטפל בקטגוריה הזו של באגים. עם הזמן, השינויים האלה אמורים להוביל לאיכות גבוהה יותר ולאבטחה טובה יותר למשתמשים שלנו, ולעלויות נמוכות יותר לספקים שלנו.
סביר להניח שבשנים הקרובות בטיחות הזיכרון תהפוך לגורם שמבדיל בין איכות לאבטחה, ו-Android מתכננת להוביל את הדרך.
דרישות לתמיכה בבטיחות הזיכרון
במסמך הגדרת התאימות (CDD) של Android מומלץ מאוד להשתמש בכלי בטיחות זיכרון במהלך הפיתוח.
אנחנו עובדים בשיתוף פעולה הדוק עם הסביבה העסקית שלנו כדי להגביר את השימוש בכלים לאבטחת הזיכרון ולשלב אותם בתהליכי האינטגרציה הרציפה (CI) והבדיקה.
עם הזמן, אנחנו רוצים לוודא שכל מכשיר יעבור ריצה מלאה של חבילת בדיקות התאימות (CTS) באמצעות כלים לבטיחות הזיכרון, כדי להוכיח שלא נמצאו באגים כאלה. לדוגמה, בפלטפורמות Arm v9 יהיה צורך לספק הרצה של CTS עם תיוג זיכרון מופעל, ואילו בפלטפורמות Arm v8 תתבקשו לספק הרצה של CTS באמצעות HWASAN ו-KASAN.
Rust כשפת תכנות חדשה לקוד של הפלטפורמה
ב-Android 12 נוספה Rust כשפת פלטפורמה. Rust מספקת בטיחות בזיכרון ובשרשור ברמות ביצועים דומות ל-C/C++. אנחנו צופים ש-Rust תהיה הבחירה המועדפת לרוב הפרויקטים המקוריים החדשים. עם זאת, אי אפשר לשכתב את כל הקוד שאינו בטוח לזיכרון, שכרגע מייצג יותר מ-70% מהקוד של פלטפורמת Android, ב-Rust. מעכשיו, Rust תהיה משלימה לכלים לשמירה על הזיכרון.
כלים לשמירה על הזיכרון
Android תומך במגוון רחב של כלים שעוזרים לזהות באגים שקשורים לבטיחות הזיכרון. באיור הבא מוצגת טקסונומיה של הכלים הזמינים לאבטחת הזיכרון ב-Android.

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