Navigatie overslaan.
Start

NUMA

NUMA, staat voor Non-Uniform Memory Access, en is een serieus security issue.

Vroeger zat er op je moederbord 1 CPU, en alles was goed.
Als je meer rekenkracht nodig had, dan bouwde je een cluster: Meerdere complete systemen gelinked met elkaar.

Tegenwoordig hebben veel systemen, en zeker servers, meerdere CPU's en is memory access een probleem geworden...

In de eerste dagen van multi-CPU systemen, was het geheugen "geshared". Alle CPU's konden aan het geheugen, maar niet gelijktijdig.
Dit was geen probleem, want in die tijd was memory veeeeeeel sneller dan de CPU's zelf.

Tegenwoordig zijn CPU's enorm veel sneller geworden, en moeten daarom vaak wachten op het RAM.
Als je dan ook nog eens meerdere CPU's hetzelfde RAM laat gebruiken, dan blijkt je totale systeem helemaal niet zo snel te zijn als je gehoopt had.

NUMA to te rescue!

NUMA deelt het geheugen op in verschillende delen: CPU 1 krijgt exclusieve access tot deel 1, CPU 2 tot deel 2, enz...
Normaal gezien, gaat een process dat op CPU 1 draait, steeds geheugen uit deel 1 gebruiken.

Natuurlijk is dat niet zo leuk, want waarom zou je een dual CPU systeem kopen met 32G RAM, als een (single threaded) process er maar 16G (de helft) RAM kan gebruiken?
Het antwoord is dat dit niet het geval is: Een process op CPU 1 kan, via CPU 2, access krijgen tot geheugen deel 2. Omdat dit "via" gebeurd, is dit natuurlijk trager, en wordt daarom zo veel mogelijk vermeden. (Men noemt dat, met als referentie de CPU, "local memory" en "non-local memory".)

(Dit is ook de reden waarom 3 CPU systemen relatief sneller zijn dan 4 CPU systemen. Bij 3 CPU's heb je steeds maar 1 "via". Bij 4 CPU's heb je er mogelijk 2 omdat het commercieel gezien niet interessant is om fully meshed verbindingen te maken tussen alle CPU's.)

Waarom vertel ik dit nu allemaal?

Heel eenvoudig.

Vendaag de dag worden steeds meer en meer NUMA systemen verkocht. Praktisch alle multi-CPU systemen van vandaag zijn NUMA.
Bijvoorbeeld in blades: Ja inderdaad op NUMA hardware kan Blade nr 1, aan het RAM van blade nr 2. (Dat hebben ze je nooit gezegd, nietwaar?)

De meeste mensen gebruiken deze hardware dan om te gaan virtualiseren, en daardoor wordt security een grote nachtmerrie...

Indien je virtuele machines op een NUMA systeem draait, dan kan een aanvaller die code kan uitvoeren op 1 van de CPU's, ook het geheugen inspecteren/veranderen/etc van alle andere virtuele machines.
Game Over.
Zie ook: http://blog.knudde.be/Firewire+DMA

Dit is een issue in de hardware, en is geen enkele software oplossing die je daar tegen kan beschermen.De software die op het systeem draait (Hypervisor, of O.S.) heeft niet eens weet van wat er aan het gebeuren is.)

Als ik er dan nog bij vertel dat veel bedrijven slecht/niet beveiligde virtuele "test" machines hebben draaien op dezelfde hardware als hun productie virtuele machines, dan wil dat zeggen dat virtualisatie voor veel bedrijven een erg grote stap is in de richting van minder security.

Virtualisatie op NUMA hardware kan je NIET beveiligen. Dus denk na.

Virtualisatie kan je sowieso niet beveiligen, maar je kan wel enkele best practices toepassen om de eventuele schade te beperken: Ga nooit productie en test systemen mengen, of interne (LAN) en externe (DMZ) systemen.
Dergelijke verschillende systemen horen thuis op fysiek verschillende hardware!

Met een "Air Gap". ;-) http://en.wikipedia.org/wiki/Air_gap_(computing)