Belkin Wemo Smart Plug V2 — переполнение буфера, которое не будет исправлено

Belkin Wemo Smart Plug V2 — переполнение буфера, которое не будет исправлено

Исходный узел: 2657924

Исследователи компании Sternum, занимающейся безопасностью Интернета вещей вкопанный в популярная сетевая вилка для домашней автоматизации от известного бренда устройств Belkin.

Модель, на которую они смотрели, Умная мини-вилка Wemo (F7C063) срок годности, по-видимому, подходит к концу, но мы нашли их множество в продаже в Интернете, а также подробные советы и инструкции по их настройке на сайте Belkin.

Какими бы старыми (в краткосрочном современном смысле) они ни были, исследователи отметили, что:

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

Проще говоря, есть много людей, которые уже купили и подключили эти устройства и прямо сейчас используют их для управления электрическими розетками в своих домах.

Проще говоря, «умная вилка» — это розетка, которую вы вставляете в существующую стенную розетку и которая вставляет управляемый Wi-Fi переключатель между сетевой розеткой на передней панели настенной розетки и идентичной сетевой розеткой на перед умной розеткой. Думайте об этом как об адаптере питания, который вместо преобразования, скажем, круглой евророзетки в треугольную британскую розетку, преобразует, скажем, розетку США с ручным переключением в розетку США с электронным переключением, которой можно управлять удаленно через приложение или веб-интерфейс.

S в IoT…

Проблема со многими так называемыми устройствами Интернета вещей (IoT), как гласит старая шутка, заключается в том, что буква «S» в «IoT» означает безопасность…

…имеется в виду, конечно, что кибербезопасности часто не так много, как можно было бы ожидать, или даже вообще нет.

Как вы можете себе представить, небезопасное устройство домашней автоматизации, особенно такое, которое может позволить кому-то за пределами вашего дома или даже на другом конце света включать и выключать электроприборы по своему желанию, может привести к большому количеству неприятностей.

Мы уже писали о незащищенности 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, переписав конец буфера памяти, зарезервированного для нового имени, и повреждая данные, хранящиеся в байтах, которые сразу же следовали.

Повреждение стека

К сожалению, в операционной системе, основанной на стеке, большая часть программного обеспечения заканчивает тем, что ее временные буферы памяти на основе стека расположены так, что за большинством этих буферов следует другой жизненно важный блок памяти, который сообщает программе, куда идти, когда она закончит что делать. это делается прямо сейчас.

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

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

(Если бы подпрограмма имела фиксированный адрес возврата, вы могли бы вызвать ее только из одного места в вашей программе, что сделало бы бессмысленным в первую очередь упаковывать этот код в отдельную подпрограмму.)

Как вы можете себе представить, если вы наткнетесь на этот волшебный адрес возврата до того, как подпрограмма завершит работу, то, когда она закончит работу, она доверчиво, но неосознанно «расмотается» не туда, куда нужно.

Если немного (или, возможно, много) удачи, злоумышленник может заранее предсказать, как творчески растоптать обратный адрес и тем самым преднамеренно и злонамеренно направить программу по ложному пути.

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

Две общие защиты помогают защититься от эксплойтов такого рода:

  • Рандомизация макета адресного пространства, также известная как ASLR. Операционная система намеренно загружает программы в немного разные области памяти каждый раз, когда они запускаются. Из-за этого злоумышленникам становится сложнее угадать, как перенаправить ошибочные программы таким образом, чтобы в конечном итоге получить и сохранить контроль, а не просто привести к сбою кода.
  • Стек канареек, назван в честь птиц, которых шахтеры брали с собой под землю, потому что они падали в обморок в присутствии метана, таким образом обеспечивая жестокое, но эффективное раннее предупреждение о риске взрыва. Программа преднамеренно вставляет известный, но случайный блок данных непосредственно перед адресом возврата каждый раз, когда вызывается подпрограмма, так что переполнение буфера неизбежно и обнаруживаемым образом перезапишет «канарейку», прежде чем она переполнится достаточно далеко, чтобы растоптать по важнейшему обратному адресу.

Чтобы их эксплойт работал быстро и надежно, исследователям нужно было заставить плагин Wemo отключить ASLR, что удаленные злоумышленники не смогли бы сделать, но при большом количестве попыток в реальной жизни злоумышленникам все же может повезти, угадайте правильно. по адресам памяти, используемым программой, и все равно получить управление.

Но исследователям не нужно было беспокоиться о проблеме канареечного стека, потому что приложение с ошибками было скомпилировано из исходного кода с отключенной функцией «вставить инструкции по безопасности для проверки канареек».

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

Что делать?

  • Если вы являетесь владельцем Wemo Smart Plug V2, убедитесь, что вы не настроили домашний маршрутизатор, чтобы разрешить доступ к устройству «снаружи» через Интернет. Это уменьшает то, что известно на жаргоне как ваш площадь атаки.
  • Если у вас есть маршрутизатор, поддерживающий Universal Plug and Play, также известный как UPnP, убедитесь, что он выключен. UPnP, как известно, позволяет внутренним устройствам непреднамеренно открываться для посторонних.
  • Если вы программист, избегайте отключения функций безопасности программного обеспечения (таких как защита стека или проверка канареек стека) только для того, чтобы сэкономить несколько байтов. Если вам действительно не хватает памяти, постарайтесь уменьшить занимаемую площадь, улучшив код или удалив функции, а не снижая безопасность, чтобы вы могли втиснуть больше.

Отметка времени:

Больше от Голая Безопасность