Matthew Garrett, en vÀlkÀnd Linux-kÀrnutvecklare som en gÄng fick ett pris frÄn Open Source Foundation för sitt bidrag till utvecklingen av fri programvara, berÀttade om kÀrnan i mekanismen SBAT (Secure Boot Advanced Targeting), som skapades för att blockera sÄrbarheter i bootloadern utan att Äterkalla den digitala signaturen, samt om dess roll i den senaste incidenten med en uppdatering för Windows, som ledde till att vissa Linux-distributioner som installerats parallellt med Windows pÄ system med aktiverat UEFI Secure Boot slutade ladda. Kort sagt, sÄ var bÄde Microsoft, som inte testade uppdateringen ordentligt och tillÀmpade den pÄ system dÀr den inte skulle tillÀmpas, och utvecklarna av vissa Linux-distributioner som inte uppdaterade GRUB-bootloadern och SBAT-generationsnumret nÀr sÄrbarheter upptÀcktes i GRUB, skyldiga.
Nedanför finns en översÀttning av Garretts anteckning:
NĂ€r specifikationen för UEFI Secure Boot utvecklades var alla deltagare, lĂ„t oss sĂ€ga, lite naiva. Huvudmodellen för sĂ€kerhet i Secure Boot Ă€r att all kod som körs i en privilegierad miljö pĂ„ kĂ€rnnivĂ„ mĂ„ste verifieras innan den körs â firmware verifierar bootloadern, bootloadern verifierar kĂ€rnan, kĂ€rnan verifierar all ytterligare kod som laddas vid körning, och nu har vi en betrodd miljö för att pĂ„tvinga vilken annan sĂ€kerhetspolicy vi vill. Det Ă€r uppenbart att mĂ€nniskor kan göra misstag, men i specifikationen fanns det en mekanism för att Ă„terkalla signerade komponenter som visat sig vara opĂ„litliga: lĂ€gg bara till hĂ€schen av den opĂ„litliga koden i en variabel och vĂ€gra att ladda nĂ„got med det hĂ€schen, Ă€ven om det Ă€r signerad med en betrodd nyckel.
TyvÀrr, som det visade sig, handlar problemet om skala. Varje Linux-distribution som körs i Secure Boot-ekosystemet genererar sina egna binÀra boot-filer, och varje sÄdant fil har sin egen hash. Om en sÄrbarhet upptÀckts i kÀllkoden för en sÄdan boot-fil mÄste ett stort antal olika binÀra filer Äterkallas. Och minnesmÀngden för att lagra variabeln som innehÄller alla dessa hash Àr begrÀnsad. Det kommer helt enkelt inte att finnas tillrÀckligt med utrymme för att lÀgga till en ny uppsÀttning hashar varje gÄng det viserar sig att GRUB (boot-loadern som ursprungligen skrevs under en tid nÀr det inte fanns nÄgra sÀkerhetsÄtgÀrder, och som har flera separata parser för img-bilder, samt en parser för teckensnitt) har ytterligare en mekanism för en angripare att fÄ den att utföra godtycklig kod, sÄ ett annat lösning behövdes.
Denna lösning blev SBAT. Den övergripande idén bakom SBAT Àr ganska enkel. Varje viktig komponent i boot-kedjan deklarerar en sÀkerhetsgeneration som inkluderas i den signerade binÀra filen. NÀr en sÄrbarhet upptÀckts och ÄtgÀrdats, ökas denna generation. DÄ kan en uppdatering slÀppas som definierar den minimi generationen - boot-komponenterna kommer att titta pÄ nÀsta element i kedjan, jÀmföra dess namn och generationsnummer med de som lagras i firmware-variabeln och avgöra om de ska utföra den eller inte baserat pÄ detta. IstÀllet för att Äterkalla ett stort antal separata hashar kan en enda uppdatering slÀppas som helt enkelt sÀger: "Alla versioner av GRUB med sÀkerhetsgeneration under det hÀr numret betraktas som osÀkra."
Varför har detta plötsligt blivit aktuellt? SBAT utvecklades i samarbete mellan Linux-communityt och Microsoft, och Microsoft beslutade att slÀppa en uppdatering för Windows som instruerade systemen att inte lita pÄ versioner av GRUB med sÀkerhetsgeneration under en viss nivÄ. Detta gjordes eftersom dessa versioner av GRUB hade verkliga sÀkerhetsproblem som gjorde det möjligt för angripare att bryta mot den sÀkra boot-kedjan för Windows, och vi har sett verkliga exempel pÄ skadlig kod som ville göra just det (Black Lotus utnyttjade en sÄrbarhet i Windows boot-loader, men sÄrbarheten i GRUB var lika effektiv). Sett ur ett rent sÀkerhetsperspektiv Àr detta en helt legitim önskan.
Nu handlar det om meddelandet «NÄgot gick helt fel» och omöjligheten att starta pÄ grund av den hÀr uppdateringen. Det kommer frÄn shim och inte frÄn nÄgon kod frÄn Microsoft. Shim tar hÀnsyn till SBAT-uppdateringar, och för att inte bryta mot sÀkerhetsprinciperna som antagits av andra laddare i systemet, och Àven om Microsoft har slÀppt en SBAT-uppdatering, vÀgrar Linux-laddaren att starta gamla versioner av GRUB. Allt fungerar som det ska.
Problemet som mÀnniskor har stött pÄ Àr att flera Linux-distributioner inte har slÀppt versioner av GRUB med det nyare sÀkerhetsgenerationen, och dÀrför betraktas dessa versioner av GRUB som osÀkra (det Àr vÀrt att notera att GRUB signeras av distributionerna sjÀlva, inte Microsoft, sÄ det finns ingen extern fördröjning hÀr). Microsofts avsikt var att Windows Update-uppdateringen endast skulle tillÀmpas pÄ system som bara kör Windows, och att alla dualboot-installationer skulle förbli sÄrbara för attacker tills den installerade distributionen uppdaterade GRUB och sÀkerhetsgenerationen SBAT. TyvÀrr, som nu Àr uppenbart, fungerade det inte som avsett, och Ätminstone vissa dualboot-system tillÀmpade uppdateringen, medan denna distributionens Shim vÀgrade att starta den distributionens GRUB.
Vad Àr slutsatsen? Microsoft (av uppenbara skÀl) ville inte att Windows skulle kunna attackeras med en sÄrbar version av GRUB, som skulle kunna luras till att köra godtycklig kod och sedan införa en bootkit i Windows-kÀrnan under uppstart. Microsoft gjorde detta genom att slÀppa en Windows-uppdatering som uppdaterade SBAT-variabeln till att ange att sÄrbara versioner av GRUB inte fÄr laddas pÄ dessa system. Den första stegets loader som tillhandahÄlls av distributionen lÀste denna variabel, lÀste SBAT-partitionen frÄn den installerade versionen av GRUB, förstod att de var i konflikt och vÀgrade att ladda grub med meddelandet «NÄgot gick helt fel». Denna uppdatering skulle inte ha tillÀmpats pÄ system med dualboot, men tillÀmpades ÀndÄ.
I stort:
1) Microsoft tillÀmpade uppdateringen pÄ system som den inte skulle ha tillÀmpats pÄ
2) Vissa Linux-distributioner har inte uppdaterat GRUB-laddaren och sÀkerhetsgenerationen SBAT nÀr sÄrbarheter upptÀcktes i GRUB.
Som resultat har vissa personer problem med att ladda sina system. Jag tror att det finns mÄnga skyldiga hÀr. Microsoft borde ha genomfört fler tester för att sÀkerstÀlla att dual-boot-installationer kan identifieras korrekt. Men Àven distributioner som levererar signerade laddare mÄste se till att de uppdaterar dem och uppdaterar sÀkerhetsgenerationerna sÄ att de stÀmmer överens, för annars erbjuder de en attackvektor som kan anvÀndas för att hacka andra operativsystem, och det Àr ett slags brott mot det sociala kontraktet kring allt detta.
TyvÀrr drabbas hÀr frÀmst slutkonsumenter, som stÄr inför att systemet plötsligt vÀgrar att ladda det operativsystem de vill anvÀnda. Detta fÄr aldrig ske. Jag tror inte att en undersökning bland slutkonsumenter om de vill ha uppdateringar för sÀker systemstart skulle ge ett bra resultat, och Àven om jag har en vag kÀnsla av att UEFI sÀker systemstart inte Àr nÄgot som ger fördelar för de flesta slutkonsumenter, Àr det ocksÄ nÄgot man inte vill upptÀcka efter sÄdana incidenter. DÀrför sympatiserar jag med att det Àr aktiverat som standard, sÄ jag stödjer dess standardaktivering och delar Microsofts val, bortsett frÄn det misslyckade försöket att undvika uppdateringar pÄ system med dual-boot.
I vilket fall som helst var jag djupt involverad i implementeringen av denna mekanism för Linux 2012 och skrev den första prototypen av Shim (som nu Àr en betydligt bÀttre bootloader som stöds av en bredare grupp mÀnniskor, och som jag inte har rört pÄ flera Är), sÄ om du vill anklaga nÄgon, var vÀnlig och tveka inte att anklaga mig. Det hÀr Àr nÄgot som inte skulle ha hÀnt, och om du inte Àr Microsoft eller en Linux-distribution, sÄ Àr det inte ditt fel. Jag ber om ursÀkt.
KĂ€lla: opennet.ru
