כיצד באג של מנהל ההתקן הגרפי ב-Samsung Galaxy S6 דלף נתוני כרטיסיית Google Chrome

תהיתם פעם איך מוצאים פרצות אבטחה? החברה הבריטית GraphicsFuzz מסבירה כיצד הם נתקלו בבאג של מנהל התקן גרפי ב-Samsung Galaxy S6 שהם יכלו לנצל כדי לראות נתונים מכרטיסיות פתוחות ב-Google Chrome.

בסוף מרץ, חברת סטארט-אפ מבוססת בריטניה המתמחה בבדיקת אמינות GPU פנתה אלינו עם באג GPU שהם גילו שגורם ל קוואלקום Snapdragon 845סמסונג גלקסי S9/S9+ לאתחל מחדש בעת ביקור בדף אינטרנט. המשרד, התקשר GraphicsFuzz, עבדו איתנו כדי לדווח לו על הבעיה קוואלקום ו סמסונג. חלק מהקוראים שלנו התעניינו ללמוד איך חברה אוהבת GraphicsFuzz הוא מסוגל למצוא את הפגיעויות הללו, אז שיתפנו פעולה עם החברה כדי להציג כיצד היא גילתה פגיעות GPU ישנה יותר. פגיעות זו שכבר תוקנה אפשרה לתוקף "לרגל" מרחוק אחר התוכן של גוגל כרום כרטיסיות הדפדפן ב- סמסונג גלקסי S6.

משתמש זה צפה באתר הבנק שלו לפני ביקור בדף האינטרנט הזדוני. התוכן נלכד והועלה לשרת מרוחק. מָקוֹר: GraphicsFuzz.

כיצד GraphicsFuzz מוצא באגים ב-GPU

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

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

תוצאות של כמה מכשירים פופולריים המריצים את חבילת הבדיקות GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 ו-Samsung Galaxy S8 כלולים בתרשימים אלה. מָקוֹר: GraphicsFuzz.

עבור סמסונג גלקסי S6, GraphicsFuzz גילה שהתמונות באחת השורות מציגות תמונות שהיו אמורות להיות בטבלה אחרת. המשמעות היא שתמונות מבדיקות קודמות דלפו לבדיקות מאוחרות יותר. לאחר מכן, הצוות הפעיל מחדש את חבילת הבדיקה ב-Google Chrome וגילה שחלקים מדף האינטרנט מופיעים בתמונה. יתר על כן, הם גילו שפתיחת כרטיסייה נוספת גרמה לתמונה להציג חלקים של כרטיסיות אחרות. בעיקרו של דבר, באג זה אפשר ללשונית אחת של Google Chrome להדליף מידע על כרטיסיית Chrome אחרת! הצוות מאחורי GraphicsFuzz לא חיפשו בכוונה באגי אבטחה, אבל בסופו של דבר הם מצאו אחד כזה כתוצאה מהבדיקה שלהם. (יש לציין שהצוות שיחזר את הבאג בדפדפן המניות של סמסונג ב-Galaxy S6 וכן Mozilla Firefox.)

איך פועל הבאג

תמונה ששימשה להפעלת הבאג הממושך ב-Samsung Galaxy S6. מָקוֹר: GraphicsFuzz.

דף האינטרנט ה"זדוני" שנוצר על ידי GraphicsFuzz משתמש ב-WebGL כדי לנסות לצייר סצנת חלל בתוך קנבס כפי שמוצג לעיל. הצבע של כל פיקסל נקבע על ידי הצללה של fragment, תוכנית שמסופקת על ידי דף האינטרנט לביצוע ב-GPU. ה GraphicsFuzz ה-framework שינתה את הצללה של fragment מה שגרם לו לפעול במשך זמן רב מאוד. כאשר הצללה פועלת זמן רב מדי, הדפדפן או מערכת ההפעלה מפסיקים בדרך כלל את הרינדור. עם זאת, בעוד שה-GPU ביטל את העיבוד לאחר ציור של כמה פיקסלים, מנהל ההתקן של ה-GPU לא דיווח על כך ל-Google Chrome. (אם תסתכל על התמונה בראש המאמר המציגה זיכרון וידאו זבל, אתה יכול למעשה לראות חלקים מסצנת החלל בחלק העליון שמאל.) משמעות הדבר היא שהפיקסלים שעובדו לפני ההפסקה נותרים ללא נגיעה, כלומר התמונה הסופית המעובדת היא לרוב סרטון זבל זיכרון. מכיוון שזיכרון וידאו נמצא בשימוש רציף לעיבוד דפי אינטרנט אחרים, נתוני ה"זבל" מכילים למעשה עיבודים קודמים של דפי אינטרנט אחרים. לפיכך, בסופו של דבר דפי אינטרנט אחרים מוצגים בדף האינטרנט ה"זדוני". באופן מכריע, WebGL מאפשר לדף האינטרנט ללכוד את התוכן של כל מה שמעובד; תמונה זו מועלית לאחר מכן לשרת מרוחק.

