¿Es suficiente para explotar la vulnerabilidad en un programa? ¿Se requiere acceso a la raíz o al kernel? ¿Hay tal vez posibilidades de explotar directamente el host sin ninguna vulnerabilidad en el huésped? ¿En qué medida depende del hipervisor?
Los hipervisores están diseñados para proteger contra huéspedes maliciosos, pero existen errores.
Un hipervisor funciona emulando ciertos componentes de hardware para que los controladores de hardware del huésped puedan comunicarse con ellos correctamente. También configura la virtualización acelerada por hardware de la CPU y la memoria. Explico un poco sobre la virtualización x86 y cómo funciona en otra respuesta . En general, explotar un hipervisor requerirá explotar un error en el código de emulación del hipervisor (código que emula instrucciones atrapadas o dispositivos de hardware) o la tecnología de virtualización de hardware subyacente proporcionada por la propia CPU. Los diferentes hipervisores simplemente proporcionan diferentes formas de interactuar con la virtualización provista por el hardware. Xen, KVM, VirtualBox, HyperV, etc. son interfaces de alto nivel para el mismo VT-x primitivo (para hardware Intel), que proporciona un conjunto de instrucciones de CPU para administrar el contexto de virtualización (por ejemplo, ingresar y salir de máquinas virtuales).
¿Es suficiente para explotar la vulnerabilidad en un programa?
Debe poder ejecutar código arbitrario en el invitado. Una forma de hacerlo sería aprovechar una vulnerabilidad en un programa, por ejemplo, explotar un servidor web que se ejecuta en el invitado.
¿Se requiere acceso a la raíz o al kernel?
A veces, pero no siempre. Root en sí es solo un usuario regular que se ejecuta en modo de usuario. Lo único que lo hace poderoso es el hecho de que el kernel confía en él, lo que permite a un usuario root comprometer el kernel. Una vez que el núcleo está comprometido, el código malintencionado puede ejecutarse en el nivel de privilegio más alto. Muchas de las vulnerabilidades de los hipervisores requieren un error con el hardware virtual de una manera que solo se puede hacer en modo kernel, pero no todas las vulnerabilidades son así. Algunos pueden ser explotados por código no privilegiado que se ejecuta completamente en modo de usuario. En general, kernelmode permite una interacción más profunda con el hipervisor subyacente, expandiéndose enormemente en el área de superficie de ataque.
¿Hay incluso posibilidades de explotar directamente el host sin ninguna vulnerabilidad en el huésped?
Suponiendo que el atacante tenga acceso local sin privilegios al invitado, es posible que pueda atacar al host a través de la red, si el host está escuchando en la red. Esto realmente depende de su configuración.
¿En qué medida depende del hipervisor?
Muy pesado. La gran mayoría de los escapes de máquinas virtuales se basan en vulnerabilidades en el hipervisor. Un exploit contra Xen no funcionará en KVM. Un exploit contra KVM no funcionará en HyperV. Etc. Si bien hay ciertas vulnerabilidades que se aplican a todos los hipervisores al explotar la tecnología de virtualización acelerada de hardware subyacente (por ejemplo, VT-x), estas son mucho menos comunes y tienden a ser mucho más condicionales. Un ejemplo es una omisión de IOMMU en Intel VT-d1 donde no se admiten las interrupciones de reasignación y x2apic. Esta vulnerabilidad permite deshabilitar las restricciones de IOMMU, independientemente del hipervisor.
¿Es suficiente para explotar la vulnerabilidad en un programa?
Depende de cuál sea tu definición de suficiente. Personalmente no querría nada explotado en absoluto. Sin embargo, si tu pregunta es si todo lo que necesita un atacante para comenzar a causar problemas, entonces la respuesta es sí.
¿Se requiere acceso a la raíz o al kernel?
Una vez más, esto depende de cuál sea tu actitud hacia la seguridad. Creo que cualquier acceso es demasiado. Obviamente la raíz sería mucho peor.
¿Hay incluso posibilidades de explotar directamente el host sin ninguna vulnerabilidad en el huésped?
Supongamos por un segundo que su máquina virtual está orientada al público, ya que está preguntando acerca de alguien que tiene un shell en ella. Ahora esta persona está dentro de su red. Independientemente de si tienen raíz o no en esa caja, posiblemente puedan ver otras máquinas detrás de su firewall. Es muy probable que puedan cargar herramientas en su máquina virtual y usar dichas herramientas para comenzar a sondear otras máquinas en su red.
¿Sabes quién más está en tu red? Su máquina host.
No necesita explotaciones para salir de una máquina virtual si es pública y está en su red.
Ahora hice muchas suposiciones en esta respuesta porque realmente no proporcionaste mucha información sobre tu configuración.
Las principales suposiciones que hice fueron que tienes una máquina virtual con acceso puenteado a tu red y está expuesta a los atacantes.
Reflexiones finales sobre esto
Cuando configuro máquinas virtuales vulnerables en mi red para practicar, están dentro de máquinas virtuales. A menudo configuraré varias máquinas virtuales y me moveré entre ellas. A veces incluso ejecuto mi máquina de ataque en una máquina virtual, pero a menudo lo hago desde mi computadora portátil como si acabara de unirme a la red. Las máquinas virtuales parecen idénticas a cualquier otra máquina en mi red, aunque todas estén en la misma caja. El hecho de que algo sea una máquina virtual no significa que esté en un espacio aislado.
Lea otras preguntas en las etiquetas virtualization exploit