Separazione e virtualizzazione

Un nuovo trend nell’industria automobilistica consiste nel mettere insieme componenti software di varia natura in un’unica piattaforma. Questa tendenza apre nuovi scenari ad applicazioni che hanno requisiti di sicurezza stringenti. Inoltre, il crescere delle interazioni tra automobili e mondo esterno, rende quest’ultime potenzialmente esposte ad attacchi alla sicurezza. Come mostrano i recenti attacchi, a scapito del settore automobilistico, è possibile che questi ultimi possano compromettere la sicurezza dei passeggeri oltre che la sicurezza dei dati presenti nelle auto.

Kernel di separazione

I kernel a separazione offrono funzionalità avanzate ai progettisti software di sistemi embedded critici che necessitano di garantire che dei componenti software eterogenei non interferiscano tra loro, gestire il flusso di informazioni e rinforzare il sistema di comunicazione dell’autoveicolo dal punto di vista della sicurezza. Un buon kernel a separazione deve garantire che gli errori all’interno di un processo non si propaghino all’intero sistema, ciò può essere fatto confinando lo spazio di scrittura dei processi in una particolare zona di memoria. I kernel a separazione quindi sono formati da “comparti stagni” chiamati partizioni, in ognuna di queste partizioni è in esecuzione un processo. Un processo di una partizione può essere composto da più task (thread). All’interno della partizione non viene garantita la separazione, mentre la separazione è garantita tra le diverse partizioni. I benefici principali dei kernel a separazione sono: fungere da contenitori di errori; permettere un’esecuzione senza interferenze di processi di diversa criticità su un’unica piattaforma hardware; garantire la confidenzialità dei dati; integrare nuove funzionalità senza dover ritestare l’intero sistema. Sistemi operativi tradizionali, che non usano la separazione come fondamento, possono entrare in stati indefiniti, entrare in deadlock, avere un flusso di esecuzione incontrollato e ciò può avere delle gravi conseguenze su sistemi, come quelli degli autoveicoli, dove bisogna garantire un alto grado di sicurezza e affidabilità. Un kernel a separazione utilizzato in sistemi critici, invece, deve garantire che le risorse computazionali e di memoria siano sempre disponibili al singolo processo in esecuzione in una partizione. Un’altra proprietà importante di sistemi operativi orientati alla sicurezza è prevenire gli attacchi di tipo denial-of-service. Spesso questo tipo di attacchi vengono evitati assegnando a ciascun processo una quantità fissa di risorse in termini di Cpu e memoria. Garantendo la possibilità a ogni processo di essere eseguito in una determinata finestra temporale, l’allocazione statica e distribuita delle risorse in termini di tempo preserva l’integrità dei processi evitando l’esecuzione degli stessi al di fuori della loro finestra temporale. I kernel a separazione in ambito automobilistico sono principalmente utilizzati in applicazioni di tipo digital cluster. Queste applicazioni sono la versione digitale del quadro di bordo di un autoveicolo (tachimetro, contachilometri, spie, ecc.). I requisiti principali di questo tipo di applicazioni sono il real-time, la sicurezza, l’affidabilità e le prestazioni grafiche. Inoltre i produttori di automobili si aspettano che le loro applicazioni cluster siano pronte all’uso nel minor tempo possibile, cioè abbiano un tempo di avvio (boot time) molto piccolo. Se da un lato non è possibile avere un’applicazione di digital cluster disponibile in un tempo nell’ordine dei millisecondi, d’altro canto è possibile abilitare alcune funzioni critiche, come ad esempio la telecamera per la visione posteriore (rear-view camera) in tempi brevissimi. L’architettura microkernel, presente in alcuni kernel a separazione, assicura che il kernel stesso sia facile da testare e verificare in modo da essere privo di bachi e buchi di sicurezza. In un’architettura microkernel solo i servizi di base fanno parte del kernel: supporto per la comunicazione tra le partizioni, gestione della memoria virtuale e scheduling. Il resto dei servizi è in esecuzione all’interno delle partizioni e ciò permette di avere un kernel meno complesso e quindi sicuro e affidabile. La Fig. 1 mostra un’architettura a separazione composta da microkernel. Come si può notare alcuni servizi come la gestione del file system, lo stack di rete e i device drivers sono in esecuzione, in user mode, in partizioni diverse e separati dal microkernel che implementa le funzioni di base e viene eseguito in kernel mode. Quindi un errore, nei servizi di gestione del File System o nei Device Driver non comporta un crash dell’intero sistema. Un altro aspetto riguarda le certificazioni di terze parte dei kernel a separazione. Un kernel a separazione certificato sia per quanto riguarda la sicurezza delle persone che dei dati in diversi settori (es. avionico, militare, automobilistico) può essere utilizzato in svariate applicazioni che richiedono gradi di sicurezza a diversi livelli. Nell’ambito dell’industria automobilistica la più alta certificazione per la sicurezza delle persone è l’Iso 26262 Asil D. Come vedremo successivamente, grazie ai kernel a separazione è possibile avere architetture che prevedono applicazioni a diversi livelli di certificazione su una stessa piattaforma hardware (mixed-criticality systems).

