Belkin Wemo Smart Plug V2 – przepełnienie bufora, które nie zostanie załatane

Belkin Wemo Smart Plug V2 – przepełnienie bufora, które nie zostanie załatane

Węzeł źródłowy: 2657924

Badacze z firmy Sternum zajmującej się bezpieczeństwem IoT zagłębił się w popularna wtyczka sieciowa automatyki domowej znanej marki urządzeń Belkin.

Model, na który patrzyli, tzw Inteligentna wtyczka Wemo Mini (F7C063) najwyraźniej zbliża się koniec okresu przydatności do spożycia, ale znaleźliśmy wiele z nich na sprzedaż online, wraz ze szczegółowymi poradami i instrukcjami na stronie Belkina, jak je skonfigurować.

Chociaż mogą być stare (w krótkoterminowym nowoczesnym sensie), naukowcy zauważyli, że:

Nasze początkowe zainteresowanie urządzeniem wynikało z tego, że kilka z nich leżało w naszym laboratorium i było używanych w naszych domach, więc chcieliśmy tylko zobaczyć, jak bezpieczne (lub nie) są w użyciu. [… T]wydaje się, że jest to dość popularne urządzenie konsumenckie[; b]na podstawie tych liczb można bezpiecznie oszacować, że całkowita sprzedaż na samym Amazonie powinna wynosić setki tysięcy.

Mówiąc najprościej, jest wielu ludzi, którzy już kupili i podłączyli te rzeczy i używają ich teraz do sterowania gniazdkami elektrycznymi w swoich domach.

Mówiąc najprościej, „inteligentna wtyczka” to gniazdko elektryczne, które podłącza się do istniejącego gniazdka ściennego i które włącza sterowany przez Wi-Fi przełącznik między gniazdem sieciowym z przodu gniazdka ściennego a identycznie wyglądającym gniazdkiem sieciowym na z przodu inteligentnej wtyczki. Pomyśl o tym jak o zasilaczu, który zamiast konwertować, powiedzmy, okrągłe gniazdo euro na trójkątne gniazdo brytyjskie, konwertuje, powiedzmy, ręcznie przełączane gniazdo amerykańskie na elektronicznie przełączane gniazdo amerykańskie, którym można sterować zdalnie za pomocą aplikacji lub interfejs typu webowego.

S w IoT…

Problem z wieloma tak zwanymi urządzeniami Internetu rzeczy (IoT), jak mówi stary żart, polega na tym, że to litera „S” w „IoT” oznacza bezpieczeństwo…

…oznacza to oczywiście, że cyberbezpieczeństwo często nie jest tak duże, jak można by się spodziewać, a nawet w ogóle.

Jak możesz sobie wyobrazić, niezabezpieczone urządzenie automatyki domowej, zwłaszcza takie, które może pozwolić komuś spoza domu, a nawet po drugiej stronie świata, na włączanie i wyłączanie urządzeń elektrycznych do woli, może prowadzić do wielu problemów.

Pisaliśmy już o braku bezpieczeństwa IoT w szerokiej gamie różnych produktów, od czajniki internetowe (tak, naprawdę), które mogą ujawnić twoje domowe hasło Wi-Fi, do kamer bezpieczeństwa, które oszuści mogą wykorzystać do oko na ciebie zamiast na odwrót, do dysków podłączonych do sieci, które są zagrożone zainfekowany oprogramowaniem ransomware bezpośrednio przez Internet.

W tym przypadku naukowcy odkryli dziurę w zdalnym wykonaniu kodu w Wemo Mini Smart Plug w styczniu 2023 r., zgłosili to w lutym 2023 r., a w marcu 2023 r. otrzymali dla niej numer CVE (CVE-2023-27217).

Niestety, mimo że prawie na pewno wiele z tych urządzeń jest aktywnie używanych w prawdziwym świecie, Belkin najwyraźniej powiedział, że uważa, że ​​​​urządzenie jest „na końcu swojego życia” i że w związku z tym luka w zabezpieczeniach nie zostanie załatana.

(Nie jesteśmy pewni, jak akceptowalny byłby ten rodzaj „końca eksploatacji”, gdyby okazało się, że urządzenie ma wadę w obwodzie elektrycznym 120 V AC lub 230 V AC, taką jak możliwość przegrzania i wydzielania szkodliwych chemikaliów lub ustawienia płonie, ale wydaje się, że usterki niskonapięciowej elektroniki cyfrowej lub oprogramowania sprzętowego w urządzeniu można zignorować, nawet jeśli mogą one doprowadzić do tego, że cyberatakujący będzie wielokrotnie włączał i wyłączał zasilanie urządzenia do woli).

