Vulnerabilitats al subsistema eBPF que permeten evitar la protecció contra atacs Spectre

S'ha identificat una vulnerabilitat al nucli de Linux (CVE-2021-33624) que permet utilitzar el subsistema eBPF per evitar la protecció contra les vulnerabilitats de la classe Spectre, que permeten determinar el contingut de la memòria com a resultat de la creació de condicions per al execució especulativa de determinades operacions. L'atac Spectre requereix la presència d'una determinada seqüència d'ordres en codi privilegiat que condueix a l'execució especulativa d'instruccions. Mitjançant la manipulació dels programes BPF transmesos per a l'execució, és possible generar instruccions similars a eBPF i filtrar el contingut de la memòria del nucli i àrees arbitràries de la memòria física a través de canals laterals.

La vulnerabilitat és causada per defectes en el verificador, que s'utilitza per detectar errors i activitats inacceptables als programes BPF. El verificador enumera possibles camins d'execució de codi, però omet les opcions de ramificació que són inacceptables des del punt de vista de la semàntica de l'arquitectura del conjunt d'instruccions. Quan s'executa un programa BPF, aquestes opcions de ramificació que el verificador no té en compte es poden predir incorrectament pel processador i executar-les en mode especulatiu. Per exemple, quan s'analitza l'operació de "càrrega", el verificador espera que la instrucció utilitzi un registre amb una adreça el valor de la qual està sempre dins dels límits especificats, però un atacant pot crear condicions en les quals el processador intentarà realitzar una operació especulativa amb una adreça que no compleix les condicions de verificació.

El problema ha aparegut des del llançament del nucli 4.15 i s'ha solucionat en forma de pedaços (1, 2, 3, 4). La vulnerabilitat roman sense corregir a les distribucions (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

A més, podeu observar la nota sobre l'impacte en el rendiment de les eines per protegir-se de les vulnerabilitats de Spectre. La nota resumeix els resultats de l'optimització del depurador rr (Enregistrament i reproducció), que es va crear una vegada a Mozilla per depurar errors difícils de repetir al Firefox. L'emmagatzematge a la memòria cau de les trucades del sistema utilitzades per comprovar l'existència de directoris va reduir l'operació "fonts rr" per al projecte de prova de 3 minuts 19 segons a 36 segons.

L'autor de l'optimització va decidir comprovar com canviaria el rendiment després de desactivar la protecció Spectre. Després d'arrencar el sistema amb el paràmetre “mitigations=off”, el temps d'execució de “rr sources” sense optimització va ser de 2 minuts 5 segons (1.6 vegades més ràpid), i amb optimització va ser de 33 segons (9% més ràpid). Curiosament, la desactivació de la protecció Spectre no només va reduir el temps d'execució del codi a nivell del nucli en 1.4 vegades (de 2m9s a 1m32s), sinó que també va reduir a la meitat el temps d'execució a l'espai d'usuari (d'1m9s a 0m33s), presumiblement a causa de l'eficiència reduïda de l'operació de memòria cau de la CPU i TLB. es restableix quan la protecció Spectre està habilitada.

Font: opennet.ru

Afegeix comentari