Belkin Wemo Smart Plug V2 – переповнення буфера, яке не виправляється

Belkin Wemo Smart Plug V2 – переповнення буфера, яке не виправляється

Вихідний вузол: 2657924

Дослідники компанії з безпеки Інтернету речей Sternum вкопаний популярна розетка домашньої автоматизації від відомого бренду пристроїв Belkin.

Модель, на яку вони дивилися, Wemo Mini Smart Plug (F7C063) Очевидно, термін придатності добігає кінця, але ми знайшли багато їх у продажу в Інтернеті, а також докладні поради та інструкції на сайті Belkin щодо їх налаштування.

Незважаючи на те, що вони старі (у короткостроковому сучасному розумінні), дослідники відзначили, що:

Наш початковий інтерес до пристрою виник через те, що кілька таких пристроїв лежали в нашій лабораторії та використовувалися вдома, тож ми просто хотіли побачити, наскільки безпечно (чи ні) їх використовувати. [… T]здається, це досить популярний споживчий пристрій[; b] ґрунтуючись на цих цифрах, можна з упевненістю підрахувати, що загальний обсяг продажів тільки на Amazon має обчислюватися сотнями тисяч.

Простіше кажучи, є багато людей, які вже купили та підключили ці пристрої, і зараз використовують їх для керування електричними розетками у своїх домівках.

«Розумна вилка», простіше кажучи, — це розетка, яку ви підключаєте до існуючої настінної розетки та яка встановлює керований Wi-Fi перемикач між розеткою на передній частині розетки та аналогічною на вигляд розеткою на стіні. передню частину смарт-вилки. Подумайте про це як про адаптер живлення, який замість, скажімо, круглої євророзетки у трикутну британську, перетворює, скажімо, американську розетку з ручним перемиканням на американську розетку з електронною комутацією, якою можна дистанційно керувати за допомогою програми або веб-інтерфейс.

S в IoT…

Проблема багатьох так званих пристроїв Інтернету речей (IoT), як говориться в старому жарті, полягає в тому, що буква «S» у «IoT» означає безпеку…

…це, звісно, ​​означає, що кібербезпеки часто не так багато, як ви могли б очікувати, або навіть взагалі.

Як ви можете собі уявити, незахищений пристрій домашньої автоматизації, особливо той, який може дозволити комусь за межами вашого будинку або навіть на іншому кінці світу вмикати та вимикати електроприлади за бажанням, може призвести до багатьох неприємностей.

Раніше ми писали про незахищеність Інтернету речей у багатьох різних продуктах інтернет-чайники (так, справді), які можуть передати ваш домашній пароль Wi-Fi на камери безпеки, які шахраї можуть використовувати, щоб зберегти свої очі на вас а не навпаки, до підключених до мережі дисків, які ризикують отримати заражені програмою-вимагачем безпосередньо через Інтернет.

У цьому випадку дослідники знайшли дірку для дистанційного виконання коду в Wemo Mini Smart Plug ще в січні 2023 року, повідомили про це в лютому 2023 року та отримали номер CVE для неї в березні 2023 року (CVE-2023-27217).

На жаль, навіть незважаючи на те, що майже напевно багато таких пристроїв активно використовуються в реальному світі, Belkin, очевидно, заявив, що вважає пристрій «закінчив свій термін служби», і тому діра в безпеці не буде виправлена.

(Ми не впевнені, наскільки прийнятною була б така відмова від «закінчення терміну експлуатації», якби пристрій мав недолік в електричній схемі 120 В змінного струму або 230 В змінного струму, наприклад можливість перегріву та викиду шкідливих хімічних речовин або налаштування у вогні, але здається, що несправності в низьковольтній цифровій електроніці або мікропрограмі пристрою можна ігнорувати, навіть якщо вони можуть призвести до того, що кібератака за бажанням кілька разів увімкне та вимкне перемикач живлення пристрою.)

Коли дружні імена — твій ворог

Проблема, яку виявили дослідники, була старою доброю переповнення буфера стека в частині програмного забезпечення пристрою, що дозволяє змінювати т.зв FriendlyName пристрою – текстовий рядок, який відображається під час підключення до нього за допомогою програми на телефоні.

За замовчуванням ці пристрої запускаються зі зрозумілою назвою на кшталт Wemo mini XYZ, Де XYZ позначає три шістнадцяткові цифри, які, як ми припускаємо, вибираються псевдовипадково.

Це означає, що навіть якщо у вас є два чи три пристрої, вони майже напевно починатимуть з різними назвами, тому ви зможете легко їх налаштувати.

Але ви, ймовірно, захочете перейменувати їх пізніше, щоб їх було легше розрізнити в майбутньому, призначивши зрозумілі назви, наприклад TV power, Laptop charger та Raspberry Pi server.

Програмісти Belkin (або, точніше, програмісти коду, який опинився в цих пристроях під маркою Belkin, які також могли постачати програмне забезпечення для смарт-штекерів іншим брендам), очевидно, зарезервували 68 байт тимчасового сховища для відстеження нова назва під час процесу перейменування.

Але вони забули перевірити, чи ім’я, яке ви надали, поміщається в цей 68-байтовий слот.

Натомість вони припустили, що ви скористаєтеся їхньою офіційною програмою для телефону, щоб виконати процес перейменування пристрою, і, отже, вони можуть обмежити обсяг даних, які надсилаються на пристрій, щоб запобігти будь-якому переповненню буфера, яке могло б інакше виникають.

За іронією долі, вони дуже подбали не лише про те, щоб утримувати вас у 68-байтному ліміті, необхідному для належної роботи самого пристрою, але навіть обмежити вас введенням лише 30 символів.