Kiedy przyjazne nazwy są twoimi wrogami

Problem, który odkryli naukowcy, był stary, dobry przepełnienie bufora stosu w części oprogramowania urządzenia umożliwiającej zmianę tzw FriendlyName urządzenia – ciąg tekstowy, który jest wyświetlany, gdy łączysz się z nim za pomocą aplikacji w telefonie.

Domyślnie te urządzenia uruchamiają się z przyjazną nazwą w stylu Wemo mini XYZ, Gdzie XYZ oznacza trzy cyfry szesnastkowe, które, jak sądzimy, zostały wybrane pseudolosowo.

Oznacza to, że nawet jeśli posiadasz dwa lub trzy takie urządzenia, prawie na pewno zaczną one mieć różne nazwy, dzięki czemu możesz je łatwo skonfigurować.

Ale prawdopodobnie będziesz chciał później zmienić ich nazwy, aby łatwiej było je odróżnić w przyszłości, przypisując przyjazne nazwy, takie jak TV power, Laptop charger i Raspberry Pi server.

Programiści firmy Belkin (a dokładniej programiści kodu, który znalazł się w tych urządzeniach marki Belkin, którzy mogli dostarczać oprogramowanie inteligentnych wtyczek również innym markom) najwyraźniej zarezerwowali 68 bajtów pamięci tymczasowej, aby śledzić nową nazwę podczas procesu zmiany nazwy.

Ale zapomnieli sprawdzić, czy nazwa, którą podałeś, pasuje do tego 68-bajtowego gniazda.

Zamiast tego założyli, że użyjesz ich oficjalnej aplikacji telefonicznej do przeprowadzenia procesu zmiany nazwy urządzenia, a tym samym mogą ograniczyć ilość danych wysyłanych do urządzenia w pierwszej kolejności, aby zapobiec przepełnieniu bufora, które w przeciwnym razie mogłoby powstać.

Jak na ironię, bardzo starali się nie tylko utrzymać limit 68 bajtów wymagany do prawidłowego działania samego urządzenia, ale nawet ograniczyć pisanie do zaledwie 30 znaków.

Wszyscy wiemy, dlaczego pozwolenie stronie klienta na sprawdzanie błędów, zamiast sprawdzania (lub jeszcze lepiej, również) po stronie serwera, to okropny pomysł:

  • Kod klienta i kod serwera mogą nie być zgodne. Przyszłe aplikacje klienckie mogą zdecydować, że 72-znakowe nazwy będą dobrą opcją i zacząć wysyłać więcej danych do serwera, niż może on bezpiecznie obsłużyć. Przyszli programiści po stronie serwera mogą zauważyć, że nikt nigdy nie wykorzystał pełnych zarezerwowanych 68 bajtów i ostatecznie zdecydować, że 24 bajty powinny być więcej niż wystarczające.
  • Osoba atakująca może zdecydować, że nie zawraca sobie głowy aplikacją. Generując i przesyłając własne żądania do urządzenia, w prosty sposób ominęliby wszelkie kontrole bezpieczeństwa, które opierają się wyłącznie na aplikacji.

Badacze byli w stanie szybko wypróbować coraz dłuższe nazwy do tego stopnia, że ​​mogli dowolnie zawiesić urządzenie Wemo, zapisując koniec bufora pamięci zarezerwowanego dla nowej nazwy i uszkadzając dane przechowywane w bajtach, które nastąpiły bezpośrednio po niej.

Uszkodzenie stosu

Niestety, w systemie operacyjnym opartym na stosie większość programów kończy się na tymczasowych buforach pamięci opartych na stosie, ułożonych w taki sposób, że po większości tych buforów następuje kolejny ważny blok pamięci, który mówi programowi, gdzie ma się udać po zakończeniu, co to się teraz robi.

Technicznie rzecz biorąc, te fragmenty danych „dokąd iść dalej” są znane jako adresy zwrotnei są automatycznie zapisywane, gdy program wywołuje tzw funkcjonowaćlub podprogram, który jest fragmentem kodu (na przykład „wydrukuj tę wiadomość” lub „wyświetl okno dialogowe z ostrzeżeniem”), którego chcesz użyć w kilku częściach programu.

