【Resumen del artículo】Ataques de recursos abstractos contra la virtualización a nivel del sistema operativo

introducir

Este es un artículo de 2021CCS, los autores son Nanzi Yang, Wenbo Shen, Jinku Li, Yutian Yang, Kangjie Lu, Jietao Xiao, Tianyu Zhou, Chenggang Qin, Wang Yu, Jianfeng Ma, Kui Ren.

descripción general

Las contribuciones de este trabajo son las siguientes:

  1. Nueva superficie de ataque: el autor revela un ataque de recursos abstracto que afecta las funciones principales del sistema operativo, afecta a múltiples sistemas operativos y es compartido por la virtualización del sistema operativo.

  2. Evaluación de viabilidad de ataques: los entornos de contenedores nativos autoimplementados proporcionados por los cuatro principales proveedores de computación en la nube se ven afectados por ataques de recursos abstractos.

  3. Análisis sistemático: el autor diseñó e implementó una herramienta de análisis estático e identificó 501 recursos abstractos que el contenedor podría activar repetidamente.

  4. El autor abrió el código fuente de la herramienta y los resultados en Github

    Dirección de Github: https://github.com/ZJU-SEC/AbstractResourceAttack

descripción general

Este documento revela un problema inherente con la virtualización a nivel de sistema operativo: compartir variables del kernel y estructuras de datos. En comparación con los recursos físicos (CPU, memoria), estas variables del kernel y estructuras de datos también se denominan recursos abstractos. Basado en estos recursos abstractos compartidos, este documento propone un nuevo tipo de ataque: el ataque de recursos abstractos. Los experimentos han demostrado que los ataques de recursos abstractos pueden afectar todas las funciones principales del sistema operativo, incluida la gestión de procesos, la gestión de memoria, la gestión de almacenamiento y la gestión de IO, lo que provoca fallas en el sistema o una degradación significativa del rendimiento; al mismo tiempo, puede atacar la mayoría de los sistemas operativos convencionales. sistemas, incluidos Linux, FreeBSD y el núcleo Fuchsia; al mismo tiempo, el documento se verifica aún más en el entorno de los cuatro principales proveedores de la nube, lo que demuestra que el ataque de recursos abstractos aún es factible en el entorno de contenedor de núcleo compartido implementado en él, revelando la extensión y severidad del impacto del ataque. Este documento implementa y abre una herramienta de análisis estático para analizar sistemáticamente posibles ataques de recursos abstractos en Linux y descubre más de 500 recursos abstractos vulnerables en el kernel de Linux.

fondo

La virtualización a nivel de sistema operativo es una tecnología central en la computación en la nube que permite que múltiples entornos de espacio de usuario independientes y aislados se ejecuten en el mismo kernel. Actualmente, la virtualización a nivel de sistema operativo está representada por contenedores de Linux, las cárceles de FreeBSD y las zonas de Solaris se usan con más frecuencia.

El artículo usa contenedores para referirse a estos espacios de ejecución de usuarios independientes que comparten el kernel.Actualmente, el contenedor más utilizado es el contenedor Docker, que es utilizado por dos plataformas de nube comunes, Red Hat Openshift y Apache Openwhisk.

A diferencia de la virtualización tradicional, que mantiene un kernel separado para cada máquina virtual, los contenedores tienen velocidades de inicio más rápidas y una mejor eficiencia en la utilización de recursos debido a sus características de kernel compartidas. En los contenedores de Linux, el kernel proporciona mecanismos de espacio de nombres y cgroup para implementar el aislamiento y la limitación de recursos, y el kernel también proporciona mecanismos de seguridad como seccomp y selinux para reforzar la seguridad. Debido a la amplia aplicación de los contenedores, sus problemas de seguridad también han atraído mucha atención. Las investigaciones anteriores se centraron principalmente en la fuga de información, los ataques de canal lateral y las cargas fuera de banda.

ataque de recursos abstractos

A diferencia del trabajo anterior, este artículo parte de una perspectiva novedosa, el autor cree que además de los recursos físicos como la CPU y la memoria, las variables y estructuras mantenidas en el sistema operativo también son recursos muy importantes. Los contenedores (contenedores nativos) que se ejecutan en el mismo kernel del sistema operativo pueden acceder a los servicios proporcionados por el kernel a través de llamadas al sistema, y ​​las llamadas al sistema usarán una gran cantidad de variables y estructuras mantenidas por el kernel, por lo que los contenedores comparten estas variables y estructuras.

