בטיחות זיכרון

תכונת הזיכרון לא בטוחה

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

 באגים של בטיחות זיכרון משפיעים על חוויית המשתמש, על העלויות ועל האבטחה.
איור 1: באגים של בטיחות זיכרון וההשפעה השלילית שלהם על האיכות, האבטחה והעלויות

באגים של בטיחות זיכרון משפיעים לרעה על האיכות והיציבות, והם אחראים לחלק משמעותי מהקריסות שנצפו במכשירים של משתמשי הקצה. לכן, צפיפות גבוהה של באגים בנושאי בטיחות זיכרון קשורה ישירות לחוויית משתמש גרועה.
קוד מקומי, שנכתב בשפות לא בטוחות לזיכרון כמו C,‏ C++‎ ו-Assembly, מייצג יותר מ-70% מקוד הפלטפורמה של Android, ונמצא בכ-50% מהאפליקציות בחנות Google Play.
לאור המורכבות ההולכת וגוברת של הקוד, אם לא יטפלו בבעיה, מספר הבאגים בנושאי בטיחות בזיכרון יגדל עם הזמן. לכן, כדי להצליח בטווח הארוך, חשוב לנו לספק לסביבה העסקית שלנו את הכלים והטכנולוגיות שיכולים לזהות ולצמצם באגים כאלה.
בשנים האחרונות עבדנו בשיתוף פעולה הדוק עם שותפי החומרה שלנו כדי לפתח טכנולוגיות חומרה כמו תיוג זיכרון של Arm, והוספנו את Rust לקוד הבסיסי של Android.
הטכנולוגיות האלה יאייצו את ההתקדמות שלנו בדרך לבטיחות בזיכרון, ויעזרו לתעשיית התוכנה לטפל בבעיה מרכזית.

באגים של בטיחות זיכרון משפיעים לרעה על האיכות

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

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

באגים של בטיחות זיכרון משפיעים לרעה על האבטחה

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

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

אנחנו שמחים לדעת שזו לא בעיה רק ב-Android (ראו נתונים סטטיסטיים של Chrome ושל Microsoft), אבל אנחנו צריכים לעשות יותר כדי לשמור על בטיחות המשתמשים שלנו.
צוות Project Zero ב-Google עוקב אחרי נקודות חולשה למתקפות אפס ימים ששימשו במתקפות אמיתיות נגד משתמשים. לא מדובר בבאגים היפותטיים, אלא בכאלה שנמצאים בשימוש פעיל לצורך התקפות על משתמשים. רוב הבאגים הם באגים של בטיחות זיכרון (זיהום זיכרון ו-use-after-free).

באגים של בטיחות זיכרון מעלים את העלויות

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

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

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

בטיחות בזיכרון

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

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

דרישות לשמירה על בטיחות הזיכרון

מסמך ההגדרה של תאימות ל-Android (CDD) ממליץ מאוד להשתמש בכלי לבדיקת בטיחות הזיכרון במהלך הפיתוח.
אנחנו עובדים בשיתוף פעולה הדוק עם הסביבה העסקית שלנו כדי להגדיל את השימוש בכלים לבטיחות זיכרון ולשלב אותם בתהליכי השילוב והבדיקה המתמשכים.
עם הזמן, אנחנו רוצים לוודא שכל מכשיר עובר בדיקה מלאה של חבילת בדיקות התאימות (CTS) באמצעות כלים לבדיקת בטיחות הזיכרון, כדי להוכיח שלא נמצאו באגים כאלה. לדוגמה, פלטפורמות Arm v9 יידרשו לספק הפעלה של CTS עם תגיית זיכרון מופעלת, ואילו פלטפורמות Arm v8 יידרשו לספק הפעלה של CTS באמצעות HWASAN ו-KASAN.

Rust כשפת תכנות חדשה לקוד פלטפורמה

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

כלים לשמירה על אבטחת הזיכרון

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

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

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