Gli hacker possono assumere il controllo di un sistema massimizzando la capacità di archiviazione di un servizio. Quindi, come fanno gli hacker a eseguire tali attacchi di overflow del buffer?

In che modo gli hacker attaccano i sistemi utilizzando virus e malware? A volte può trattarsi di ransomware; a volte, può essere un attacco che consuma i requisiti di sistema. L'overflow del buffer è uno di questi metodi di attacco, ma che cos'è in realtà? Come funzionano questi attacchi?

Che cos'è un overflow del buffer?

Quindi cosa sono in realtà un buffer e uno stack? Il buffer è un campo in cui alcune informazioni di input fornite al computer attendono prima di raggiungere la memoria. Il richiamo dei dati dalla memoria è un'operazione faticosa per il sistema. Quindi, quando c'è abbastanza spazio nell'area del buffer, chiami i dati direttamente da qui. Ciò significa un aumento delle prestazioni per il tuo dispositivo. Naturalmente, quando lo spazio disponibile per il buffer è pieno, diventa necessario scriverlo in memoria.

instagram viewer

Lo stack è essenzialmente una struttura di dati in cui avvengono le operazioni di push (aggiunta) e pop (rimozione) dei dati. I concetti di buffer e stack sono abbastanza simili; tuttavia, il buffer funziona come uno stack che memorizza temporaneamente i dati in entrata.

Gli overflow del buffer possono essere un argomento impegnativo, ma come suggerisce il nome, si verificano quando c'è un sovraccarico di dati. Ad esempio, vuoi accedere a un sistema. Gli sviluppatori possono allocare 250 byte di spazio per il nome utente. Se si immettono 300 byte di dati, il buffer va in overflow. Questo overflow può influire su altri dati nella memoria, causando danni.

Questo è ottimo per gli hacker. I criminali informatici possono combinare questo pasticcio con diversi vettori di attacco, ad esempio per hackerare il sistema e accedere come amministratore.

Per comprendere l'overflow del buffer, gli argomenti principali che devi riconoscere saranno il file Architettura interna della CPU, registri di memoria e come la memoria elabora i dati. Ecco alcuni termini sulla CPU che devi conoscere.

codice di montaggio

Un linguaggio di programmazione di basso livello, cioè vicino al linguaggio macchina.

Respingente

Una dimensione fissa spazio di memoria allocato.

Codice byte

Una forma di codice in linguaggio intermedio compilabile scritta in un linguaggio di alto livello.

Compilatore

Un programma che converte il linguaggio di programmazione in codice macchina.

Mucchio

Spazio di memoria dinamico e variabile.

I fondamenti della teoria della memoria

Senza comprendere la teoria della memoria, può essere difficile affrontare nella pratica i problemi di overflow del buffer. Puoi pensarlo come provare a costruire una casa senza sapere come costruire un muro.

Immagina di voler eseguire un buffer overflow dal punto di vista di un hacker. Per questo, devi manipolare la memoria e fare in modo che la CPU esegua il tuo codice. Se tu fossi qualcuno con intenti dannosi, il tuo obiettivo qui sarebbe sovraccaricare la memoria e manipolare anche aree di memoria contigue.

Ma prima di tutto, devi concentrarti sui concetti di heap, stack e segmento di testo.

Durante la creazione dello stack, la memoria utilizza indirizzi di memoria elevati. Gli indirizzi di memoria elevati indicano l'area di memoria estesa. Quindi i valori dell'indirizzo iniziano a diminuire. Lo stack di memoria utilizza un metodo chiamato LIFO (Last In, First Out) durante l'utilizzo della memoria. Le variabili nella memoria dello stack sono valide solo nell'ambito in cui sono definite. Se sono al di fuori di questo ambito, si verificherà un errore.

La memoria dello stack, d'altra parte, funziona in modo dinamico e non deve iniziare con indirizzi elevati. Non esiste un limite prestabilito per la memoria heap; tutti i limiti sono impostati dal sistema operativo. È possibile modificare dinamicamente la memoria dell'heap e questi limiti possono variare in base alle esigenze dell'utente durante l'utilizzo dell'heap. I limiti della memoria heap dipendono da fattori determinati dal sistema operativo e dall'hardware. In altre parole, offre un utilizzo dinamico entro questi limiti.

