Container vs. VM: qual è il piu sicuro?

I container sono davvero meno sicuri di una VM?

James Bottomley, ingegnere di IBM Research e sviluppatore del kernel Linux, ha fatto notare come non esistesse di fatto un metodo standard per misurare il livello di sicurezza di ciascuna tecnologia, riducendo tutto il dibattito a una questione di “sensazioni” da parte dell’utente:

Hypervisors ‘feel’ more secure than containers because of the interface breadth.

Gli hypervisor “sembrano” più sicuri rispetto ai container per l’ampiezza (in termini di user experience, nda) dell’interfaccia.

Basarsi sulle “sensazioni” per definire un qualcosa come sicuro o meno non è sicuramente il modo giusto per effettuare un paragone scientifico ed imparziale.

Prima di tutto, Bottomley è partito col definire un Vertical Code Attack Profile (VAP), ovvero tutto il codice che viene attraversato per erogare un servizio. Come tutti i software, il codice contiene dei bug più o meno importanti. Ovviamente, più codice si attraversa, maggiori sono i rischi di trovare falle nella sicurezza.

Nella seconda fase di questa ricerca, è stato creato un Horizotal Attack Profile (HAP) per misurare di fatto quante righe di codice vengono effettivamente utilizzate per una data applicazione.

A questo punto sono stati lanciati dei benchmark standard:

  • redis-benchmark, che simula l’esecuzione di comandi effettuata da N client nello stesso momento, inviando N query;
  • python-tornado, un web framework in grado di scalare fino a decine di migliaia di connessioni che richiedono connessioni long-lived;
  • node-express, web framework per Node.js su cui sono stati installati due web server con alcuni client esterni.

Questi test sono stati effettuati con Docker, gVisor, gVisor-kvm, Kata Containers, l’hypervisor built-in di Linux e Nabla (l’ultimo rilasciato in casa IBM).

I risultati?

  • Nabla si è comportato meglio rispetto a Kata, risultando cosi più sicuro di un hypervisor;
  • Docker con un profilo seccomp (che blocca chiamate di sistema non attese) configurato a modo, fornisce lo stesso livello di sicurezza di un hypervisor;
  • gVisor in alcuni casi si è comportato al pari di Docker ma in uno dei test è stato decisamente il peggiore. gVisor infatti cerca di migliorare le performance del container riscrivendo le syscall in Go, incrementando notevolmente il codice che necessita di essere eseguito.

Questo ovviamente è solo un punto di partenza, ma l’avreste mai detto che i container sono sicuri come una virtual machine?

Tags: ,