Red Hat ha reso disponibile uno strumento di analisi in grado di identificare potenziali attacchi volti a sfruttare la arcinota vulnerabilità Spectre (precisamente la variante 1 di Spectre) all’interno di file binari.
La modalità con cui l’eseguibile può essere invocato è semplice:
x86_64-scanner vmlinux --start-address=0xffffffff81700001
ed il risultato potrà essere un rassicurante:
X86 Scanner: No sequences found.
O un ben più preoccupante esito positivo:
X86 Scanner: Possible sequence found, based on a starting address of 0:.
X86 Scanner: 000000: nop.
X86 Scanner: COND: 000001: jne &0xe .
X86 Scanner: 00000e: jne &0x24 .
X86 Scanner: LOAD: 000010: mov 0xb0(%rdi),%rcx.
X86 Scanner: 000017: mov 0xb0(%rsp),%rax.
X86 Scanner: 00001f: nop.
X86 Scanner: LOAD: 000020: mov 0x30(%rcx),%rbx.
Inutile dire come il livello di competenze necessario per concepire anche solo lo scan del file stesso (in questo esempio è stato analizzato proprio il kernel stesso, vmlinux, l’eseguibile che diventerà pid 0 all’interno del sistema) sia decisamente elevato, ma nulla vieta di poter replicare gli esempi forniti.
Più importante di tutto il resto: il tool in questione è stato rilasciato in forma open-source, perciò chiunque può analizzarne il codice e, con molta pazienza e competenza, carpire un po’ di più in merito a questa fastidiosa vulnerabilità.
Curiosi su come fare? Ecco un piccolo how-to basato su Fedora 28:
Per prima è necessario scaricare e decomprimere il file scanner:
$ wget https://people.redhat.com/~nickc/Spectre_Scanner/scanner.tar.xz
$ tar -xJf scanner.tar.xz
$ cd scanner
A questo punto, nel sistema andrà installato il pacchetto binutils-devel, necessario alla compilazione del sorgente:
$ sudo dnf install binutils-devel
E scaricati i sorgenti dello stesso pacchetto, poiché alcune librerie necessarie non sono presenti nel pacchetto devel:
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.29.1.tar.xz
$ tar -xJf binutils-2.29.1.tar.xz
Quindi, prima di lanciare il fantomatico comando make, all’interno del file makefile andranno impostate le seguenti variabili:
all: x86_64-scanner
...
...
...
# If you are building the tool in a separate directory
# to the sources, then you will need to add a path to
# the scanner.h header file.
#CFLAGS += -I /path/to/scanner/sources
CFLAGS += -I /home/rasca/scanner
# The scanner uses some header files that are part of
# the binutils sources, but which are not normally
# distributed with binary packages. (eg elf/internal.h)
# You can get the binutils sources from:
# https://ftp.gnu.org/gnu/binutils/
#CFLAGS += -I /path/to/binutils/sources/include
CFLAGS += -I /home/rasca/scanner/binutils-2.29.1/include
Dove chiaramente /home/rasca andrà sostituito con la vostra home directory. A questo punto tutto è pronto per la compilazione:
$ make
gcc -c scanner.c -Wall -I. -O3 -I /home/rasca/scanner -I /home/rasca/scanner/binutils-2.29.1/include
gcc -c x86_64-scanner.c -Wall -I. -O3 -I /home/rasca/scanner -I /home/rasca/scanner/binutils-2.29.1/include
gcc scanner.o x86_64-scanner.o -o x86_64-scanner -lopcodes -lbfd -liberty -lm -lz -ldl
L’esempio riportato all’inizio si preoccupava di analizzare un file denominato vmlinux, ossia il kernel del sistema, per fare lo stesso sarà necessario copiare il proprio kernel nella directory locale e decomprimerlo in modo da ottenere il file vmlinux (se siete curiosi sul perché di questi comandi a questo link si trova un’esauriente spiegazione):
$ wget -O extract-vmlinux https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux
$ chmod +x extract-vmlinux
$ ./extract-vmlinux vmlinuz-4.17.6-200.fc28.x86_64 > vmlinux
Sarà possibile eseguire infine lo scanner:
$ ./x86_64-scanner vmlinux --start-address=0xffffffff81700001
X86 Scanner: No sequences found.
In questo caso il kernel non presenta vulnerabilità. Per fortuna, aggiungerei 🙂
È tutto, buona verifica!
Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.
Lascia un commento