הסבר על ניצול StrandHogg 2.0

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

השעה 22:00 בערב. האם אתה יודע איפה הפעילויות שלך? ישנה פגיעות חדשה שניתן לנצל במיליוני מכשירי אנדרואיד, והיא גם די מגעילה. בקצרה, פגם עיצובי זה מאפשר לתוקף להציג את הפעילות שלו (דף) על גבי אפליקציה אחרת, מה שעלול לבלבל את המשתמש למסור את הנתונים הפרטיים שלו. הפגיעות זכתה לכינוי StrandHogg 2.0 ונחשפה לאחרונה על ידי פרומון, חברת אבטחה נורווגית.

פגיעות StrandHogg 2.0 משפיעה באופן תיאורטי על כל מכשירי האנדרואיד המריצים גרסאות אנדרואיד עתיקות כמו Honeycomb (3.0) ועד Android 9 Pie (9.0). מבוסס על ה סטטיסטיקות ההפצה העדכניות ביותר של גרסת אנדרואיד, זה אומר ש כ-91.8% מכל מכשירי האנדרואיד פגיעים ל-StrandHogg 2.0. הפגיעות הוקצתה CVE-2020-0096 וניתן לו א רמת החומרה של "קריטי". זה לא דורש הרשאות מיוחדות כדי לעבוד ויכול לתפקד כמעט לחלוטין ללא אינטראקציה של המשתמש. כל מה שמשתמש צריך לעשות הוא לפתוח אפליקציה עם קוד זדוני מוסתר בה, ואז הוא חשוף לניצול.

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


איך זה עובד

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

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

  1. המשתמש מוריד אפליקציה זדונית (כמובן מבלי לדעת שהיא זדונית) ופותח אותה.
  2. ברקע, האפליקציה פותחת את Gmail, שמה עליה פעילות התחברות דומה, ואז מפעילה פעילות נוספת.
  3. המשתמש פותח את Gmail ורואה מה שנראה כמו מסך ההתחברות של Gmail אבל הוא למעשה פעילות ההתחזות של התוקף.

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

מקור: פרומון

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


הקטעים הטכניים

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

בקיצור, StrandHogg 2.0 חוטף את של אנדרואיד Context.startActivities() שיטת API, תוך שימוש בשלוש כוונות.

  • הכוונה הראשונה היא זו שמשיקה, במקרה של הדוגמה שלנו, את Gmail. זה מסומן עם Intent.FLAG_ACTIVITY_NEW_TASK.
  • הכוונה השנייה היא הכוונה הזדונית. בדוגמה שלנו, זה מיועד לפעילות ההתחברות הדומה. לכוונה זו אין דגלים.
  • הכוונה השלישית היא הסחת הדעת. זה מוודא שהמשתמש לא חושד ש-Gmail רק פותח באקראי במקום האפליקציה שהוא הקש עליה (כלומר זו שפתחה את המתקפה). זה מסומן עם Intent.FLAG_ACTIVITY_NEW_TASK.

כל הכוונות הללו מועברות לאחר מכן במערך ל- startActivities() שיטה.

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


הוכחה של רעיון או תאוריה

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


טכניקות ובעיות הפחתה

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

הקלה לא יכולה לכלול רק רשימה שחורה של כל האפליקציות שמשתמשות בהן startActivities(), שכן יש הרבה שימושים לגיטימיים לזה. זה גם ממש קשה להפוך אלגוריתם זיהוי עבורו לאוטומטי. מפתחים זדוניים יכולים להשתמש בכל מיני טריקים כדי להפוך את היישום שלהם של StrandHogg 2.0 לבלתי נראה למעשה לשירותים כמו Google Play Protect. StrandHogg 1.0 דרש מהתוקף להוסיף תכונה ב-AndroidManifest.xml של האפליקציה הזדונית, שקל יחסית לזהות. StrandHogg 2.0, לעומת זאת, פועל כולו ב-Java/Kotlin.

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

כשפנינו לגוגל לקבלת תגובה, דובר הציע את ההצהרה הבאה:

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

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

