Semplice spiegazione di come funziona Dirty COW?

7

Sono sicuro che molti di voi ricordano la spiegazione XHCD Heartbleed . Nello stesso spirito, vorrei chiedere una spiegazione su come funziona l'ultima vulnerabilità del marchio, Dirty COW .

È possibile spiegarlo a qualcuno come me, che non ha idea di come funzioni il kernel di Linux o di cosa sia una "copia su scrittura"? Si prega di notare che non sto cercando una spiegazione di cosa fa , ma di come e perché funziona.

    
posta Anders 21.10.2016 - 20:52
fonte

2 risposte

14

Non sono un esperto di kernel Linux, ma ho familiarità con i concetti coinvolti e ho letto il commento di Linus e il diff. Ci proveremo - forse le persone possono correggermi se ho sbagliato e faremo le cose insieme.

Copy On Write è un concetto di memoria interna in cui, principalmente per motivi di prestazioni, le operazioni che fanno una copia di una sezione di memoria non ottengono la propria copia a meno che e fino a quando non apportano una modifica a quella memoria - a quel punto , fai rapidamente la loro copia, apporta la modifica e restituiscilo a loro. Il vantaggio è che non devi eseguire il lavoro di creazione della copia a meno che e fino a quando non lo cambi effettivamente: più veloce, meno utilizzo della memoria, migliore memorizzazione nella cache.

Il bug qui è nel codice che esegue la copia. Sembra che ci sia una condizione di competizione in quella copia (o effettivamente nella contabilità intorno a quella copia). Una condizione di competizione si verifica quando due diversi processi o thread accedono alla stessa risorsa e si scontrano l'uno sull'altro. In questo caso, ciò che accade è che la memoria è contrassegnata per essere scrivibile prima di essere effettivamente copiata - se due thread lavorano strettamente l'uno con l'altro, il secondo può sfruttare il flag scrivibile e scrivere effettivamente nella memoria originale, non la copia.

L'exploit è che questo consente a un processo di innalzarsi da solo ottenendo l'accesso in scrittura alla comprensione del kernel stesso. Il kernel sa a quale utente sta lavorando ogni processo - prendendo una copia di quella memoria che il kernel sta usando per memorizzare quelle informazioni usando Copy On Write, quindi usando questo bug di Dirty COW, possono effettivamente scrivere le informazioni dell'utente nella copia del kernel stesso . Quindi scrivono che il processo viene eseguito come root .. e quindi possono fare qualsiasi cosa.

Il programma dimostrativo usa quello per scrivere su un file scrivibile solo da root, ma potrebbe aver fatto letteralmente qualsiasi cosa. La correzione era di separare una nuova bandiera dicendo che stavano facendo un CopyOnWrite, invece di usare il flag Write per entrambi.

    
risposta data 21.10.2016 - 21:33
fonte
14

Tu e altre 3 persone state studiando per un test, usando le stesse note.

Dici "Devo andare, ho bisogno di fare una copia di questi appunti per me stesso che posso segnare ... fammi fare una copia!"

Prendi le note dalla fotocopiatrice, le copia, altera l' originale , quindi riporta l'originale modificato al resto del gruppo. Quella versione modificata è cattiva; hai modificato alcune risposte per essere sbagliato.

Il resto del gruppo viene lasciato a studiare su una brutta versione delle note, mentre tu prendi la buona versione a casa.

Hai superato il test.

Falliscono.

L'unica sfumatura tra questo esempio e Dirty COW è che in Dirty COW non si si suppone che abbia consegnato l'originale; il kernel crea la copia per te. Ma c'è una condizione di competizione che ti dà erroneamente l'accesso all'originale quando chiedi una copia. "Condizioni di gara" significa "puoi accedere di nascosto a qualcosa a cui non dovresti avere accesso."

    
risposta data 22.10.2016 - 04:22
fonte

Leggi altre domande sui tag