È possibile utilizzare l'overflow del buffer sul codice iniettato dalla DLL?

2

È possibile applicare overflow del buffer sul codice che è stato iniettato usando l'iniezione DLL?

Ad esempio, se inserisco una funzione foo () nel processo, è possibile chiamare foo () usando buffer overflow? In caso contrario, significa che l'overflow del buffer può essere utilizzato solo per chiamare funzioni interne arbitrarie ??

Grazie

    
posta Lor 15.06.2014 - 08:16
fonte

2 risposte

1

Bufferoverflow consente a un utente malintenzionato di far passare il processore a un indirizzo arbitrario della memoria del processo. Dato che il codice iniettato della DLL farà parte dello spazio di indirizzamento del processo attaccato, è possibile passare al codice inserito. La sfida sarà trovare l'indirizzo di foo.

    
risposta data 15.06.2014 - 11:29
fonte
0

Un overflow del buffer viene utilizzato per sovrascrivere un altro campo di dati che si trova nella RAM vicino al buffer overflow. Classicamente, gli overflow del buffer vengono sfruttati per sovrascrivere uno slot "return address" sullo stack, o un puntatore di funzione (ad esempio in un vtable in linguaggi orientati agli oggetti), quindi fare in modo che la CPU salti in una posizione prescelta.

Quando si verifica un tale salto, può essere un indirizzo che contiene codice eseguibile e i contenuti della DLL sono, per definizione, idonei. Una DLL è un pezzo di codice che, quando usato, è reso apparente nello spazio degli indirizzi dell'applicazione, come codice che può essere eseguito.

Questo può ancora essere difficile per l'attaccante:

  • Molti sistemi operativi moderni impongono la randomizzazione del layout dello spazio degli indirizzi , il che significa che la DLL verrà caricata in un indirizzo che l'attaccante non può necessariamente indovinare in anticipo. Ciò contrasta con l'eseguibile principale, che in alcuni OS apparirà ancora ad un indirizzo prevedibile (sebbene ci siano OS che abilitano l'elaborazione ASLR per l'eseguibile principale). I dettagli variano molto. Se l'attaccante può provare il suo attacco migliaia di volte, allora può sperare di "essere fortunato", specialmente sui sistemi a 32 bit dove l'ASLR ha relativamente poco spazio per la randomizzazione degli indirizzi.

  • A seconda del tipo di buffer che trabocca, l'utente malintenzionato potrebbe avere problemi a sovrascrivere il suo campo indirizzo di destinazione con contenuti arbitrari. In particolare, quando il buffer contiene testo, in un sistema basato su C, l'overflow può fermarsi al primo byte del valore 0x00, quindi l'utente malintenzionato potrebbe non essere in grado di sovrascrivere un campo indirizzo con un valore contenente un byte nullo di questo tipo in un luogo scomodo.

  • Fare in modo che un processo di destinazione carichi una DLL specifica, attaccata dagli attacchi, richiede già molto controllo su tale processo. Normalmente, l'utente malintenzionato deve accontentarsi della DLL "normale" caricata dall'applicazione come parte della sua normale elaborazione. Ciò include la DLL "principale" dal sistema (ad esempio kernel32.dll sui sistemi Windows). Nei buffer overflow classici, i buffer contents erano usati come codice; tuttavia, molte macchine e sistemi operativi moderni distinguono data dal codice eseguibile , quindi qualsiasi tentativo di "saltare nello stack" attiverà un'eccezione dal kernel (e normalmente la terminazione del processo) . Questo è il motivo per cui gli hacker tentano di saltare nel codice DLL esistente.

risposta data 15.06.2014 - 14:42
fonte

Leggi altre domande sui tag