Door Anoniem:
[..]
Er is iets grappigs met die boot sequence. Wist je dat de term BIOS (Basic Input/Output System) van CP/M afkomstig is, en daar niet iets in een geheugenchip op het moederbord was maar gewoon een onderdeel van het besturingssysteem dat (toen typisch) van een floppy werd geladen? Het is de IBM-pc geweest waar de BIOS naar een geheugenchip op het moederbord verhuisde, eerst ROM (die je uit de socket kon wippen om hem te vervangen), toen EPROM, later flash.
Ja en nee.
Op de IBM-PC was het inderdaad het BIOS dat ook na het starten van MS-DOS bepaalde functies ter beschikking stelde die door DOS aangeroepen werden (lees sector, schrijf karakter etc etc).
Dat gold ook voor de 8 bit homecomputers (Commodore 64, sinclair spectrum) , en ook de Amiga - er was een ROM met 'systeemfuncties' (kernal (sic) op de C64) die door een applicatie (zoals de basic rom, of gebruikersprogramma's) aangeroepen konden worden.
Ook de Amiga (na de Amiga 1000) had dat soort basis functies in een ROM - Kickstart.
Inderdaad werden dergelijke basis functies, en hardware aansturing door andere OSen als deel van het te laden OS gezien.
Echter - 'BIOS' in de betekenis van "initialisatie van de hardware en laden van het OS' - ook een CP/M systeem moet geinitialiseerd worden, en er moet code zijn die de juiste parameters naar wat chips stuurt om sectoren van een floppy te laden, en het filesysteem ervan te interpreteren .
Het kan dus anders, en het gebeurt ook nog steeds. Bij de Raspberry Pi zit er geen BIOS op het moederbord, daar moet de eerste partitie op het micro-sd-kaartje (even uit mijn hoofd) FAT32 zijn, en daarop staat een generiek bestand met bootcode dat wordt geladen, en een hele reeks modelspecifieke bestanden waarvan de juiste daarna wordt geladen.
Ook de rPI moet hebben - en heeft - een stukje ROM dat de het bord initialiseert, en en de hardware aansturing doet om uberhaupt blokken van de SD-kaart , in de volgorde aangeduid door een FAT32 gestructureerd filesysteem , op een bepaalde plaats in het geheugen te krijgen en daarna uit te voeren.
De term in Pi land is , zo te zien, ROM Bootloader . Geen 'BIOS' in de CP/M betekenis, maar wel BIOS in de gebruikelijke x86 betekenis - rom code die systeem initialiseert, een OS laadt en start, en daarna niks meer doet .
Zo te lezen is de Pi bootloader ongedocumenteerd, geen open source, en is een pi-equivalent 'libre boot'
De bootrom zit intern in de SOC zo lees ik .
De eerste floppy disks zijn door IBM ontwikkeld, voor mainframes. Die dienden om tijdens het booten de microcode van de processoren te laden, de instructieset van de processoren werd dus van floppy geladen tijdens het opstarten. Dat zegt iets over hoe weinig er in de hardware zelf moet zitten om toch te kunnen starten. In een latere ontwikkeling kreeg je mainframes waar een laptop in zat die het bootproces aanstuurde. En voor de duidelijkheid: dat zijn uitermate betrouwbare systemen. Iets te, misschien, malware is (met zeer grote moeite) mogelijk, en de kans erop wordt vergroot omdat veel gebruikers ervan denken dat dat toch niet lukt.
Dat is wat overrated, denk ik.
Mainframes zijn _hardwarematig_ heel erg betrouwbaar, en waanzinnig redundant .
En obscuur genoeg dat relatief weinig 'hackers' gelegenheid krijgen om ermee te spelen en dingen te ontdekken.
Ik denk dat 'betrouwbaar in staat om heel hoge uptimes te halen' niet verward moet worden met 'bestand tegen malicious gebruikers' .
FWIW, de eerste PDP/11 minicomputers hadden dus zelfs _geen_ bootrom, maar de 'boot sequence' , een minimaal stukje assembler om iets van disk te lezen, moest door een operator ingetoggled worden .
https://gunkies.org/wiki/PDP-11_Bootstrap_Loaderdiscrete diodes als (boot)rom :
https://www.cca.org/blog/20120222-Diode-Matrix.shtml
De grap is dat je prima computers kan hebben zonder BIOS/UEFI-code op het moederbord, maar niet meer dan het minimum om iets te kunnen laden om verder mee op te starten. Dat minimum hoeft maar heel basaal en niet overschrijfbaar te zijn, zodat het moederbord zelf niet aangetast kan worden door malware. De rest van de code staat op een extern opslagmedium, en dat laat zich altijd controleren met code die weer van een ander opslagmedium komt.
De betekenis van 'bootloader rom' en 'bios' is wat door elkaar geschoven, hoewel BIOS voor bijna geen enkel OS meer een rol speelt nadat het OS geladen is.
Het nadeel van een absoluut minimaal 'bootrom' is dat het mogelijke boot-media, filesystemen nogal beperkt .
Om te netwerk booten moet het 'bootrom' een NIC kunnen initialiseren (success als dat er tig verschillende kunnen zijn in een pci-e slot), en een basale IP stack hebbben (dhcp + tftp minimaal, maar liefst meer) .
Booten van iSCSI storage is ook wel mooi in bepaalde omgevingen . Oeps - bootrom moet iSCSI (of FC) spreken , plus liefst een gepresenteerd partitielayout en daarna filesysteem snappen .
Op basis daarvan zijn wel degelijk ook robuuste oplossingen te maken.
Ook de basale rPI bootloader heeft de crypto checks aan boord om vergelijkbare 'secure boot' scenario's te maken voordat controle over het hoogste priv level weggegeven wordt.
Ik denk niet dat je een robuust _kunt_ bouwen als de bootloader de volgende stap in de keten niet valideert.
https://pip.raspberrypi.com/categories/685-whitepapers-app-notes/documents/RP-004651-WP/Raspberry-Pi-4-Boot-Security.pdf Microsoft en Google bieden verified boot, en FOSS loopt jaren achter (sinds 2017 ongeveer)
Jaren
voor juist, tientallen zelfs, met bij Debian wel weer de wet van de remmende voorsprong. In hoe dat bij RedHat en SuSe zit heb ik me nooit verdiept.
Maar hoe dan ook, besef dat secure boot vooral nodig is omdat het OS kennelijk toestaat dat het bootproces wordt aangepast. Kennelijk wordt niet die zwakte zelf maar een consequentie ervan aangepakt. Je kan je dan afvragen of secure boot niet een pleister op de verkeerde plaats is.
[/quote]
Nee , secure boot _is_ een noodzakelijke stap om de keten vanaf power-on safe te houden tot dat de volgende trusted component het stokje over krijgt.
Daarna is het aan de volgende stap in de security keten om de access niet onbedoeld weg te geven.
_bedoeld_ weggeven, door gewoon een linux kernel te booten met root password = root . dat kan.
Er zijn vast wel weer aanmerkingen te maken op hoe ik het nu neerzet, maar het punt is dat er niet maar één manier is waarop je robuuste systemen kan maken, er zijn ook andere benaderingen mogelijk. Een fundamenteel bezwaar dat ik heb tegen secure boot is dat het een leverancier in een machtspositie plaatst ten opzichte van andere leveranciers. Microsoft heeft die machtspositie nooit misbruikt, maar de hele situatie zou niet moeten bestaan, en er zijn wel degelijk alternatieven voor mogelijk. Denk niet alleen aan wat nu de dominante opzet is, denk ook aan wat er kan.
De hele keten _begint_ met een hardware boer die een trusted key ter verificatie in de bootloader rom stopt.
Niet verbazingwekkend dat dat in PC land een Microsoft key is.
(wie anders - ibm/redhat levert de trusted global key - dan zit DIE in de stoel met de mogelijkheid van misbruik .)