Al in 2006 was bekend dat er UPnP-gaten zaten in consumentenelektronica zoals routers. Maar in de jaren daarna is er weinig met die kennis gebeurd. De laatste twee jaar duiken er echter opeens allemaal hacks op die UPnP misbruiken. Daniel Garcia maakte in 2011 een portscanner die gebruik maakte van gaten in de UPnP-stack van verschillende apparaten en ook Dan Kaminsky had de nodige hacks die gebruik maakten van UPnP.

Onlangs kwamen daar nieuwe meldingen bij van twee beveiligingsbedrijven. Rapid7 concentreerde zich op bufferoverflows in libupnp, Linux-IGD en miniupnp, DefenseCode richtte zich op bufferoverflows in de stack van Broadcom.

Wat is UPnP

Voordat we in wat meer detail op achtergronden en oplossingen kijken is het goed om te kijken naar wat UPnP eigenlijk is, want er is nogal wat onduidelijkheid.

Kijk je strikt naar de definitie, dan is UPnP een raamwerk voor het makkelijk maken van genetwerkte diensten, zoals het (gedeeltelijk) controleren van bepaalde functionaliteit op een router, of het browsen en afspelen van digitale content, het besturen van een airconditioning, of het configureren van draadloze verbindingen via een bedraad netwerk. De achterliggende gedachte achter UPnP was het makkelijker maken van genetwerkte diensten: plug een apparaat in het netwerk in en het werkt gewoon. Niet zo gek als je bedenkt dat het configureren van apparaten voor veel mensen geen makkelijke klus was, of is.

Maar in de praktijk wordt de term UPnP vooral gebruikt voor een paar zogeheten "profielen" die gedefineerd zijn door het UPnP-consortium: Internet Gateway Device (routers) en UPnP A/V (mediaapparaten) en voor veel mensen is UPnP synoniem met één van deze twee profielen. Hoewel er in implementaties van UPnP A/V ongetwijfeld ook gaten zitten, is verreweg het meeste onderzoek gedaan naar Internet Gateway Devices.

De UPnP-protocolstack is vrij simpel: apparaten melden zich aan en af op een netwerk door op een multicastadres berichten te sturen met informatie over het apparaat. In deze berichten (simpele HTTP-headers) staat onder andere informatie met een URL waar een XML-bestand opgehaald kan worden met meer informatie over het apparaat. In dit XML-bestand staat onder andere welke diensten aangeroepen kunnen worden en waar meer informatie over elke individuele dienst opgehaald kan worden, plus een URL waar via SOAP commando's heengestuurd kunnen worden.

Programma's die een actie willen laten uitvoeren (zoals, "prik een gaatje in de firewall en stuur al het verkeer door naar deze poort op dit IP-adres") worden "control points" genoemd. Voorbeelden van control points zijn mediaspelers, of Live Messenger, dat UPnP gebruikt om poorten voor onder andere videochats en het oversturen van bestanden gebruikt. Ook "hulp op afstand" in Windows XP en de Sony Playstation maken gebruik van UPnP.

Beveiliging

UPnP heeft zelf geen ingebouwde beveiliging. Het is dan ook expliciet bedoeld voor gebruik op een lokaal netwerk en alles daar wordt als vertrouwd beschouwd. Maar de afgelopen jaren is duidelijk aangetoond dat dit een onjuiste aanname is: er is genoeg malware die een lokaal netwerk onveilig maakt, zoals wormen, virusen, trojans en ook applicaties (flash, Java) die uit de sandbox van de browser weten te breken.

Dat betekent dus dat elk apparaat dat UPnP implementeert zelf de beveiliging moet doen en hier schort het eigenlijk altijd aan. In 2008 bijvoorbeeld gebruikte GNUcitizen een bug in Adobe Flash waarmee het mogelijk was buiten de sandbox te komen en combineerde dat met UPnP bugs. Hierdoor werd een lek op het lokale netwerk opeens kwetsbaar voor buiten het netwerk. Door via een omweg poorten door te lussen naar buiten lukte het mijzelf in 2006 om netwerken (gedeeltelijk) open te zetten. Maar het kan eigenlijk nog veel simpeler: er zijn routers die UPnP domweg ook aan de WAN-kant open hebben staan, waardoor iedereen tegen de router aan kan praten en mogelijk controleren.

Gaatjes in de firewall

Zoals gezegd concentreren de meeste hacks zich op de Internet Gateway Devices (IGDs). De bekendste voorbeelden van IGDs zijn ADSL-modems, of huis-, tuin- en keukenrouters. De specificatie van het IGD-profiel heeft een paar interessante opties, zoals het aan kunnen maken van portmappings (het befaamde "gaatjes in de firewall prikken"). Op zich zijn er genoeg scenario's te bedenken waarin dit nuttig kan zijn: in het geval van Live Messenger kan je van tevoren niet weten met hoeveel je mensen je tegelijk op een netwerk bestanden wil versturen of ontvangen, of wil videochatten en moeten er dynamisch poorten afgesproken worden.