Sobre la base de las complejas dependencias de datos entre el contenedor y el kernel, el autor se refiere colectivamente a las variables y estructuras mantenidas por el kernel como recursos abstractos (Abstract Resource) y propone un nuevo tipo de ataque: Abstract Resource Attack (Abstract Resource Attack). ), el núcleo de este ataque es que el contenedor malicioso lanza un ataque de denegación de servicio (DoS) al agotar los recursos abstractos compartidos entre contenedores en el kernel, y tiene las siguientes características:

  1. Los ataques se pueden lanzar en contenedores sin privilegios, eliminar todas las capacidades sin explotar ninguna vulnerabilidad del kernel.
  2. Los ataques pueden afectar todas las funciones principales proporcionadas por el sistema operativo.
  3. El ataque puede afectar a varios de los principales sistemas operativos, como Linux, FreeBSD y Fuchsia.
  4. Los mecanismos existentes, como el espacio de nombres y cgroup en Linux, no pueden limitar de manera efectiva los recursos abstractos.

Las características anteriores muestran que la nueva superficie de ataque del ataque de recursos abstractos es un problema común introducido por la virtualización a nivel del sistema operativo, y el mecanismo existente no puede limitarlo de manera efectiva.

Causa raíz del ataque de recursos abstractos

El autor primero explicó la causa raíz de Abstract Resource a partir de un ataque example-nr_files. Hay una variable global nr_files en el kernel de Linux. Dado que ni el espacio de nombres ni cgroup aíslan y restringen la variable nr_files, los contenedores maliciosos pueden agotar fácilmente nr_files y hacer que alcance files_stat .max_files límite superior, de modo que el contenedor atacado no pueda realizar operaciones relacionadas con archivos.
inserte la descripción de la imagen aquí

Ataques de recursos abstractos contra plataformas en la nube

Para evaluar más a fondo el impacto de los ataques de recursos abstractos, el autor también seleccionó siete recursos abstractos y realizó experimentos en el entorno de contenedor nativo autoimplementado proporcionado por los cuatro principales proveedores de la nube. Los resultados experimentales muestran que el entorno de contenedor nativo autoimplementado de cada proveedor de la nube es vulnerable a los ataques de recursos abstractos. Durante el experimento, el autor también se sorprendió gratamente al descubrir que el contenedor de seguridad gVisor de Google también se ve afectado por dos ataques de recursos abstractos (nr_files y netns_ct->count). Esto se debe a que, aunque gVisor implementa su propio kernel en modo de usuario, eventualmente iniciará una llamada del sistema al kernel del host para completar la solicitud correspondiente. El autor ha revelado los problemas relevantes a los cuatro principales proveedores de computación en la nube y ha recibido sus respuestas y confirmaciones.
inserte la descripción de la imagen aquí

Diseño de herramientas de análisis estático y resultados de análisis

Finalmente, el autor también diseñó e implementó una herramienta de análisis estático LLVM sistematizada para encontrar automáticamente recursos abstractos en el kernel de Linux que los contenedores pueden agotar. Para resolver los dos desafíos principales de cómo identificar recursos abstractos significativos y cómo distinguir si el contenedor puede agotar los recursos abstractos, la herramienta incluye análisis basado en configuraciones y análisis basado en acceso, respectivamente. Entre los 1010 resultados analizados por la herramienta, hay 700 recursos que no están relacionados con el controlador y 310 recursos que están relacionados con el controlador. Después de una verificación de activación dinámica adicional, entre los 700 recursos, el contenedor puede activar repetidamente 389 recursos, y la tasa positiva verdadera es del 55,6 %. Entre los 310 recursos relacionados con el controlador, se excluyen 92 recursos que no tienen soporte de hardware local, y el contenedor puede activar repetidamente 112 recursos abstractos, con una tasa positiva verdadera del 51,4 %.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

おすすめ

転載: blog.csdn.net/Ohh24/article/details/130057349