Prozessoren und RAM-Chips werden immer kleiner. Es ist schon eine Weile bekannt, dass es dadurch möglich ist Bit-Flips in RAM-Speichern durch konnstantes Schreiben in einen physikalisch benachtbarten Bereich zu erreichen. Basierend auf einem Paper hierzu von Yoongu Kim et al. ist es Mark Seaborn, Matthew Dempsky und Thomas Dullien gelungen aus einer NaCl-Sandbox Umgebung auszubrechen und auf Linux-Systemen Root-Rechte zu erlangen. Laut Tests von Seaborn und seinen Kollegen waren circa die Hälfte aktueller getesteter Laptops betroffen. Die Angriffsmethode ist detailliert im Blog von Googles Project Zero erklärt.
Yoongu Kim und seine Kollegen hatten zunächst festgestellt, dass wenn sie auf einen bestimmten Speicherbereich sehr oft schreiben, sie dadurch einen Bit-Flip in einem anderen Bereich des DRAM-Chips auslösen konnten. Grund hierfür ist, dass die Speicherbereiche physikalisch auf den Chips sehr nahe zusammen liegen, so dass sie sich elektrisch beeinflussen. Diese Attacke wurde entsprechend Rowhammer-Angriff getauft. Die Assembler-Anweisungen hierfür sind denkbar einfach:
code1a: mov (X), %eax // Read from address X mov (Y), %ebx // Read from address Y clflush (X) // Flush cache for address X clflush (Y) // Flush cache for address Y jmp code1a
Seaborn hat diese Attacke nun verwendet um ein Verfahren zu entwickelt, welches ihm ermöglicht aus der NaCl-Sandbox auszubrechen. Diese Sandbox wird beispielsweise von Chrome verwendet. Die NaCl-Sandbox analyisiert normalerweise den Maschinencode und prüft ihn auf gefährliche Instruktionen und unterbindet sie, um einen Ausbruch aus der Sandbox zu vermeiden. Die Rowhammer-Attacke kann nun ausgenutzt werden, um solche gefilterten Instruktionen durch sicherheitskritsche Anweisungen zu ersetzen. Wichtig für die Rowhammer-Attacke ist allerdings, dass der jeweilige Speicherbereich konstant penetriert wird. Das heißt die obigen »mov«-Anweisungen dürfen nicht
gechachet werden. Darum wird im obigen Code auch ständig Clflush auf, der einen Flush des Cache herbeiführt. Die neueste Version der NaCl-Sandbox filtert entsprechend auch darauf und erlaubt dies nicht mehr. Allerdings diskutiert Seaborn in seinem Artikel auch Möglichkeiten, wie man die Attacke auch ohne ClFlush erfolgreich durchführen kann.
Neben der Attacke auf die NaCl-Sandbox hat Seaborn auch ein auf Rowhammer basierendes Verfahren entwickelt die Linux Rechteverwaltung anzugreifen. Dadurch gelang es ihm Root-Rechte zu erlangen. Hierzu manipulierte er einen Page Table des eigenen Prozesses. Darin wird abgelegt wie der physikalische Speicher auf den virtuellen Speicher eines Prozesses gemapped wird. Kontrolle
über einen Page Table ermöglicht es dem Angreifer damit beliebige physikalische Speicherbereiche zu verändern. Seaborn führt diesen Angreifer mit einem Suid-Programm durch, das mit Root-Rechten läuft (beispielsweise Ping). Durch das Aendern des Speichers kann
er dann die gewünschten Befehle mit Root-Rechten ausführen.
Das Rowhammer-Problem ist in der Hardwarebranche schon länger bekannt, allerdings stellt es bisher eher eine theoreitsche Gefahr dar. Der neue LPDDR4-Standard für DRAM-Speicher schlägt auch Strategien vor, wie das Problem gelöst werden kann. Seaborn fand allerdings bei seinen Tests auch heraus, dass Desktop-PCs mit ECC-Speicher die Attacke nicht zulassen. Die ECC-Funktion von DRAM-Chips prüft nämlich die Daten im Speicher via Prüfbits.
