**************************************************** ** Troyanos en Linux ** **************************************************** Holas. He decidido escribir este articulo para ayudar a la gente que esta empezando en esto del hack, bueno..empezando empezando no, tiene que tener un nivel minimo; saber manejarse algo en entornos unix, algo de programacion en C (tarde o temprano tendras que aprender), y cosas de ese estilo, pero mas o menos creo que cualquiera que tenga unos minimos conocimientos le sacara provecho. Tampoco va a ser un supertexto, mas bien sera un texto practico que servira para aclarar ideas de que es un troyano, como instalarlo, etc., y por si alguien lo esta pensando no se trata de troyanos tipo "Bo" y similares, sino que seran troyanos aplicables solo al entorno linux. .- Que es un troyano? Pues es, mas o menos, un programa modificado a tu gusto que lo pones sobrees- cribiendo al original, de forma que las modificaciones que hayas hecho te sirvan para algo claro, por ejemplo que te den root facilmente y sin huellas, para ocultar cosas al administrador (directorios,conexiones), etc. .- Tipos basicos de troyanos. Yo mas o menos los he dividido en 3 tipos; troyanos para conseguir root local, troyanos para conseguir root remoto y troyanos para ocultar cosas de todo tipo como pueden ser directorios,procesos,conexiones,etc. *- Troyanos para conseguir root local: --------------------------------------------- Estos troyanos normalmente siempre se colocan nada mas haber obtenido root en la makina. Esto se hace asi porque normalmente se instalan en un segundo, ya que son muy simples, y te evita comerte el coco para conseguir root otra vez si es que al administrador le da por parchear el bug por el que has conseguido privilegios, aunque esto deberias hacerlo tu por etica y tal..., aparte que asi te evitas que vengan otros y se te apoderen facilmente de "tu" sistema jeje. Troyanos de este tipo por ejemplo son el chsh, que es un programa que sirve para cambiarte la shell, por ejemplo de bash a zsh. Al ejecutarlo te pide una nueva shell, por lo que es muy facil modificarlo para que dandole una shell determinada te habra una shell con uid 0. Como no voy a poner todo el codigo fuente aqui, pongo las lineas que estan modificadas y las explico un poco. Las fuentes de linux es muy recomendable tenerlas a mano y las podeis conseguir o de los cds de debian (p.ejemplo), o de ftp.rediris.es (login:ftp), en el directorio linux/debian/source. Los troyanos muchas veces se hacen con simples ifs (condicionales) y poco mas. En este caso lo que hace es declarar un entero con int elite=0; y un password con char clave[6]=peper; al principio del fichero (sino sabeis C lo tendreis un poco chungillo pa entender esto pero bueno). Peper sera lo que tengais que poner cuando os pida la nueva shell al ejecutar el programa. Ahora pego la chicha del codigo. if (!strcmp(shell,clave)) elite++; /* --> Aqui compara la shell con nuestro password (peper) y si son iguales pone elite a 1 */ if (!elite) { /* --> Todo esto se la salta si elite esta a 1, o sea si metimos el password correcto */ if (check_shell (shell) < 0) return (-1); if (! strcmp (pw->pw_shell, shell)) { printf ("Shell not changed.\n"); return 0; } if (!strcmp(shell, "/bin/sh")) shell = ""; pw->pw_shell = shell; if (setpwnam (pw) < 0) { perror ("setpwnam"); printf( "Shell *NOT* changed. Try again later.\n" ); return (-1); } printf ("Shell changed.\n"); return 0; } if (elite) { /* Aqui si elite esta a 1 pone nuestro uid y gid a 0, o sea el del root, setea HISTFILE para evitar el .bash_history y ejecuta una shell */ setreuid(0,0); setregid(0,0); setenv("HISTFILE","",1); system("/bin/bash"); } } Y eso es todo, ya tenemos un troyano que al ejecutarlo y darle de shell peper nos abrira una shell de root. Por cierto, que este troyano para funcionar tiene que tener suid de root, pero como el chsh original tambien lo tiene es dificil que el administrador se de cuenta del cambio. *- Troyanos para conseguir root remoto: --------------------------------------------- Este otro tipo de troyanos se utiliza para mantener el acceso a la makina hackeada. De esta forma es muy facil entrar como root desde fuera, evitando todos los logs que deja hacer un simple telnet a una cuenta. El tipico troyano de este tipo es el del programa login, normalmente situado en /bin. Lo que pasa que este programa es bastante complejo (sobre todo si el password esta shadow), por lo que no me iba a tirar yo aqui horas explicando y pegando mogollon de codigo fuente (en mi page pondre en breve uno hecho por mi por si a alguien le interesa), asi que pondre uno mas sencillo como puede ser el del rshd. El rshd es un servicio parecido al rlogin, pero que en vez de abrirte una shell permite ejecutar comandos remotos, lo que no quita que tu puedas ejecutar el comando /bin/bash por ejemplo abriendote una cuenta. Pues bien, el objetivo es que haciendo un rsh a la makina con un login determinado el programa ejecute el comando que tu le digas con uid 0, incluido el /bin/bash, y practicamente sin logs. Para que funcione tendras que sobreescribir el original, normalmente en /usr/sbin/in.rshd, y que el servicio este activado en el /etc/inetd.conf claro. Pasemos a la explicacion.. Lo primero que hace es declarar un entero con int elite=0;, o sea, igual que antes con el chsh. Luego declara el password que se va a usar para entrar como root con char clave[6]=peper;, por cierto que si cambias peper por otra clave acuerdate de modificar el 6 por el numero de letras que tenga +1. Luego hay esto.. getstr(locuser, sizeof(locuser), "locuser"); getstr(cmdbuf, sizeof(cmdbuf), "command"); if (!strcmp(locuser,clave)) { elite++; strcpy(locuser,"root"); } En esta ultima linea esta todo el troyano; compara el login (o sea el usuario) con el nuestro, y si coinciden pone elite a 1 y copia el string root al login. Como veis casi todos los troyanos hacen cosas muy parecidas. Despues ya ahi cosas tipicas, como: if ((paranoid || pwd->pw_uid == 0)&&(!elite)) { syslog(LOG_INFO|LOG_AUTH, "%s@%s as %s: cmd='%s'", remuser, hostname, locuser, cmdbuf); que lo que hace es evitar el syslog si entramos con nuestra clave, etc. Para usar el troyano, despues de haber sobreescrito el /usr/sbin/in.rshd, hay que hacer un rsh -l nuestraclave(peper_en_este_caso) makina.com /bin/bash. Despues hay que borrar nuestra entrada del /var/log/secure, ya que ese log el troyano no lo evita, en cambio si setea el HISTFILE, o sea el .bash_history. Bueno, y con eso ya tenemos garantizado el acceso remoto como root, y por si falla ya tenemos un troyano local para entrar con una cuenta de un usuario y conseguir root facilmente. Ahora lo que viene ya son troyanos para sacar provecho de esa makina; poner algun bot,bouncers,ocultar sniffers,etc. *- Troyanos para ocultar directorios, procesos..etc. ---------------------------------------------------------- Ahora llegan los troyanos para ocultar ficheros, procesos, conexiones...o sea, para ocultar todo lo ocultable jeje (tranquilos que ya keda poco de texto ;). Para empezar esta el troyano de ls, que normalmente estara en /bin/ls (Ahora ya pasare de poner los codigos porque sino me enrollo mucho y mas o menos son todos iguales). Como decia este troyano sirve para ocultar ficheros y direc- torios, y para funcionar necesita tener la referencia en un archivo de donde vaya sacando los nombres de ficheros y directorios a ocultar. Puedes poner los nombres dentro del codigo y te ahorras el archivo ese, pero no creo que sea plan andar compilando todo el dia cada vez que quieras ocultar un nuevo fichero (y aparte que tendrias que subirlo de nuevo a la makina cada vez). Nor- malmente en el codigo hay una linea que pone algo asi como #define PATH "/dev/ptyr", que es el archivo de donde cogera los datos, que por cierto yo que tu lo cambiaba ahora mismo, mas que nada porque ya estan muy vistos. Bueno,pues despues de haber sobreescrito el /bin/ls con el troyano, si por ejemplo quieres ocultar un directorio con nombre pepito pues en /dev/ptyr añades una linea con la palabra pepito, y lo mismo con los archivos. Por cierto, supongo que no hace falta que diga que al /dev/ptyr le añadas una linea con la palabra ptyr ;). (Nota: si el admin ve el directorio desde algun tipo de visor grafico desde las X el troyano no hara nada y vera los ficheros y directorios ocultos). Despues esta el troyano de ps y top, que son para ocultar procesos, el archivo de informacion es normalmente el /dev/ptyp, y se utiliza de la siguiente forma. Ej. de /dev/ptyp: 0 0 Oculta todos los procesos corriendo bajo uid 0 1 p0 Oculta todos los procesos bajo tty p0 2 sniff Oculta todos los procesos cuyo nombre sea sniff 3 hack Oculta todos los procesos en cuya linea de ejecucion aparezca la palabra hack. (ej. hack makina.com -0) Hay que sobreescribir los originales normamente en /bin/ps y /usr/bin/top, el fichero ptyp es el mismo para los dos. Si consigues este troyano, al igual que el de ls en algun rootkit y no te compila bajatelos de la web que llevo repitiendo todo el articulo, ya que estan optimizados para libc6 (supongo que en tambien libc5 compilaran). Bueno, y por ultimo keda el del netstat, que sirve para ocultar conexiones, puertos abiertos, etc etc. Ya se que hay 2.235.678,93 de troyanos mas pero sino este articulo me ocuparia paginas y paginas, a parte de que estos son los mas basicos. Y sino os bajais algun rootkit que traen muchisimos, lo que pasa que tambien muchisimos no compilaran porque faltan librerias, archivos de cabezera..etc :(. Bueno, lo que iba diciendo, el del netstat. Normalmente el archivo de infor- macion de este es /dev/ptyq, y esta organizado de la siguiente forma, que ilustrare con un ejemplo :). 0 500 <- Oculta las conexion hechas por el uid 500 1 128.31 <- Oculta las conexiones desde 128.32.xx.xx 2 128.31.39.20 <- Oculta las conexiones a 128.31.39.20 3 8000 <- Oculta todas las conexiones al puerto local 8000 4 6667 <- Oculta todas las conexiones al puerto remoto 6667 5 .term/socket <- Oculta este socket El fichero modificado hay que copiarlo sobreescribiendo el /bin/netstat, y hay que poner siempre ips, si pones hosts no funcionara. *- Consejos finales ---------------------------- Pues ahi van unos consejos que a mi al menos me son de utilidad: 1.- Cuando metas un troyano fijate bien en los permisos para que tenga los del programa origal, y que el dueño y el grupo sea el mismo. 2.- Para que no llame mucho la atencion la fecha haz un touch -r fichero_de_referencia troyano, asi el troyano quedara con la fecha del fichero de referencia. 3.- Con chattr +i troyano el fichero no se podra borrar, ni siquiera el root podra a no ser que ponga chattr -i troyano. 4.- Si la makina no tiene activado el ftp y no sabes como subir los troyanos, haz un ftp a tu ordenador desde alli y bajatelos.