פרומון אומר שהם "לא צפו בשום תוכנה זדונית אמיתית המשתמשת בפגיעות StrandHogg 2.0," אבל אין ערובה שזו הפעם הראשונה שהניצול מתגלה. מסיבה זו, פרומון ממליץ למפתחים להמשיך ולהגן על האפליקציות שלהם על ידי הגדרת פעילות המשגר ​​שלהם launchMode דגל לשניהם singleTask אוֹ singleInstance. כל אחד מהדגלים הללו ימנע הזרקת משימות, ועליו מסתמך StrandHogg 2.0. עם זאת, העובדה שהפעילות שלך תשתמש באחד מהדגלים האלה עלולה לגרום לבעיות בזרימות אפליקציות מסוימות, כך שזה לא תמיד רצוי.

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

למרבה המזל, פרומון פעל לפי הנחיות חשיפה אחראיות לפני שהפך את הניצול הזה לפומבי (ו זה עדיין לא פומבי לחלוטין - פרומון ממתין 90 יום לפני שיחשוף במלואו כיצד StrandHogg 2.0 עובד). מאז גוגל העבירה תיקונים עבור ניצול זה לאנדרואיד 8.0 אוראו, אנדרואיד 8.1 אוראו ואנדרואיד 9 פאי עם מאי 2020 רמת תיקון האבטחה של Android (SPL). משתמשים באנדרואיד 10 ומעלה אינם פגיעים, אם כי איננו בטוחים לחלוטין מדוע זה המקרה. סביר להניח שיש לזה קשר להגבלות החדשות של אנדרואיד 10 לגבי השקת פעילויות והאופן שבו גוגל שילבה את זה בערימת המשימות. פרומון אומר כי "באנדרואיד 10 ההתקפה אינה יעילה לחלוטין, והפעילויות מחולקות למשימות שונות ולערימות משימות נפרדות לפי adb shell dumpsys activity activities."

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

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


ציר זמן חשיפה

להלן ציר הזמן של החשיפה ש-Promon שיתף במסמך StandHogg 2.0 שלה:

  • 4 בדצמבר 2019 - דיווח על בעיה לגוגל
  • 4 בדצמבר 2019 - שיתף PoC «אפליקציה זדונית» ווידאו עם Google
  • 4 בדצמבר 2019 - גוגל אישרה את קבלת הדוח
  • 9 בדצמבר 2019 - גוגל הגדירה את חומרת הממצא כ"קריטית"
  • 9 בדצמבר 2019 - גוגל מאשרת שהם מסוגלים לשחזר את הבעיה
  • 14 בפברואר 2020 - אנו מודיעים לגוגל שהגילוי של 90 יום מתקרב בתחילת מרץ, ומבקשים סטטוס לצידם
  • 14 בפברואר 2020 - גוגל משיבה שאפריל הוא המהיר ביותר שהם יכולים להפיץ תיקון
  • 14 בפברואר 2020 - אנו מודיעים לגוגל שאנו עובדים על מתן סיוע
  • 14 בפברואר 2020 - גוגל מגיבה. הם עובדים על תיקונים ושואלים אם נוכל לשתף באילו אמצעים אנו ממליצים
  • 17 בפברואר 2020 - אנו מודיעים לגוגל שאנו יכולים לעכב את החשיפה עד אפריל. אנו מבקשים את מספר ה-CVE
  • 17 בפברואר 2020 - אנו חולקים את אסטרטגיות ההפחתה שלנו, כמו גם את האופן שבו אנו רואים הפחתה בפלטפורמה
  • 23 במרץ 2020 - גוגל מגיבה עם מזהה CVE (CVE-2020-0096)
  • 23 במרץ 2020 - גוגל משיבה שהזמינות הכללית של התיקון לאנדרואיד תהיה זמינה במאי
  • 23 במרץ 2020 - גוגל שואלת אם נשקול לדחות את החשיפה למאי
  • 27 במרץ 2020 - אנו משיבים כי נדחה את החשיפה עד מאי
  • 22 באפריל 2020 - גוגל מודיעה לנו שעלון האבטחה של מאי אמור להכיל תיקון לפגיעות