Belkin Wemo Smart Plug V2 – prelivanje medpomnilnika, ki ga ni mogoče popraviti

Belkin Wemo Smart Plug V2 – prelivanje medpomnilnika, ki ga ni mogoče popraviti

Izvorno vozlišče: 2657924

Raziskovalci varnostnega podjetja IoT Sternum vkopan v priljubljen omrežni vtič za avtomatizacijo doma znane znamke Belkin.

Model, ki so si ga ogledali, Wemo Mini Smart Plug (F7C063) se očitno bliža koncu svojega roka uporabnosti, vendar smo jih našli veliko za prodajo na spletu, skupaj s podrobnimi nasveti in navodili na Belkinovem spletnem mestu o tem, kako jih nastaviti.

Čeprav so stari (v kratkoročnem sodobnem smislu), so raziskovalci ugotovili, da:

Naše prvotno zanimanje za napravo je izhajalo iz tega, da je več teh ležalo po našem laboratoriju in jih uporabljali doma, zato smo želeli le videti, kako varne (ali ne) so za uporabo. [… Zdi se, da je to precej priljubljena potrošniška naprava[; b]na podlagi teh številk je varno oceniti, da bi morala biti skupna prodaja samo na Amazonu v stotisočih.

Preprosto povedano, zunaj je veliko ljudi, ki so že kupili in priključili te stvari in jih prav zdaj uporabljajo za nadzor električnih vtičnic v svojih domovih.

Preprosto povedano, »pametni vtič« je električna vtičnica, ki jo priključite v obstoječo stensko vtičnico in ki vstavi stikalo, ki ga upravlja Wi-Fi, med omrežno vtičnico na sprednji strani stenske vtičnice in identično omrežno vtičnico na sprednji del pametnega vtiča. Predstavljajte si to kot napajalnik, ki namesto, da bi pretvoril, recimo, okroglo evro vtičnico v trikotno britansko, pretvori, recimo, ročno preklopno ameriško vtičnico v elektronsko preklopno ameriško vtičnico, ki jo je mogoče upravljati na daljavo prek aplikacije ali spletni vmesnik.

S v IoT…

Težava s številnimi tako imenovanimi napravami interneta stvari (IoT), kot pravi stara šala, je, da je črka "S" v "IoT" tista, ki pomeni varnost ...

… kar seveda pomeni, da kibernetske varnosti pogosto ni toliko, kot bi morda pričakovali, ali pa je sploh ni.

Kot si lahko predstavljate, bi lahko nezanesljiva naprava za avtomatizacijo doma, zlasti tista, ki bi nekomu zunaj vaše hiše ali celo na drugem koncu sveta omogočila, da poljubno vklaplja in izklaplja električne naprave, povzročila veliko težav.

Prej smo pisali o negotovosti IoT v številnih različnih izdelkih, od internetni kotlički (ja, res), ki lahko odkrije vaše domače geslo za Wi-Fi do varnostnih kamer, ki jih lahko sleparji uporabijo za shranjevanje pazi nate namesto obratno, na diskovne pogone, povezane z omrežjem, ki jih obstaja tveganje za pridobitev ki jih je povzročila izsiljevalska programska oprema neposredno prek interneta.

V tem primeru so raziskovalci januarja 2023 v Wemo Mini Smart Plug našli luknjo za oddaljeno izvajanje kode, jo prijavili februarja 2023 in marca 2023 zanjo prejeli številko CVE (CVE-2023-27217).

Na žalost, čeprav je skoraj zagotovo veliko teh naprav v aktivni uporabi v resničnem svetu, je Belkin očitno dejal, da meni, da je naprava "na koncu svoje življenjske dobe" in da varnostna luknja zato ne bo zakrpana.

(Nismo prepričani, kako sprejemljiva bi bila tovrstna zavrnitev ob koncu življenjske dobe, če bi se izkazalo, da ima naprava napako v svojem električnem vezju 120 V AC ali 230 V AC, kot je možnost pregrevanja in oddajanja škodljivih kemikalij ali nastavitev gori, vendar se zdi, da je napake v nizkonapetostni digitalni elektroniki ali vdelani programski opremi v napravi mogoče prezreti, tudi če bi lahko privedle do tega, da kibernetski napadalec poljubno vklopi in izklopi glavno stikalo v napravi.)

Ko so prijazna imena tvoj sovražnik

Težava, ki so jo odkrili raziskovalci, je bila dobra stara prelivanje medpomnilnika sklada v delu programske opreme naprave, ki omogoča spreminjanje t.i FriendlyName naprave – besedilni niz, ki se prikaže, ko se z njo povežete z aplikacijo v telefonu.

Privzeto se te naprave zaženejo s prijaznim imenom v skladu z Wemo mini XYZ, Kjer XYZ označuje tri šestnajstiške številke, za katere ugibamo, da so izbrane psevdonaključno.

To pomeni, da če celo imate dve ali tri od teh naprav, bodo skoraj zagotovo začele z različnimi imeni, tako da jih boste zlahka nastavili.

Verjetno pa jih boste pozneje želeli preimenovati, da jih boste v prihodnje lažje ločili, tako da jim dodelite prijazna imena, kot je TV power, Laptop charger in Raspberry Pi server.

Programerji Belkin (ali, natančneje, programerji kode, ki je končala v teh napravah znamke Belkin, ki so morda dobavili programsko opremo za pametne vtiče tudi drugim blagovnim znamkam) so očitno rezervirali 68 bajtov začasnega pomnilnika za sledenje novo ime med postopkom preimenovanja.

Vendar so pozabili preveriti, ali bo ime, ki ste ga posredovali, ustrezalo tej 68-bajtni reži.

Namesto tega so domnevali, da boste za izvedbo postopka preimenovanja naprave uporabili njihovo uradno telefonsko aplikacijo in da bi tako lahko najprej omejili količino podatkov, poslanih napravi, da bi preprečili morebitno prekoračitev medpomnilnika, ki bi sicer lahko nastati.

Ironično je, da so zelo pazili, ne samo, da bi dosegli omejitev 68 bajtov, ki je potrebna za pravilno delovanje naprave, ampak celo, da bi te omejili na samo 30 znakov.

Vsi vemo, zakaj je prepustiti odjemalski strani, da preveri napake namesto tega (ali še bolje, tudi) na strani strežnika, grozna ideja:

  • Koda odjemalca in koda strežnika se lahko oddaljita od skladnosti. Prihodnje odjemalske aplikacije bi se lahko odločile, da bi bila 72-mestna imena dobra možnost, in začele strežniku pošiljati več podatkov, kot jih lahko varno obdela. Prihodnji koderji na strežniški strani bi lahko opazili, da se zdi, da nihče nikoli ni uporabil vseh rezerviranih 68 bajtov, in se popolnoma odločili, da bi moralo biti 24 več kot dovolj.
  • Napadalec se lahko odloči, da se ne bo ukvarjal z aplikacijo. Z generiranjem in prenosom lastnih zahtev v napravo bi trivialno zaobšli vsa varnostna preverjanja, ki so odvisna samo od aplikacije.

Raziskovalci so lahko hitro preizkusili vedno daljša imena do te mere, da so lahko poljubno zrušili napravo Wemo s pisanjem čez konec pomnilniškega medpomnilnika, rezerviranega za novo ime, in pokvarili podatke, shranjene v bajtih, ki so takoj sledili.

Poškodba sklada

Na žalost se v operacijskem sistemu, ki temelji na skladu, večina programske opreme konča s svojimi začasnimi pomnilniškimi medpomnilniki, ki temeljijo na skladu, in so postavljeni tako, da večini teh medpomnilnikov tesno sledi še en vitalni blok pomnilnika, ki programu pove, kam naj gre, ko je končan, kaj trenutno deluje.

Tehnično so ti kosi podatkov »kam iti naprej« znani kot povratne naslove, in se samodejno shranijo, ko program pokliče tisto, kar je znano kot a funkcijaali podprogram, ki je kos kode (na primer »natisni to sporočilo« ali »prikaži opozorilno pogovorno okno«), ki ga želite uporabiti v več delih svojega programa.

Povratni naslov je čudežno zapisan na sklad vsakič, ko je podprogram uporabljen, tako da lahko računalnik samodejno "odmota" svojo pot, da se vrne tja, od koder je bil podprogram poklican, kar je lahko drugačno vsakič, ko se aktivira.

(Če bi podprogram imel fiksen povratni naslov, bi ga lahko poklicali samo z enega mesta v vašem programu, zaradi česar bi bilo nesmiselno, da bi se sploh trudili zapakirati to kodo v ločen podprogram.)

Kot si lahko predstavljate, če poteptate ta čarobni povratni naslov, preden se podprogram konča z izvajanjem, se bo, ko se konča, zaupljivo, a nevede "odvil" na napačno mesto.

Z malo (ali morda veliko) sreče bi lahko napadalec vnaprej predvidel, kako bo kreativno poteptal povratni naslov in s tem namerno in zlonamerno napačno usmeril program.

Namesto, da bi se preprosto zrušil, bi lahko napačno usmerjeni program preslepili, da izvaja kodo po napadalčevi izbiri, s čimer bi povzročil tako imenovano izvedba oddaljenega kode exploit ali RCE.

Dve skupni obrambi pomagata zaščititi pred tovrstnimi napadi:

  • Randomizacija postavitve naslovnega prostora, znana tudi kot ASLR. Operacijski sistem namerno naloži programe na nekoliko drugačne pomnilniške lokacije ob vsakem zagonu. Zaradi tega je napadalcem težje uganiti, kako napačno usmeriti hroščeče programe na način, da na koncu pridobijo in obdržijo nadzor, namesto da zgolj zrušijo kodo.
  • Stack kanarčkov, poimenovana po pticah, ki so jih rudarji nekoč jemali s seboj pod zemljo, ker so ob prisotnosti metana omedlele, in tako predstavljalo kruto, a učinkovito zgodnje opozorilo o nevarnosti eksplozije. Program namerno vstavi znani, vendar naključni blok podatkov tik pred povratni naslov vsakič, ko je podprogram klican, tako da bo prekoračitev medpomnilnika neizogibno in zaznavno najprej prepisala »kanarčka«, preden ta preseže dovolj daleč, da ga potepta na zelo pomemben povratni naslov.

Da bi njihovo izkoriščanje delovalo hitro in zanesljivo, so morali raziskovalci prisiliti vtič Wemo, da izklopi ASLR, česar oddaljeni napadalci ne bi mogli storiti, toda z veliko poskusi v resničnem življenju se lahko napadalcem vseeno posreči, pravilno ugibajo na pomnilniške naslove, ki jih uporablja program, in vseeno pridobite nadzor.

Toda raziskovalcem ni bilo treba skrbeti za problem stack canary, ker je bila aplikacija s hrošči prevedena iz izvorne kode z izklopljeno funkcijo »vstavi varnostna navodila za preverjanje kanarčka«.

(Programi, zaščiteni s Canaryjem, so običajno nekoliko večji in počasnejši od nezaščitenih zaradi dodatne kode, ki je potrebna v vsaki podprogrami za izvajanje varnostnih pregledov.)

Kaj storiti?

  • Če ste lastnik Wemo Smart Plug V2, poskrbite, da domačega usmerjevalnika niste konfigurirali tako, da omogoča dostop do naprave od »zunaj«, prek interneta. To zmanjša tisto, kar je v žargonu znano kot vaš napadalno površino.
  • Če imate usmerjevalnik, ki podpira Universal Plug and Play, znan tudi kot UPnP, se prepričajte, da je izklopljen. UPnP omogoča, da se notranje naprave nenamerno odprejo zunanjim osebam.
  • Če ste programer, izogibajte se izklopu varnostnih funkcij programske opreme (kot je zaščita sklada ali preverjanje sklada), samo da prihranite nekaj bajtov. Če vam resnično zmanjkuje pomnilnika, poskusite zmanjšati svoj odtis tako, da izboljšate svojo kodo ali odstranite funkcije, namesto da zmanjšate varnost, da boste lahko stlačili več.

Časovni žig:

Več od Gola varnost