La virtualizzazione

Recentemente la virtualizzazione è un concetto che si è diffuso anche in ambito automobilistico, soprattutto nel consolidamento delle applicazioni cluster, di cui abbiamo parlato precedentemente, con le applicazioni Ivi (In-vehicle-infotainment). Le applicazioni Ivi sono composte da quei sottosistemi hardware e software che forniscono informazioni alla guida insieme a contenuti multimediali di audio e video entertainment, come la radio, le news i sistemi di navigazione, la connettività Bluetooth, il Wi-Fi ecc. La virtualizzazione, in questo contesto, è definita come la possibilità di eseguire un sistema operativo detto guest su un altro sistema operativo detto host. La virtualizzazione può essere essenzialmente: di tipo 1 o bare metal, quando le funzioni del sistema operativo host sono sostituite da un componente software detto hypervisor che permette nel contempo di eseguire un sistema operativo guest; di tipo 2 o hosted, quando l’hypervisor è un normale processo utente sul sistema operativo host. Un’infrastruttura portabile di virtualizzazione, con un’architettura così flessibile da permettere la gestione delle diverse funzionalità hardware disponibili sui microprocessori di oggi, massimizza l’uso dell’hardware dedicato alla virtualizzazione. Di seguito vedremo diverse applicazioni che sono possibili grazie alla separazione, alla virtualizzazione e alla combinazione delle due.

Consolidamento di sistemi a criticità mista

I sistemi a criticità mista sono quei sistemi in cui sono in esecuzione processi con diversi requisiti di sicurezza. Alcuni processi possono avere requisiti di sicurezza per le persone, altri per i dati e altri ancora che riguardano entrambe. Grazie ai kernel a separazione, è possibile ottenere architetture come quella presentata in Fig. 2, dove coesistono, sullo stesso hardware, applicazioni in esecuzione su partizioni diverse, con livelli di certificazione diversa (alcune eventualmente non certificate). Questo tipo di architettura deve garantire che l’esecuzione di un’applicazione non certificata non comprometta i requisiti di certificazione delle altre certificate. Inoltre deve anche garantire che non ci siano interferenze tra applicazioni con livelli di certificazione diversi (freedom from interference). Questo è possibile grazie alla proprietà di separazione offerta da questo tipo di kernel. Come già accennato una nuova tendenza nell’ambito automobilistico è combinare applicazioni cluster con applicazioni infotainment. Questi due tipi di applicazioni hanno requisiti di sicurezza molto diversi. Inoltre, le applicazioni di infotainment odierne sono principalmente in esecuzione su una distribuzione Linux per embedded, come ad esempio Yocto. Grazie a un kernel a separazione ben progettato e alle tecnologie di virtualizzazione, è possibile combinare in modo sicuro e senza perdita di prestazioni un sistema cluster con un sistema di infotainment sulla stessa piattaforma hardware, come mostrato in Fig. 3. La figura mostra un tipico scenario dove un’applicazione cluster e un’applicazione Ivi sono in esecuzione su un’unica Cpu, come ad esempio un Arm Cortex di tipo A provvisto di Memory Management Unit. Mentre l’applicazione cluster è in esecuzione su una partizione nativa del kernel a separazione, l’applicazione IVI, invece, è in esecuzione su sistema operativo Linux per piattaforma embedded. Per poter essere eseguito all’interno di una partizione del kernel a separazione, il sistema operativo Linux necessità di essere controllato da un Virtual Machine Monitor. Un altro vantaggio importante dei kernel a separazione che si può presentare in questo scenario, è il poter avere una parte dei componenti software Autosar che normalmente vengono eseguiti su una Cpu poco complessa (come ad esempio un Arm Cortex di tipo M) in una partizione del kernel a separazione garantendo anche la protezione di memoria e una migliore efficienza di schedulazione dei processi. La funzione principale dei componenti software Autosar è quella di ricevere informazioni sullo stato dell’autoveicolo.

Pubblica i tuoi commenti