IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII o 10. BACKDOORS o IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Aclaracion: El backdoor presentado en esta nota, si bien fue hecho para la ocasion no es nada original y puede encontrarse en la red sin muchas complicaciones. El paquete mas conocido es el rootkit, que ademas trae otros programas como el syslogd, ps, etc. La idea es mostrar lo simple que puede ser el modificar un programa para que nos permita mantener el acceso a un sistema y las ventajas que pueden obtenerse por solo unas lineas de codigo. Puede compilarse en cualquier Linux. Introduccion: Una vez dentro de un sistema, como se mantiene el acceso ? Una de las formas mas comunes y eficaces, es reemplazar el login del sistema por uno modificado para permitir el acceso con privilegios de root con un usuario y clave predefinidos. En mi experiencia, es comun que un hacker novato agregue al archivo de passwords, una cuenta con privilegios de root o simplemente vuelva a obtener nivel de root desde una cuenta de usuario normal cada vez que acceda. Esto ultimo es muy lento y deja muchas huellas que borrar, mientras que una cuenta con privilegios 0:0 en el /etc/passwd llama demasiado la atencion. He visto varios sistemas de baja seguridad con este tipo de rastros y siempre los elimine, junto con el acceso del otro hacker, por la simple razon de que un hacker inexperto puede dejar evidencias que alerten al administrador. Y una cuenta de con privilegios de root entra definitivamente en esta categoria ;). Muchas veces vi como alguien con poca experiencia perdia un sistema, por no haber instalado un backdoor y finalmente el administrador vio una cuenta extra, un log que no borro, etc. Este es uno de los motivos para escribir el presente articulo, darle una idea al novato sobre tecnicas simples, pero que en un principio pueden pasar desapercibidas. Un login modificado, es sin duda, el backdoor mas utilizado. Es facil de hacer, y si no tienen ganas de programar, facil de conseguir. Aunque si se esta dispuesto a escribir unas lineas de codigo es aconsejable hacer uno mismo sus tools y de esta forma obtener el mayor provecho posible. Login: El login que presento aqui, es extremadamente simple y puede ser mejorado de muchas formas, pero como ejemplo me parecio razonable hacerlo asi. La idea es modificar el login, de forma que acepte un usuario no definido en el /etc/passwd y le de privilegios de root. No debe hacer ninguna llamada a syslog cuando se entra con el usuario falso y no debe escribir la informacion en el wtmp (o utmp). Con esto ultimo se consigue que el usuario falso no sea visible con el comando who, si seran visibles sus procesos. Asi funciona el login del articulo: Lo primero que hace el codigo agregado, es chequear el nombre de usuario (variable username), si esta corresponde con la del usuario falso, entonces lo cambia por "root". Esto es, copia a username la cadena "root". Tambien pone en 1 la variable usuario_falso, indicando que se esta usando. A partir de ahora, para el login, es el root quien se loguea. Y porque no evitar eso y usar el nombre root directamente ?, Simple: si alguien mas tiene un sniffer en esa red o maquina, registraria nuetro acceso como root, en cambio de este forma parace el de un usuario normal. Despues de esto, siempre hablando del codigo agregado, si la variable usuario_falso esta en 1, chequea el password. En caso de coincidir el password magico con el ingresado, setea la variable password_magico en 1. Una linea antes de que el login chequee el password ingresado, se chequea la variable password_magico y si esta esta en 1 (recordar que solo puede estar en 1, si la variable usuario_falso tambien lo esta) entonces, password de root correcto. Todas las llamadas a syslog se encierran en if() que se ejecutan solo si usuario_falso es 0, o sea que al usar el usuario falso nada se logea desde el login. Por ultimo, tambien setea la variable HISTFILE a HISTFILE= cuando se usa el usuario falso. De esta manera se evita el registo del historico de comandos del bash. Debilidades y mejoras: Una de las debilidades del codigo actual, es que con el comando strings se hace evidente que se trata de un login modificado, sin contar que se ve el password ;). El comando strings muestra todas las cadenas que hay en un binario, si se ejecuta un "strings login", se veran aparecer adenas de las cadenas tipicas, las siguientes: "root", "HISTFILE", "HISTFILE=", el usuario falso y su respectivo password. Resulta muy simple ocultar las cadenas para evitar esto, pero no fue incluido en el codigo, para simplificarlo lo mas posible. Tambien es muy simple y no lleva mas que unas lineas hacer que capture los password de los usuarios, con esto se puede obtener el password del root, que normalmente no se obtiene crackeando. Hay muchas cosas que se pueden hacer en poco tiempo y que pueden ser muy ventajosas con solo unos conocimientos mas o menos elementales de C. Aunque, es muy aconsejable que dominen el C, para tener un mejor y mas profundo entendimiento de los sistemas. El codigo: En el codigo cada parte agregada esta precedida con el comentario: /* ---------- MODIFICADO ---------- */ Para compilarlo, solo "make login". El usuario falso es "saquead" y el password magico "ejemplo". Con algunos conocimientos de C, deberia resultar simple seguir las modificaciones al codigo origial. El fuente original es el que viene con la distribucion slackware 3.1, que obtuve de los CDs de infomagic. Les aconsejo mirar esos fuentes, se pueden hacer muchas cosas interesantes. Otros patch: Si bien reemplazar el login del sistema por el nuestro, hace en extremo comodos los futuros accesos, es posible que nuestro programa sea eliminado por el administrador o muy probablemente por otro hacker. Por esto es comveniente dejar mas de una entrada. Tan simple como modificar el login es modificar el comando su, una vez hecho podemos conseguir nivel de root a partir de cualquier cuenta, que se puede obtener o bien crackeando o de las capturadas por nuetro login, etc. Es aconsejable ademas, mirar el rsh y el resto de los comandos r. Tambien es util reemplazar el syslogd, para evitar sus molestos logs ;). Normalmente, con el login y el syslogd se puede entrar y salir sin dejar ningun rastro. Tratandose de Linux, con los fuentes a dispocicion de todos, es facil probar nuestras propias modificaciones y backdoors y testearlos antes de usarlos realmente. Solo usen la imaginacion, y el compilador ;) Cualquier duda, insultos o sugerencias a hades@usa.net Saludos. //[Editor]// El codigo de Hades se podra encontrar en nuestra Web. Concretamente en la seccion de archivos como login.tar. Para completar el articulo vamos a hablar algo mas sobre backdoors. Hades ha hablado de Rootkit como uno de los paquetes mas efectivos, veamos ahora alguno de los archivos que incorpora Rootkit y su utilidad. z2 - Elimina los registros de utmp, wtmp y lastlog. Es - Sniffer ethernet para kernels basados en Sun4. Fix - Intenta falsificar checksums se instala con dates/perms/u/g. Sl - La palabra "magica" para root, codigo modificado por Hades para SET. Ic - Modificacion de Ifconfig para eliminar el flag de PROMISC. ps: - Oculta los procesos. Ns - Modifica netstat para ocultar conexiones con ciertos ordenadores. Ls - Previene que determinados directorios/ficheros salgan en un listado. du5 - Oculta el espacio que se usa realmente en el disco duro. ls5 - Similar a ls. Historicamente ha habido diversos tipos de backdoors (quiza algun dia le dediquemos otro articulo explicandolas) y esto es debido a que las backdoors proporcionan la posibilidad de: Poder entrar en una maquina sin verse afectado por cambios de passwords, sistemas de seguridad... Asimismo entrar mediante una backdoor suele ser la manera mas"silenciosa" de introducirse en un sistema haciendo mas dificil para el administrador descubrir que tiene un intruso. Y ademas es lo mas rapido. \\[Editor]\\