Get in touch!

Use the form on the right to contact us.

We answer emails as soon as we can. See the contact page for more information.

           

123 Street Avenue, City Town, 99999

(123) 555-6789

[email protected]

 

You can set your address, phone number, email and site description in the settings tab.
Link to read me page with more information.

Blog

Säkerhet för Internet of Things - Inget är nytt, allt har ändrats

Joachim Strömbergson

Inbyggda system och Internet of Things
I grund och botten ser jag inte att Internet of Things är någonting fundamentalt
nytt. Det är samma typer av inbyggda system som integrerats i produkter - i saker. I takt med Moores lag har allt mer beräkningskraft och därmed digitala funktioner, dvs informations och informationsbearbetning kunnat läggas till fysiska objekt och göra dom smartare.

För att illustrera har Moores lag gjort att processorprestandan hos den mycket dyra arbetsstation från Sun jag arbetade på i början av 1990-talet i dag finns i en glödlampa som kan byta ljusets färg på kommando.

Ett inbyggt system är helt enkelt en dator som lever ett långt, enahanda, ensamt och otacksamt liv.

De huvudsakliga parametrarna vid design av ett inbyggt system är:

  1. Kostnad
  2. Funktion och eventuell realtidsprestanda
  3. Fysisk storlek
  4. Kostnad
  5. Livslängd
  6. Servicebarhet
  7. Effektförbrukning och miljökrav
  8. Kostnad

Internet of Things (IoT) innebär att det inbyggda systemet, den övergivna datorn får möjlighet att kommunicera med omvärlden. Frågan är bara med vem och om vad?

Det inbyggda systemet tillförs helt enkelt funktionskravet att kommunicera med sin omvärld med IP-paket. Det är den enda skillnaden. I övrigt är det samma krav. Och utvecklingen av IoT-system sker på samma sätt, med samma villkör och i allt väsentligt av samma personer som för inbyggda system.

Kommunikationsfunktionaliteten är i allt väsentligt samma nätverksteknik som vanliga datorer använder för att kommunicera. Men tack vare den tekniska utvecklingen har priserna för att lägga till nätverkfunktionalitet till inbyggda system kommit ned i prisnivåer som är rimliga för många produkter. Även minskning av fysisk storlek och kompakta byggsätt gör att det går att integrera antenner och andra fysiska kommunikationskomponenter i många produkter.

Samtidigt innebär nätverksfunktionalitet, och då speciellt funktionalitet för att kommunicera på Internet en fundamental förändring av systemets gräns. Plötsligt kan glödlampan, tandborsten, vattenpumpen, gasolgrillen, hemlarmet, kattluckan, badrumsfläkten, glassmaskinen etc börja prata med andra enheter över hela jorden. Därmed kan systemet påverka och påverkas inte bara av sin lokala miljö.

Detta har lett till att IoT-enheter snabbt blivit ett potentiellt säkerhetsproblem. Anders Thoresson har skrivit en artikel om detta i NyTeknik. I artikeln är jag intervjuad och artikeln har lett till flera diskussioner. Den här texten är ett slags försök att förklara hur jag tänker.


Säkerhet för IoT
De grundläggande säkerhetsproblemen som finns för IoT skiljer inte från andra kommunicerande system. Vi behöver samma typer av säkerhet: Integritet, äkthetskontroll och identifiering och konfidentialitet. Det sista, konfidentialitet, att skydda information från att läsas av tredje part är det man traditionellt löser med kryptering. Det är också ofta det minst viktiga för IoT. Temperaturen i kylskåpet eller varvtalet på en fläkt är inte kritiskt om någon får reda på. Men det är viktigt att veta att informationen kommer från rätt enhet, att värdet inte har förvanskats eller att det skapats på kommando från en part som har rätt att skicka kommandon till systemet.

För normala datorsystem löser vi dessa problem med en verktygslåda av algoritmer, konstruktioner baserade på algoritmerna och protokoll som använder konstruktionerna för att på ett definierat sätt lösa olika relationer och utbyten mellan parter. Algoritmer som AES, SHA-256, RSA, Elliptic Curve. Konstruktioner som HMAC, GCM, Bcrypt. Protokoll som TLS.

En vanlig uppfattning är att dessa algoritmer, konstruktioner är för tunga för IoT-applikationer. Det pågår därför massor med iofs spännande forskning på lättviktskrypton och specifika protokoll för IoT.

Jag vill dock hävda att uppfattningen ofta inte stämmer. För de allra flesta IoT-applikationer har vi redan i dag tillräckligt kompakta implementationer av befintliga algoritmer och protokoll för att fungera kostnads- och prestandamässigt. Och detta kommer att förbättras över tiden i takt med allmänna teknikutvecklingen (1). Mot detta ska ställas att använda en mycket mer obeprövad lösning som ingen känner till. Det ger osäkerheter och försvårar integration och interoperabilitet. Jag skulle aldrig någonsin rekommendera det av NSA för IoT utvecklade blockkryptot SIMON framför AES.
 

Rent krasst kostar säkerhetsfunktionaliteten i första hand minne - utrymme för kod i Flash sam arbetsminne i RAM. Samtidigt är mängde minne i en krets den resurs som skalar snabbast med nya kretsprocesser. Prestandamässigt kan initiering av session vara tidskritiskt, men annars har de flesta IoT-applikationer tillräckligt med dödtid att det finns gott om cykler att utföra nödvändiga beräkningar (2).