Hoewel de UPnP A/V apparaten niet feilloos zijn hebben de meeste hacks betrekking gehad op apparaten die het Internet Gateway Device-profiel implementeren. Net als in het verleden hebben de hacks van de afgelopen paar weken zich geconcentreerd op het incorrect afhandelen van data in de UPnP SOAP-berichten. Al eerder is gebleken dat inputvalidatie in de code die deze berichten afhandelt verre van robuust is: in oude versies van Linux-IGD werd de data ongecontroleerd aan een shellscript op het apparaat gegeven, dat vervolgens met volledige systeemprivileges draaide. De recente bugs misbruiken bufferoverflows in verschillende implementaties, waarmee ze toegang verkrijgen tot het apparaat en er van alles mee uitgehaald zou kunnen worden, zoals het injecteren van valse DNS-informatie in de router (wat handig is als je iemand bijvoorbeeld wil doorsturen naar een valse banksite).

UPnP is een erfenis van Microsoft toen het nog geen toonbeeld was van goede beveiliging Lees verder op pagina 2

Voldoet aan specificaties, vol met gaten

Er zijn een paar problemen die ervoor zorgen dat UPnP-implementaties zo onveilig zijn. Ten eerste zijn daar de slechte, soms ronduit amateuristische, protocolspecificaties. Hoewel de kwaliteit in de laatste generatie specificaties heel sterk is verbeterd, zijn de eerste versies, die iedereen nog steeds implementeert ivm "backwards compatibility", erg onduidelijk. Er wordt wel gesproken over wat een apparaat moet implementeren, maar er wordt totaal niet duidelijk gemaakt wat ongewenst is. Dat blijft dus onderbelicht.

Het resultaat is dat er alleen getest wordt op wat een apparaat moet kunnen en niet op wat niet mag, iets dat krakers natuurlijk wel doen. Dit wreekt zich in een industrie als consumentenelectronica, waar het motto vaak is "als het niet hoeft en het kost geld, dan doen we het niet". Het resultaat is dus dat er heel veel apparaten zijn die perfect aan de specificaties voldoen, maar tegelijkertijd vol met gaten zitten.

Erfenis van Microsoft

Een van de drijvende krachten achter de introductie in 1999 was Microsoft: UPnP werd vanaf Windows XP standaard ondersteund en het wordt volop gebruikt in programma's als Live Messenger en hulp op afstand. Ook heeft Microsoft een permanente plaats in sommige van de UPnP-commissies. Toen UPnP geïntroduceerd werd was Microsoft geen toonbeeld van beveiliging. Tegenwoordig let Microsoft gelukkig een stuk beter op, maar UPnP is nog een erfenis van voor die tijd.

Een ander probleem is dat er relatief weinig UPnP-stacks zijn: met een stuk of 10 heb je het wel gehad. Dat betekent dus ook dat je als kraker niet eens zo heel veel mogelijkheden hoeft te proberen en met een beetje extra intelligentie (zoals kijken hoe een apparaat zich meldt op het netwerk) weet je precies wat wel en niet zal werken. De software op de routers draait met volledige systeemprivileges, waardoor fouten grote gevolgen kunnen hebben.

Hoe goedkoper hoe beter

Het laatste probleem is inherent aan hoe de consumentenelectronicaindustrie werkt: hoe goedkoper hoe beter. Veel software die in apparaten wordt gestopt wordt vaak alleen vernieuwd op het moment dat een chipsetleverancier een nieuwe SDK uitbrengt (vaak met een nieuwe chip). Updates worden slechts sporadisch toegepast, of als er een fout wordt geconstateerd voor een bepaald apparaat, dan wordt het alleen voor dat apparaat aangepast, niet voor andere vergelijkbare of toekomstige apparaten.

Het gevolg is dat er jarenlang nadat een fout is geconstateerd, er nog apparaten op de markt komen die mogelijk kwetsbaar zijn. Goedkoop blijkt maar weer eens duurkoop te zijn.

Oplossingen

Als je kijkt naar concrete oplossingen voor de problemen die zich hebben voorgedaan, dan is de beste oplossing: zet UPnP uit en verwijder (indien mogelijk) de software ervoor van je router. Maar dat laatste is vaak niet mogelijk, dus kun je niet anders dan hopen dat uitzetten genoeg is. Het zou namelijk niet de eerste keer zijn dat er ongewild toch iets blijft draaien.

Daarnaast: installeer updates voor je router. Als er geen zijn en de tools van Rapid7 zeggen dat je wel kwetsbaar bent, klaag dan bij de leverancier. Mocht deze niets willen repareren, koop de volgende keer dan niets meer van deze leverancier, of kijk naar alternatieve firmwares waarin deze fouten niet voorkomen.

Op de lange termijn is het onduidelijk welke maatregelen genomen moeten worden. UPnP is op zich een aardig idee, alleen zijn bepaalde aannames niet meer van deze tijd. En dus zullen implementaties ervan steeds maar weer lek blijken te zijn.