Belkin Wemo Smart Plug V2 - הצפת המאגר שלא יתוקן

Belkin Wemo Smart Plug V2 - הצפת המאגר שלא יתוקן

צומת המקור: 2657924

חוקרים בחברת אבטחת ה-IoT Sternum חפרו פנימה תקע אוטומציה ביתית פופולרי ממותג המכשירים הידוע Belkin.

הדגם שהם הסתכלו עליו, ה Wemo Mini Smart Plug (F7C063) ככל הנראה מתקרב לסוף חיי המדף שלו, אבל מצאנו הרבה מהם למכירה באינטרנט, יחד עם עצות והנחיות מפורטות באתר של בלקין כיצד להגדיר אותם.

ישנים (במובן המודרני לטווח הקצר) למרות שהם עשויים להיות, החוקרים ציינו כי:

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

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

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

ה-S ב-IoT…

הבעיה במכשירים רבים המכונים Internet of Things (IoT), כפי שאומרת הבדיחה הישנה, ​​היא שהאות "S" ב-"IoT" היא שמייצגת אבטחה...

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

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

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

במקרה זה, החוקרים מצאו חור לביצוע קוד מרחוק ב-Wemo Mini Smart Plug עוד בינואר 2023, דיווחו על כך בפברואר 2023 וקיבלו עבורו מספר CVE במרץ 2023 (CVE-2023-27217).

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

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

כאשר שמות ידידותיים הם האויב שלך

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

כברירת מחדל, מכשירים אלה מתחילים עם שם ידידותי בנוסח Wemo mini XYZ, שם XYZ מציין שלוש ספרות הקסדצימליות שאנו מנחשים שנבחרו באופן פסאודו אקראי.

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

אבל סביר להניח שתרצה לשנות את שמם מאוחר יותר כדי שיהיה קל יותר להבדיל ביניהם בעתיד, על ידי הקצאת שמות ידידותיים כגון TV power, Laptop charger ו Raspberry Pi server.

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

אבל הם שכחו לבדוק שהשם שסיפקת יתאים לחריץ הזה של 68 בתים.

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

למרבה האירוניה, הם דאגו מאוד לא רק להגביל אותך למגבלת 68 הבתים הנדרשת כדי שהמכשיר עצמו יתנהג כמו שצריך, אלא אפילו להגביל אותך להקליד ב-30 תווים בלבד.

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

  • קוד הלקוח וקוד השרת עלולים להיסחף מההתאמה. אפליקציות לקוח עתידיות עשויות להחליט ששמות של 72 תווים יהיו אפשרות נחמדה, ולהתחיל לשלוח יותר נתונים לשרת ממה שהוא יכול להתמודד בבטחה. קודנים עתידיים בצד השרת עשויים להבחין בכך שאף אחד מעולם לא השתמש ב-68 הבתים המלאים השמורים, ויחליטו באופן בלתי נפרד ש-24 צריכים להיות די והותר.
  • תוקף יכול לבחור לא להתעסק באפליקציה. על ידי יצירת והעברת בקשות משלהם למכשיר, הם יעקפו באופן טריוויאלי כל בדיקות אבטחה המסתמכות על האפליקציה בלבד.

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

משחית את הערימה

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

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

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

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

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

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

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

שתי הגנות נפוצות עוזרות להגן מפני ניצולים מסוג זה:

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

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

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

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

מה לעשות?

  • אם אתה בעל Wemo Smart Plug V2, ודא שלא הגדרת את הנתב הביתי שלך כך שיאפשר גישה למכשיר "מבחוץ", דרך האינטרנט. זה מקטין את מה שמכונה בעגה שלך שטח פני תקיפה.
  • אם יש לך נתב שתומך ב-Universal Plug and Play, ידוע גם בשם UPnP, ודא שהוא כבוי. UPnP מקל לשמצה למכשירים פנימיים להיפתח בשוגג בפני זרים.
  • אם אתה מתכנת, הימנע מכיבוי תכונות בטיחות של תוכנה (כגון הגנה על מחסנית או בדיקת מחסנית) רק כדי לחסוך כמה בתים. אם באמת נגמר לך הזיכרון, נסה לצמצם את טביעת הרגל שלך על ידי שיפור הקוד או הסרת תכונות במקום על ידי הפחתת האבטחה כדי שתוכל לדחוס יותר.

בול זמן:

עוד מ ביטחון עירום