Adres zwrotny jest magicznie zapisywany na stosie za każdym razem, gdy podprogram jest używany, dzięki czemu komputer może automatycznie „odwinąć” swoją ścieżkę, aby wrócić do miejsca, z którego został wywołany podprogram, który może być inny za każdym razem, gdy jest aktywowany.

(Gdyby podprogram miał ustalony adres zwrotny, mógłbyś go wywoływać tylko z jednego miejsca w swoim programie, co sprawiłoby, że nie byłoby sensu zawracać sobie głowy pakowaniem tego kodu w osobny podprogram.)

Jak możesz sobie wyobrazić, jeśli nadepniesz na ten magiczny adres zwrotny, zanim podprogram zakończy działanie, to kiedy to się skończy, z ufnością, ale nieświadomie, „rozwinie się” w niewłaściwym miejscu.

Przy odrobinie (a może i dużym) szczęściu osoba atakująca może z góry przewidzieć, jak kreatywnie podeptać adres zwrotny, a tym samym celowo i złośliwie skierować program w niewłaściwe miejsce.

Zamiast po prostu się zawiesić, źle skierowany program może zostać oszukany do uruchomienia kodu wybranego przez atakującego, powodując w ten sposób tzw. zdalne wykonanie kodu exploit lub RCE.

Dwa wspólne mechanizmy obronne pomagają chronić przed tego rodzaju exploitami:

  • Randomizacja układu przestrzeni adresowej, znana również jako ASLR. System operacyjny celowo ładuje programy w nieco innych lokalizacjach pamięci za każdym razem, gdy są uruchamiane. Utrudnia to atakującym odgadnięcie, w jaki sposób przekierować wadliwe programy w sposób, który ostatecznie przejmie i zachowa kontrolę, zamiast jedynie spowodować awarię kodu.
  • Kanarki w stosie, nazwany na cześć ptaków, które górnicy zabierali ze sobą pod ziemię, ponieważ omdlały w obecności metanu, zapewniając w ten sposób okrutne, ale skuteczne wczesne ostrzeżenie o ryzyku wybuchu. Program celowo wstawia znany, ale losowy blok danych tuż przed adresem zwrotnym za każdym razem, gdy wywoływany jest podprogram, tak aby przepełnienie bufora nieuchronnie i wykrywalnie nadpisało najpierw „kanarka”, zanim przekroczy wystarczająco daleko, by zdeptać na najważniejszy adres zwrotny.

Aby ich exploit działał szybko i niezawodnie, badacze musieli zmusić wtyczkę Wemo do wyłączenia ASLR, czego zdalni atakujący nie byliby w stanie zrobić, ale przy wielu próbach w prawdziwym życiu, atakujący mogą mimo wszystko mieć szczęście, poprawnie odgadnąć pod adresami pamięci używanymi przez program i mimo to uzyskać kontrolę.

Ale badacze nie musieli się martwić problemem stosu kanarków, ponieważ błędna aplikacja została skompilowana z kodu źródłowego z wyłączoną funkcją „wstaw instrukcje bezpieczeństwa dotyczące sprawdzania kanarków”.

(Programy chronione przez kanarek są zazwyczaj nieco większe i wolniejsze niż programy niechronione ze względu na dodatkowy kod potrzebny w każdym podprogramie do przeprowadzenia kontroli bezpieczeństwa).

Co robić?

  • Jeśli jesteś właścicielem Wemo Smart Plug V2, upewnij się, że router domowy nie został skonfigurowany tak, aby zezwalał na dostęp do urządzenia „z zewnątrz”, przez Internet. Zmniejsza to to, co jest znane w żargonie jako twoje powierzchnia ataku.
  • Jeśli masz router obsługujący technologię Universal Plug and Play, znany również jako UPnP, upewnij się, że jest wyłączony. UPnP sprawia, że ​​urządzenia wewnętrzne mogą zostać przypadkowo otwarte dla osób z zewnątrz.
  • Jeśli jesteś programistą, unikaj wyłączania funkcji bezpieczeństwa oprogramowania (takich jak ochrona stosu lub sprawdzanie kanarków stosu) tylko po to, aby zaoszczędzić kilka bajtów. Jeśli naprawdę brakuje Ci pamięci, postaraj się zmniejszyć zużycie, poprawiając kod lub usuwając funkcje, zamiast zmniejszać bezpieczeństwo, aby móc upchnąć więcej.

Znak czasu:

Więcej z Nagie bezpieczeństwo