È sufficiente sfruttare la vulnerabilità in un programma? È richiesto l'accesso come root o kernel? Ci sono forse anche possibilità di sfruttare direttamente l'host senza alcuna vulnerabilità nell'ospite? In che misura dipende dall'hypervisor?
Gli hypervisor sono progettati per proteggere da ospiti malintenzionati, ma esistono bug.
Un hypervisor funziona emulando determinati componenti hardware in modo che i driver hardware nel guest possano comunicare correttamente con loro. Imposta anche la virtualizzazione accelerata hardware della CPU e della memoria. Spiego un po 'sulla virtualizzazione x86 e su come funziona in un'altra risposta . In generale, l'utilizzo di un hypervisor richiede l'utilizzo di un bug nel codice di emulazione dell'hypervisor (codice che emula le istruzioni intrappolate o i dispositivi hardware) o la tecnologia di virtualizzazione dell'hardware sottostante fornita dalla CPU stessa. Diversi hypervisor forniscono semplicemente diversi modi per interagire con la virtualizzazione fornita dall'hardware. Xen, KVM, VirtualBox, HyperV, ecc. Sono tutte interfacce di alto livello per lo stesso primitivo VT-x (per l'hardware Intel), che fornisce un set di istruzioni CPU per la gestione del contesto di virtualizzazione (inserendo e lasciando VM, ad esempio).
Is it enough to exploit the vulnerability in a program?
Devi essere in grado di eseguire codice arbitrario nel guest. Un modo per farlo sarebbe sfruttare una vulnerabilità in un programma, ad esempio sfruttando un server Web in esecuzione sul guest.
Is root or kernel access required?
A volte, ma non sempre. Il root stesso è solo un utente normale che gira in usermode. L'unica cosa che lo rende potente è il fatto che il kernel si fida di esso, consentendo a un utente root di compromettere il kernel. Una volta che il kernel è stato compromesso, il codice dannoso può essere eseguito al massimo livello di privilegio. Molti exploit dell'hypervisor richiedono problemi con l'hardware virtuale in un modo che può essere fatto solo in kernelmode, ma non tutte le vulnerabilità sono così. Alcuni possono essere sfruttati da codice non privilegiato eseguito interamente in usermode. In generale, kernelmode consente un'interazione più approfondita con l'hypervisor sottostante, espandendo notevolmente la superficie di attacco.
Are there maybe even possibilities to directly exploit the host without any vulnerabilities in the guest?
Supponendo che l'utente malintenzionato abbia un accesso locale non privilegiato al guest, potrebbe essere in grado di attaccare l'host sulla rete, se l'host è in ascolto sulla rete. Questo dipende molto dalla tua configurazione.
To what extend does it depend on the hypervisor?
pesantemente. La maggior parte delle fughe di macchine virtuali fa affidamento sulle vulnerabilità dell'hypervisor. Un exploit contro Xen non funzionerà su KVM. Un exploit contro KVM non funzionerà su HyperV. Tuttavia, mentre esistono alcune vulnerabilità che si applicano a tutti gli hypervisor sfruttando la tecnologia di virtualizzazione accelerata hardware sottostante (ad esempio VT-x), queste sono molto meno comuni e tendono ad essere molto più condizionali. Un esempio è un bypass IOMMU su Intel VT-d1 dove Interrupt Remapping e x2apic non sono supportati. Questa vulnerabilità consente di disabilitare le restrizioni IOMMU, indipendentemente dall'hypervisor.
Is it enough to exploit the vulnerability in a program?
Dipende da cosa è la tua definizione di abbastanza. Personalmente non vorrei assolutamente nulla di sfruttato. Tuttavia, se la tua domanda è, è che tutto ciò che un utente malintenzionato deve iniziare a causare problemi, allora la risposta è sì.
Is root or kernel access required?
Ancora una volta, questo dipende da quale sia il tuo atteggiamento nei confronti della sicurezza. Penso che ogni accesso sia troppo. Ovviamente la root sarebbe peggio.
Are there maybe even possibilities to directly exploit the host without any vulnerabilities in the guest?
Supponiamo per un secondo che la tua macchina virtuale sia pubblica, dal momento che stai chiedendo di qualcuno che ha una shell in esso. Ora questa persona è dentro la tua rete. Indipendentemente dal fatto che abbiano root o meno su quella casella, possono eventualmente vedere altre macchine dietro il firewall. Possono molto probabilmente caricare strumenti sul tuo VM e utilizzare tali strumenti per iniziare a sondare altre macchine sulla tua rete.
Sai chi è sulla tua rete? La tua macchina host.
Non hai bisogno di exploit per uscire da una VM se è pubblica e sulla tua rete.
Ora ho fatto molte supposizioni in questa risposta perché non hai fornito molte informazioni sulla tua configurazione.
I presupposti principali che ho fatto sono che hai una VM con accesso in parallelo alla tua rete ed è esposta agli aggressori.
Final thoughts on this
Quando installo VM vulnerabili sulla mia rete per esercitarmi, sono all'interno delle VM. Spesso installerò più VM e mi muoverò tra loro. A volte eseguo persino la mia macchina attaccante in una VM, ma spesso ci arriverò dal mio portatile come se fossi appena entrato nella rete. Le VM sembrano identiche a qualsiasi altra macchina sulla mia rete, anche se sono tutte sulla stessa scatola. Solo perché qualcosa è una macchina virtuale non significa che sia in modalità sandbox.
Leggi altre domande sui tag virtualization exploit