Controllo dell'integrità del flusso e dell'integrità del flusso di dati

3

Al giorno d'oggi molti exploit possono essere prevenuti dall'integrità del flusso di controllo (CFI). Tuttavia, ci sono anche exploit di dati come Heartbleed, leggere dati / chiavi arbitrari che possono essere prevenuti dall'introduzione del flusso di dati (DFI).

Mi chiedo come CFI e DFI siano co-dipendenti.

  1. Ha senso avere DFI e CFI?
  2. DFI implica CFI?
  3. Posso usare ancora exploit che alterano il control flow graph (CFG) se ho solo DFI?
posta user2600312 08.06.2016 - 21:59
fonte

1 risposta

3

Does it make sense to have DFI and CFI?

No.

Does DFI imply CFI?

Sì, perché il dirottamento del flusso di controllo significa la modifica di un controllo-dati e DFI garantisce l'integrità dei dati indipendentemente dal fatto che sia usato per il controllo o meno.

Can I still use exploits that alter the control flow graph (CFG) if I have only DFI?

No, verrà rilevato.

DFI applica un criterio sul flusso di dati osservato in fase di esecuzione. Assicura che un programma deve seguire un grafico del flusso di dati generato tramite un'analisi statica in fase di compilazione. Una trasmissione di strumenti sul programma aggiunge controlli prima di ogni istruzione di lettura per garantire che non leggano dati corrotti.

L'analisi statica utilizza un raggiungimento dell'analisi delle definizioni . È un'analisi del flusso di dati che ci fornisce per ogni istruzione di lettura che legge una variabile, un insieme di istruzioni che potrebbero aver definito per ultima questa variabile.

Per ciascuna istruzione di lettura viene eseguita l'analisi e ad ogni istruzione di scrittura che definisce una variabile viene assegnato un identificativo univoco.

Quindi, un passaggio di strumentazione aggiunge controlli prima di ogni istruzione di scrittura per aggiornare una tabella che mappa un indirizzo in fase di scrittura e l'ultimo identificatore che ha scritto un valore a quell'indirizzo.

Inoltre, la strumentazione aggiunge controlli prima di ogni istruzione di lettura. Raccoglie l'identificatore mappato con l'indirizzo di cui sta leggendo il valore e garantisce che l'identificatore sia nell'insieme delle definizioni di raggiungimento trovate grazie all'analisi statica.

Ad esempio, se un utente malintenzionato riesce a danneggiare l'indirizzo di ritorno nello stack, l'istruzione di scrittura utilizzata per corromperlo ha aggiornato la tabella con il suo identificativo. Quindi, la strumentazione appena prima dell'istruzione ret noterà il danneggiamento, perché l'ultimo identificatore utilizzato per modificare l'indirizzo di ritorno non è nel set di identificatori consentiti.

Ecco perché DFI previene sia attacchi di dati non di controllo che attacchi di dati di controllo. Spiega anche perché non ha senso usare entrambi, perché sarebbe ridondante.

    
risposta data 09.06.2016 - 12:55
fonte

Leggi altre domande sui tag