anche gli aspetti più modesti di un programma possono presentare le minacce alla sicurezza . Ingresso utente di base a cortocircuitare codice interno di un programma in vari modi . L'ingresso può utilizzare il funzionamento di funzioni di stampa per accedere a flusso di controllo del programma sovrascrivendo i confini della funzione . Oppure, può superamento dei limiti di buffer impostati per esso dal programmatore per modificare i dati al di fuori del suo spazio programmatore - designati. In entrambi i casi , l'input dell'utente influisce su come il programma viene eseguito , potenzialmente verso fini malevoli . Stringhe di formato
Formattare le stringhe in C e C + + sono parte delle funzioni di ingresso e di uscita. La stringa di formato contiene i dati per i dati visualizzati sullo schermo . Stringhe di formato hanno due componenti principali . Il primo è la stringa di base per la stampa , che contiene i caratteri e la punteggiatura . La seconda componente comprende carattere speciale segnato con segni di percentuale che fungono da segnaposto per i dati variabili . Esistono questi simboli nella stringa , e vengono sostituiti durante l'uscita dai valori contenuti nelle variabili . Il seguente esempio illustra una printf di base con una stringa di formato :
char x = " c " ; int y = 10 ;
printf ( "Stampa di caratteri% c e decimali % d " , , x , y) ;
Format String Attacchi
l' insicurezza delle stringhe di formato sta nel come i simboli inseriti nella stringa di riferimento in altre parti del programma . Ad esempio , un utente malintenzionato dati che entrano in una variabile utilizzata in una stringa di formato può iniettare simboli che le permettono di accedere ad altri fotogrammi di esecuzione del programma . Così facendo , l'attaccante può modificare i valori in variabili di fuori del campo di applicazione della funzione di stampa . Inoltre , l'utente malintenzionato potrebbe eventualmente accedere ai valori in memoria che rappresentano la posizione delle funzioni . L'utente malintenzionato potrebbe quindi modificare tale valore per puntare a una diversa funzione , modificando in tal modo il flusso di esecuzione e sostanzialmente dirottamento del programma.
Input buffer
ingresso buffer sono spazi di archiviazione dati creati dal programmatore per contenere i dati inseriti dall'utente . Il più delle volte , i buffer di ingresso gestire l'input dell'utente di login nomi e password . In particolare per il linguaggio di programmazione C , che non comprende la gestione di stringhe nativo , buffer di input esistono come array di caratteri con una dimensione impostata . In questo caso , spetta al programmatore di allocare i dati per l'input dell'utente .
Buffer Overflow
Un utente malintenzionato potrebbe sfruttare i limiti di questi buffer di inondandolo di dati . Nel semplice esempio , un array di caratteri scopo di tenere un registro in nome potrebbe essere 20 spazio assegnato , ma un attaccante dà più di venti caratteri per elaborare . In questo caso , i caratteri extra sovrascrivere locazioni di memoria immediatamente dopo l'array . Queste posizioni di memoria eventualmente in possesso dei dati rilevanti per l'esecuzione del programma , come ad esempio le variabili condizionali per le istruzioni di controllo di flusso o riferimenti funziona in pila . Come l' attacco stringa di formato , questo permette essenzialmente l'attaccante di dirottare il programma .