Shatter attack este o tehnologie software utilizată de hackeri pentru a ocoli restricțiile de securitate între procese din aceeași sesiune în sistemul de operare Microsoft Windows . Exploatează un defect în arhitectura de transmitere a mesajelor și permite unei aplicații să injecteze cod arbitrar în orice altă aplicație sau serviciu care rulează în aceeași sesiune. Ca urmare, poate avea loc o escaladare neautorizată a privilegiilor .
Un nou tip de atac a făcut obiectul unor discuții aprinse în rândul profesioniștilor în securitate de la publicarea, în august 2002, a unui articol al lui Chris Page [1] , un consultant independent în protecția datelor. Acest document a introdus mai întâi termenul de „atac spart” pentru a descrie procesul prin care o aplicație poate executa cod arbitrar într-o altă aplicație. Acest lucru este posibil deoarece Windows permite aplicațiilor cu privilegii mai mici să trimită mesaje către aplicații cu privilegii mai mari. Mesajul poate conține ca parametru adresa unei funcții de apel invers din spațiul de adrese al aplicației. Dacă un atacator reușește să-și injecteze datele în memoria altei aplicații (de exemplu, inserând shellcode într-o fereastră de editare sau folosind funcțiile VirtualAllocEx și WriteProcessMemory), atunci îi poate trimite un mesaj WM_TIMER și specifica adresa unei funcții de apel invers. care se referă la aceste date.
La câteva săptămâni după publicarea articolului, Microsoft a fost de acord că problema există, dar în același timp a clarificat [2] că este o greșeală să numim acest lucru un defect Windows, deoarece problema constă în serviciul extrem de privilegiat în sine.
În decembrie 2002, Microsoft a lansat un patch pentru Windows NT 4.0 , Windows 2000 și Windows XP pentru a preveni „atacul spart” [3] . Dar aceasta a fost o soluție parțială a problemei, deoarece remedierea a fost pentru serviciile livrate cu Windows. Cu toate acestea, arhitectura în sine nu s-a schimbat, iar amenințarea a continuat să existe pentru alte aplicații și servicii.
În Windows Vista , problema a fost rezolvată complet, făcând două modificări semnificative. În primul rând, sesiunea 0 este dedicată exclusiv proceselor de sistem, iar utilizatorul nu se mai autentifică în această sesiune [4] . În al doilea rând, majoritatea mesajelor nu mai sunt trimise de la procese cu privilegii scăzute către procese cu privilegii mari ( User Interface Privilege Isolation , UIPI) [5] . De exemplu, Internet Explorer 7 folosește această inovație pentru a limita interacțiunea componentelor de randare cu restul sistemului.