**Wat is dat nieuwe lek in computers?** bert@hubertnet.nl / [@PowerDNS_Bert](https://twitter.com/PowerDNS_Bert) / [ds9a.nl](https://ds9a.nl) 4 januari 2018 Introductie =============================================================================== Gisteren en [vandaag groot in het nieuws](https://www.rtlnieuws.nl/technieuws/meltdown-en-spectre-dit-moet-je-weten-over-de-twee-grote-computerlekken), alle computers zijn lek. In dit stukje probeer ik uit te leggen wat er aan de hand is, waarom het zo vreselijk is, en ook waarom er zo weinig aan te doen is. Update: een uitgebreidere meer technische uitleg staat [hier](https://ds9a.nl/articles/posts/spectre-meltdown/) Laten we beginnen bij het begin: het gaat om het lekken van informatie binnen je computer. Dit is heel relevant, want een advertentie op een website mag niet bij je bankgegevens komen. Of, een website mag niet je WiFi wachtwoord kunnen lezen. Anders kon hij dat aan iedereen lekken (of verkopen!). De processor van een computer (of tablet of telefoon) speelt een belangrijke rol in deze beveiliging. Als een website probeert het geheugen te lezen waar de WiFi code staat zal de processor (ook wel CPU genoemd) dit tegenhouden. In een plaatje ziet dat er zo uit: *************************************************************************** * * * +-----------------------------------------+ * * | | * * | +-----------+ | * * | |Windows/IOS| (WiFi sleutel) | * * | +-----------+ | * * | | * * | +-----------+ +-----------+ | * * | | MS Word | |Minesweeper| | * * | +-----------+ +-----------+ | * * | | * * | +-----------+ +-----------+ | * * | | Webpagina | | Webpagina | | * * | +-----------+ +-----------+ | * * +-----------------------------------------+ * * GEHEUGEN * *************************************************************************** Ieder van de blokjes kan niet in andere blokjes kijken. Een uitzondering is het bovenste blokje 'Windows/IOS', dit is het besturingssysteem en die beheert de computer en kan wel "lezen en schrijven" met de rest. Als een webpagina probeert "buiten zijn blokje" te lezen steekt de processor daar een stokje voor: mag niet. So far so good. Een recept ========== Een computerprogramma is net een recept, met instructies die een voor een uitgevoerd worden. "Doe boter in de pan" "Zet het vuur aan" "Wacht tot de boter bubbelt" "Breek een ei boven de pan" etc. Lang, lang geleden voerde een processor dit recept ook precies zo uit, en ook precies in die volgorde. Maar echt snel was dit niet. Vergelijk het met een echt recept, als je het ei nog moet gaan zoeken terwijl de boter al in de pan zit ben je mogelijk te laat, of ontdek je dat je het ei niet kan vinden. **Moderne CPU's doen daarom hetzelfde wat mensen doen**. Ze voeren een computerprograma niet regel voor regel uit: ze lezen ook alvast vooruit om te kijken wat er straks nodig is. De cache ======== Een computer heeft geen eieren nodig. Maar wel dingen uit het "RAM" geheugen. Dit is waar we het over hebben als we zeggen dat een computer "4 gigabyte geheugen" heeft. RAM geheugen is heel veel sneller dan een harddisk, maar nog steeds veel trager dan de CPU zelf. Die kan veel sneller rekenen dan het geheugen data kan leveren. ************************************************************ * * * * * +----------------+ * * | | * * +-----------+ +-----+ | RAM | * * | Processor +<---->|Cache|<---->| | * * +-----------+ +-----+ | GEHEUGEN | * * | | * * +----------------+ * * * ************************************************************ Daarom heeft een CPU een super snelle "cache" waar veelgebruikte stukjes geheugen in klaarliggen. Om die cache goed te vullen doet de CPU hetzelfde als een mens: hij leest **vooruit** in het computerprogramma. Zo voorspelt de CPU welke stukjes RAM geheugen er **straks** nodig gaan zijn, en gaat hij die alvast ophalen en in de cache stoppen. Dit is belangrijk, want dingen in de cache zijn 10 keer sneller op te zoeken dan dingen in RAM. Het probleem ============ Ook al leest de CPU vooruit, hij geeft een website nog steeds geen toegang tot het geheugen waar de WiFi sleutel staat. Maar, tijdens het vooruitlezen wordt dat nog niet gecontroleerd. De echte check vindt plaats bij het daadwerkelijk uitvoeren van het recept. Hoe zou dit een probleem kunnen zijn? Stel je hebt een kastje in je keuken met gevaarlijke spullen. Kinderen mogen niet in dat kastje kijken. Wat zou er in het kastje zitten? Vervolgens maak ik een recept: 1. Zet een pan op het vuur 2. Als er snoep ligt in het geheime kastje, doe dan boter in de pan 3. Doe een ei in de pan Stap 1 gaat goed: dat mag. Stap 2 mag niet, want je mag niet in het geheime kastje kijken. Einde verhaal. Maar stel dat een volwassene het recept even vooruit had gelezen, die had dan in het geheime kastje gekeken, gezien dat er snoep ligt, en dan geconcludeerd dat er boter nodig is. **En ineens staat een pakje boter voor het grijpen**. Als we nu dit recept uitvoeren: 1. Zet een pan op het vuur 2. Doe boter in de pan 3. Doe een ei in de pan Dan gaat dat sneller als de volwassene bij het vooruitlezen al had besloten dat er straks boter nodig was. Als er geen snoep in het kastje lag zou de boter nog in de koelkast liggen. En dit recept werkt zonder in het verboden kastje te kijken. Hoe werkt dit in de computer? ============================= Het recept is dan iets anders. Voor het gemak: op plek X in het geheugen staat het WiFi wachtwoord. Op plek Y staat een stukje van een advertentie op een website. **En deze advertentie gaat proberen je WiFi wachtwoord te stelen.** Het recept voor de advertentie: 1. Teken de advertentie op het scherm 2. Doe allemaal andere dingen 3. Als op de verboden plek X de letter 'G' staat, lees dan geheugen Y *************************************************************** * Geval 1: WiFi code begon met een G * * * * +------------+----------+ * * |Advertentie | | * * +-----------+ +-----+ | | X: | * * | Processor +<---->| *Y* |<---->| | GEHEIM | * * +-----------+ +-----+ | Y | WiFiCODE | * * CACHE | | CODE | * * +------------+----------+ * * GEHEUGEN * * * *************************************************************** Stap 3 wordt door de CPU tegengehouden... maar.. tijdens het vooruitlezen heeft de CPU stiekem toch plek X even gelezen. En als daar een 'G' stond, heeft de CPU ook alvast naar plekje Y gekeken (**en daarmee komt Y in de cache!**) Ter herinnering voor de volgende paragraaf: de cache is snel, RAM is langzaam. De cruciale stap is nu: De advertentie leest geheugen op plek Y alsnog (wat mag), en **meet hoe lang dat duurde**. Als dat veel tijd kostte, dan kunnen we concluderen dat het WiFi wachtwoord niet met een 'G' begon. Ging het bliksemsnel, dan heeft de advertentie succesvol de eerste letter van het WiFi wachtwoord gegokt! **************************************************************** * Geval 2: WiFi code begon NIET met een G * * * * +------------+----------+ * * |Advertentie | | * * +-----------+ +-----+ | | X: | * * | Processor +<---->| |<---->| | PASSWRD12| * * +-----------+ +-----+ | Y | WiFiCODE | * * CACHE | | CODE | * * (geen Y!) +------------+----------+ * * GEHEUGEN * * * **************************************************************** En zo kan letter voor letter het 'verboden toegang' geheugen toch gelezen worden. (Overigens, de rol van het 'vooruitlezen' in de CPU is dezelfde als de volwassene in het bovenstaande eier-recept - iets wat wel op verboden plekken mag kijken, al verklapt ie niet direct wat ie gezien heeft) Samenvattend ------------ De CPU leest vooruit om de cache te vullen, en houdt daarbij geen rekening of er daarbij 'verboden geheugen' (X) bekeken wordt. En afhankelijk van wat er in dat verboden geheugen stond, komen er dingen uit toegestaan geheugen (Y) in de cache of niet. Als we Y snel kunnen lezen (wat mag) stond het dus in de cache, en weten we wat X was. En de oplossing? ================ Dit probleem zit zo diep in de processor dat het niet op te lossen is met een update. Je zal de hele processor moeten vervangen. Miljarden en miljarden processoren. Maar er zijn wel truuks mogelijk. In het bovenstaande verhaal moet de advertentie wel weten waar 'X' staat. En met truuks is het mogelijk om X te verstoppen zodat de advertentie hem niet kan vinden. Helaas houdt deze truuk in dat de computer een stuk trager wordt, maar voorlopig is het niet anders. De komende weken en maanden zullen alle computers voorzien moeten worden van deze truuks, wat vermoedelijk in eerste instantie tot vertragingen en problemen zal leiden.