Cos'è un code shell?

ShellCode è una sequenza del codice macchina o istruzioni eseguibili, che viene iniettata nella memoria di un computer con l'intenzione di assumere il controllo di un programma in esecuzione. In tale attacco, uno dei passaggi è quello di ottenere il controllo del contatore del programma, che identifica l'istruzione successiva da eseguire. Il flusso del programma può quindi essere reindirizzato al codice inserito. Il codice macchina invadente è chiamato payload dell'attacco ed è l'elemento comunemente indicato dal termine code Shell. Questo metodo è stato spesso utilizzato per concedere un accesso per l'attaccante aprendo una shell di comando del sistema operativo, quindi gli attacchi di iniezione del codice in generale sono diventati noti come codifica.

La vulnerabilità che viene sfruttata in genere comporta come un programma assegna la memoria, controlla la validità dei dati di input e gestisce gli errori di memoria. Gli sviluppatori di software di solito possono evitare questa minaccia definendo rigorosamente i dati di input e rifiutando valori impropri. Se non controllato, i valori che necessitano di più spazio di archiviazione rispetto alla memoria allottED per quel valore potrebbe essere accettato. Ciò provoca una culatta di sicurezza chiamata overflow del buffer, in cui parte dei dati viene scritta in posizioni di memoria adiacenti allo spazio assegnato del valore. Se manipolata attentamente, questa anomalia può consentire l'introduzione di codice invadente.

ShellCode è normalmente scritto in un linguaggio di programmazione con accesso al sistema di basso livello come Assembly, C o C ++. A seconda della vulnerabilità mirata, tuttavia, lo stesso risultato potrebbe essere realizzato inserendo il codice per un linguaggio di scripting interpretato, come Perl, o bytecode per una macchina virtuale, come Java. Il codice può essere impiantato prima, durante o dopo il dirottamento del contatore del programma. Pertanto, il codice invadente può essere contenuto in un file sulla macchina target o trasmesso su una connessione di rete in tempo reale.

Gli exploit di code locali sono progettati per dare un controllo degli aggressori su una macchina a WHICh ha accesso fisico. Un obiettivo in questo caso potrebbe essere quello di creare un account con i privilegi di amministratore, ad esempio. Allo stesso modo, se un processo in esecuzione ha un livello di privilegio elevato, un exploit di successo concederebbe temporaneamente lo stesso livello di accesso all'intruso.

I processi in esecuzione su una macchina remota possono essere sfruttati utilizzando protocolli di rete standard per comunicare con il computer di destinazione. Connect-Back Shellcode indica alla macchina di destinazione di avviare una connessione al computer dell'intruso. Se l'intruso inizia la connessione, il codice viene chiamato bindshell, in quanto tenta di assumere il controllo di una connessione di rete chiamata porta sulla macchina remota. Il metodo Connect-Back è più ampiamente utilizzato, poiché i firewall raramente vietano le connessioni in uscita.

ALTRE LINGUE

Questo articolo è stato utile? Grazie per il feedback Grazie per il feedback

Come possiamo aiutare? Come possiamo aiutare?