Ми всі знаємо, чому дозволити клієнтській стороні виконувати перевірку помилок, а не перевіряти натомість (або, ще краще, також) на стороні сервера, є жахливою ідеєю:

  • Код клієнта та код сервера можуть не відповідати. Майбутні клієнтські програми можуть вирішити, що 72-символьні імена будуть гарним варіантом, і почати надсилати на сервер більше даних, ніж він зможе безпечно обробити. Майбутні програмісти на стороні сервера можуть помітити, що ніхто ніколи не використовував повні 68 зарезервованих байтів, і однозначно вирішать, що 24 має бути більш ніж достатньо.
  • Зловмисник міг не турбуватися про додаток. Створюючи та передаючи власні запити на пристрій, вони тривіально обійдуть будь-які перевірки безпеки, які залежать лише від програми.

Дослідники швидко змогли випробувати все довші імена до такої міри, що вони могли за бажанням вивести з ладу пристрій Wemo, переписавши кінець буфера пам’яті, зарезервованого для нового імені, і пошкодивши дані, що зберігаються в байтах, які відразу йдуть за ним.

Пошкодження стека

На жаль, у стековій операційній системі більшість програмного забезпечення закінчується тим, що буфери тимчасової пам’яті на основі стеку розташовані так, що за більшістю цих буферів слідує ще один життєво важливий блок пам’яті, який повідомляє програмі, куди йти, коли вона закінчить, що це робиться прямо зараз.

Технічно ці фрагменти даних «куди йти далі» називаються зворотні адреси, і вони автоматично зберігаються, коли програма викликає те, що відомо як a функціяабо підпрограма, який є фрагментом коду (наприклад, «надрукувати це повідомлення» або «вивести діалогове вікно з попередженням»), який ви хочете використовувати в кількох частинах вашої програми.

Адреса повернення чарівним чином записується в стек кожного разу, коли підпрограма використовується, щоб комп’ютер міг автоматично «відмотати» свій шлях, щоб повернутися до місця виклику підпрограми, який може бути іншим щоразу, коли її активовано.

(Якби підпрограма мала фіксовану адресу повернення, ви могли б викликати її лише з одного місця вашої програми, що зробило б безглуздим турбуватися про упаковку цього коду в окрему підпрограму.)

Як ви можете собі уявити, якщо ви потоптаєте цю магічну адресу повернення до того, як підпрограма завершить роботу, тоді, коли вона закінчить роботу, вона довірливо, але неусвідомлено «відкрутиться» не в тому місці.

Якщо трохи (або, можливо, багато) пощастить, зловмисник зможе заздалегідь передбачити, як творчо потоптати зворотню адресу, і таким чином неправильно спрямувати програму навмисно та зловмисно.

Замість простого збою, неправильно спрямовану програму можна обманом змусити запустити код за вибором зловмисника, таким чином спричинивши те, що називається віддалене виконання коду експлойт, або RCE.

Дві поширені засоби захисту допомагають захиститися від експлойтів такого роду:

  • Рандомізація макета адресного простору, також відома як ASLR. Операційна система навмисно завантажує програми в дещо інші місця пам’яті під час кожного їх запуску. Через це зловмисникам важче здогадатися, як неправильно скеровувати програми з помилками таким чином, щоб зрештою отримати та зберегти контроль, а не просто руйнувати код.
  • Стек канарок, названий на честь птахів, яких шахтарі брали з собою під землю, оскільки вони втрачали свідомість у присутності метану, забезпечуючи таким чином жорстоке, але ефективне раннє попередження про ризик вибуху. Програма навмисно вставляє відомий, але випадковий блок даних безпосередньо перед адресою повернення кожного разу, коли викликається підпрограма, так що переповнення буфера неминуче й помітно перезапише «канарку» першою, перш ніж вона переповнить достатньо далеко, щоб розтоптати на дуже важливу зворотну адресу.

Щоб змусити свій експлойт працювати швидко та надійно, дослідникам потрібно було змусити штекер Wemo вимкнути ASLR, чого віддалені зловмисники не змогли б зробити, але з великою кількістю спроб у реальному житті зловмисникам все одно може пощастити, вгадати правильно за адресами пам’яті, які використовуються програмою, і в будь-якому випадку отримати контроль.

Але дослідникам не потрібно було хвилюватися про проблему зі стеком, оскільки програму з помилками було скомпільовано з вихідного коду з вимкненою функцією «вставити інструкції з перевірки канарки».

(Програми, захищені Canary, зазвичай трохи більші та повільніші, ніж незахищені, через додатковий код, необхідний у кожній підпрограмі для перевірки безпеки.)

Що ж робити?

  • Якщо ви власник Wemo Smart Plug V2, переконайтеся, що ви не налаштували свій домашній маршрутизатор, щоб дозволити доступ до пристрою «зовні», через Інтернет. Це зменшує те, що на жаргоні називається вашим площа поверхні атаки.
  • Якщо у вас є маршрутизатор із підтримкою Universal Plug and Play, також відомий як UPnP, переконайтеся, що його вимкнено. UPnP, як відомо, дозволяє ненавмисно відкрити внутрішні пристрої для сторонніх.
  • Якщо ви програміст, уникайте вимикання функцій безпеки програмного забезпечення (таких як захист стека або перевірка стека), щоб заощадити кілька байтів. Якщо вам справді не вистачає пам’яті, постарайтеся зменшити обсяг пам’яті, покращивши свій код або видаливши функції, а не зменшивши безпеку, щоб можна було запхати більше.

Часова мітка:

Більше від Гола безпека