Vi har redan i dag ett antal lösningar för att utbyta hemligheter, kommunicera säkert MbedTLS, Nettle, TweetNaCl med algoritmer och protokoll (ex DTLS, 6LowPAN, CoAP) har vi som jag ser det en rejält fylld verktygslåda Med TLS 1.3 som kommer senare i år får vi även in fler kurvor och kryptmoder (ex OCB) som lämpar sig väl för IoT-applikationer.

Tittar man på utbudet på MCU:er är det faktiskt så att väldigt många kommer i varianter som inkluderar i alla fall en AES-kärna för ingen eller minimal skillnad i pris. Har vi AES kan vi bygga ett antal konstruktioner för att lösa konfidentialitet, integritet och autentisering.

Enligt min mening är det inte inte kryptomekanismer eller kryptoptokoll som ger IoT säkerhetsproblem. Det är istället i enklare, mycket mer triviala saker.

Typiskt använder man standardnycklar i alla individer av en produkt, vilket innebär att faller en nyckel faller säkerheten hos alla individer. Produkter har ofta även standardanvändare och lösenord för administration. Dess identiteter och lösenord ändras inte vid installation.

Ett bra exempel på hur illa det kan vara är protokollet MQTT. Protokollet är ett enkelt meddelandeprotokoll mellan enheter som kommunicerar asynkront via en mellanhand, en broker. MQTT har fått stor spridning för IoT. Tyvärr stödjer MQTT dåligt vettiga säkerhetsmekanismer, och de som finns används sällan. Vilket säkerhetsexperten Lucas Lundgren upptäckte.


Det jag ser är specifikt problematiskt för IoT-prylar är

  • Koordinering av många miljoner enheter samtidigt på ett effektivt sätt. Samtidigt visar DDoS-attackerna med kameror att det går att lösa.
     
  • Säker uppdatering av inbyggd programvara (Firmware - FW). De allra flesta mekanismer för uppdatering jag sett brister alla på olika sätt. Den bästa jag sett så här långt är den Apple använder för sina iOS-enheter.  Med Internet of Things vill man ofta göra uppdateringen på distans (Firmware Over The Air - FOTA). Samtidigt är det stora problemet för inbyggda system inte att göra säker uppdatering. Problemet är istället att FW inte uppdateras så länge inte systemets grundfunktion slagits ut. Detta trots att det finns kända problem och sårbarheter.
     
  • Verifiering av tillitsankare. Ett tillitsankare (Root of Trust) är basen för att en part kan styrka motpartens äkthet utan att man på förhand har utväxlat en för parterna gemensam hemlighet. Ofta löser man detta genom olika typer av parningsförfarande i samband med installation.
     
  • Livslängder och kärlek. För ett system som lever 10, 20, 30 år kommer antaganden om exempelvis protokoll och algoritmers motståndskraft mot attacker att ändras. Systemen kommer dock sällan att uppdateras som reaktion på dessa förändrade fundamental.
     
  • Felsökning och underhåll. Att kombinera möjlighet att observera och modifiera interna tillstånd utan att rubba den säkerhetsmässiga integriteten.

Säkerhetsläget för vanliga IT-system är inte perfekt. Långt därifrån. Men det borde inte hindra oss från att applicera tillkämpad kunskap från dessa system för att säkra upp IoT. Att inte (ännu en gång) upprepa samma misstag. Över huvud taget upplever jag att det finns ett kompetensbehov bland utvecklare av inbyggda system och Internet of Things. Att få hjälp att förstå hur säkerhet fungerar, hur man identifierar vilken säkerhet systemet man utvecklar faktiskt behöver.

Säkerhet kostar, både i ökad utvecklingskostnad och i produktens kostnad över dess livscykel. Därför borde inte lägga pengar på att utveckla och använda säkerhetslösningar som ger fel säkerhet för systemet och applikationen. Att inte använda algoritmer som vi redan i dag vet inte längre ger säkerhet, exempelvis hasfunktionen MD5. Och inte utveckla egna osäkra säkerhetslösningar och protokoll. Istället använda beprövade mekanismer som finns och vi litar på, integrera befintliga, bra implementationer och lägga tid och pengar på att verifiera att säkerhetsmekanismerna fungerar i systemet. Inte minst att verifiera att systemet beter sig på förväntat sätt när säkerheten fallerar.

Väl utvecklade, installerade och korrekt använda IoT-lösningar borde kunna ha samma nivå på säkerhet som väl fungerande generella IT-lösningar.

Joachim Strömbergson


Fotnötter
(1) Jag är medveten om att Moores lag för high end-processorer i stort sett stannat av. Men processorer i IoT-tillämpningar tillverkas fortfarande i ganska gamla processer ex 90 nm. Det är långt kvar ned till 14, 10 nm som är framkant för Moores lag i dag.

(2)  I en del tillämpningar finns det mer eller mindre strikta krav på responstid (realtidssystem). Här underlättar hårdvarustöd för implementationer, ex att kryptot AES finns som hårdvarublock i processorn.