stringtranslate.com

bomba de horquilla

El concepto detrás de una bomba fork: los procesos se replican continuamente, lo que podría causar una denegación de servicio.

En informática , una bomba fork (también llamada virus conejo ) es un ataque de denegación de servicio (DoS) en el que un proceso se replica continuamente para agotar los recursos disponibles del sistema, ralentizándolo o bloqueándolo debido a la falta de recursos .

Historia

Alrededor de 1978, se informó que una primera variante de una bomba horquilla llamada wabbit se ejecutaba en un System/360 . Puede haber descendido de un ataque similar llamado RABBITS reportado en 1969 en un Burroughs 5500 en la Universidad de Washington . [1]

Implementación

Las bombas de bifurcación funcionan consumiendo tiempo de CPU en el proceso de bifurcación y saturando la tabla de procesos del sistema operativo . [2] [3] Una implementación básica de una bomba fork es un bucle infinito que lanza repetidamente nuevas copias de sí mismo.

En sistemas operativos tipo Unix , las bombas fork generalmente se escriben para utilizar la llamada al sistema fork . [3] Como los procesos bifurcados también son copias del primer programa, una vez que reanudan la ejecución desde la siguiente dirección en el puntero del marco , continúan bifurcándose sin cesar dentro de su propia copia del mismo bucle infinito; esto tiene el efecto de provocar un crecimiento exponencial de los procesos. Como los sistemas Unix modernos generalmente utilizan una técnica de gestión de recursos de copia en escritura cuando bifurcan nuevos procesos, [4] una bomba de bifurcación generalmente no saturará la memoria de dicho sistema.

Los sistemas operativos Microsoft Windows no tienen una funcionalidad equivalente a la llamada al sistema fork de Unix; [5] por lo tanto, una bomba de bifurcación en un sistema operativo de este tipo debe crear un nuevo proceso en lugar de bifurcar uno existente, como ocurre con el lote @echo.%0^|%0›$^_^.c^md&$_›nul , que se puede escribir más claramente como echo %0^|%0 > $_.cmd & $_. En él, %0|%0se escribe en $.cmd, que luego es ejecutado por & $_. [6]

Un ejemplo clásico de bomba fork es uno escrito en shell Unix :(){ :|:& };: , que posiblemente se remonta a 1999, [7] y que puede entenderse más fácilmente como

tenedor () { tenedor | tenedor & }     tenedor

En él, una función se define ( fork()) como si se llamara a sí misma ( fork), y luego canaliza ( |) su resultado hacia sí misma, todo en un trabajo en segundo plano ( &).

El código que utiliza dos puntos :como nombre de función no es válido en un shell definido por POSIX, que solo permite caracteres alfanuméricos y guiones bajos en los nombres de funciones. [8] Sin embargo, su uso está permitido en GNU Bash como una extensión. [9]

Prevención

Como el modo de operación de una bomba fork está completamente encapsulado mediante la creación de nuevos procesos, una forma de evitar que una bomba fork afecte gravemente a todo el sistema es limitar la cantidad máxima de procesos que puede poseer un solo usuario. En Linux, esto se puede lograr utilizando la utilidad ulimit ; por ejemplo, el comando ulimit -u 30limitaría al usuario afectado a un máximo de treinta procesos propios. [10] En sistemas habilitados para PAM , este límite también se puede establecer en /etc/security/limits.conf, [11] y en *BSD, el administrador del sistema puede establecer límites en /etc/login.conf. [12] Los sistemas Linux modernos también permiten una prevención más detallada de las bombas de bifurcación a través de cgroups y controladores de número de proceso (PID). [13]

Ver también

Referencias

  1. ^ Raymond, Eric S. (1 de octubre de 2004). "wabbit". El léxico de la jerga. Archivado desde el original el 15 de mayo de 2012 . Consultado el 15 de octubre de 2013 .
  2. ^ Sí, Nong (2008). Sistemas informáticos y de redes seguros: modelado, análisis y diseño . John Wiley e hijos. pag. 16.ISBN 978-0470023242.
  3. ^ ab Jielin, Dong (2007). Diccionario de red . pag. 200.ISBN 978-1602670006.
  4. ^ Dhamdhere, Dhananjay M. (2006). Sistemas operativos: un enfoque basado en conceptos . Educación superior McGraw-Hill. pag. 285.ISBN 0-07-061194-7.
  5. ^ Hammond, Mark (2000). Programación Python en Win32: ayuda para programadores de Windows . "O'Reilly Media, Inc.". pag. 35.ISBN 1565926218.
  6. ^ Enderman (26 de junio de 2024). @echo.%0^|%0›$^_^.c^md&$_›nul . Consultado el 30 de junio de 2024 a través de YouTube.
  7. ^ Michal Zalewski (19 de agosto de 1999). "[RHSA-1999:028-01] Desbordamiento del búfer en libtermcap tgetent()". Grupo de noticias : muc.lists.bugtraq . Consultado el 10 de diciembre de 2022 .bash$ :(){ :|:&};:}
  8. ^ "Las especificaciones básicas de Open Group, edición 7, edición de 2018, IEEE Std 1003.1 ™ -2017, sección 3.235". El Grupo Abierto/IEEE. Nombre: en el lenguaje de comandos del shell, una palabra que consta únicamente de guiones bajos, dígitos y letras del conjunto de caracteres portátiles. El primer carácter de un nombre no es un dígito.
  9. ^ "Manual de referencia de GNU Bash, sección 3.3" . Consultado el 11 de diciembre de 2022 . Cuando el shell está en modo POSIX (consulte Modo Bash POSIX), fname debe ser un nombre de shell válido y puede no ser el mismo que una de las funciones integradas especiales (consulte Funciones integradas especiales). En el modo predeterminado, el nombre de una función puede ser cualquier palabra del shell sin comillas que no contenga '$'.
  10. ^ Cooper, Mendel (2005). Guía avanzada de secuencias de comandos Bash . págs. 305–306. ISBN 1430319305.
  11. ^ Soyinka, Gales (2012). Administración de Linux: una guía para principiantes . Profesional de McGraw Hill. págs. 364–365. ISBN 978-0071767590.
  12. ^ Lucas, Michael W. (2007). Absolute FreeBSD: la guía completa de FreeBSD . Sin prensa de almidón. págs. 198-199. ISBN 978-1593271510.
  13. ^ "Controlador de número de proceso en la documentación/como apareció en el kernel de Linux 5.3". 8 de octubre de 2019. Archivado desde el original el 8 de octubre de 2019 . Consultado el 8 de octubre de 2019 .

enlaces externos