תרשים המסביר את באג GPU ארוך השנים שגורם לנתוני כרטיסיית Chrome "לדלוף". מָקוֹר: GraphicsFuzz.

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

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

לקחים שיש ללמוד

מעבד גרפי שמתנהג בצורה לא נכונה יכול לעקוף את כל אמצעי האבטחה של גוגל כרום ואנדרואיד מכיוון ש-WebGL מאפשר לכל דף אינטרנט זדוני לשלוח קוד ל-GPU לביצוע. גוגל לא יכולה לתקן באגים ב-GPU מכיוון שהחברה אינה שולטת בחומרה ובמנהלי התקנים. במקרה זה, זה תלוי בספק ה-GPU (במקרה זה, ARM) לתקן את הבאג וה-OEM שהמכשירים שלו מושפעים (במקרה זה, סמסונג) לשלב את התיקון בעדכון. הוסף ספקים לתערובת וקל לראות איך באג כזה יכול לקחת הרבה זמן לתקן - זה לקח לפחות 5 חודשים עבור רוב משתמשי Samsung Galaxy S6 יקבלו את התיקון.

GraphicsFuzz עוזר לספקי GPU למצוא באגים שקשה לזהות כמו באגים בהידור שגוי שגורמים להפקת קוד שגוי ולביצוע ב-GPU. מסגרת הבדיקה האוטומטית שלהם מאפשרת להם למצוא באגים כמו זה המוצג במאמר זה. התברר שהלולאה ארוכת השנים הנגרמת על ידי דף האינטרנט ה"זדוני" גורמת גם לבעיות במכשירים אחרים כגון HTC One M7 ולאחרונה את סמסונג גלקסי S9. GraphicsFuzz בודק סמארטפונים מובילים ומפרסם א טבלת התוצאות אשר מדרג את המכשירים הללו על סמך הביצועים שלהם בקבוצת משנה של הבדיקות שלהם. מאות קריסות ושגיאות רינדור נמצאו במהלך הבדיקה שלהם, אך רובם אינם נחקרים כדי לראות אם הם מהווים איום ביטחוני. עם זאת, כפי שמוצג על ידי ניצול זה, GPU מתנהג בצורה לא נכונה הוא סיכון אבטחה, וייתכן שפגיעות אבטחה קריטית אחת או יותר ממתינות להתגלות. GraphicsFuzz מקווה שספקי GPU נותנים עדיפות לשיפור איכות הדרייברים בעתיד.

אמינות השוואתית של מנהלי התקנים גרפיים, ממוינת לפי מספר הבעיות הכוללות. מָקוֹר: GraphicsFuzz.

ציר זמן חשיפה

  • בדצמבר 2016, GraphicsFuzz דיווח על הבאג ל- מעקב אחר באגים של Google Chromium כי הוא היה זכאי לתוכנית התגמול של Chrome. לאחר ש-GraphicsFuzz הגיש את הבאג למעקב אחר הבאגים של Google Chromium, הבאג התקבל על ידי גוגל והעביר אותו ל-ARM וסמסונג לצורך תיקון.
  • גוגל העביר את הדוח לאנשי קשר ב-ARM ובסמסונג.
  • סמסונג תיקנה בשקט את הבאג והוציאה את התיקון בעדכון אנדרואיד 7.0 נוגט ששוחרר בין מרץ ליוני 2017. למרות שלא היה CVE שנוצר על ידי סמסונג, גוגל או ARM ולא סמסונג ולא ARM פרסמו מידע כלשהו על התיקון, שימו לב GraphicsFuzz לא דיווח על הבאג דרך ה תהליך תקין.
  • יותר מאוחר, GraphicsFuzz הצליח לאשר שגם סמסונג וגם ARM ראו את הדוח, וש-ARM הצליחה לתקן את הבעיה עקב הדוח.
  • באוגוסט 2017, GraphicsFuzz זכה ב-$2,000 על ידי גוגל עבור דוח הבאג.
  • בנובמבר 2017, דוח הבאג פורסם לציבור.