Säkra Gateways för fordon
Att garantera säkerheten i moderna fordon är inte lätt, givet hur komplexa dagens system är. En hackare utan fysisk kontakt med ett fordon kan attackera dess interna nätverk. Alternativt kan fordonets och passagerarnas säkerhet äventyras om uppsåtligt skadliga meddelanden skickas till ECUer över CAN-bussen. För att förhindra dessa attacker har fordonsindustrin tagit fram en arkitektur med Säkra Gateways (SG). Carmelo Loiacono från Green Hills Software jämför olika designansatser och tar fram riktlinjer för att garantera hela systemets säkerhet.
Större attackyta
I fordonsindustrin går trenden mot att olika elektroniska domäner samlas på en enskild plattform. Utmaningen ligger i att få applikationer med än striktare krav på fordons- och passagerarsäkerhet att fungera i en säker miljö på en enskild plattform. Fordons interna nätverk är kopplade till externa enheter i större grad än någonsin tidigare, varigenom de blottlägger nätverket inför påtryckningar utifrån.
Dessutom har utvecklingen inom kommunikation mellan fordon och allt annat (V2X) lett till ökade dataöverföringar med externa resurser över Wi-Fi, 3G och LTE. ECUer i fordon kan utsättas för attacker utifrån med uppsåt att försöka kontrollera beteendet i dess mjukvara.
Attacker kommer som data över vanliga kommunikationskanaler (t ex ett externt nätverk) som väl residenta i enhetens minne kan trigga sårbarheter i mjukvara och hårdvara. Genom utnyttjandet av sårbarheter kan attacker ta över exekveringen av programmet och ta kontroll över dess beteende [1]. Fig 1 visar hur attackytan ökat eftersom moderna fordon är uppkopplade till många olika källor.
Fig 1. Moderna uppkopplade fordon
Säkra Gateways (SG) används för att separera fordonets interna nätverk från externa, och på så sätt skydda interna kommunikationer från potentiella attacker utifrån. Säkra Gateways är avgörande för fordonets säkerhet eftersom kompromettering av säkerheten hos en SG leder till kompromettering av säkerheten hos hela systemet.
Två faktorer måste beaktas när det gäller säkerheten hos en SG: grundsäkerheten hos operativsystemet som körs på dem, samt säkerheten hos applikationer och data. I denna rapport analyserar vi möjliga sätt att designa en SG med datasäkerhet och passagerarsäkerhet i åtanke. Vi kommer också med förslag och riktlinjer för design av säkra SG.
Rapporten är upplagd så att sektion 2 behandlar jämförelser och riktlinjer för design av SG; sektion 3 presenterar metoder för hantering av I/O-enheter i virtualiserade system; och sektion 4 avslutar rapporten med sammanfattande kommentarer.
Design av programvara för Säkra Gateways
Moderna fordon utrustas med mer intelligens och fler sensorer, såsom mätare av vägbanans tillstånd och förarens trötthet, givare för däcktryck och temperatur i kylsystemet, och avancerade sensorer för autonom körning.
Dessutom betyder det ökade antalet kopplingar mellan ett fordons kontrollmoduler att passagerarnas säkerhet inte kan garanteras om inte systemen är säkra. Det räcker inte att skydda bara konfidentiella data och den fysiska tillgången till systemen, utan även kritiska trygghetssystem måste skyddas.
På grund av detta är det mycket viktigt för fordonets säkerhet och trygghet att en SG används för att skydda det interna nätverket från externa attacker. Fig 2 beskriver de huvudsakliga programvarukomponenterna i en SG.
Fig 2. Programvarukomponenterna i en Säker Gateway
Applikationsmiljön består av icke-kritiska applikationer utan säkerhetskrav. Säkerhetstjänster använder symmetriskt och asymmetriskt krypto för att garantera konfidentialitet och integritet för meddelanden inom SG-komponenter och mellan ECUer.
En SG är ett system med blandad säkerhetsnivå där olika processer har olika säkerhetskrav. En SG bör designas så att en applikation inte kan utöva inflytande på andra applikationer. Detta kan uppnås med hjälp av separationsegenskaperna i en separationskärna.
Separationskärnor
Separationskärnor erbjuder avancerade funktioner för utvecklare av inbyggnadssystem som behöver: försäkra sig om att heterogena mjukvarukomponenter inte orsakar konflikter; skydda informationsflöden; och förstärka fordonets kommunikationssystem med avseende på säkerhets- och trygghetskrav.
En väl designad separationskärna måste se till att fel i en process inte propagerar till resten av systemet, vilket kan göras genom att begränsa det skrivbara minnesområdet för processen. Separationskärnan består av avdelningar som kallas partitioner, och i varje partition körs en process. En process som körs i en partition kan bestå av flera trådar. Separation garanteras mellan partitioner, men inte inuti en enskild partition.
Fördelarna med en separationskärna är: att fel begränsas i omfattning; att kritiska processer kan köras på samma hårdvaruplattform utan risk för konflikter; att konfidentialiteten hos känslig data skyddas; och att nya funktioner kan integreras utan att kräva omtestning av hela systemet.
Operativsystem som inte baserar sig på en separationskärna kan hamna i odefinierade tillstånd, hamna i dödlägen, eller ha icke-deterministiska programflöden. Detta kan leda till allvarliga konsekvenser, speciellt inom fordonsindustrin. En separationskärna som är designad för användning i kritiska system, exempelvis en SG, måste alltid garantera tillgängligheten av beräknings- och minnesresurser för varje process i en partition.
En annan roll hos operativsystemet är att förhindra denial-of-service-attacker, vanligtvis genom statisk allokering av CPU- och minnesresurser till varje process. Statisk allokering av resurser över tid leder dessutom till att varje process kommer exekveras inom ett bestämt tidsintervall. Detta skyddar integriteten hos de processer som undviker körning utanför sitt eget tidsfönster.
De främsta kraven på en SG är: realtid, trygghet, säkerhet, pålitlighet, och prestanda. En mikrokärnearkitektur, som används i vissa separationskärnor som exempelvis INTEGRITY RTOS [3] från Green Hills Software, försäkrar att en kärna är lättestad och verifierbar för att buggar och säkerhetshål ska kunna undvikas.
I en mikrokärnearkitektur erbjuder kärnan endast grundläggande tjänster: stöd för kommunikation mellan partitioner (IPC), virtuell minneshantering och schemaläggning. Mer komplexa tjänster körs i egna partitioner, vilket leder till en säkrare och pålitligare kärna.
Fig 3 visar en mikrokärnebaserad separationsarkitektur. Notera att vissa tjänster, som filsystemshantering och drivrutiner, körs i separata partitioner fristående från mikrokärnan, som bara implementerar grundläggande funktionalitet.
Figur 3. Mikrokärnebaserad separationsarkitektur
Linux på Säkra Gateways
Linux för embeddedsystem är, med sin kärna och tillhörande paket bestående av miljontals rader kod, en attraktiv uppsättning färdig mjukvara som också kan användas när en SG designas.
Eftersom det är praktiskt taget omöjligt att testa miljontals rader kod är det ofrånkomligt att Linux kommer att fortsätta att innehålla säkerhetshål och sårbarheter. Dessutom blir embeddedsystem allt mer uppkopplade, vilket leder till att hackare kan utnyttja dessa sårbarheter, ibland till och med över Internet.
När det inte är möjligt att byta ut Linux mot ett operativsystem med separationskärna kan virtualisering användas för att förbättra säkerheten i en SG genom att separera systemets mjukvarukomponenter. En hypervisor är ett lager mjukvara som virtualiserar hårdvaruresurser och har högre privilegier än de operativsystem som körs på den. På grund av de högre privilegierna förblir hypervisorn intakt även om operativsystemet tas över.
En hypervisor som är designad för att vara säker och pålitlig har stora fördelar gentemot hårdvara för lågnivåsäkerheten. Den kan också erbjuda flera säkerhetsnivåer, så att en tjänst med känslig data kan köras i en separat partition bredvid en tjänst med mindre känslig information. Trots att de olika säkerhetsnivåerna körs samtidigt kan de inte se eller modifiera varandras data.
Det finns andra sätt för att stödja flera samtidiga OS-kontexter än en separationskärna eller en klassisk typ 1 hypervisor. Linuxcontainrar [4] (LXC) är en metod för att köra flera isolerade Linuxsystem, så kallade containrar, på ett enskilt värdsystems Linuxkärna. Jails i FreeBSD är en liknande metod med en BSD-kompatibel miljö. Containrar skyddar dock inte mot attacker riktade mot kärnan, och då särskilt mot drivrutiner som körs med höga privilegier på både Linux- och BSD-system.
Containrar är mindre säkra än separationskärnor och hypervisors, eftersom kärnan som agerar värd åt alla containrarna har en mycket större attackyta. Den mindre attackytan i en separationskärna eller hypervisor minskar risken för att en anfallare ska kunna bryta sig ut ur en virtuell maskin och påverka andra delar av systemet.
Säkerhet hos IO-enheter.
En viktig aspekt när det gäller säkerheten i virtualiserade system är enhetshanteringen. Vi syftar särskilt på enheter som görs tillgängliga till ett gäst-OS (Linux) på en SG, som beskrevs i sektion 2B.
Fig 4 illustrerar fallet då en SG använder expansionsportar som tillåter direkt minnesaccess (DMA). Om separationskärnan skulle ge full kontroll över DMA-enheten till gästen skulle säkerheten i hela system riskeras. Gästen skulle kunna använda DMA för att låta enheten läsa och skriva till och från hela minnet, inklusive kärnan. Om inte speciella skydd används skulle en anfallare kunna använda detta för att kringgå alla säkerhetsmekanismer och få full tillgång till hela den fysiska adressrymden.
Figur 4. Separationskärnor och virtualisering förbättrar säkerheten
Av denna anledning har många moderna systemkort en IOMMU, en speciell minneshanterare för IO som begränsar vad en DMA-enhet får tillgång till. En IOMMU har ett programmatiskt gränssnitt för att definiera vilka adressområden en enhet får lov att tillgå.
Detta möjliggör drivrutiner som körs i helt egna partitioner under en separationskärna eller i ett gäst-OS. Det avråds starkt från att ge direkt tillgång till enheter från ett gäst-OS om det inte finns en IOMMU som kan skydda systemet, men trots det sker sådant ofta i praktiken, och ses som en kompromiss för förenklat underhåll eller för att snabbare nå ut på marknaden.
Utan hårdvaruskydd behöver DMA-enheter istället hanteras av separationskärnan för att förhindra att ett fel i gästens drivrutin inte tillåter DMA-enheten att orsaka minneskorruption. Mer specifikt behöver DMA-åtgärderna hanteras av separationskärnan medan de mer komplexa delarna av drivrutinen kan hanteras av gästen.
Detta gör att implementationen av drivrutinerna behöver gå mot en paravirtualiserad modell för att nå nödvändiga prestanda. Extra komplexitet är priset som måste betalas för att systemet ska hållas robust, säkert och tryggt, och erfarenhet visar att omkostnaden faktiskt är mindre än väntat om gränssnitten är korrekt designade.
Slutsats
Säkra Gateways (SG) är komplexa system som måste garantera fordonets skydd mot attacker utifrån. Det finns flera fördelar med att använda en säker och pålitlig separationskärna för att förbättra säkerheten hos en SG, och på så sätt säkerställa separationen mellan kritiska och icke-kritiska mjukvarukomponenter med skydd på flera nivåer. Sådana mjukvarukomponenter hanterar ofta olika typer av bussar; själva målet med separationslösningen är att fungera som en gateway mellan olika domäner på samma hårdvara, om nödvändigt med filtrering och annan skyddsfunktionalitet. Separationsteknik öppnar upp nya möjligheter i fordonsvärlden och förbättrar säkerheten i hela systemet.
Carmelo Loiacono
Field Applications Engineer
Green Hills Software
Turin, Italien
carmelo@ghs.com
Referenser
[1] Erlingsson Ú., Younan Y., Piessens F. (2010) Low-Level Software Security by Example. In: Stavroulakis P., Stamp M. (eds) Handbook of Information and Communication Security. Springer, Berlin, Heidelberg.
[2] N. Lu, N. Cheng, N. Zhang, X. Shen and J. W. Mark, ”Connected Vehicles: Solutions and Challenges,” in IEEE Internet of Things Journal, vol. 1, no. 4, pp. 289-299, Aug. 2014.
[3] https://www.ghs.com/products/rtos/integrity.html
[4] https://linuxcontainers.org/it/
[5] https://www.freebsd.org/it/
Filed under: Embedded, Fordonselektronik