Articulo de referencia

vDSO

vDSO ( objeto compartido dinámico virtual ) es un mecanismo del núcleo para exportar un conjunto cuidadosamente seleccionado de rutinas del espacio del núcleo a aplicaciones del...

vDSO ( objeto compartido dinámico virtual ) es un mecanismo del núcleo para exportar un conjunto cuidadosamente seleccionado de rutinas del espacio del núcleo a aplicaciones del espacio de usuario, de modo que las aplicaciones puedan llamar a estas rutinas del espacio del núcleo dentro del proceso, sin incurrir en la penalización de rendimiento de un cambio de modo de usuario a modo de núcleo que es inherente cuando se llaman a estas mismas rutinas del espacio del núcleo a través de la interfaz de llamadas al sistema . [ 1 ] [ 2 ]

vDSO utiliza mecanismos estándar para enlazar y cargar, es decir, el formato estándar Executable and Linkable Format (ELF). [ 3 ] [ 4 ] vDSO es un área de memoria asignada en el espacio de usuario que expone algunas funcionalidades del kernel. vDSO se asigna dinámicamente , ofrece mayor seguridad a través de la aleatorización del diseño del espacio de direcciones y admite más de cuatro llamadas al sistema. Algunas bibliotecas estándar de C , como glibc , pueden proporcionar enlaces vDSO de modo que si el kernel no tiene soporte para vDSO, se realiza una llamada al sistema tradicional. [ 5 ] vDSO ayuda a reducir la sobrecarga de llamadas en rutinas simples del kernel, y también puede funcionar como una forma de seleccionar el mejor método de llamada al sistema en algunas arquitecturas de computadoras como IA-32 . [ 6 ] Una ventaja sobre otros métodos es que dichas rutinas exportadas pueden proporcionar información de depuración DWARF (Debug With Attributed Record Format) adecuada . La implementación generalmente implica ganchos en el enlazador dinámico para encontrar los vDSO.

vDSO se desarrolló para ofrecer las funcionalidades de vsyscall superando sus limitaciones: una pequeña cantidad de memoria asignada estáticamente , que permite solo cuatro llamadas al sistema, y ​​las mismas direcciones de la interfaz binaria de la aplicación (ABI) en cada proceso, lo que compromete la seguridad. Este problema de seguridad se ha mitigado mediante la emulación de una llamada al sistema virtual , pero la emulación introduce latencia adicional. [ 5 ]

glibc tiene soporte para vDSO. [ 7 ]getrandom()

Referencias

  1. Enrico Perla; Massimiliano Oldani (16 de diciembre de 2016). Hacking de kernel: Exploits verstehen, schreiben und abwehren: Schwachstellen in Kernel-Architekturen erkennen und Gegenmaßnahmen ergreifen (en alemán). Franzis Verlag. págs.  466–. ISBN 978-3-645-20503-0.
  2. "vDSO - descripción general del objeto compartido dinámico ELF virtual" . Canonical. Archivado del original el 4 de marzo de 2016. Recuperado el 10 de diciembre de 2015 .
  3. "Creando un vDSO: el otro pollo del Coronel" . Linuxjournal.com . Consultado el 16 de febrero de 2015 .
  4. Corbet, Jonathan (8 de junio de 2011). "Sobre las llamadas al sistema y el vDSO" . Lwn.net . Consultado el 16 de febrero de 2015 .
  5. 1 2 "Respuesta de la comunidad a la pregunta "¿Qué son vDSO y vsyscall?"" . Consultado el 19 de noviembre de 2016 .
  6. Drysdale, David (16 de julio de 2014). "Anatomía de una llamada al sistema, parte 2" . Lwn.net . Recuperado el 19 de noviembre de 2018 .
  7. "sourceware.org Git - glibc.git/commit" . sourceware.org . Consultado el 13 de noviembre de 2024 .