Sommario:
Definizione - Cosa significa Stack Smashing?
Lo smashing dello stack è una forma di vulnerabilità in cui lo stack di un'applicazione per computer o sistema operativo è costretto a traboccare. Ciò può portare a sovvertire il programma / sistema e bloccarlo.
Uno stack, un circuito first-in last-out, è una forma di buffer che contiene risultati intermedi delle operazioni al suo interno. Per semplificare, distruggere lo stack mettendo più dati in uno stack rispetto alla sua capacità di tenuta. Gli hacker esperti possono introdurre deliberatamente dati eccessivi nello stack. I dati eccessivi potrebbero essere memorizzati in altre variabili dello stack, incluso l'indirizzo di ritorno della funzione. Quando la funzione ritorna, passa al codice dannoso nello stack, che potrebbe danneggiare l'intero sistema. I dati adiacenti nello stack sono interessati e forza il programma a bloccarsi.
Techopedia spiega Stack Smashing
Se il programma interessato dallo smashing dello stack accetta dati da reti non attendibili e viene eseguito con privilegi speciali, si tratta di una vulnerabilità della sicurezza. Se il buffer contiene dati forniti da un utente non attendibile, lo stack può essere danneggiato iniettando codice eseguibile nel programma, ottenendo così l'accesso non autorizzato a un computer. Un utente malintenzionato può anche sovrascrivere le informazioni sul flusso di controllo archiviate nello stack.
Poiché lo smashing dello stack è diventato una vulnerabilità molto grave, alcune tecnologie sono implementate per superare il disastro dello stack smashing. La protezione da overflow del buffer dello stack modifica l'organizzazione dei dati nel frame dello stack di una chiamata di funzione in modo da includere i valori canarini. Questi valori una volta distrutti indicano che un buffer che lo precede in memoria è stato traboccato. I valori delle Canarie monitorano gli overflow del buffer e vengono posizionati tra i dati di controllo e il buffer nello stack. Ciò garantisce che un buffer overflow danneggi prima il canarino. Una verifica non riuscita dei dati delle Canarie indica un overflow nello stack. I tre tipi di canarino sono Random, Terminator e Random XOR.
Il canary terminator si basa sul fatto che l'attacco di overflow del buffer dello stack dipende dalle operazioni di stringa che terminano ai terminatori. I canarini casuali sono generati casualmente da un demone di raccolta dell'entropia, che impedisce agli aggressori di conoscere i valori. I canarini casuali vengono generati durante l'inizializzazione del programma e memorizzati in variabili globali. I canarini XOR casuali sono portatori casuali che sono XOR criptati usando i dati di controllo. È simile ai canarini casuali, tranne per il fatto che il "metodo di lettura dallo stack" per ottenere il canarino è complesso. L'hacker ha bisogno del canarino, dell'algoritmo e dei dati di controllo per produrre il canarino originale. Proteggono dagli attacchi che coinvolgono buffer di overflow in una struttura in puntatori per cambiare puntatore in modo che punti a un dato di controllo.