
Articolo accademico e diapositive di presentazione che analizzano la vulnerabilità di escalation dei privilegi Linux Dirty COW (CVE-2016-5195), incluse tecniche di sfruttamento, comportamento di writeback del kernel e sfide di rilevamento.
Questa repository contiene il mio articolo e le slide della presentazione su CVE-2016-5195, una vulnerabilità di escalation dei privilegi in Linux, scritti per il corso Operating Systems: Design And Security presso la FMI, Università di Bucarest.
Nel mio articolo ho affermato che è possibile usare Dirty COW per installare backdoor nei binari in modo silenzioso senza escalare immediatamente a root, per rendere più difficile l'individuazione.
In realtà non è vero, perché quando si tenta di riscrivere (writeback) la pagina modificata, il kernel nota che la pagina è sporca (cosa che non dovrebbe mai essere) e va in panic, mandando in crash il sistema.
Per evitarlo, è necessario escalare subito a root e disabilitare il writeback automatico con "echo 0 > /proc/sys/vm/dirty_writeback_centisecs". La mia prova di concetto non fa questo, quindi va rapidamente in crash durante i test in una VM, dopo aver modificato con successo /etc/passwd (che non viene persistito su disco).
https://www.exploit-db.com/exploits/40847 è un esempio di codice exploit che sovrascrive /etc/passwd e poi disabilita il writeback per evitare il crash.
Altri metodi includono la patch della vDSO (https://github.com/scumjr/dirtycow-vdso) invece di una pagina basata su file, il che influisce su tutti i processi del sistema e non causa crash, e offre altri vantaggi come anche l'evasione dai container e non è influenzato dalle restrizioni di SELinux che potrebbero impedire persino di aprire /etc/passwd in sola lettura per l'attacco.
Anche se in effetti si può installare una backdoor sul sistema dopo essere passati a root (come per qualsiasi altro metodo di escalation dei privilegi), ciò comporterebbe normali operazioni sul filesystem e potrebbe essere rilevato dai sistemi di rilevamento delle intrusioni, mentre se il writeback avesse funzionato come inizialmente pensavo, potrebbe bypassare il monitoraggio delle operazioni di scrittura, poiché il kernel si limiterebbe a riscrivere la pagina senza alcuna chiamata di sistema write coinvolta, ma in realtà invece va semplicemente in panic.