Quand marteler une barrette de DRAM peut élever vos privilèges
lun, 16/03/2015 - 17:26
Il ne s'agit pas de la marteler physiquement, cette pauvre barrette de DRAM. Le seul privilège que vous auriez alors serait celui d'être mis à la porte par votre patron, pour destruction de matériel.
Par contre, si vous êtes un expert en assembleur et en pages mémoire des microprocesseurs x86, vous pouvez marteler une barrette de DRAM électriquement et obtenir une élévation totale de privilèges, sur le système attaqué. Ceci sans exploiter la moindre faille logicielle.
Pour comprendre le principe de l'attaque Rowhammer, 'martelage', lisez ce billet très technique, publié par le Project Zero de Google. Pour mémoire le Project Zero de Google s'est donné pour tâche de pourfendre toutes failles logicielles, parfois en défrayant la chronique.
Mais cette fois la faille est matérielle. Elle se situe dans les barrettes de DRAM. Ce qu'explique le billet, qui s'appuie sur un autre billet également très technique Le problème de fond est que les barrettes de mémoires présentent toujours plus de capacités dans un encombrement toujours réduit, à tel point qu'il devient difficile d'empêcher les cellules mémoire d'agir électriquement les uns sur les autres.
Bien sûr en usage normal tout va bien et votre cher ordinateur se comporte normalement. Mais dans le cas de sollicitations extrêmes, il en va autrement. Les chercheurs de Project Zero donnent comme exemple ce code assembleur maltraitant :-)
code1a:
mov (X),% eax // Lire de l'adresse X
mov (Y),% ebx // Lire de l'adresse Y
clflush (X) // cache Flush pour l'adresse X
clflush (Y) // cache Flush pour l'adresse Y
jmp code1a
Une boucle bien brutale :-)
Les techniciens expliquent que l'instruction x86 clflush est utilisée car c'est le moyen le plus simple de forcer des accès à la DRAM et donc de provoquer le martelage. Il s'étonnent d'ailleurs que cette instruction ne soit pas une instruction réservée à un mode d'exécution privilégié, mais ceci est un autre sujet.
Au final, en lisant à outrance des adresses physiques comme indiqué, se produit un phénomène physique qui change l'état des cellules mémoire adjacentes.
Pour hacker un système, il n'y a qu'à induire une inversion de bits dans une entrée de table de page (PTE) pour pointer vers une page physique contenant la table de page du processus attaqué. Ce qui donne un accès en lecture/écriture aux tables de pages du processus, et finalement un accès à l'ensemble de la mémoire physique de la machine.
Le "il n'y a qu'à" étant évidemment une formule, car bien sûr, mettre au point une telle attaque est très complexe. Mais possible, pour preuve ce billet qui en explique tous les principes. De cette façon, certains ordinateurs tournant sous Linux ont été attaqués, et une élévation totale de privilège a été obtenue. Le nom des fabricants des ordinateurs et des barrettes de DRAM n'a pas été précisé, pour d'évidentes raisons. A priori, il n'y a pas que Linux qui peut être hacké de cette manière. Windows ou n'importe quels systèmes peuvent l'être également.