Thread
Menü

Das Betriebssystem spielt auch mit


03.02.2018 22:10 - Gestartet von helmut-wk
Spectre würde nicht klappen,. wenn Betriebssysteme eine eigentliche Vorhandene Sperre nutzen würden: Wenn zwischen Usercode und Kernelcode umgeschaltet wird, müsste eigentlich das Codesegment gewechselt werden, und so ein Kontextwechsel macht schnell klar, dass die illegalen Zugriffe tatsächlich illegal sind.

Nur haben Windows, Linux etc. Teile des Codesegments in des Usersegment eingeblendet, es ist nicht mehr das Segment, das geschützt ist, sondern die einzelne Page im Arbeitsspeicher. Da der Prozessor die Details des Betriebssystem nicht kennt (wie sollte das auch möglich sein?), kann er somit nicht sofort an der Adresse erkennen, was Kernel und was Userprozess ist - erst wenn die Seite in den Cache geladen wird, ist auch zu erkennen, dass die Page für Userprozesse gesperrt ist.

So spart das Betriebssystem Zeit ("Kontextwechsel" dauern), und es fällt eine Sicherung weg. Bevor Spectre und Meltdown bekannt wurden, dachte jeder, dass die übrigen Sperren (auf Page-Ebene) ausreichen, aber das tun sie nicht.

Ein Upgrade zu einer etwas langsameren Betriebssystem-Version, die dafür sicherer ist, wäre möglich, diese Versionen müssen "nur" noch geschrieben werden. Und sicher lassen sich manche Versionen von Spectre auf ähnliche Weise verhindern.

Aber da sich die Tricks mit dem Cache nahezu beliebig variieren lassen, gibt es - wie schon im Artikel gesagt - sicher noch weitere Angriffsmöglichkeiten - und wer alle verhindern will, der kaufe am besten einen neuen Prozessor, in die beschriebene Lücke konsequent verhindert wird. ;-)

Auf Microcode-Updates ist da kaum zu hoffen - Microcode ist gewissermaßen "Software in der Hardware", und keine Software kann das Problem beheben, dass manche Infos einfach zu lange brauchen, um von A nach B zu kommen. Da muss schon die Hardware umgebaut werden, oder die Möglichkeit ausgeschaltet werden, zu messen, wie lange es dauert, auf eine Adresse zuzugreifen (was ja davon abhängt, ob sie im Cache ist oder nicht), nur kann so eine Messung auch ziemlich indirekt geschehen, so dass sie im Prinzip wohl immer möglich sein wird..

Bleibt noch die Option, den Cache ganz auszuschalten. Das dürfte per neuem Microcode möglich sein - nur das ergibt so starke Performanceeinbußen, dass wohl niemand sie als ernsthafte Lösung des Problems ansehen wird.