Un grup de cercetători de la Universitatea Liberă din Amsterdam a publicat instrumentul Kasper, destinat identificării în nucleul Linux a secvențelor de cod care pot fi utilizate pentru a exploata vulnerabilitățile de tip Spectre, cauzate de execuția speculativă a codului de către procesor. Codurile sursă ale instrumentului sunt distribuite sub licența Apache 2.0.
Reamintim că pentru a efectua atacuri precum Spectre v1, care permit determinarea conținutului memoriei, este necesar ca în codul privilegiat să existe o anumită secvență de instrucțiuni (gadget-uri) care duce la execuția speculativă a instrucțiunilor. În scopul optimizării, procesorul începe să execute astfel de gadget-uri în mod speculativ, apoi determină că predicția sucursală nu a fost corectă și revine la starea inițială, dar datele procesate în timpul execuției speculative rămân în cache și în bufferele microarhitecturale și sunt accesibile pentru extragere prin diferite metode de determinare a datelor reziduale prin canale externe.
Instrumentele anterioare pentru scanarea gadget-urilor pentru vulnerabilitatea Spectre, bazate pe căutarea de tipare standard, au arătat un nivel foarte ridicat de fals pozitive, omisând multe gadget-uri reale (experimentele au arătat că 99% din gadget-urile identificate de astfel de instrumente nu puteau fi utilizate pentru atacuri, iar 33% din gadget-urile funcționale, capabile să ducă la un atac, nu au fost detectate).
Pentru a îmbunătăți calitatea identificării gadget-urilor problematice, Kasper modelează vulnerabilitățile pe care atacatorul le poate utiliza la fiecare pas al desfășurării atacurilor de tip Spectre — sunt modelate problemele care permit controlul datelor (de exemplu, inserarea datelor atacatorului în structurile microarhitecturale pentru a influența execuția speculativă ulterioară prin atacuri de tip LVI), accesarea informațiilor confidențiale (de exemplu, prin depășirea limitelor buffer-ului sau utilizarea memoriei după ce aceasta a fost eliberată) și organizarea scurgerilor de informații confidențiale (de exemplu, analizând starea cache-ului procesorului sau folosind metoda MDS).

În timpul testării, nucleul se leagă de bibliotecile runtime Kasper și de verificările care funcționează la nivelul LLVM. În cadrul verificării, se realizează o emulare a execuției speculative a codului, implementată prin intermediul mecanismului de checkpoint-restore, care execută ramura de cod prezis greșit și se întoarce apoi la starea inițială înainte de ramificare. Kasper încearcă, de asemenea, să modeleze diferite vulnerabilități software și hardware, analizează influența efectelor arhitecturale și microarhitecturale și efectuează teste fuzzing asupra posibilelor acțiuni ale unui atacator. Pentru analiza fluxurilor de execuție este utilizat portul DataFlowSanitizer pentru nucleul Linux, iar pentru testarea fuzzing este folosită o versiune modificată a pachetului syzkaller.

În timpul scanării nucleului Linux cu ajutorul Kasper, au fost descoperite 1379 de gadgeturi anterior necunoscute, care pot duce la scurgeri de date în timpul execuției speculative a instrucțiunilor. Se menționează că, probabil, doar o parte dintre ele pot reprezenta probleme reale, dar pentru a ilustra că există și un adevărat pericol, nu doar unul teoretic, a fost dezvoltat un prototip funcțional al unui exploit pentru unul dintre fragmentele de cod problematice, care duce la scurgerea informațiilor din memoria nucleului.
Sursa: opennet.ro
