Är virtuella datorer säkrare än containrar?

Vi säger ofta "HTTPS är säkert" eller "HTTP är inte säkert." Men vad vi menar är att "HTTPS är svårt att snoopa och gör människan-i-mitten-attacker svåra" eller "min mormor har inga problem att snoopa HTTP."

HTTPS har dock hackats, och under vissa omständigheter är HTTP tillräckligt säker. Dessutom, om jag upptäcker en exploaterbar defekt i en gemensam implementering som stöder HTTPS (tänk OpenSSL och Heartbleed), kan HTTPS bli en hacking-gateway tills implementeringen korrigeras.

HTTP och HTTPS är protokoll definierade i IETF RFC 7230-7237 och 2828. HTTPS utformades som en säker HTTP, men att säga HTTPS är säkert och HTTP är fortfarande inte döljer viktiga undantag.

Virtuella maskiner (virtuella maskiner) och containrar är mindre noggrant definierade och ingen av dem var avsiktligt utformad för att vara säkrare än den andra. Därför är säkerhetsfrågorna fortfarande mörkare.

Varför tror jag att virtuella datorer är säkrare än containrar

Divide and conquer är en vinnande strategi inom krig och mjukvara. När en arkitektur delar upp ett enda komplext, svårlöst säkerhetsproblem i enklare problem, blir resultatet i de flesta fall säkrare än en enda lösning som löser alla problem.

Behållare är ett exempel på delning och erövrering som appliceras horisontellt på applikationer. Genom att låsa varje applikation i sitt eget fängelse försvagar inte svagheterna i en applikation applikationer i andra behållare. Virtuella maskiner delar också och erövrar, men de går ett steg längre isolerat.

Marvin Waschke /

Ett fel i en fängslad applikation kan inte påverka andra applikationer direkt, men den fängslade applikationen kan bryta det enda operativsystem (OS) som delas med andra behållare och påverka alla behållare. Med ett delat operativsystem kan brister när som helst i applikations-, behållar- och OS-implementeringsstacken ogiltigförklara säkerheten för hela stacken och äventyra den fysiska maskinen.

+ Även på Network World: Vilket är billigare: behållare eller virtuella maskiner? +

En skiktad arkitektur som virtualisering separerar exekveringsstacken för varje applikation hela vägen ner till hårdvaran, vilket eliminerar möjligheten att applikationer stör varandra genom det delade operativsystemet. Dessutom är gränssnittet mellan varje applikationsstack och hårdvaran definierat och begränsat för att förhindra missbruk. Detta ger en extra robust omkrets för att skydda applikationer från varandra.

Virtuella datorer separerar operativsystemet som kontrollerar användaraktivitet från hypervisor som styr interaktionen mellan gäst-operativsystemet och hårdvaran. VM-gäst-operativsystemet styr användaraktivitet men inte hårdvaruinteraktion. Ett fel i en applikation eller gäst-operativsystemet påverkar troligen inte den fysiska hårdvaran eller andra virtuella datorer. När det virtuella gäst-operativsystemet och operativsystemet som stöder en container är identiska, vilket ofta är fallet, kommer samma sårbarhet som äventyrar alla andra behållare som körs på operativsystemet inte andra virtuella datorer. Således separerar virtuella datorer applikationer horisontellt och också vertikalt separerar OS från hårdvara.

VM-overhead

Den extra säkerheten för virtuella datorer kostar. Kontrollöverföring är alltid dyrt i datorsystem, både i processorcykler och andra resurser. Exekveringsstackar lagras och återställs, externa åtgärder kan behöva pausas eller tillåtas slutföra, och så vidare.

Skift mellan gäst-operativsystemet och hypervisor kostar mycket och händer ofta. Även med speciella kontrollinstruktioner inbrända i processorchipsen minskar kontrollöverföringsomkostnaderna den totala effektiviteten för virtuella datorer. Är minskningen signifikant? Svår fråga. Applikationer kan ställas in för att minska omkostnaderna genom att hantera kontrollöverföring, och de flesta serverprocessorer är nu utformade för att effektivisera kontrollöverföring. Med andra ord beror betydelsen på applikationen och servern, men omkostnaderna kan aldrig elimineras helt, bara minskas.

Hypervisor-sårbarheter

För att ytterligare komplicera saker och ting, genom att separera lager i en VM-arkitektur, uppstår ett annat spöke: hypervisor-brister. Ett hypervisoröverträdelse är en enda felpunkt med potential för stora konsekvenser, särskilt i offentliga moln. Tänkbart kan en enskild hackare starta kod i en virtuell dator som tar kontroll över applikationer som ägs av andra offentliga molnkonsumenter och pwning en del av ett offentligt moln i en enda exploatering.

En stenfast arkitektur kan fortfarande ha implementeringsfel som försvagar ett system väsentligt. Hypervisoröverträdelser blir ofta fobbed genom att hävda att de aldrig kommer att hända: Historien säger att hypervisor är så enkla, så välskrivna, så noggrant kontrollerade att de aldrig misslyckas. Ett hypervisorbrott kan vara lika förödande som WannaCry, men oroa dig inte för det. Men Heartbleed hände. Och OpenSSL har mycket färre kodrader än en hypervisor. Jag måste ut nu - min flygande gris vill ha mer svin.

Jag känner inte till några betydande överträdelser av hypervisor hittills. Men en snabb titt på databasen Common Vulnerabilities and Exposures (CVE) avslöjar att forskare finner utnyttjbara hypervisor-svagheter. Hypervisor-utvecklarna och leverantörerna har snabbt fixat sårbarheter när de uppstår. I mars 2017 utfärdade Microsoft säkerhetsbulletin MS17-008 och dokumenterade sju korrigerade sårbarheter i sin Hyper-V hypervisor, alla betecknade som viktiga eller kritiska.

Jag tror fortfarande att virtuella datorer ger bättre säkerhet än containrar, men vi måste titta på säkerheten för VM-system med tydliga ögon. Jag planerar att diskutera hypervisor-svagheter mer i detalj i framtiden. Dessutom kombineras ofta containrar och virtuella datorer. Det återstår mycket att säga.