Il segmento di testo contiene il codice del programma ei segmenti di dati contengono dati globali. Gli indirizzi alti condividono memoria stack e heap Tra loro. Il sistema alloca entrambe le memorie in fase di esecuzione.

Per comprendere meglio l'overflow del buffer, è necessario esaminare i registri di dati generici utilizzati dall'architettura del computer per archiviare i dati. Invece di analizzare ogni record individualmente, concentrati sull'essenziale.

  • ESP (puntatore dello stack esteso): Questo registro contiene l'indirizzo in cima allo stack.
  • EBP (puntatore di base esteso): Questo contiene il puntatore di base.
  • EIP (puntatore di istruzioni esteso): E questo registro contiene l'indirizzo della prossima istruzione da eseguire.

Questi termini tecnici possono sembrare un po' confusi, ma immaginateli tutti come piccole partizioni di memoria.

Come funzionano gli attacchi di overflow del buffer?

Quando aggiungi nuovi dati a qualsiasi stack, questi dati verranno inseriti in cima. Tutti i nuovi dati vengono quindi spostati verso il basso. ESP è in cima alla pila. Quindi in questo caso l'ESP va a un indirizzo di memoria inferiore. Immagina i dati aggiunti sopra spingendo l'ESP verso il basso.

Quando un programma inizia a funzionare, il sistema crea uno stack frame con variabili locali. Lo scopo principale di un attacco di overflow del buffer è ottenere l'accesso all'EIP o all'indirizzo di ritorno. Un hacker con accesso a questo indirizzo può ordinargli di puntare a qualsiasi codice dannoso che desidera, che influenzerà quindi il sistema più ampio.

Con ogni nuovo bit di dati, lo stack cresce verso l'EBP. La vera domanda qui è: se inseriamo troppi dati, possiamo spingere l'EBP verso l'EIP? In questo modo, i dati o il codice che desideri si trovano sull'EIP e puoi vedere i risultati desiderati. Non resta che eseguirlo. Quando esegui il programma, punta al tuo codice EIP e avvia l'esecuzione. Di conseguenza, se tu fossi un hacker, avrai eseguito il tuo primo attacco di overflow del buffer.

Per prendere l'esempio da un'angolazione diversa, puoi considerare liquidi di diversa densità, chiamati ESP, EBP e EIP, in un contenitore. Immagina che l'ESP si trovi nella parte superiore del contenitore perché la sua densità è inferiore. Proprio come l'olio d'oliva e l'acqua, non dovrebbero mescolarsi. Il codice dannoso, quindi, è un altro liquido: quando lo aggiungi al contenitore, scombina questo equilibrio, sposta del liquido e si mescola con l'EIP. Ciò indicherà un overflow del buffer.

Come proteggersi dagli attacchi di overflow del buffer

Quindi, come impedisci che ciò accada?

In primo luogo, è importante adottare una buona pratica di codifica durante tutto il processo di sviluppo del software per ridurre al minimo le vulnerabilità della sicurezza. Un codice scritto con cura può ridurre la probabilità di overflow del buffer.

Un altro passaggio consiste nell'utilizzare meccanismi di difesa per consentire il monitoraggio delle aree di memoria, il controllo dei limiti dei buffer e il rilevamento degli attacchi. Infine, è necessario aggiornare regolarmente i sistemi e applicare le patch. Gli aggiornamenti che risolvono le vulnerabilità rendono più difficile per gli aggressori sfruttare le vulnerabilità note. Inoltre, l'utilizzo di strumenti di difesa come software e firewall fornisce un ulteriore livello di sicurezza.

Intervieni contro i buffer overflow

Gli attacchi di overflow del buffer rappresentano una minaccia significativa per la tua sicurezza informatica e prendere precauzioni contro di essi è naturalmente importante. Fortunatamente è possibile bloccare questi attacchi e rafforzare i meccanismi di difesa. Molte buone pratiche di sicurezza, come mantenere il software aggiornato per correggere le patch, aiutano a proteggere da tali attacchi, così come da altre vulnerabilità.